Re: [PATCH v5 15/17] firmware: scm: Modify only the download bits in TCSR register

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




On 9/10/2023 1:46 AM, Mukesh Ojha wrote:
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@xxxxxxxxxxx>
Signed-off-by: Mukesh Ojha <quic_mojha@xxxxxxxxxxx>
---


This change doesn't cleanly apply on next-20230911. Please rebase it.

Validated this change on IPQ9574 and IPQ5332 and system is entering into the download mode.

Tested-by: Kathiravan Thirumoorthy <quic_kathirav@xxxxxxxxxxx> # IPQ9574 and IPQ5332


  drivers/firmware/qcom_scm.c | 12 ++++++++++--
  1 file changed, 10 insertions(+), 2 deletions(-)

diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index 5ea8fc4fd4e8..eda92f713019 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>
@@ -30,6 +32,10 @@ module_param(download_mode, bool, 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;
@@ -444,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;
@@ -453,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");



[Index of Archives]     [Linux SoC Development]     [Linux Rockchip Development]     [Linux for Synopsys ARC Processors]    
  • [Linux on Unisoc (RDA Micro) SoCs]     [Linux Actions SoC]     [Linux USB Development]     [Video for Linux]     [Linux Audio Users]     [Linux SCSI]     [Yosemite News]

  •   Powered by Linux