mirror of
https://github.com/Telecominfraproject/wlan-ap.git
synced 2025-12-17 09:21:35 +00:00
77 lines
2.8 KiB
Diff
77 lines
2.8 KiB
Diff
From beda24f4be564b4a80880e92efafae0388bae574 Mon Sep 17 00:00:00 2001
|
|
From: Poovendhan Selvaraj <quic_poovendh@quicinc.com>
|
|
Date: Thu, 16 Feb 2023 17:30:12 +0530
|
|
Subject: [PATCH 165/281] firmware: scm: Modify only the DLOAD bit in TCSR
|
|
register for download mode
|
|
|
|
CrashDump collection is based on the DLOAD bit of TCSR register.
|
|
To retain other bits, we read the register and modify only the DLOAD bit as
|
|
the other bits have their own significance.
|
|
|
|
Change-Id: I1c0ee926eddbaf17a7329fb8eba9a86fcf067c54
|
|
Co-developed-by: Anusha Rao <quic_anusha@quicinc.com>
|
|
Signed-off-by: Anusha Rao <quic_anusha@quicinc.com>
|
|
Co-developed-by: Kathiravan Thirumoorthy <quic_kathirav@quicinc.com>
|
|
Signed-off-by: Kathiravan Thirumoorthy <quic_kathirav@quicinc.com>
|
|
Signed-off-by: Poovendhan Selvaraj <quic_poovendh@quicinc.com>
|
|
Signed-off-by: Manikanta Mylavarapu <quic_mmanikan@quicinc.com>
|
|
---
|
|
drivers/firmware/qcom_scm.c | 21 ++++++++++++++++-----
|
|
1 file changed, 16 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
|
|
index cdbfe54c8146..f0f601b89448 100644
|
|
--- a/drivers/firmware/qcom_scm.c
|
|
+++ b/drivers/firmware/qcom_scm.c
|
|
@@ -400,7 +400,7 @@ int qcom_scm_set_remote_state(u32 state, u32 id)
|
|
}
|
|
EXPORT_SYMBOL(qcom_scm_set_remote_state);
|
|
|
|
-static int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
|
|
+static int __qcom_scm_set_dload_mode(struct device *dev, u32 val, bool enable)
|
|
{
|
|
struct qcom_scm_desc desc = {
|
|
.svc = QCOM_SCM_SVC_BOOT,
|
|
@@ -410,7 +410,8 @@ static int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
|
|
.owner = ARM_SMCCC_OWNER_SIP,
|
|
};
|
|
|
|
- desc.args[1] = enable ? QCOM_SCM_BOOT_SET_DLOAD_MODE : 0;
|
|
+ desc.args[1] = enable ? val | QCOM_SCM_BOOT_SET_DLOAD_MODE :
|
|
+ val & ~(QCOM_SCM_BOOT_SET_DLOAD_MODE);
|
|
|
|
return qcom_scm_call_atomic(__scm->dev, &desc, NULL);
|
|
}
|
|
@@ -419,15 +420,25 @@ static void qcom_scm_set_download_mode(bool enable)
|
|
{
|
|
bool avail;
|
|
int ret = 0;
|
|
+ u32 dload_addr_val;
|
|
|
|
avail = __qcom_scm_is_call_available(__scm->dev,
|
|
QCOM_SCM_SVC_BOOT,
|
|
QCOM_SCM_BOOT_SET_DLOAD_MODE);
|
|
+ ret = qcom_scm_io_readl(__scm->dload_mode_addr, &dload_addr_val);
|
|
+
|
|
+ if (ret) {
|
|
+ dev_err(__scm->dev,
|
|
+ "failed to read dload mode address value: %d\n", ret);
|
|
+ return;
|
|
+ }
|
|
+
|
|
if (avail) {
|
|
- ret = __qcom_scm_set_dload_mode(__scm->dev, enable);
|
|
+ ret = __qcom_scm_set_dload_mode(__scm->dev, dload_addr_val, enable);
|
|
} else if (__scm->dload_mode_addr) {
|
|
- ret = qcom_scm_io_writel(__scm->dload_mode_addr,
|
|
- enable ? QCOM_SCM_BOOT_SET_DLOAD_MODE : 0);
|
|
+ ret = qcom_scm_io_writel(__scm->dload_mode_addr, enable ?
|
|
+ dload_addr_val | QCOM_SCM_BOOT_SET_DLOAD_MODE :
|
|
+ dload_addr_val & ~(QCOM_SCM_BOOT_SET_DLOAD_MODE));
|
|
} else {
|
|
dev_err(__scm->dev,
|
|
"No available mechanism for setting download mode\n");
|
|
--
|
|
2.17.1
|
|
|