Message ID | 1498745861-20531-2-git-send-email-sricharan@codeaurora.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
On Thu 29 Jun 07:17 PDT 2017, Sricharan R wrote: > qcom_mdt_load function loads the mdt type firmware and > authenticates it as well. Make the authentication only > when requested by the caller, so that the function can be used > by self-authenticating remoteproc as well. > This is good, we should be able to save some duplication the current MSA PIL as well by this. > Signed-off-by: Sricharan R <sricharan@codeaurora.org> > --- > drivers/remoteproc/qcom_adsp_pil.c | 3 ++- > drivers/remoteproc/qcom_wcnss.c | 3 ++- > drivers/soc/qcom/mdt_loader.c | 24 ++++++++++++++---------- > include/linux/soc/qcom/mdt_loader.h | 2 +- We have two additional callers being merged, so changing the prototype of qcom_mdt_load() will cause issues. I think the best approach is to leave all callers untouched, make the current implementation of qcom_mdt_load() internal and provide two exported wrapper functions: qcom_mdt_load() and qcom_mdt_load_no_init(). These wrappers would call the internal function with the appropriate value of the boolean. [..] > diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c [..] > int qcom_mdt_load(struct device *dev, const struct firmware *fw, > const char *firmware, int pas_id, void *mem_region, > - phys_addr_t mem_phys, size_t mem_size) > + phys_addr_t mem_phys, size_t mem_size, bool auth) We're not authenticating even with @auth=true, so please name this "pas_init". > { > const struct elf32_phdr *phdrs; > const struct elf32_phdr *phdr; [..] > @@ -142,12 +144,14 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw, > } > > if (relocate) { > - ret = qcom_scm_pas_mem_setup(pas_id, mem_phys, max_addr - min_addr); > - if (ret) { > - dev_err(dev, "unable to setup relocation\n"); > - goto out; > + if (auth) { > + ret = qcom_scm_pas_mem_setup(pas_id, mem_phys, > + max_addr - min_addr); > + if (ret) { > + dev_err(dev, "unable to setup relocation\n"); > + goto out; > + } > } > - I like this empty line, please let me have it. > /* > * The image is relocatable, so offset each segment based on > * the lowest segment address. Regards, Bjorn -- To unsubscribe from this list: send the line "unsubscribe linux-remoteproc" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Hi Bjorn, Thanks for the review ! On 7/26/2017 11:41 PM, Bjorn Andersson wrote: > On Thu 29 Jun 07:17 PDT 2017, Sricharan R wrote: > >> qcom_mdt_load function loads the mdt type firmware and >> authenticates it as well. Make the authentication only >> when requested by the caller, so that the function can be used >> by self-authenticating remoteproc as well. >> > > This is good, we should be able to save some duplication the current > MSA PIL as well by this. > >> Signed-off-by: Sricharan R <sricharan@codeaurora.org> >> --- >> drivers/remoteproc/qcom_adsp_pil.c | 3 ++- >> drivers/remoteproc/qcom_wcnss.c | 3 ++- >> drivers/soc/qcom/mdt_loader.c | 24 ++++++++++++++---------- >> include/linux/soc/qcom/mdt_loader.h | 2 +- > > We have two additional callers being merged, so changing the prototype > of qcom_mdt_load() will cause issues. > > I think the best approach is to leave all callers untouched, make the > current implementation of qcom_mdt_load() internal and provide two > exported wrapper functions: qcom_mdt_load() and qcom_mdt_load_no_init(). > > These wrappers would call the internal function with the appropriate > value of the boolean. > ok, will do. > [..] >> diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c > [..] >> int qcom_mdt_load(struct device *dev, const struct firmware *fw, >> const char *firmware, int pas_id, void *mem_region, >> - phys_addr_t mem_phys, size_t mem_size) >> + phys_addr_t mem_phys, size_t mem_size, bool auth) > > We're not authenticating even with @auth=true, so please name this > "pas_init". > ok will rename. >> { >> const struct elf32_phdr *phdrs; >> const struct elf32_phdr *phdr; > [..] >> @@ -142,12 +144,14 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw, >> } >> >> if (relocate) { >> - ret = qcom_scm_pas_mem_setup(pas_id, mem_phys, max_addr - min_addr); >> - if (ret) { >> - dev_err(dev, "unable to setup relocation\n"); >> - goto out; >> + if (auth) { >> + ret = qcom_scm_pas_mem_setup(pas_id, mem_phys, >> + max_addr - min_addr); >> + if (ret) { >> + dev_err(dev, "unable to setup relocation\n"); >> + goto out; >> + } >> } >> - > > I like this empty line, please let me have it. > ok. Regards, Sricharan
diff --git a/drivers/remoteproc/qcom_adsp_pil.c b/drivers/remoteproc/qcom_adsp_pil.c index 49fe2f8..e168375 100644 --- a/drivers/remoteproc/qcom_adsp_pil.c +++ b/drivers/remoteproc/qcom_adsp_pil.c @@ -79,7 +79,8 @@ static int adsp_load(struct rproc *rproc, const struct firmware *fw) struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv; return qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id, - adsp->mem_region, adsp->mem_phys, adsp->mem_size); + adsp->mem_region, adsp->mem_phys, adsp->mem_size, + true); } static const struct rproc_fw_ops adsp_fw_ops = { diff --git a/drivers/remoteproc/qcom_wcnss.c b/drivers/remoteproc/qcom_wcnss.c index c768639..b41b9b5 100644 --- a/drivers/remoteproc/qcom_wcnss.c +++ b/drivers/remoteproc/qcom_wcnss.c @@ -153,7 +153,8 @@ static int wcnss_load(struct rproc *rproc, const struct firmware *fw) struct qcom_wcnss *wcnss = (struct qcom_wcnss *)rproc->priv; return qcom_mdt_load(wcnss->dev, fw, rproc->firmware, WCNSS_PAS_ID, - wcnss->mem_region, wcnss->mem_phys, wcnss->mem_size); + wcnss->mem_region, wcnss->mem_phys, + wcnss->mem_size, true); } static const struct rproc_fw_ops wcnss_fw_ops = { diff --git a/drivers/soc/qcom/mdt_loader.c b/drivers/soc/qcom/mdt_loader.c index bd63df0..b3947d0 100644 --- a/drivers/soc/qcom/mdt_loader.c +++ b/drivers/soc/qcom/mdt_loader.c @@ -88,7 +88,7 @@ ssize_t qcom_mdt_get_size(const struct firmware *fw) */ int qcom_mdt_load(struct device *dev, const struct firmware *fw, const char *firmware, int pas_id, void *mem_region, - phys_addr_t mem_phys, size_t mem_size) + phys_addr_t mem_phys, size_t mem_size, bool auth) { const struct elf32_phdr *phdrs; const struct elf32_phdr *phdr; @@ -119,10 +119,12 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw, if (!fw_name) return -ENOMEM; - ret = qcom_scm_pas_init_image(pas_id, fw->data, fw->size); - if (ret) { - dev_err(dev, "invalid firmware metadata\n"); - goto out; + if (auth) { + ret = qcom_scm_pas_init_image(pas_id, fw->data, fw->size); + if (ret) { + dev_err(dev, "invalid firmware metadata\n"); + goto out; + } } for (i = 0; i < ehdr->e_phnum; i++) { @@ -142,12 +144,14 @@ int qcom_mdt_load(struct device *dev, const struct firmware *fw, } if (relocate) { - ret = qcom_scm_pas_mem_setup(pas_id, mem_phys, max_addr - min_addr); - if (ret) { - dev_err(dev, "unable to setup relocation\n"); - goto out; + if (auth) { + ret = qcom_scm_pas_mem_setup(pas_id, mem_phys, + max_addr - min_addr); + if (ret) { + dev_err(dev, "unable to setup relocation\n"); + goto out; + } } - /* * The image is relocatable, so offset each segment based on * the lowest segment address. diff --git a/include/linux/soc/qcom/mdt_loader.h b/include/linux/soc/qcom/mdt_loader.h index f423001..7ff4dd3 100644 --- a/include/linux/soc/qcom/mdt_loader.h +++ b/include/linux/soc/qcom/mdt_loader.h @@ -13,6 +13,6 @@ ssize_t qcom_mdt_get_size(const struct firmware *fw); int qcom_mdt_load(struct device *dev, const struct firmware *fw, const char *fw_name, int pas_id, void *mem_region, - phys_addr_t mem_phys, size_t mem_size); + phys_addr_t mem_phys, size_t mem_size, bool auth); #endif
qcom_mdt_load function loads the mdt type firmware and authenticates it as well. Make the authentication only when requested by the caller, so that the function can be used by self-authenticating remoteproc as well. Signed-off-by: Sricharan R <sricharan@codeaurora.org> --- drivers/remoteproc/qcom_adsp_pil.c | 3 ++- drivers/remoteproc/qcom_wcnss.c | 3 ++- drivers/soc/qcom/mdt_loader.c | 24 ++++++++++++++---------- include/linux/soc/qcom/mdt_loader.h | 2 +- 4 files changed, 19 insertions(+), 13 deletions(-)