mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-18 01:41:24 +00:00
87 lines
2.6 KiB
Diff
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
|
|
|