wlan-ap-Telecominfraproject/feeds/qca-wifi-7/ipq53xx/patches-6.1/0520-firmware-scm-Add-support-for-ABNORMAL-MAGIC-bit.patch
John Crispin 68cf54d9f7 qca-wifi-7: update to ath12.5.5
Signed-off-by: John Crispin <john@phrozen.org>
2025-02-27 12:45:52 +01:00

87 lines
2.6 KiB
Diff

From 862ddff4a11c18ad634990401601e5def704242d Mon Sep 17 00:00:00 2001
From: Sridharan S N <quic_sridsn@quicinc.com>
Date: Fri, 27 Oct 2023 17:05:25 +0530
Subject: [PATCH] firmware: scm: Add support for ABNORMAL MAGIC bit
ABNORMAL MAGIC bit of TCSR_BOOT_MISC_DETECT register
- should be set by kernel while starting up when crashdump is disabled
- should be cleared by kernel on the normal reset
- this bit is used to identify the abnormal reset
based on this bit, TZ logs the reset reason into the IMEM region when
crashdump is disabled.
Change-Id: I53923d18f0a704c60773d8e6be7de8c3fae64eb8
Signed-off-by: Sridharan S N <quic_sridsn@quicinc.com>
---
drivers/firmware/qcom_scm.c | 26 ++++++++++++++++++++++++++
drivers/firmware/qcom_scm.h | 1 +
2 files changed, 27 insertions(+)
diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index 0fae73f2ee39..c59804a6b9c1 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -529,6 +529,28 @@ static void qcom_scm_set_cpu_regsave(void)
}
}
+static void qcom_scm_set_abnormal_magic(bool enable)
+{
+ int ret;
+ u32 val;
+
+ if (!__scm->dload_mode_addr) {
+ dev_err(__scm->dev,"Download mode address is null\n");
+ return;
+ }
+
+ ret = qcom_scm_io_readl(__scm->dload_mode_addr, &val);
+ if (ret) {
+ dev_err(__scm->dev,
+ "failed to read dload mode address value: %d\n", ret);
+ return;
+ }
+
+ ret = qcom_scm_io_writel(__scm->dload_mode_addr, enable ?
+ val | QCOM_SCM_ABNORMAL_MAGIC :
+ val & ~(QCOM_SCM_ABNORMAL_MAGIC));
+}
+
static void qcom_scm_set_download_mode(bool enable)
{
bool avail;
@@ -2827,6 +2849,9 @@ static int qcom_scm_probe(struct platform_device *pdev)
qcom_scm_set_download_mode(true);
qcom_scm_set_cpu_regsave();
}
+ else {
+ qcom_scm_set_abnormal_magic(true);
+ }
return 0;
}
@@ -2835,6 +2860,7 @@ static void qcom_scm_shutdown(struct platform_device *pdev)
{
/* Clean shutdown, disable download mode to allow normal restart */
qcom_scm_set_download_mode(false);
+ qcom_scm_set_abnormal_magic(false);
}
static const struct of_device_id qcom_scm_dt_match[] = {
diff --git a/drivers/firmware/qcom_scm.h b/drivers/firmware/qcom_scm.h
index 2b8159fae4de..a81c74785187 100644
--- a/drivers/firmware/qcom_scm.h
+++ b/drivers/firmware/qcom_scm.h
@@ -93,6 +93,7 @@ extern int __qti_scm_tz_hvc_log(struct device *dev, u32 svc_id, u32 cmd_id,
#define QCOM_SCM_BOOT_MC_FLAG_WARMBOOT BIT(2)
#define QCOM_SCM_IS_TZ_LOG_ENCRYPTED 0xb
#define QCOM_SCM_GET_TZ_LOG_ENCRYPTED 0xc
+#define QCOM_SCM_ABNORMAL_MAGIC 0x40
#define QCOM_SCM_SVC_PIL 0x02
#define QCOM_SCM_PIL_PAS_INIT_IMAGE 0x01
--
2.34.1