hc
2023-12-09 b22da3d8526a935aa31e086e63f60ff3246cb61c
kernel/include/linux/qcom_scm.h
....@@ -1,18 +1,11 @@
1
-/* Copyright (c) 2010-2015, The Linux Foundation. All rights reserved.
1
+/* SPDX-License-Identifier: GPL-2.0-only */
2
+/* Copyright (c) 2010-2015, 2018-2019 The Linux Foundation. All rights reserved.
23 * Copyright (C) 2015 Linaro Ltd.
3
- *
4
- * This program is free software; you can redistribute it and/or modify
5
- * it under the terms of the GNU General Public License version 2 and
6
- * only version 2 as published by the Free Software Foundation.
7
- *
8
- * This program is distributed in the hope that it will be useful,
9
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
10
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11
- * GNU General Public License for more details.
124 */
135 #ifndef __QCOM_SCM_H
146 #define __QCOM_SCM_H
157
8
+#include <linux/err.h>
169 #include <linux/types.h>
1710 #include <linux/cpumask.h>
1811
....@@ -31,8 +24,37 @@
3124 int perm;
3225 };
3326
27
+enum qcom_scm_ocmem_client {
28
+ QCOM_SCM_OCMEM_UNUSED_ID = 0x0,
29
+ QCOM_SCM_OCMEM_GRAPHICS_ID,
30
+ QCOM_SCM_OCMEM_VIDEO_ID,
31
+ QCOM_SCM_OCMEM_LP_AUDIO_ID,
32
+ QCOM_SCM_OCMEM_SENSORS_ID,
33
+ QCOM_SCM_OCMEM_OTHER_OS_ID,
34
+ QCOM_SCM_OCMEM_DEBUG_ID,
35
+};
36
+
37
+enum qcom_scm_sec_dev_id {
38
+ QCOM_SCM_MDSS_DEV_ID = 1,
39
+ QCOM_SCM_OCMEM_DEV_ID = 5,
40
+ QCOM_SCM_PCIE0_DEV_ID = 11,
41
+ QCOM_SCM_PCIE1_DEV_ID = 12,
42
+ QCOM_SCM_GFX_DEV_ID = 18,
43
+ QCOM_SCM_UFS_DEV_ID = 19,
44
+ QCOM_SCM_ICE_DEV_ID = 20,
45
+};
46
+
47
+enum qcom_scm_ice_cipher {
48
+ QCOM_SCM_ICE_CIPHER_AES_128_XTS = 0,
49
+ QCOM_SCM_ICE_CIPHER_AES_128_CBC = 1,
50
+ QCOM_SCM_ICE_CIPHER_AES_256_XTS = 3,
51
+ QCOM_SCM_ICE_CIPHER_AES_256_CBC = 4,
52
+};
53
+
3454 #define QCOM_SCM_VMID_HLOS 0x3
3555 #define QCOM_SCM_VMID_MSS_MSA 0xF
56
+#define QCOM_SCM_VMID_WLAN 0x18
57
+#define QCOM_SCM_VMID_WLAN_CE 0x19
3658 #define QCOM_SCM_PERM_READ 0x4
3759 #define QCOM_SCM_PERM_WRITE 0x2
3860 #define QCOM_SCM_PERM_EXEC 0x1
....@@ -40,68 +62,113 @@
4062 #define QCOM_SCM_PERM_RWX (QCOM_SCM_PERM_RW | QCOM_SCM_PERM_EXEC)
4163
4264 #if IS_ENABLED(CONFIG_QCOM_SCM)
65
+extern bool qcom_scm_is_available(void);
66
+
4367 extern int qcom_scm_set_cold_boot_addr(void *entry, const cpumask_t *cpus);
4468 extern int qcom_scm_set_warm_boot_addr(void *entry, const cpumask_t *cpus);
45
-extern bool qcom_scm_is_available(void);
46
-extern bool qcom_scm_hdcp_available(void);
47
-extern int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt,
48
- u32 *resp);
49
-extern bool qcom_scm_pas_supported(u32 peripheral);
69
+extern void qcom_scm_cpu_power_down(u32 flags);
70
+extern int qcom_scm_set_remote_state(u32 state, u32 id);
71
+
5072 extern int qcom_scm_pas_init_image(u32 peripheral, const void *metadata,
5173 size_t size);
5274 extern int qcom_scm_pas_mem_setup(u32 peripheral, phys_addr_t addr,
5375 phys_addr_t size);
5476 extern int qcom_scm_pas_auth_and_reset(u32 peripheral);
5577 extern int qcom_scm_pas_shutdown(u32 peripheral);
56
-extern int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
57
- unsigned int *src, struct qcom_scm_vmperm *newvm,
58
- int dest_cnt);
59
-extern void qcom_scm_cpu_power_down(u32 flags);
60
-extern u32 qcom_scm_get_version(void);
61
-extern int qcom_scm_set_remote_state(u32 state, u32 id);
78
+extern bool qcom_scm_pas_supported(u32 peripheral);
79
+
80
+extern int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val);
81
+extern int qcom_scm_io_writel(phys_addr_t addr, unsigned int val);
82
+
83
+extern bool qcom_scm_restore_sec_cfg_available(void);
6284 extern int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare);
6385 extern int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size);
6486 extern int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare);
65
-extern int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val);
66
-extern int qcom_scm_io_writel(phys_addr_t addr, unsigned int val);
87
+extern int qcom_scm_mem_protect_video_var(u32 cp_start, u32 cp_size,
88
+ u32 cp_nonpixel_start,
89
+ u32 cp_nonpixel_size);
90
+extern int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
91
+ unsigned int *src,
92
+ const struct qcom_scm_vmperm *newvm,
93
+ unsigned int dest_cnt);
94
+
95
+extern bool qcom_scm_ocmem_lock_available(void);
96
+extern int qcom_scm_ocmem_lock(enum qcom_scm_ocmem_client id, u32 offset,
97
+ u32 size, u32 mode);
98
+extern int qcom_scm_ocmem_unlock(enum qcom_scm_ocmem_client id, u32 offset,
99
+ u32 size);
100
+
101
+extern bool qcom_scm_ice_available(void);
102
+extern int qcom_scm_ice_invalidate_key(u32 index);
103
+extern int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
104
+ enum qcom_scm_ice_cipher cipher,
105
+ u32 data_unit_size);
106
+
107
+extern bool qcom_scm_hdcp_available(void);
108
+extern int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt,
109
+ u32 *resp);
110
+
111
+extern int qcom_scm_qsmmu500_wait_safe_toggle(bool en);
67112 #else
68113
69114 #include <linux/errno.h>
70115
71
-static inline
72
-int qcom_scm_set_cold_boot_addr(void *entry, const cpumask_t *cpus)
73
-{
74
- return -ENODEV;
75
-}
76
-static inline
77
-int qcom_scm_set_warm_boot_addr(void *entry, const cpumask_t *cpus)
78
-{
79
- return -ENODEV;
80
-}
81116 static inline bool qcom_scm_is_available(void) { return false; }
117
+
118
+static inline int qcom_scm_set_cold_boot_addr(void *entry,
119
+ const cpumask_t *cpus) { return -ENODEV; }
120
+static inline int qcom_scm_set_warm_boot_addr(void *entry,
121
+ const cpumask_t *cpus) { return -ENODEV; }
122
+static inline void qcom_scm_cpu_power_down(u32 flags) {}
123
+static inline u32 qcom_scm_set_remote_state(u32 state,u32 id)
124
+ { return -ENODEV; }
125
+
126
+static inline int qcom_scm_pas_init_image(u32 peripheral, const void *metadata,
127
+ size_t size) { return -ENODEV; }
128
+static inline int qcom_scm_pas_mem_setup(u32 peripheral, phys_addr_t addr,
129
+ phys_addr_t size) { return -ENODEV; }
130
+static inline int qcom_scm_pas_auth_and_reset(u32 peripheral)
131
+ { return -ENODEV; }
132
+static inline int qcom_scm_pas_shutdown(u32 peripheral) { return -ENODEV; }
133
+static inline bool qcom_scm_pas_supported(u32 peripheral) { return false; }
134
+
135
+static inline int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val)
136
+ { return -ENODEV; }
137
+static inline int qcom_scm_io_writel(phys_addr_t addr, unsigned int val)
138
+ { return -ENODEV; }
139
+
140
+static inline bool qcom_scm_restore_sec_cfg_available(void) { return false; }
141
+static inline int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare)
142
+ { return -ENODEV; }
143
+static inline int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size)
144
+ { return -ENODEV; }
145
+static inline int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare)
146
+ { return -ENODEV; }
147
+extern inline int qcom_scm_mem_protect_video_var(u32 cp_start, u32 cp_size,
148
+ u32 cp_nonpixel_start,
149
+ u32 cp_nonpixel_size)
150
+ { return -ENODEV; }
151
+static inline int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
152
+ unsigned int *src, const struct qcom_scm_vmperm *newvm,
153
+ unsigned int dest_cnt) { return -ENODEV; }
154
+
155
+static inline bool qcom_scm_ocmem_lock_available(void) { return false; }
156
+static inline int qcom_scm_ocmem_lock(enum qcom_scm_ocmem_client id, u32 offset,
157
+ u32 size, u32 mode) { return -ENODEV; }
158
+static inline int qcom_scm_ocmem_unlock(enum qcom_scm_ocmem_client id,
159
+ u32 offset, u32 size) { return -ENODEV; }
160
+
161
+static inline bool qcom_scm_ice_available(void) { return false; }
162
+static inline int qcom_scm_ice_invalidate_key(u32 index) { return -ENODEV; }
163
+static inline int qcom_scm_ice_set_key(u32 index, const u8 *key, u32 key_size,
164
+ enum qcom_scm_ice_cipher cipher,
165
+ u32 data_unit_size) { return -ENODEV; }
166
+
82167 static inline bool qcom_scm_hdcp_available(void) { return false; }
83168 static inline int qcom_scm_hdcp_req(struct qcom_scm_hdcp_req *req, u32 req_cnt,
84
- u32 *resp) { return -ENODEV; }
85
-static inline bool qcom_scm_pas_supported(u32 peripheral) { return false; }
86
-static inline int qcom_scm_pas_init_image(u32 peripheral, const void *metadata,
87
- size_t size) { return -ENODEV; }
88
-static inline int qcom_scm_pas_mem_setup(u32 peripheral, phys_addr_t addr,
89
- phys_addr_t size) { return -ENODEV; }
90
-static inline int
91
-qcom_scm_pas_auth_and_reset(u32 peripheral) { return -ENODEV; }
92
-static inline int qcom_scm_pas_shutdown(u32 peripheral) { return -ENODEV; }
93
-static inline int qcom_scm_assign_mem(phys_addr_t mem_addr, size_t mem_sz,
94
- unsigned int *src,
95
- struct qcom_scm_vmperm *newvm,
96
- int dest_cnt) { return -ENODEV; }
97
-static inline void qcom_scm_cpu_power_down(u32 flags) {}
98
-static inline u32 qcom_scm_get_version(void) { return 0; }
99
-static inline u32
100
-qcom_scm_set_remote_state(u32 state,u32 id) { return -ENODEV; }
101
-static inline int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare) { return -ENODEV; }
102
-static inline int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size) { return -ENODEV; }
103
-static inline int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare) { return -ENODEV; }
104
-static inline int qcom_scm_io_readl(phys_addr_t addr, unsigned int *val) { return -ENODEV; }
105
-static inline int qcom_scm_io_writel(phys_addr_t addr, unsigned int val) { return -ENODEV; }
169
+ u32 *resp) { return -ENODEV; }
170
+
171
+static inline int qcom_scm_qsmmu500_wait_safe_toggle(bool en)
172
+ { return -ENODEV; }
106173 #endif
107174 #endif