Merge branch '20230109130523.298971-3-konrad.dybcio@linaro.org' into drivers-for-6.3
This commit is contained in:
commit
538b0ba217
|
@ -27,9 +27,11 @@ properties:
|
|||
identifier of the client to use this region for buffers
|
||||
|
||||
qcom,vmid:
|
||||
$ref: /schemas/types.yaml#/definitions/uint32
|
||||
$ref: /schemas/types.yaml#/definitions/uint32-array
|
||||
description: >
|
||||
vmid of the remote processor, to set up memory protection
|
||||
Array of vmids of the remote processors, to set up memory protection
|
||||
minItems: 1
|
||||
maxItems: 2
|
||||
|
||||
required:
|
||||
- qcom,client-id
|
||||
|
|
|
@ -17,6 +17,7 @@
|
|||
#include <linux/qcom_scm.h>
|
||||
|
||||
#define QCOM_RMTFS_MEM_DEV_MAX (MINORMASK + 1)
|
||||
#define NUM_MAX_VMIDS 2
|
||||
|
||||
static dev_t qcom_rmtfs_mem_major;
|
||||
|
||||
|
@ -171,12 +172,12 @@ static void qcom_rmtfs_mem_release_device(struct device *dev)
|
|||
static int qcom_rmtfs_mem_probe(struct platform_device *pdev)
|
||||
{
|
||||
struct device_node *node = pdev->dev.of_node;
|
||||
struct qcom_scm_vmperm perms[2];
|
||||
struct qcom_scm_vmperm perms[NUM_MAX_VMIDS + 1];
|
||||
struct reserved_mem *rmem;
|
||||
struct qcom_rmtfs_mem *rmtfs_mem;
|
||||
u32 client_id;
|
||||
u32 vmid;
|
||||
int ret;
|
||||
u32 num_vmids, vmid[NUM_MAX_VMIDS];
|
||||
int ret, i;
|
||||
|
||||
rmem = of_reserved_mem_lookup(node);
|
||||
if (!rmem) {
|
||||
|
@ -226,7 +227,18 @@ static int qcom_rmtfs_mem_probe(struct platform_device *pdev)
|
|||
goto put_device;
|
||||
}
|
||||
|
||||
ret = of_property_read_u32(node, "qcom,vmid", &vmid);
|
||||
num_vmids = of_property_count_u32_elems(node, "qcom,vmid");
|
||||
if (num_vmids < 0) {
|
||||
dev_err(&pdev->dev, "failed to count qcom,vmid elements: %d\n", ret);
|
||||
goto remove_cdev;
|
||||
} else if (num_vmids > NUM_MAX_VMIDS) {
|
||||
dev_warn(&pdev->dev,
|
||||
"too many VMIDs (%d) specified! Only mapping first %d entries\n",
|
||||
num_vmids, NUM_MAX_VMIDS);
|
||||
num_vmids = NUM_MAX_VMIDS;
|
||||
}
|
||||
|
||||
ret = of_property_read_u32_array(node, "qcom,vmid", vmid, num_vmids);
|
||||
if (ret < 0 && ret != -EINVAL) {
|
||||
dev_err(&pdev->dev, "failed to parse qcom,vmid\n");
|
||||
goto remove_cdev;
|
||||
|
@ -238,12 +250,15 @@ static int qcom_rmtfs_mem_probe(struct platform_device *pdev)
|
|||
|
||||
perms[0].vmid = QCOM_SCM_VMID_HLOS;
|
||||
perms[0].perm = QCOM_SCM_PERM_RW;
|
||||
perms[1].vmid = vmid;
|
||||
perms[1].perm = QCOM_SCM_PERM_RW;
|
||||
|
||||
for (i = 0; i < num_vmids; i++) {
|
||||
perms[i + 1].vmid = vmid[i];
|
||||
perms[i + 1].perm = QCOM_SCM_PERM_RW;
|
||||
}
|
||||
|
||||
rmtfs_mem->perms = BIT(QCOM_SCM_VMID_HLOS);
|
||||
ret = qcom_scm_assign_mem(rmtfs_mem->addr, rmtfs_mem->size,
|
||||
&rmtfs_mem->perms, perms, 2);
|
||||
&rmtfs_mem->perms, perms, num_vmids + 1);
|
||||
if (ret < 0) {
|
||||
dev_err(&pdev->dev, "assign memory failed\n");
|
||||
goto remove_cdev;
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
/* SPDX-License-Identifier: GPL-2.0-only OR BSD-2-Clause */
|
||||
/*
|
||||
* Copyright (c) 2010-2015, 2018-2019 The Linux Foundation. All rights reserved.
|
||||
* Copyright (C) 2015 Linaro Ltd.
|
||||
*/
|
||||
|
||||
#ifndef _DT_BINDINGS_FIRMWARE_QCOM_SCM_H
|
||||
#define _DT_BINDINGS_FIRMWARE_QCOM_SCM_H
|
||||
|
||||
#define QCOM_SCM_VMID_HLOS 0x3
|
||||
#define QCOM_SCM_VMID_MSS_MSA 0xF
|
||||
#define QCOM_SCM_VMID_WLAN 0x18
|
||||
#define QCOM_SCM_VMID_WLAN_CE 0x19
|
||||
#define QCOM_SCM_VMID_NAV 0x2B
|
||||
|
||||
#endif
|
|
@ -9,6 +9,8 @@
|
|||
#include <linux/types.h>
|
||||
#include <linux/cpumask.h>
|
||||
|
||||
#include <dt-bindings/firmware/qcom,scm.h>
|
||||
|
||||
#define QCOM_SCM_VERSION(major, minor) (((major) << 16) | ((minor) & 0xFF))
|
||||
#define QCOM_SCM_CPU_PWR_DOWN_L2_ON 0x0
|
||||
#define QCOM_SCM_CPU_PWR_DOWN_L2_OFF 0x1
|
||||
|
@ -51,10 +53,6 @@ enum qcom_scm_ice_cipher {
|
|||
QCOM_SCM_ICE_CIPHER_AES_256_CBC = 4,
|
||||
};
|
||||
|
||||
#define QCOM_SCM_VMID_HLOS 0x3
|
||||
#define QCOM_SCM_VMID_MSS_MSA 0xF
|
||||
#define QCOM_SCM_VMID_WLAN 0x18
|
||||
#define QCOM_SCM_VMID_WLAN_CE 0x19
|
||||
#define QCOM_SCM_PERM_READ 0x4
|
||||
#define QCOM_SCM_PERM_WRITE 0x2
|
||||
#define QCOM_SCM_PERM_EXEC 0x1
|
||||
|
|
Loading…
Reference in New Issue