Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0d8b2730 authored by Elliot Berman's avatar Elliot Berman
Browse files

firmware: qcom_scm: Add calls for camera



- Add SCM API to notify secure world that a LUT should be secure.
- Add SCM API to notify secure world that camera should be secure.

Change-Id: I31b0ce2c58182f809d0875c64116436a30ce8f62
Signed-off-by: default avatarElliot Berman <eberman@codeaurora.org>
parent 3e206709
Loading
Loading
Loading
Loading
+33 −1
Original line number Diff line number Diff line
@@ -1486,7 +1486,7 @@ int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev, bool en)
{
	struct qcom_scm_desc desc = {
		.svc = QCOM_SCM_SVC_SMMU_PROGRAM,
		.cmd = QCOM_SCM_SMMU_CONFIG_ERRATA1,
		.cmd = QCOM_SCM_SMMU_SECURE_LUT,
		.owner = ARM_SMCCC_OWNER_SIP,
	};

@@ -1497,6 +1497,22 @@ int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev, bool en)
	return qcom_scm_call_atomic(dev, &desc);
}

int __qcom_scm_smmu_notify_secure_lut(struct device *dev, u64 dev_id,
				      bool secure)
{
	struct qcom_scm_desc desc = {
		.svc = QCOM_SCM_SVC_SMMU_PROGRAM,
		.cmd = QCOM_SCM_SMMU_SECURE_LUT,
		.owner = ARM_SMCCC_OWNER_SIP
	};

	desc.args[0] = dev_id;
	desc.args[1] = secure;
	desc.arginfo = QCOM_SCM_ARGS(2);

	return qcom_scm_call(dev, &desc);
}

int __qcom_scm_qdss_invoke(struct device *dev, phys_addr_t addr, size_t size,
			   u64 *out)
{
@@ -1519,6 +1535,22 @@ int __qcom_scm_qdss_invoke(struct device *dev, phys_addr_t addr, size_t size,
	return ret ? : desc.res[0];
}

int __qcom_scm_camera_protect_phy_lanes(struct device *dev, bool protect,
					 u64 regmask)
{
	struct qcom_scm_desc desc = {
		.svc = QCOM_SCM_SVC_CAMERA,
		.cmd = QCOM_SCM_CAMERA_PROTECT_PHY_LANES,
		.owner = ARM_SMCCC_OWNER_SIP
	};

	desc.args[0] = protect;
	desc.args[1] = regmask;
	desc.arginfo = QCOM_SCM_ARGS(2);

	return qcom_scm_call(dev, &desc);
}

int __qcom_scm_ice_restore_cfg(struct device *dev)
{
	struct qcom_scm_desc desc = {
+13 −0
Original line number Diff line number Diff line
@@ -672,12 +672,25 @@ int qcom_scm_qsmmu500_wait_safe_toggle(bool en)
}
EXPORT_SYMBOL(qcom_scm_qsmmu500_wait_safe_toggle);

int qcom_scm_smmu_notify_secure_lut(u64 dev_id, bool secure)
{
	return __qcom_scm_smmu_notify_secure_lut(__scm->dev, dev_id, secure);
}
EXPORT_SYMBOL(qcom_scm_smmu_notify_secure_lut);

int qcom_scm_qdss_invoke(phys_addr_t paddr, size_t size, u64 *out)
{
	return __qcom_scm_qdss_invoke(__scm->dev, paddr, size, out);
}
EXPORT_SYMBOL(qcom_scm_qdss_invoke);

int qcom_scm_camera_protect_phy_lanes(bool protect, u64 regmask)
{
	return __qcom_scm_camera_protect_phy_lanes(__scm->dev, protect,
						    regmask);
}
EXPORT_SYMBOL(qcom_scm_camera_protect_phy_lanes);

int qcom_scm_ice_restore_cfg(void)
{
	return __qcom_scm_ice_restore_cfg(__scm->dev);
+8 −1
Original line number Diff line number Diff line
@@ -154,11 +154,13 @@ extern int __qcom_scm_hdcp_req(struct device *dev,

#define QCOM_SCM_SVC_SMMU_PROGRAM		0x15
#define QCOM_SCM_SMMU_CHANGE_PGTBL_FORMAT	0x01
#define QCOM_SCM_SMMU_CONFIG_ERRATA1		0x3
#define QCOM_SCM_SMMU_SECURE_LUT		0x03
extern int __qcom_scm_smmu_change_pgtbl_format(struct device *dev, u64 dev_id,
						int cbndx);
extern int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev,
						bool enable);
extern int __qcom_scm_smmu_notify_secure_lut(struct device *dev, u64 dev_id,
						bool secure);
#define QCOM_SCM_SMMU_CONFIG_ERRATA1_CLIENT_ALL	0x2

#define QCOM_SCM_SVC_QDSS			0x16
@@ -166,6 +168,11 @@ extern int __qcom_scm_qsmmu500_wait_safe_toggle(struct device *dev,
extern int __qcom_scm_qdss_invoke(struct device *dev, phys_addr_t addr,
				  size_t size, u64 *out);

#define QCOM_SCM_SVC_CAMERA			0x18
#define QCOM_SCM_CAMERA_PROTECT_PHY_LANES	0x07
extern int __qcom_scm_camera_protect_phy_lanes(struct device *dev,
						bool protect, u64 regmask);

// TOS Services and Function IDs
#define QCOM_SCM_SVC_QSEELOG		0x01
#define QCOM_SCM_QSEELOG_REGISTER	0x06
+6 −0
Original line number Diff line number Diff line
@@ -97,7 +97,9 @@ extern int qcom_scm_create_shm_bridge(u64 pfn_and_ns_perm_flags,
			u64 ns_vmids, u64 *handle);
extern int qcom_scm_smmu_change_pgtbl_format(u64 dev_id, int cbndx);
extern int qcom_scm_qsmmu500_wait_safe_toggle(bool en);
extern int qcom_scm_smmu_notify_secure_lut(u64 dev_id, bool secure);
extern int qcom_scm_qdss_invoke(phys_addr_t addr, size_t size, u64 *out);
extern int qcom_scm_camera_protect_phy_lanes(bool protect, u64 regmask);
extern int qcom_scm_ice_restore_cfg(void);
extern int qcom_scm_get_tz_log_feat_id(u64 *version);
extern int qcom_scm_register_qsee_log_buf(phys_addr_t buf, size_t len);
@@ -190,8 +192,12 @@ static inline int qcom_scm_smmu_change_pgtbl_format(u64 dev_id, int cbndx)
		{ return -ENODEV; }
static inline int qcom_scm_qsmmu500_wait_safe_toggle(bool en)
		{ return -ENODEV; }
static inline int qcom_scm_smmu_notify_secure_lut(u64 dev_id, bool secure)
		{ return -EINVAL; }
static inline int qcom_scm_qdss_invoke(phys_addr_t data, size_t size, u64 *out)
		{ return -EINVAL; }
static inline int qcom_scm_camera_protect_phy_lanes(bool protect, u64 regmask)
		{ return -EINVAL; }
static inline int qcom_scm_ice_restore_cfg(void) { return -ENODEV; }
static inline int qcom_scm_get_tz_log_feat_id(u64 *version)
		{ return -ENODEV; }