[REBASE PATCH v5 15/17] firmware: scm: Modify only the download bits in TCSR register
Mukesh Ojha
quic_mojha at quicinc.com
Mon Sep 11 03:53:57 PDT 2023
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.
Co-developed-by: Poovendhan Selvaraj <quic_poovendh at quicinc.com>
Signed-off-by: Poovendhan Selvaraj <quic_poovendh at quicinc.com>
Signed-off-by: Mukesh Ojha <quic_mojha at quicinc.com>
Tested-by: Kathiravan Thirumoorthy <quic_kathirav at quicinc.com> # IPQ9574 and IPQ5332
---
drivers/firmware/qcom_scm.c | 16 ++++++++++++++--
1 file changed, 14 insertions(+), 2 deletions(-)
diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index 321133f0950d..5cacae63ee2a 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -5,6 +5,8 @@
#include <linux/platform_device.h>
#include <linux/init.h>
#include <linux/interrupt.h>
+#include <linux/bitfield.h>
+#include <linux/bits.h>
#include <linux/completion.h>
#include <linux/cpumask.h>
#include <linux/export.h>
@@ -26,6 +28,14 @@
static bool download_mode = IS_ENABLED(CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT);
module_param(download_mode, bool, 0);
+#define SCM_HAS_CORE_CLK BIT(0)
+#define SCM_HAS_IFACE_CLK BIT(1)
+#define SCM_HAS_BUS_CLK BIT(2)
+
+#define QCOM_DLOAD_MASK GENMASK(5, 4)
+#define QCOM_DLOAD_FULLDUMP 0x1
+#define QCOM_DLOAD_NODUMP 0x0
+
struct qcom_scm {
struct device *dev;
struct clk *core_clk;
@@ -440,6 +450,7 @@ static int __qcom_scm_set_dload_mode(struct device *dev, bool enable)
static void qcom_scm_set_download_mode(bool enable)
{
+ u32 val = enable ? QCOM_DLOAD_FULLDUMP : QCOM_DLOAD_NODUMP;
bool avail;
int ret = 0;
@@ -449,8 +460,9 @@ static void qcom_scm_set_download_mode(bool enable)
if (avail) {
ret = __qcom_scm_set_dload_mode(__scm->dev, 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_update_field(__scm->dload_mode_addr,
+ QCOM_DLOAD_MASK,
+ FIELD_PREP(QCOM_DLOAD_MASK, val));
} else {
dev_err(__scm->dev,
"No available mechanism for setting download mode\n");
--
2.7.4
More information about the Linux-mediatek
mailing list