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

Commit d98f9f01 authored by Elliot Berman's avatar Elliot Berman
Browse files

firmware: qcom_scm: Add support for protecting videos



Add secure world call to protect memory for video.

Change-Id: I27a82d31054b8a2459738d3c7a2785abd357504f
Signed-off-by: default avatarElliot Berman <eberman@codeaurora.org>
parent 6009e24b
Loading
Loading
Loading
Loading
+19 −0
Original line number Diff line number Diff line
@@ -1054,6 +1054,25 @@ int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr, u32 size,
	return ret;
}

int __qcom_scm_mem_protect_video(struct device *dev,
				u32 cp_start, u32 cp_size,
				u32 cp_nonpixel_start, u32 cp_nonpixel_size)
{
	struct qcom_scm_desc desc = {
		.svc = QCOM_SCM_SVC_MP,
		.cmd = QCOM_SCM_MP_MEM_PROTECT_VIDEO,
		.owner = ARM_SMCCC_OWNER_SIP
	};

	desc.args[0] = cp_start;
	desc.args[1] = cp_size;
	desc.args[2] = cp_nonpixel_start;
	desc.args[3] = cp_nonpixel_size;
	desc.arginfo = QCOM_SCM_ARGS(4);

	return qcom_scm_call(dev, &desc);
}

int __qcom_scm_mem_protect_region_id(struct device *dev, phys_addr_t paddr,
					size_t size)
{
+8 −0
Original line number Diff line number Diff line
@@ -388,6 +388,14 @@ int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare)
}
EXPORT_SYMBOL(qcom_scm_iommu_secure_ptbl_init);

int qcom_scm_mem_protect_video(u32 cp_start, u32 cp_size,
			       u32 cp_nonpixel_start, u32 cp_nonpixel_size)
{
	return __qcom_scm_mem_protect_video(__scm->dev, cp_start, cp_size,
					cp_nonpixel_start, cp_nonpixel_size);
}
EXPORT_SYMBOL(qcom_scm_mem_protect_video);

int qcom_scm_mem_protect_region_id(phys_addr_t paddr, size_t size)
{
	return __qcom_scm_mem_protect_region_id(__scm->dev, paddr, size);
+4 −0
Original line number Diff line number Diff line
@@ -71,6 +71,7 @@ extern void __qcom_scm_mmu_sync(struct device *dev, bool sync);
#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
#define QCOM_SCM_MP_MEM_PROTECT_VIDEO		0x08
#define QCOM_SCM_MP_MEM_PROTECT_REGION_ID	0x10
#define QCOM_SCM_MP_MEM_PROTECT_LOCK_ID2_FLAT	0x11
#define QCOM_SCM_MP_IOMMU_SECURE_MAP2_FLAT	0x12
@@ -87,6 +88,9 @@ extern int __qcom_scm_iommu_secure_ptbl_size(struct device *dev, u32 spare,
					     size_t *size);
extern int __qcom_scm_iommu_secure_ptbl_init(struct device *dev, u64 addr,
					     u32 size, u32 spare);
extern int __qcom_scm_mem_protect_video(struct device *dev,
				u32 cp_start, u32 cp_size,
				u32 cp_nonpixel_start, u32 cp_nonpixel_size);
extern int __qcom_scm_mem_protect_region_id(struct device *dev,
					phys_addr_t paddr, size_t size);
extern int __qcom_scm_mem_protect_lock_id2_flat(struct device *dev,
+5 −0
Original line number Diff line number Diff line
@@ -57,6 +57,8 @@ extern void qcom_scm_mmu_sync(bool sync);
extern int qcom_scm_restore_sec_cfg(u32 device_id, u32 spare);
extern int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size);
extern int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare);
extern int qcom_scm_mem_protect_video(u32 cp_start, u32 cp_size,
				u32 cp_nonpixel_start, u32 cp_nonpixel_size);
extern int qcom_scm_mem_protect_region_id(phys_addr_t paddr, size_t size);
extern int qcom_scm_mem_protect_lock_id2_flat(phys_addr_t list_addr,
				size_t list_size, size_t chunk_size,
@@ -146,6 +148,9 @@ static inline int qcom_scm_iommu_secure_ptbl_size(u32 spare, size_t *size)
		{ return -ENODEV; }
static inline int qcom_scm_iommu_secure_ptbl_init(u64 addr, u32 size, u32 spare)
		{ return -ENODEV; }
static inline int qcom_scm_mem_protect_video(u32 cp_start, u32 cp_size,
				u32 cp_nonpixel_start, u32 cp_nonpixel_size)
				{ return -ENODEV; }
static inline int qcom_scm_mem_protect_region_id(phys_addr_t paddr, size_t size)
		{ return -ENODEV; }
static inline int qcom_scm_mem_protect_lock_id2_flat(phys_addr_t list_addr,