diff options
author | Stanimir Varbanov <stanimir.varbanov@linaro.org> | 2020-07-03 13:10:30 +0300 |
---|---|---|
committer | Aníbal Limón <anibal.limon@linaro.org> | 2020-07-03 23:06:00 -0500 |
commit | 21bb88052948b35bdce926f301f2ba7970040812 (patch) | |
tree | 70d590c91d6da2bbcc8569e65944372eb539fea2 | |
parent | 2d8435ad822f157610e25f9eda05f0e8d3d446ff (diff) |
venus: firmware: Set virtual address rangesopenembedded-qcom-dragonboard845c-20.07openembedded-qcom-dragonboard410c-20.07debian-qcom-dragonboard845c-20.07debian-qcom-dragonboard410c-20.07
In order to boot some of the new Venus firmware versions TZ call to set
virtual address ranges is needed. Add virtual address ranges for CP and
CP_NONPIX in resource structure and use them when loading and booting
the firmware on remote processor.
Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org>
Signed-off-by: Aníbal Limón <anibal.limon@linaro.org>
-rw-r--r-- | drivers/media/platform/qcom/venus/core.c | 4 | ||||
-rw-r--r-- | drivers/media/platform/qcom/venus/core.h | 4 | ||||
-rw-r--r-- | drivers/media/platform/qcom/venus/firmware.c | 18 |
3 files changed, 25 insertions, 1 deletions
diff --git a/drivers/media/platform/qcom/venus/core.c b/drivers/media/platform/qcom/venus/core.c index 13fa5076314c..e4b3fd0adc06 100644 --- a/drivers/media/platform/qcom/venus/core.c +++ b/drivers/media/platform/qcom/venus/core.c @@ -522,6 +522,10 @@ static const struct venus_resources sdm845_res_v2 = { .vmem_size = 0, .vmem_addr = 0, .dma_mask = 0xe0000000 - 1, + .cp_start = 0, + .cp_size = 0x70800000, + .cp_nonpixel_start = 0x1000000, + .cp_nonpixel_size = 0x24800000, .fwname = "qcom/venus-5.2/venus.mdt", }; diff --git a/drivers/media/platform/qcom/venus/core.h b/drivers/media/platform/qcom/venus/core.h index bd3ac6a4501f..0b98b2dba8e0 100644 --- a/drivers/media/platform/qcom/venus/core.h +++ b/drivers/media/platform/qcom/venus/core.h @@ -68,6 +68,10 @@ struct venus_resources { unsigned int vmem_id; u32 vmem_size; u32 vmem_addr; + u32 cp_start; + u32 cp_size; + u32 cp_nonpixel_start; + u32 cp_nonpixel_size; const char *fwname; }; diff --git a/drivers/media/platform/qcom/venus/firmware.c b/drivers/media/platform/qcom/venus/firmware.c index 8801a6a7543d..ac906ffc608f 100644 --- a/drivers/media/platform/qcom/venus/firmware.c +++ b/drivers/media/platform/qcom/venus/firmware.c @@ -181,6 +181,7 @@ static int venus_shutdown_no_tz(struct venus_core *core) int venus_boot(struct venus_core *core) { struct device *dev = core->dev; + const struct venus_resources *res = core->res; phys_addr_t mem_phys; size_t mem_size; int ret; @@ -200,7 +201,22 @@ int venus_boot(struct venus_core *core) else ret = venus_boot_no_tz(core, mem_phys, mem_size); - return ret; + if (ret) + return ret; + + if (core->use_tz && res->cp_size) { + ret = qcom_scm_mem_protect_video_var(res->cp_start, + res->cp_size, + res->cp_nonpixel_start, + res->cp_nonpixel_size); + if (ret) { + dev_err(dev, "set virtual address ranges fail (%d)\n", + ret); + return ret; + } + } + + return 0; } int venus_shutdown(struct venus_core *core) |