From: Robert Marko <robimarko@gmail.com>
To: agross@kernel.org, andersson@kernel.org,
konrad.dybcio@linaro.org, robh+dt@kernel.org,
krzysztof.kozlowski+dt@linaro.org, conor+dt@kernel.org,
quic_gurus@quicinc.com, linux-arm-msm@vger.kernel.org,
devicetree@vger.kernel.org, linux-kernel@vger.kernel.org,
quic_mojha@quicinc.com
Cc: computersforpeace@gmail.com, Robert Marko <robimarko@gmail.com>
Subject: [PATCH v3 2/4] firmware: qcom_scm: disable SDI if required
Date: Wed, 16 Aug 2023 18:45:39 +0200 [thread overview]
Message-ID: <20230816164641.3371878-2-robimarko@gmail.com> (raw)
In-Reply-To: <20230816164641.3371878-1-robimarko@gmail.com>
IPQ5018 has SDI (Secure Debug Image) enabled by TZ by default, and that
means that WDT being asserted or just trying to reboot will hang the board
in the debug mode and only pulling the power and repowering will help.
Some IPQ4019 boards like Google WiFI have it enabled as well.
Luckily, SDI can be disabled via an SCM call.
So, lets use the boolean DT property to identify boards that have SDI
enabled by default and use the SCM call to disable SDI during SCM probe.
It is important to disable it as soon as possible as we might have a WDT
assertion at any time which would then leave the board in debug mode,
thus disabling it during SCM removal is not enough.
Signed-off-by: Robert Marko <robimarko@gmail.com>
---
Changes in v3:
* Squashed ("firmware: qcom: scm: Add SDI disable support") and
("firmware: qcom_scm: disable SDI if required")
---
drivers/firmware/qcom_scm.c | 29 +++++++++++++++++++++++++++++
drivers/firmware/qcom_scm.h | 1 +
2 files changed, 30 insertions(+)
diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index 06fe8aca870d..de9d1a11d097 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -403,6 +403,29 @@ int qcom_scm_set_remote_state(u32 state, u32 id)
}
EXPORT_SYMBOL_GPL(qcom_scm_set_remote_state);
+static int qcom_scm_disable_sdi(void)
+{
+ int ret;
+ struct qcom_scm_desc desc = {
+ .svc = QCOM_SCM_SVC_BOOT,
+ .cmd = QCOM_SCM_BOOT_SDI_CONFIG,
+ .args[0] = 1, /* Disable watchdog debug */
+ .args[1] = 0, /* Disable SDI */
+ .arginfo = QCOM_SCM_ARGS(2),
+ .owner = ARM_SMCCC_OWNER_SIP,
+ };
+ struct qcom_scm_res res;
+
+ ret = qcom_scm_clk_enable();
+ if (ret)
+ return ret;
+ ret = qcom_scm_call(__scm->dev, &desc, &res);
+
+ qcom_scm_clk_disable();
+
+ return ret ? : res.result[0];
+}
+
static int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
{
struct qcom_scm_desc desc = {
@@ -1468,6 +1491,12 @@ static int qcom_scm_probe(struct platform_device *pdev)
if (download_mode)
qcom_scm_set_download_mode(true);
+ /*
+ * Disable SDI if indicated by DT that it is enabled by default.
+ */
+ if (of_property_read_bool(pdev->dev.of_node, "qcom,sdi-enabled"))
+ qcom_scm_disable_sdi();
+
return 0;
}
diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h
index e6e512bd57d1..7b68fa820495 100644
--- a/drivers/firmware/qcom_scm.h
+++ b/drivers/firmware/qcom_scm.h
@@ -80,6 +80,7 @@ extern int scm_legacy_call(struct device *dev, const struct qcom_scm_desc *desc,
#define QCOM_SCM_SVC_BOOT 0x01
#define QCOM_SCM_BOOT_SET_ADDR 0x01
#define QCOM_SCM_BOOT_TERMINATE_PC 0x02
+#define QCOM_SCM_BOOT_SDI_CONFIG 0x09
#define QCOM_SCM_BOOT_SET_DLOAD_MODE 0x10
#define QCOM_SCM_BOOT_SET_ADDR_MC 0x11
#define QCOM_SCM_BOOT_SET_REMOTE_STATE 0x0a
--
2.41.0
next prev parent reply other threads:[~2023-08-16 16:47 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-08-16 16:45 [PATCH v3 1/4] dt-bindings: firmware: qcom,scm: support indicating SDI default state Robert Marko
2023-08-16 16:45 ` Robert Marko [this message]
2023-08-16 17:02 ` [PATCH v3 2/4] firmware: qcom_scm: disable SDI if required Guru Das Srinagesh
2023-08-16 17:33 ` Konrad Dybcio
2023-08-21 10:14 ` Robert Marko
2023-08-22 15:37 ` Mukesh Ojha
2023-08-25 9:41 ` Robert Marko
2023-08-25 21:42 ` Brian Norris
2023-08-31 14:43 ` Mukesh Ojha
2023-09-07 6:32 ` Sricharan Ramabadhran
2023-09-11 13:22 ` Mukesh Ojha
2023-08-16 16:45 ` [PATCH v3 3/4] dt-bindings: firmware: qcom,scm: document IPQ5018 compatible Robert Marko
2023-08-16 16:45 ` [PATCH v3 4/4] arm64: dts: qcom: ipq5018: indicate that SDI should be disabled Robert Marko
2023-08-17 3:35 ` [PATCH v3 1/4] dt-bindings: firmware: qcom,scm: support indicating SDI default state Brian Norris
2023-08-19 14:04 ` Krzysztof Kozlowski
2023-08-22 16:55 ` Mukesh Ojha
2023-09-20 18:15 ` (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=20230816164641.3371878-2-robimarko@gmail.com \
--to=robimarko@gmail.com \
--cc=agross@kernel.org \
--cc=andersson@kernel.org \
--cc=computersforpeace@gmail.com \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=konrad.dybcio@linaro.org \
--cc=krzysztof.kozlowski+dt@linaro.org \
--cc=linux-arm-msm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=quic_gurus@quicinc.com \
--cc=quic_mojha@quicinc.com \
--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).