Blame view

drivers/firmware/qcom_scm.h 3.77 KB
97fb5e8d9   Thomas Gleixner   treewide: Replace...
1
  /* SPDX-License-Identifier: GPL-2.0-only */
5443cc5f1   Elliot Berman   firmware: qcom_sc...
2
  /* Copyright (c) 2010-2015,2019 The Linux Foundation. All rights reserved.
b6a1dfbc7   Kumar Gala   firmware: qcom: s...
3
4
5
   */
  #ifndef __QCOM_SCM_INT_H
  #define __QCOM_SCM_INT_H
9a434cee7   Elliot Berman   firmware: qcom_sc...
6
7
8
9
10
11
12
13
14
  
  enum qcom_scm_convention {
  	SMC_CONVENTION_UNKNOWN,
  	SMC_CONVENTION_LEGACY,
  	SMC_CONVENTION_ARM_32,
  	SMC_CONVENTION_ARM_64,
  };
  
  extern enum qcom_scm_convention qcom_scm_convention;
57d3b8167   Elliot Berman   firmware: qcom_sc...
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
  #define MAX_QCOM_SCM_ARGS 10
  #define MAX_QCOM_SCM_RETS 3
  
  enum qcom_scm_arg_types {
  	QCOM_SCM_VAL,
  	QCOM_SCM_RO,
  	QCOM_SCM_RW,
  	QCOM_SCM_BUFVAL,
  };
  
  #define QCOM_SCM_ARGS_IMPL(num, a, b, c, d, e, f, g, h, i, j, ...) (\
  			   (((a) & 0x3) << 4) | \
  			   (((b) & 0x3) << 6) | \
  			   (((c) & 0x3) << 8) | \
  			   (((d) & 0x3) << 10) | \
  			   (((e) & 0x3) << 12) | \
  			   (((f) & 0x3) << 14) | \
  			   (((g) & 0x3) << 16) | \
  			   (((h) & 0x3) << 18) | \
  			   (((i) & 0x3) << 20) | \
  			   (((j) & 0x3) << 22) | \
  			   ((num) & 0xf))
  
  #define QCOM_SCM_ARGS(...) QCOM_SCM_ARGS_IMPL(__VA_ARGS__, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0)
  
  
  /**
   * struct qcom_scm_desc
   * @arginfo:	Metadata describing the arguments in args[]
   * @args:	The array of arguments for the secure syscall
   */
  struct qcom_scm_desc {
  	u32 svc;
  	u32 cmd;
  	u32 arginfo;
  	u64 args[MAX_QCOM_SCM_ARGS];
  	u32 owner;
  };
  
  /**
   * struct qcom_scm_res
   * @result:	The values returned by the secure syscall
   */
  struct qcom_scm_res {
  	u64 result[MAX_QCOM_SCM_RETS];
  };
9a434cee7   Elliot Berman   firmware: qcom_sc...
61
62
63
64
65
66
67
68
69
70
  #define SCM_SMC_FNID(s, c)	((((s) & 0xFF) << 8) | ((c) & 0xFF))
  extern int scm_smc_call(struct device *dev, const struct qcom_scm_desc *desc,
  			struct qcom_scm_res *res, bool atomic);
  
  #define SCM_LEGACY_FNID(s, c)	(((s) << 10) | ((c) & 0x3ff))
  extern int scm_legacy_call_atomic(struct device *dev,
  				  const struct qcom_scm_desc *desc,
  				  struct qcom_scm_res *res);
  extern int scm_legacy_call(struct device *dev, const struct qcom_scm_desc *desc,
  			   struct qcom_scm_res *res);
b6a1dfbc7   Kumar Gala   firmware: qcom: s...
71

65f0c90b7   Elliot Berman   firmware: qcom_sc...
72
73
74
75
76
  #define QCOM_SCM_SVC_BOOT		0x01
  #define QCOM_SCM_BOOT_SET_ADDR		0x01
  #define QCOM_SCM_BOOT_TERMINATE_PC	0x02
  #define QCOM_SCM_BOOT_SET_DLOAD_MODE	0x10
  #define QCOM_SCM_BOOT_SET_REMOTE_STATE	0x0a
65f0c90b7   Elliot Berman   firmware: qcom_sc...
77
78
79
80
81
82
83
84
85
  #define QCOM_SCM_FLUSH_FLAG_MASK	0x3
  
  #define QCOM_SCM_SVC_PIL		0x02
  #define QCOM_SCM_PIL_PAS_INIT_IMAGE	0x01
  #define QCOM_SCM_PIL_PAS_MEM_SETUP	0x02
  #define QCOM_SCM_PIL_PAS_AUTH_AND_RESET	0x05
  #define QCOM_SCM_PIL_PAS_SHUTDOWN	0x06
  #define QCOM_SCM_PIL_PAS_IS_SUPPORTED	0x07
  #define QCOM_SCM_PIL_PAS_MSS_RESET	0x0a
b6a1dfbc7   Kumar Gala   firmware: qcom: s...
86

65f0c90b7   Elliot Berman   firmware: qcom_sc...
87
88
89
  #define QCOM_SCM_SVC_IO			0x05
  #define QCOM_SCM_IO_READ		0x01
  #define QCOM_SCM_IO_WRITE		0x02
4e659dbe2   Bjorn Andersson   firmware: qcom: s...
90

65f0c90b7   Elliot Berman   firmware: qcom_sc...
91
92
  #define QCOM_SCM_SVC_INFO		0x06
  #define QCOM_SCM_INFO_IS_CALL_AVAIL	0x01
9626b6993   jilai wang   firmware: qcom: s...
93

65f0c90b7   Elliot Berman   firmware: qcom_sc...
94
95
96
97
  #define QCOM_SCM_SVC_MP				0x0c
  #define QCOM_SCM_MP_RESTORE_SEC_CFG		0x02
  #define QCOM_SCM_MP_IOMMU_SECURE_PTBL_SIZE	0x03
  #define QCOM_SCM_MP_IOMMU_SECURE_PTBL_INIT	0x04
6d885330f   Stanimir Varbanov   media: firmware: ...
98
  #define QCOM_SCM_MP_VIDEO_VAR			0x08
65f0c90b7   Elliot Berman   firmware: qcom_sc...
99
  #define QCOM_SCM_MP_ASSIGN			0x16
b0a1614fb   Rob Clark   firmware: qcom: s...
100

65f0c90b7   Elliot Berman   firmware: qcom_sc...
101
102
103
  #define QCOM_SCM_SVC_OCMEM		0x0f
  #define QCOM_SCM_OCMEM_LOCK_CMD		0x01
  #define QCOM_SCM_OCMEM_UNLOCK_CMD	0x02
b0a1614fb   Rob Clark   firmware: qcom: s...
104

0f2065147   Eric Biggers   scsi: firmware: q...
105
106
107
  #define QCOM_SCM_SVC_ES			0x10	/* Enterprise Security */
  #define QCOM_SCM_ES_INVALIDATE_ICE_KEY	0x03
  #define QCOM_SCM_ES_CONFIG_SET_ICE_KEY	0x04
65f0c90b7   Elliot Berman   firmware: qcom_sc...
108
109
  #define QCOM_SCM_SVC_HDCP		0x11
  #define QCOM_SCM_HDCP_INVOKE		0x01
65f0c90b7   Elliot Berman   firmware: qcom_sc...
110
111
112
113
  
  #define QCOM_SCM_SVC_SMMU_PROGRAM		0x15
  #define QCOM_SCM_SMMU_CONFIG_ERRATA1		0x03
  #define QCOM_SCM_SMMU_CONFIG_ERRATA1_CLIENT_ALL	0x02
65f0c90b7   Elliot Berman   firmware: qcom_sc...
114
115
  
  extern void __qcom_scm_init(void);
f01e90fe3   Bjorn Andersson   firmware: qcom: s...
116

b6a1dfbc7   Kumar Gala   firmware: qcom: s...
117
  /* common error codes */
6b1751a86   Kumar Gala   firmware: qcom: s...
118
  #define QCOM_SCM_V2_EBUSY	-12
b6a1dfbc7   Kumar Gala   firmware: qcom: s...
119
120
121
122
123
124
  #define QCOM_SCM_ENOMEM		-5
  #define QCOM_SCM_EOPNOTSUPP	-4
  #define QCOM_SCM_EINVAL_ADDR	-3
  #define QCOM_SCM_EINVAL_ARG	-2
  #define QCOM_SCM_ERROR		-1
  #define QCOM_SCM_INTERRUPTED	1
11bdcee4a   Andy Gross   firmware: qcom: s...
125
126
127
128
129
130
131
132
133
134
135
136
  static inline int qcom_scm_remap_error(int err)
  {
  	switch (err) {
  	case QCOM_SCM_ERROR:
  		return -EIO;
  	case QCOM_SCM_EINVAL_ADDR:
  	case QCOM_SCM_EINVAL_ARG:
  		return -EINVAL;
  	case QCOM_SCM_EOPNOTSUPP:
  		return -EOPNOTSUPP;
  	case QCOM_SCM_ENOMEM:
  		return -ENOMEM;
6b1751a86   Kumar Gala   firmware: qcom: s...
137
138
  	case QCOM_SCM_V2_EBUSY:
  		return -EBUSY;
11bdcee4a   Andy Gross   firmware: qcom: s...
139
140
141
  	}
  	return -EINVAL;
  }
b6a1dfbc7   Kumar Gala   firmware: qcom: s...
142
  #endif