firmware: qcom_scm: Add support for protecting videos

Add secure world call to protect memory for video.

Change-Id: I27a82d31054b8a2459738d3c7a2785abd357504f
Signed-off-by: Elliot Berman <eberman@codeaurora.org>
This commit is contained in:
Elliot Berman 2019-10-14 14:04:19 -07:00
commit d98f9f01bf
4 changed files with 36 additions and 0 deletions

View file

@ -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)
{

View file

@ -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);

View file

@ -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,

View file

@ -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,