From: Bjorn Andersson <bjorn.andersson@linaro.org>
To: Bjorn Andersson <bjorn.andersson@linaro.org>,
Mathieu Poirier <mathieu.poirier@linaro.org>
Cc: Rob Herring <robh+dt@kernel.org>,
linux-arm-msm@vger.kernel.org, linux-remoteproc@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [PATCH 09/13] remoteproc: qcom: pas: Carry PAS metadata context
Date: Thu, 27 Jan 2022 18:55:09 -0800 [thread overview]
Message-ID: <20220128025513.97188-10-bjorn.andersson@linaro.org> (raw)
In-Reply-To: <20220128025513.97188-1-bjorn.andersson@linaro.org>
Starting with Qualcomm SM8450 the metadata object shared with the secure
world during authentication and booting of a remoteproc needs to be
alive from init_image() until auth_and_reset().
Use the newly introduced "PAS metadata context" object to track this
context from load until the firmware has been booted.
In the even that load is performed but the process for some reason
doesn't reach auth_and_reset the unprepare callback is used to clean up
the allocated memory.
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
---
drivers/remoteproc/qcom_q6v5_pas.c | 32 +++++++++++++++++++++++++++---
1 file changed, 29 insertions(+), 3 deletions(-)
diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
index 184bb7cdf95a..5e806f657fec 100644
--- a/drivers/remoteproc/qcom_q6v5_pas.c
+++ b/drivers/remoteproc/qcom_q6v5_pas.c
@@ -79,6 +79,8 @@ struct qcom_adsp {
struct qcom_rproc_subdev smd_subdev;
struct qcom_rproc_ssr ssr_subdev;
struct qcom_sysmon *sysmon;
+
+ struct qcom_scm_pas_metadata pas_metadata;
};
static void adsp_minidump(struct rproc *rproc)
@@ -126,14 +128,34 @@ static void adsp_pds_disable(struct qcom_adsp *adsp, struct device **pds,
}
}
+static int adsp_unprepare(struct rproc *rproc)
+{
+ struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv;
+
+ /*
+ * adsp_load() did pass pas_metadata to the SCM driver for storing
+ * metadata context. It might have been released already if
+ * auth_and_reset() was successful, but in other cases clean it up
+ * here.
+ */
+ qcom_scm_pas_metadata_release(&adsp->pas_metadata);
+
+ return 0;
+}
+
static int adsp_load(struct rproc *rproc, const struct firmware *fw)
{
struct qcom_adsp *adsp = (struct qcom_adsp *)rproc->priv;
int ret;
- ret = qcom_mdt_load(adsp->dev, fw, rproc->firmware, adsp->pas_id,
- adsp->mem_region, adsp->mem_phys, adsp->mem_size,
- &adsp->mem_reloc);
+ ret = qcom_mdt_pas_init(adsp->dev, fw, rproc->firmware, adsp->pas_id,
+ adsp->mem_phys, &adsp->pas_metadata);
+ if (ret)
+ return ret;
+
+ ret = qcom_mdt_load_no_init(adsp->dev, fw, rproc->firmware, adsp->pas_id,
+ adsp->mem_region, adsp->mem_phys, adsp->mem_size,
+ &adsp->mem_reloc);
if (ret)
return ret;
@@ -185,6 +207,8 @@ static int adsp_start(struct rproc *rproc)
goto disable_px_supply;
}
+ qcom_scm_pas_metadata_release(&adsp->pas_metadata);
+
return 0;
disable_px_supply:
@@ -255,6 +279,7 @@ static unsigned long adsp_panic(struct rproc *rproc)
}
static const struct rproc_ops adsp_ops = {
+ .unprepare = adsp_unprepare,
.start = adsp_start,
.stop = adsp_stop,
.da_to_va = adsp_da_to_va,
@@ -264,6 +289,7 @@ static const struct rproc_ops adsp_ops = {
};
static const struct rproc_ops adsp_minidump_ops = {
+ .unprepare = adsp_unprepare,
.start = adsp_start,
.stop = adsp_stop,
.da_to_va = adsp_da_to_va,
--
2.33.1
next prev parent reply other threads:[~2022-01-28 2:55 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-01-28 2:55 [PATCH 00/13] soc: qcom: mdt_loader: Support Qualcomm SM8450 Bjorn Andersson
2022-01-28 2:55 ` [PATCH 01/13] firmware: qcom: scm: Introduce pas_metadata context Bjorn Andersson
2023-05-24 11:17 ` Robert Marko
2022-01-28 2:55 ` [PATCH 02/13] soc: qcom: mdt_loader: Split out split-file-loader Bjorn Andersson
2022-01-28 2:55 ` [PATCH 03/13] soc: qcom: mdt_loader: Allow hash segment to be split out Bjorn Andersson
2022-01-28 2:55 ` [PATCH 04/13] soc: qcom: mdt_loader: Allow hash to reside in any segment Bjorn Andersson
2022-01-28 2:55 ` [PATCH 05/13] soc: qcom: mdt_loader: Extend check for split firmware Bjorn Andersson
2022-01-28 2:55 ` [PATCH 06/13] soc: qcom: mdt_loader: Reorder parts of __qcom_mdt_load() Bjorn Andersson
2022-01-28 2:55 ` [PATCH 07/13] soc: qcom: mdt_loader: Always invoke PAS mem_setup Bjorn Andersson
2022-01-28 2:55 ` [PATCH 08/13] soc: qcom: mdt_loader: Extract PAS operations Bjorn Andersson
2022-01-28 2:55 ` Bjorn Andersson [this message]
2022-01-28 2:55 ` [PATCH 10/13] dt-bindings: remoteproc: qcom: pas: Add SM8450 PAS compatibles Bjorn Andersson
2022-01-28 2:55 ` [PATCH 11/13] remoteproc: qcom: pas: Add SM8450 remoteproc support Bjorn Andersson
2022-01-28 2:55 ` [PATCH 12/13] arm64: dts: qcom: sm8450: Add remoteproc enablers and instances Bjorn Andersson
2022-02-28 8:13 ` Dmitry Baryshkov
2022-01-28 2:55 ` [PATCH 13/13] arm64: dts: qcom: sm8450-qrd: Enable remoteproc instances Bjorn Andersson
2022-02-03 15:11 ` [PATCH 00/13] soc: qcom: mdt_loader: Support Qualcomm SM8450 Dmitry Baryshkov
2022-02-03 18:20 ` Bjorn Andersson
2022-02-04 18:35 ` (subset) " Bjorn Andersson
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20220128025513.97188-10-bjorn.andersson@linaro.org \
--to=bjorn.andersson@linaro.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-remoteproc@vger.kernel.org \
--cc=mathieu.poirier@linaro.org \
--cc=robh+dt@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).