Skip to contentSkip to conversation

Add Modem support on SC7280 SoCs

PATCH Superseded Sibi Sankar 2 participants 23 messages Jul 20, 2021 – Jul 22, 2021

Subsystems (8)

v2 of 5 Superseded Latest is v5 →

lore
Share & tools
lore
#0 lore raw

v2 cover Add Modem support on SC7280 SoCs

This patch series adds support for booting the Modem Q6 DSP found on Qualcomm's SC7280 SoCs.

Depends on:
aoss yaml: https://patchwork.kernel.org/project/linux-arm-msm/cover/[email protected]/
qmp_send: https://patchwork.kernel.org/project/linux-arm-msm/cover/[email protected]/
rproc qmp: https://patchwork.kernel.org/project/linux-arm-msm/cover/[email protected]/

V2:
* Misc. typos {patch 3}. [Matthias]
* Document the q-channel takedown procedure {patch 5}. [Matthias]
* Split reserved memory updates between SoC and platform {patch 6}. [Matthias]

Sibi Sankar (10):
dt-bindings: remoteproc: qcom: pas: Add SC7280 MPSS support
remoteproc: qcom: pas: Add SC7280 Modem support
dt-bindings: remoteproc: qcom: Update Q6V5 Modem PIL binding iommu/arm-smmu-qcom: Request direct mapping for modem device
remoteproc: mss: q6v5-mss: Add modem support on SC7280
arm64: dts: qcom: sc7280: Update reserved memory map
arm64: dts: qcom: sc7280: Add/Delete/Update reserved memory nodes
arm64: dts: qcom: sc7280: Add nodes to boot modem
arm64: dts: qcom: sc7280: Add Q6V5 MSS node
arm64: dts: qcom: sc7280: Update Q6V5 MSS node

 .../devicetree/bindings/remoteproc/qcom,adsp.yaml  |   6 +
 .../devicetree/bindings/remoteproc/qcom,q6v5.txt   |  32 ++-
 arch/arm64/boot/dts/qcom/sc7280-idp.dts            |  59 +++++
 arch/arm64/boot/dts/qcom/sc7280.dtsi               | 107 +++++++++
 drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c         |   1 +
 drivers/remoteproc/qcom_q6v5_mss.c                 | 252 ++++++++++++++++++++-
 drivers/remoteproc/qcom_q6v5_pas.c                 |   1 +
 7 files changed, 452 insertions(+), 6 deletions(-)
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#1 lore raw

PATCH v2 1/10 dt-bindings: remoteproc: qcom: pas: Add SC7280 MPSS support

Add MPSS PAS support for SC7280 SoCs.

---
 Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml | 6 ++++++
 1 file changed, 6 insertions(+)
Documentation/devicetree/bindings/remoteproc/qcom,adsp.yaml +6 -0
index 1182afb5f593..c17b9a0c36ff 100644
@@ -25,6 +25,7 @@ properties:
       - qcom,qcs404-cdsp-pas
       - qcom,qcs404-wcss-pas
       - qcom,sc7180-mpss-pas
+      - qcom,sc7280-mpss-pas
       - qcom,sc8180x-adsp-pas
       - qcom,sc8180x-cdsp-pas
       - qcom,sc8180x-mpss-pas
@@ -150,6 +151,7 @@ allOf:
               - qcom,msm8998-adsp-pas
               - qcom,qcs404-adsp-pas
               - qcom,qcs404-wcss-pas
+              - qcom,sc7280-mpss-pas
               - qcom,sc8180x-adsp-pas
               - qcom,sc8180x-cdsp-pas
               - qcom,sc8180x-mpss-pas
@@ -295,6 +297,7 @@ allOf:
           contains:
             enum:
               - qcom,sc7180-mpss-pas
+              - qcom,sc7280-mpss-pas
               - qcom,sc8180x-mpss-pas
               - qcom,sdx55-mpss-pas
               - qcom,sm8150-mpss-pas
@@ -399,6 +402,7 @@ allOf:
         compatible:
           contains:
             enum:
+              - qcom,sc7280-mpss-pas
               - qcom,sdx55-mpss-pas
               - qcom,sm8150-mpss-pas
               - qcom,sm8350-mpss-pas
@@ -474,6 +478,7 @@ allOf:
           contains:
             enum:
               - qcom,sc7180-mpss-pas
+              - qcom,sc7280-mpss-pas
     then:
       properties:
         resets:
@@ -491,6 +496,7 @@ allOf:
           contains:
             enum:
               - qcom,sc7180-mpss-pas
+              - qcom,sc7280-mpss-pas
               - qcom,sc8180x-adsp-pas
               - qcom,sc8180x-cdsp-pas
               - qcom,sc8180x-mpss-pas
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#2 lore raw

PATCH v2 2/10 remoteproc: qcom: pas: Add SC7280 Modem support

In reply to Sibi Sankar

Add support for booting the Modem DSP found on QTI SC7280 SoCs.

---
 drivers/remoteproc/qcom_q6v5_pas.c | 1 +
 1 file changed, 1 insertion(+)
drivers/remoteproc/qcom_q6v5_pas.c +1 -0
index 333a072121fb..10c1471423f4 100644
@@ -783,6 +783,7 @@ static const struct of_device_id adsp_of_match[] = {
 	{ .compatible = "qcom,qcs404-cdsp-pas", .data = &cdsp_resource_init },
 	{ .compatible = "qcom,qcs404-wcss-pas", .data = &wcss_resource_init },
 	{ .compatible = "qcom,sc7180-mpss-pas", .data = &mpss_resource_init},
+	{ .compatible = "qcom,sc7280-mpss-pas", .data = &mpss_resource_init},
 	{ .compatible = "qcom,sc8180x-adsp-pas", .data = &sm8150_adsp_resource},
 	{ .compatible = "qcom,sc8180x-cdsp-pas", .data = &sm8150_cdsp_resource},
 	{ .compatible = "qcom,sc8180x-mpss-pas", .data = &sc8180x_mpss_resource},
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#3 lore raw

PATCH v2 3/10 dt-bindings: remoteproc: qcom: Update Q6V5 Modem PIL binding

In reply to Sibi Sankar

Add a new modem compatible string for QTI SC7280 SoCs and introduce the "qcom,ext-regs" and "qcom,qaccept-regs" properties needed by the modem sub-system running on SC7280 SoCs.

---

v2:
* Misc. typos. [Matthias]

 .../devicetree/bindings/remoteproc/qcom,q6v5.txt   | 32 ++++++++++++++++++++--
 1 file changed, 30 insertions(+), 2 deletions(-)
Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt +30 -2
index 494257010629..bc1394f5d677 100644
@@ -15,6 +15,7 @@ on the Qualcomm Hexagon core.
 		    "qcom,msm8996-mss-pil"
 		    "qcom,msm8998-mss-pil"
 		    "qcom,sc7180-mss-pil"
+		    "qcom,sc7280-mss-pil"
 		    "qcom,sdm845-mss-pil"
 
 - reg:
@@ -47,6 +48,7 @@ on the Qualcomm Hexagon core.
 	qcom,msm8996-mss-pil:
 	qcom,msm8998-mss-pil:
 	qcom,sc7180-mss-pil:
+	qcom,sc7280-mss-pil:
 	qcom,sdm845-mss-pil:
 		    must be "wdog", "fatal", "ready", "handover", "stop-ack",
 		    "shutdown-ack"
@@ -87,6 +89,8 @@ on the Qualcomm Hexagon core.
 	qcom,sc7180-mss-pil:
 		    must be "iface", "bus", "xo", "snoc_axi", "mnoc_axi",
 		    "nav"
+	qcom,sc7280-mss-pil:
+		    must be "iface", "xo", "snoc_axi", "offline"
 	qcom,sdm845-mss-pil:
 		    must be "iface", "bus", "mem", "xo", "gpll0_mss",
 		    "snoc_axi", "mnoc_axi", "prng"
@@ -98,7 +102,7 @@ on the Qualcomm Hexagon core.
 		    reference to the list of 3 reset-controllers for the
 		    wcss sub-system
 		    reference to the list of 2 reset-controllers for the modem
-		    sub-system on SC7180, SDM845 SoCs
+		    sub-system on SC7180, SC7280, SDM845 SoCs
 
 - reset-names:
 	Usage: required
@@ -107,7 +111,7 @@ on the Qualcomm Hexagon core.
 		    must be "wcss_aon_reset", "wcss_reset", "wcss_q6_reset"
 		    for the wcss sub-system
 		    must be "mss_restart", "pdc_reset" for the modem
-		    sub-system on SC7180, SDM845 SoCs
+		    sub-system on SC7180, SC7280, SDM845 SoCs
 
 For devices where the mba and mpss sub-nodes are not specified, mba/mpss region
 should be referenced as follows:
@@ -173,6 +177,9 @@ For the compatible string below the following supplies are required:
 	qcom,msm8998-mss-pil:
 		    must be "cx", "mx"
 	qcom,sc7180-mss-pil:
+		    must be "cx", "mx", "mss"
+	qcom,sc7280-mss-pil:
+		    must be "cx", "mss"
 	qcom,sdm845-mss-pil:
 		    must be "cx", "mx", "mss"
 
@@ -198,6 +205,9 @@ For the compatible string below the following supplies are required:
 	Definition: a phandle reference to a syscon representing TCSR followed
 		    by the three offsets within syscon for q6, modem and nc
 		    halt registers.
+		    a phandle reference to a syscon representing TCSR followed
+		    by the four offsets within syscon for q6, modem, nc and vq6
+		    halt registers on SC7280 SoCs.
 
 For the compatible strings below the following phandle references are required:
   "qcom,sc7180-mss-pil"
@@ -208,6 +218,24 @@ For the compatible strings below the following phandle references are required:
 		    by the offset within syscon for conn_box_spare0 register
 		    used by the modem sub-system running on SC7180 SoC.
 
+For the compatible strings below the following phandle references are required:
+  "qcom,sc7280-mss-pil"
+- qcom,ext-regs:
+	Usage: required
+	Value type: <prop-encoded-array>
+	Definition: two phandle references to syscons representing TCSR_REG and
+		    TCSR register space followed by the two offsets within the syscon
+		    to force_clk_en/rscc_disable and axim1_clk_off/crypto_clk_off
+		    registers respectively.
+
+- qcom,qaccept-regs:
+	Usage: required
+	Value type: <prop-encoded-array>
+	Definition: a phandle reference to a syscon representing TCSR followed
+		    by the three offsets within syscon for mdm, cx and axi
+		    qaccept registers used by the modem sub-system running on
+		    SC7280 SoC.
+
 The Hexagon node must contain iommus property as described in ../iommu/iommu.txt
 on platforms which do not have TrustZone.
 
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#4 lore raw

Re: [PATCH v2 03/10] dt-bindings: remoteproc: qcom: Update Q6V5 Modem PIL binding

Quoting Sibi Sankar (2021-07-20 03:12:53)

Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt For the compatible string below the following supplies are required: · line 210

Quoted 11 lines
Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt +3 -0
index 494257010629..bc1394f5d677 100644
@@ -198,6 +205,9 @@ For the compatible string below the following supplies are required:
        Definition: a phandle reference to a syscon representing TCSR followed
                    by the three offsets within syscon for q6, modem and nc
                    halt registers.
+                   a phandle reference to a syscon representing TCSR followed
+                   by the four offsets within syscon for q6, modem, nc and vq6
+                   halt registers on SC7280 SoCs.

This seems to be duplicated? Maybe it should be combined with the previous sentence and sc7280 called out?

Quoted 3 lines
Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt +0 -0
 For the compatible strings below the following phandle references are required:
   "qcom,sc7180-mss-pil"
#5 lore raw

Re: [PATCH v2 03/10] dt-bindings: remoteproc: qcom: Update Q6V5 Modem PIL binding

Hey Stephen,

Thanks for taking time to review
the series.

Quoted 12 lines · Stephen Boyd

Quoting Sibi Sankar (2021-07-20 03:12:53)

Quoted 11 lines
Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt +0 -0
index 494257010629..bc1394f5d677 100644
@@ -198,6 +205,9 @@ For the compatible string below the following 

supplies are required:
Definition: a phandle reference to a syscon representing TCSR
followed
by the three offsets within syscon for q6, modem
and nc
halt registers.

Quoted 8 lines
Quoted 5 lines

+ a phandle reference to a syscon representing TCSR
followed
+ by the four offsets within syscon for q6, modem,
nc and vq6
+ halt registers on SC7280 SoCs.

This seems to be duplicated? Maybe it should be combined with the previous sentence and sc7280 called out?

yeah noticed ^^ but that's the style
we've maintained till now. This
would get cleanup up when I do the
yaml conversion after the series
lands.

Quoted 5 lines
Quoted 5 lines

For the compatible strings below the following phandle references are
required:

   "qcom,sc7180-mss-pil"
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project.
#6 lore raw

PATCH v2 4/10 iommu/arm-smmu-qcom: Request direct mapping for modem device

In reply to Sibi Sankar

The SID configuration requirement for Modem on SC7280 is similar to the ones found on SC7180/SDM845 SoCs. So, add the SC7280 modem compatible to the list to defer the programming of the modem SIDs to the kernel.

---
 drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c | 1 +
 1 file changed, 1 insertion(+)
drivers/iommu/arm/arm-smmu/arm-smmu-qcom.c +1 -0
index 9b9d13ec5a88..a4b4c8013b3a 100644
@@ -229,6 +229,7 @@ static const struct of_device_id qcom_smmu_client_of_match[] __maybe_unused = {
 	{ .compatible = "qcom,sc7180-mdss" },
 	{ .compatible = "qcom,sc7180-mss-pil" },
 	{ .compatible = "qcom,sc7280-mdss" },
+	{ .compatible = "qcom,sc7280-mss-pil" },
 	{ .compatible = "qcom,sc8180x-mdss" },
 	{ .compatible = "qcom,sdm845-mdss" },
 	{ .compatible = "qcom,sdm845-mss-pil" },
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
Reviewed-by on v2 4/10
#7 lore raw

Re: [PATCH v2 04/10] iommu/arm-smmu-qcom: Request direct mapping for modem device

Quoting Sibi Sankar (2021-07-20 03:12:54)

Quoted 7 lines

The SID configuration requirement for Modem on SC7280 is similar to the ones found on SC7180/SDM845 SoCs. So, add the SC7280 modem compatible to the list to defer the programming of the modem SIDs to the kernel.

---

#8 lore raw

PATCH v2 5/10 remoteproc: mss: q6v5-mss: Add modem support on SC7280

In reply to Sibi Sankar

Add out of reset sequence support for modem sub-system on SC7280 SoCs. It requires access to an additional set of qaccept registers, external power/clk control registers and halt vq6 register to put the modem back into reset.

---

v2:
* Document the q-channel takedown procedure. [Matthias]

 drivers/remoteproc/qcom_q6v5_mss.c | 252 ++++++++++++++++++++++++++++++++++++-
 1 file changed, 248 insertions(+), 4 deletions(-)
drivers/remoteproc/qcom_q6v5_mss.c +248 -4
index 7a1422bd7925..90ff712f912c 100644
@@ -77,6 +77,14 @@
 
 #define HALT_ACK_TIMEOUT_US		100000
 
+/* QACCEPT Register Offsets */
+#define QACCEPT_ACCEPT_REG		0x0
+#define QACCEPT_ACTIVE_REG		0x4
+#define QACCEPT_DENY_REG		0x8
+#define QACCEPT_REQ_REG			0xC
+
+#define QACCEPT_TIMEOUT_US		50
+
 /* QDSP6SS_RESET */
 #define Q6SS_STOP_CORE			BIT(0)
 #define Q6SS_CORE_ARES			BIT(1)
@@ -143,6 +151,9 @@ struct rproc_hexagon_res {
 	bool has_alt_reset;
 	bool has_mba_logs;
 	bool has_spare_reg;
+	bool has_qaccept_regs;
+	bool has_ext_cntl_regs;
+	bool has_vq6;
 };
 
 struct q6v5 {
@@ -158,8 +169,18 @@ struct q6v5 {
 	u32 halt_q6;
 	u32 halt_modem;
 	u32 halt_nc;
+	u32 halt_vq6;
 	u32 conn_box;
 
+	u32 qaccept_mdm;
+	u32 qaccept_cx;
+	u32 qaccept_axi;
+
+	u32 axim1_clk_off;
+	u32 crypto_clk_off;
+	u32 force_clk_on;
+	u32 rscc_disable;
+
 	struct reset_control *mss_restart;
 	struct reset_control *pdc_reset;
 
@@ -201,6 +222,9 @@ struct q6v5 {
 	bool has_alt_reset;
 	bool has_mba_logs;
 	bool has_spare_reg;
+	bool has_qaccept_regs;
+	bool has_ext_cntl_regs;
+	bool has_vq6;
 	int mpss_perm;
 	int mba_perm;
 	const char *hexagon_mdt_image;
@@ -213,6 +237,7 @@ enum {
 	MSS_MSM8996,
 	MSS_MSM8998,
 	MSS_SC7180,
+	MSS_SC7280,
 	MSS_SDM845,
 };
 
@@ -473,6 +498,12 @@ static int q6v5_reset_assert(struct q6v5 *qproc)
 		regmap_update_bits(qproc->conn_map, qproc->conn_box,
 				   AXI_GATING_VALID_OVERRIDE, 0);
 		ret = reset_control_deassert(qproc->mss_restart);
+	} else if (qproc->has_ext_cntl_regs) {
+		regmap_write(qproc->conn_map, qproc->rscc_disable, 0);
+		reset_control_assert(qproc->pdc_reset);
+		reset_control_assert(qproc->mss_restart);
+		reset_control_deassert(qproc->pdc_reset);
+		ret = reset_control_deassert(qproc->mss_restart);
 	} else {
 		ret = reset_control_assert(qproc->mss_restart);
 	}
@@ -490,7 +521,7 @@ static int q6v5_reset_deassert(struct q6v5 *qproc)
 		ret = reset_control_reset(qproc->mss_restart);
 		writel(0, qproc->rmb_base + RMB_MBA_ALT_RESET);
 		reset_control_deassert(qproc->pdc_reset);
-	} else if (qproc->has_spare_reg) {
+	} else if (qproc->has_spare_reg || qproc->has_ext_cntl_regs) {
 		ret = reset_control_reset(qproc->mss_restart);
 	} else {
 		ret = reset_control_deassert(qproc->mss_restart);
@@ -604,7 +635,7 @@ static int q6v5proc_reset(struct q6v5 *qproc)
 		}
 
 		goto pbl_wait;
-	} else if (qproc->version == MSS_SC7180) {
+	} else if (qproc->version == MSS_SC7180 || qproc->version == MSS_SC7280) {
 		val = readl(qproc->reg_base + QDSP6SS_SLEEP);
 		val |= Q6SS_CBCR_CLKEN;
 		writel(val, qproc->reg_base + QDSP6SS_SLEEP);
@@ -787,6 +818,89 @@ static int q6v5proc_reset(struct q6v5 *qproc)
 	return ret;
 }
 
+static int q6v5proc_enable_qchannel(struct q6v5 *qproc, struct regmap *map, u32 offset)
+{
+	unsigned int val;
+	int ret;
+
+	if (!qproc->has_qaccept_regs)
+		return 0;
+
+	if (qproc->has_ext_cntl_regs) {
+		regmap_write(qproc->conn_map, qproc->rscc_disable, 0);
+		regmap_write(qproc->conn_map, qproc->force_clk_on, 1);
+
+		ret = regmap_read_poll_timeout(qproc->halt_map, qproc->axim1_clk_off, val,
+					       !val, 1, Q6SS_CBCR_TIMEOUT_US);
+		if (ret) {
+			dev_err(qproc->dev, "failed to enable axim1 clock\n");
+			return -ETIMEDOUT;
+		}
+	}
+
+	regmap_write(map, offset + QACCEPT_REQ_REG, 1);
+
+	/* Wait for accept */
+	ret = regmap_read_poll_timeout(map, offset + QACCEPT_ACCEPT_REG, val, val, 5,
+				       QACCEPT_TIMEOUT_US);
+	if (ret) {
+		dev_err(qproc->dev, "qchannel enable failed\n");
+		return -ETIMEDOUT;
+	}
+
+	return 0;
+}
+
+static void q6v5proc_disable_qchannel(struct q6v5 *qproc, struct regmap *map, u32 offset)
+{
+	int ret;
+	unsigned int val, retry;
+	unsigned int nretry = 10;
+	bool takedown_complete = false;
+
+	if (!qproc->has_qaccept_regs)
+		return;
+
+	while (!takedown_complete && nretry) {
+		nretry--;
+
+		/* Wait for active transactions to complete */
+		regmap_read_poll_timeout(map, offset + QACCEPT_ACTIVE_REG, val, !val, 5,
+					 QACCEPT_TIMEOUT_US);
+
+		/* Request Q-channel transaction takedown */
+		regmap_write(map, offset + QACCEPT_REQ_REG, 0);
+
+		/*
+		 * If the request is denied, reset the Q-channel takedown request,
+		 * wait for active transactions to complete and retry takedown.
+		 */
+		retry = 10;
+		while (retry) {
+			usleep_range(5, 10);
+			retry--;
+			ret = regmap_read(map, offset + QACCEPT_DENY_REG, &val);
+			if (!ret && val) {
+				regmap_write(map, offset + QACCEPT_REQ_REG, 1);
+				break;
+			}
+
+			ret = regmap_read(map, offset + QACCEPT_ACCEPT_REG, &val);
+			if (!ret && !val) {
+				takedown_complete = true;
+				break;
+			}
+		}
+
+		if (!retry)
+			break;
+	}
+
+	/* Rely on mss_restart to clear out pending transactions on takedown failure */
+	if (!takedown_complete)
+		dev_err(qproc->dev, "qchannel takedown failed\n");
+}
+
 static void q6v5proc_halt_axi_port(struct q6v5 *qproc,
 				   struct regmap *halt_map,
 				   u32 offset)
@@ -950,6 +1064,12 @@ static int q6v5_mba_load(struct q6v5 *qproc)
 		goto assert_reset;
 	}
 
+	ret = q6v5proc_enable_qchannel(qproc, qproc->halt_map, qproc->qaccept_axi);
+	if (ret) {
+		dev_err(qproc->dev, "failed to enable axi bridge\n");
+		goto disable_active_clks;
+	}
+
 	/*
 	 * Some versions of the MBA firmware will upon boot wipe the MPSS region as well, so provide
 	 * the Q6 access to this region.
@@ -996,8 +1116,13 @@ static int q6v5_mba_load(struct q6v5 *qproc)
 
 halt_axi_ports:
 	q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_q6);
+	if (qproc->has_vq6)
+		q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_vq6);
 	q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_modem);
 	q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_nc);
+	q6v5proc_disable_qchannel(qproc, qproc->halt_map, qproc->qaccept_mdm);
+	q6v5proc_disable_qchannel(qproc, qproc->halt_map, qproc->qaccept_cx);
+	q6v5proc_disable_qchannel(qproc, qproc->halt_map, qproc->qaccept_axi);
 	mba_load_err = true;
 reclaim_mba:
 	xfermemop_ret = q6v5_xfer_mem_ownership(qproc, &qproc->mba_perm, true,
@@ -1047,6 +1172,8 @@ static void q6v5_mba_reclaim(struct q6v5 *qproc)
 	qproc->dp_size = 0;
 
 	q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_q6);
+	if (qproc->has_vq6)
+		q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_vq6);
 	q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_modem);
 	q6v5proc_halt_axi_port(qproc, qproc->halt_map, qproc->halt_nc);
 	if (qproc->version == MSS_MSM8996) {
@@ -1059,6 +1186,24 @@ static void q6v5_mba_reclaim(struct q6v5 *qproc)
 		writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG);
 	}
 
+	if (qproc->has_ext_cntl_regs) {
+		regmap_write(qproc->conn_map, qproc->rscc_disable, 1);
+
+		ret = regmap_read_poll_timeout(qproc->halt_map, qproc->axim1_clk_off, val,
+					       !val, 1, Q6SS_CBCR_TIMEOUT_US);
+		if (ret)
+			dev_err(qproc->dev, "failed to enable axim1 clock\n");
+
+		ret = regmap_read_poll_timeout(qproc->halt_map, qproc->crypto_clk_off, val,
+					       !val, 1, Q6SS_CBCR_TIMEOUT_US);
+		if (ret)
+			dev_err(qproc->dev, "failed to enable crypto clock\n");
+	}
+
+	q6v5proc_disable_qchannel(qproc, qproc->halt_map, qproc->qaccept_mdm);
+	q6v5proc_disable_qchannel(qproc, qproc->halt_map, qproc->qaccept_cx);
+	q6v5proc_disable_qchannel(qproc, qproc->halt_map, qproc->qaccept_axi);
+
 	q6v5_reset_assert(qproc);
 
 	q6v5_clk_disable(qproc->dev, qproc->reset_clks,
@@ -1471,6 +1616,7 @@ static int q6v5_init_mem(struct q6v5 *qproc, struct platform_device *pdev)
 {
 	struct of_phandle_args args;
 	struct resource *res;
+	int halt_cell_cnt = 3;
 	int ret;
 
 	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, "qdsp6");
@@ -1483,8 +1629,11 @@ static int q6v5_init_mem(struct q6v5 *qproc, struct platform_device *pdev)
 	if (IS_ERR(qproc->rmb_base))
 		return PTR_ERR(qproc->rmb_base);
 
+	if (qproc->has_vq6)
+		halt_cell_cnt++;
+
 	ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
-					       "qcom,halt-regs", 3, 0, &args);
+					       "qcom,halt-regs", halt_cell_cnt, 0, &args);
 	if (ret < 0) {
 		dev_err(&pdev->dev, "failed to parse qcom,halt-regs\n");
 		return -EINVAL;
@@ -1499,6 +1648,52 @@ static int q6v5_init_mem(struct q6v5 *qproc, struct platform_device *pdev)
 	qproc->halt_modem = args.args[1];
 	qproc->halt_nc = args.args[2];
 
+	if (qproc->has_vq6)
+		qproc->halt_vq6 = args.args[3];
+
+	if (qproc->has_qaccept_regs) {
+		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
+						       "qcom,qaccept-regs",
+						       3, 0, &args);
+		if (ret < 0) {
+			dev_err(&pdev->dev, "failed to parse qaccept-regs\n");
+			return -EINVAL;
+		}
+
+		qproc->qaccept_mdm = args.args[0];
+		qproc->qaccept_cx = args.args[1];
+		qproc->qaccept_axi = args.args[2];
+	}
+
+	if (qproc->has_ext_cntl_regs) {
+		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
+						       "qcom,ext-regs",
+						       2, 0, &args);
+		if (ret < 0) {
+			dev_err(&pdev->dev, "failed to parse ext-regs index 0\n");
+			return -EINVAL;
+		}
+
+		qproc->conn_map = syscon_node_to_regmap(args.np);
+		of_node_put(args.np);
+		if (IS_ERR(qproc->conn_map))
+			return PTR_ERR(qproc->conn_map);
+
+		qproc->force_clk_on = args.args[0];
+		qproc->rscc_disable = args.args[1];
+
+		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
+						       "qcom,ext-regs",
+						       2, 1, &args);
+		if (ret < 0) {
+			dev_err(&pdev->dev, "failed to parse ext-regs index 1\n");
+			return -EINVAL;
+		}
+
+		qproc->axim1_clk_off = args.args[0];
+		qproc->crypto_clk_off = args.args[1];
+	}
+
 	if (qproc->has_spare_reg) {
 		ret = of_parse_phandle_with_fixed_args(pdev->dev.of_node,
 						       "qcom,spare-regs",
@@ -1590,7 +1785,7 @@ static int q6v5_init_reset(struct q6v5 *qproc)
 		return PTR_ERR(qproc->mss_restart);
 	}
 
-	if (qproc->has_alt_reset || qproc->has_spare_reg) {
+	if (qproc->has_alt_reset || qproc->has_spare_reg || qproc->has_ext_cntl_regs) {
 		qproc->pdc_reset = devm_reset_control_get_exclusive(qproc->dev,
 								    "pdc_reset");
 		if (IS_ERR(qproc->pdc_reset)) {
@@ -1697,6 +1892,9 @@ static int q6v5_probe(struct platform_device *pdev)
 
 	platform_set_drvdata(pdev, qproc);
 
+	qproc->has_qaccept_regs = desc->has_qaccept_regs;
+	qproc->has_ext_cntl_regs = desc->has_ext_cntl_regs;
+	qproc->has_vq6 = desc->has_vq6;
 	qproc->has_spare_reg = desc->has_spare_reg;
 	ret = q6v5_init_mem(qproc, pdev);
 	if (ret)
@@ -1857,9 +2055,39 @@ static const struct rproc_hexagon_res sc7180_mss = {
 	.has_alt_reset = false,
 	.has_mba_logs = true,
 	.has_spare_reg = true,
+	.has_qaccept_regs = false,
+	.has_ext_cntl_regs = false,
+	.has_vq6 = false,
 	.version = MSS_SC7180,
 };
 
+static const struct rproc_hexagon_res sc7280_mss = {
+	.hexagon_mba_image = "mba.mbn",
+	.proxy_clk_names = (char*[]){
+		"xo",
+		NULL
+	},
+	.active_clk_names = (char*[]){
+		"iface",
+		"offline",
+		"snoc_axi",
+		NULL
+	},
+	.proxy_pd_names = (char*[]){
+		"cx",
+		"mss",
+		NULL
+	},
+	.need_mem_protection = true,
+	.has_alt_reset = false,
+	.has_mba_logs = true,
+	.has_spare_reg = false,
+	.has_qaccept_regs = true,
+	.has_ext_cntl_regs = true,
+	.has_vq6 = true,
+	.version = MSS_SC7280,
+};
+
 static const struct rproc_hexagon_res sdm845_mss = {
 	.hexagon_mba_image = "mba.mbn",
 	.proxy_clk_names = (char*[]){
@@ -1889,6 +2117,9 @@ static const struct rproc_hexagon_res sdm845_mss = {
 	.has_alt_reset = true,
 	.has_mba_logs = false,
 	.has_spare_reg = false,
+	.has_qaccept_regs = false,
+	.has_ext_cntl_regs = false,
+	.has_vq6 = false,
 	.version = MSS_SDM845,
 };
 
@@ -1917,6 +2148,9 @@ static const struct rproc_hexagon_res msm8998_mss = {
 	.has_alt_reset = false,
 	.has_mba_logs = false,
 	.has_spare_reg = false,
+	.has_qaccept_regs = false,
+	.has_ext_cntl_regs = false,
+	.has_vq6 = false,
 	.version = MSS_MSM8998,
 };
 
@@ -1948,6 +2182,9 @@ static const struct rproc_hexagon_res msm8996_mss = {
 	.has_alt_reset = false,
 	.has_mba_logs = false,
 	.has_spare_reg = false,
+	.has_qaccept_regs = false,
+	.has_ext_cntl_regs = false,
+	.has_vq6 = false,
 	.version = MSS_MSM8996,
 };
 
@@ -1990,6 +2227,9 @@ static const struct rproc_hexagon_res msm8916_mss = {
 	.has_alt_reset = false,
 	.has_mba_logs = false,
 	.has_spare_reg = false,
+	.has_qaccept_regs = false,
+	.has_ext_cntl_regs = false,
+	.has_vq6 = false,
 	.version = MSS_MSM8916,
 };
 
@@ -2040,6 +2280,9 @@ static const struct rproc_hexagon_res msm8974_mss = {
 	.has_alt_reset = false,
 	.has_mba_logs = false,
 	.has_spare_reg = false,
+	.has_qaccept_regs = false,
+	.has_ext_cntl_regs = false,
+	.has_vq6 = false,
 	.version = MSS_MSM8974,
 };
 
@@ -2050,6 +2293,7 @@ static const struct of_device_id q6v5_of_match[] = {
 	{ .compatible = "qcom,msm8996-mss-pil", .data = &msm8996_mss},
 	{ .compatible = "qcom,msm8998-mss-pil", .data = &msm8998_mss},
 	{ .compatible = "qcom,sc7180-mss-pil", .data = &sc7180_mss},
+	{ .compatible = "qcom,sc7280-mss-pil", .data = &sc7280_mss},
 	{ .compatible = "qcom,sdm845-mss-pil", .data = &sdm845_mss},
 	{ },
 };
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#9 lore raw

PATCH v2 6/10 arm64: dts: qcom: sc7280: Update reserved memory map

In reply to Sibi Sankar

Add missing regions to the reserved memory map.

---

v2:
* Split reserved memory updates between SoC and platform. [Matthias]

 arch/arm64/boot/dts/qcom/sc7280.dtsi | 34 ++++++++++++++++++++++++++++++++++
 1 file changed, 34 insertions(+)
arch/arm64/boot/dts/qcom/sc7280.dtsi +34 -0
index d1adf64e21e9..5ed7a511bfc9 100644
@@ -42,6 +42,16 @@
 		#size-cells = <2>;
 		ranges;
 
+		hyp_mem: memory@80000000 {
+			reg = <0x0 0x80000000 0x0 0x600000>;
+			no-map;
+		};
+
+		xbl_mem: memory@80600000 {
+			reg = <0x0 0x80600000 0x0 0x200000>;
+			no-map;
+		};
+
 		aop_mem: memory@80800000 {
 			reg = <0x0 0x80800000 0x0 0x60000>;
 			no-map;
@@ -53,6 +63,16 @@
 			no-map;
 		};
 
+		reserved_xbl_uefi_log: memory@80880000 {
+			reg = <0x0 0x80884000 0x0 0x10000>;
+			no-map;
+		};
+
+		sec_apps_mem: memory@808ff000 {
+			reg = <0x0 0x808ff000 0x0 0x1000>;
+			no-map;
+		};
+
 		smem_mem: memory@80900000 {
 			reg = <0x0 0x80900000 0x0 0x200000>;
 			no-map;
@@ -62,6 +82,20 @@
 			no-map;
 			reg = <0x0 0x80b00000 0x0 0x100000>;
 		};
+
+		wlan_fw_mem: memory@80c00000 {
+			reg = <0x0 0x80c00000 0x0 0xc00000>;
+			no-map;
+		};
+
+		rmtfs_mem: memory@9c900000 {
+			compatible = "qcom,rmtfs-mem";
+			reg = <0x0 0x9c900000 0x0 0x280000>;
+			no-map;
+
+			qcom,client-id = <1>;
+			qcom,vmid = <15>;
+		};
 	};
 
 	cpus {
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#11 lore raw

PATCH v2 7/10 arm64: dts: qcom: sc7280: Add/Delete/Update reserved memory nodes

In reply to Sibi Sankar

Add, delete and update platform specific reserved memory nodes.

---

v2:
* Split reserved memory updates between SoC and platform. [Matthias]

 arch/arm64/boot/dts/qcom/sc7280-idp.dts | 52 +++++++++++++++++++++++++++++++++
 1 file changed, 52 insertions(+)
arch/arm64/boot/dts/qcom/sc7280-idp.dts +52 -0
index 3900cfc09562..191e8a92d153 100644
@@ -30,6 +30,58 @@
 	};
 };
 
+/*
+ * Reserved memory changes
+ *
+ * Delete all unused memory nodes and define the peripheral memory regions
+ * required by the board dts.
+ *
+ */
+
+/delete-node/ &hyp_mem;
+/delete-node/ &xbl_mem;
+/delete-node/ &reserved_xbl_uefi_log;
+/delete-node/ &sec_apps_mem;
+
+/* Increase the size from 2.5MB to 8MB */
+&rmtfs_mem {
+	reg = <0x0 0x9c900000 0x0 0x800000>;
+};
+
+/ {
+	reserved-memory {
+		adsp_mem: memory@86700000 {
+			reg = <0x0 0x86700000 0x0 0x2800000>;
+			no-map;
+		};
+
+		camera_mem: memory@8ad00000 {
+			reg = <0x0 0x8ad00000 0x0 0x500000>;
+			no-map;
+		};
+
+		venus_mem: memory@8b200000 {
+			reg = <0x0 0x8b200000 0x0 0x500000>;
+			no-map;
+		};
+
+		mpss_mem: memory@8b800000 {
+			reg = <0x0 0x8b800000 0x0 0xf600000>;
+			no-map;
+		};
+
+		wpss_mem: memory@9ae00000 {
+			reg = <0x0 0x9ae00000 0x0 0x1900000>;
+			no-map;
+		};
+
+		mba_mem: memory@9c700000 {
+			reg = <0x0 0x9c700000 0x0 0x200000>;
+			no-map;
+		};
+	};
+};
+
 &apps_rsc {
 	pm7325-regulators {
 		compatible = "qcom,pm7325-rpmh-regulators";
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#13 lore raw

PATCH v2 8/10 arm64: dts: qcom: sc7280: Add nodes to boot modem

In reply to Sibi Sankar

Add miscellaneous nodes to boot the modem and support post-mortem debug on SC7280 SoCs.

---
 arch/arm64/boot/dts/qcom/sc7280.dtsi | 20 ++++++++++++++++++++
 1 file changed, 20 insertions(+)
arch/arm64/boot/dts/qcom/sc7280.dtsi +20 -0
index 5ed7a511bfc9..3fb6a6ef39f8 100644
@@ -547,6 +547,11 @@
 			#hwlock-cells = <1>;
 		};
 
+		tcsr_regs: syscon@1fc0000 {
+			compatible = "syscon";
+			reg = <0 0x01fc0000 0 0x30000>;
+		};
+
 		lpasscc: lpasscc@3000000 {
 			compatible = "qcom,sc7280-lpasscc";
 			reg = <0 0x03000000 0 0x40>,
@@ -1219,6 +1224,21 @@
 			};
 		};
 
+		imem@146aa000 {
+			compatible = "syscon", "simple-mfd";
+			reg = <0 0x146aa000 0 0x2000>;
+
+			#address-cells = <2>;
+			#size-cells = <2>;
+
+			ranges = <0 0x0 0 0x146aa000 0 0x2000>;
+
+			pil-reloc@94c {
+				compatible = "qcom,pil-reloc-info";
+				reg = <0 0x94c 0 0xc8>;
+			};
+		};
+
 		apps_smmu: iommu@15000000 {
 			compatible = "qcom,sc7280-smmu-500", "arm,mmu-500";
 			reg = <0 0x15000000 0 0x100000>;
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#14 lore raw

Re: [PATCH v2 08/10] arm64: dts: qcom: sc7280: Add nodes to boot modem

Quoting Sibi Sankar (2021-07-20 03:12:58)

arch/arm64/boot/dts/qcom/sc7280.dtsi line 1227

Quoted 9 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +1 -0
index 5ed7a511bfc9..3fb6a6ef39f8 100644
@@ -1219,6 +1224,21 @@
                        };
                };
 
+               imem@146aa000 {

is sram a more appropriate node name here? Is imem a generic node name in DT spec?

Quoted 14 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +14 -0
+                       compatible = "syscon", "simple-mfd";
+                       reg = <0 0x146aa000 0 0x2000>;
+
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+
+                       ranges = <0 0x0 0 0x146aa000 0 0x2000>;
+
+                       pil-reloc@94c {
+                               compatible = "qcom,pil-reloc-info";
+                               reg = <0 0x94c 0 0xc8>;
+                       };
+               };
+
#15 lore raw

Re: [PATCH v2 08/10] arm64: dts: qcom: sc7280: Add nodes to boot modem

Quoted 9 lines · Stephen Boyd

Quoting Sibi Sankar (2021-07-20 03:12:58)

Quoted 8 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +0 -0
index 5ed7a511bfc9..3fb6a6ef39f8 100644
@@ -1219,6 +1224,21 @@
                        };
                };
 
Quoted 4 lines

arch/arm64/boot/dts/qcom/sc7280.dtsi line 1227

Quoted 1 line
arch/arm64/boot/dts/qcom/sc7280.dtsi +1 -0
+               imem@146aa000 {

is sram a more appropriate node name here? Is imem a generic node name in DT spec?

binding check for qcom,pil-info.yaml
didn't complain so I just followed
it. AFAICS, sram isn't mentioned in
generic node names either.

Quoted 15 lines
Quoted 15 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +14 -0
+                       compatible = "syscon", "simple-mfd";
+                       reg = <0 0x146aa000 0 0x2000>;
+
+                       #address-cells = <2>;
+                       #size-cells = <2>;
+
+                       ranges = <0 0x0 0 0x146aa000 0 0x2000>;
+
+                       pil-reloc@94c {
+                               compatible = "qcom,pil-reloc-info";
+                               reg = <0 0x94c 0 0xc8>;
+                       };
+               };
+
Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project.
#16 lore raw

PATCH v2 9/10 arm64: dts: qcom: sc7280: Add Q6V5 MSS node

In reply to Sibi Sankar

This patch adds Q6V5 MSS PAS remoteproc node for SC7280 SoCs.

---
 arch/arm64/boot/dts/qcom/sc7280.dtsi | 40 ++++++++++++++++++++++++++++++++++++
 1 file changed, 40 insertions(+)
arch/arm64/boot/dts/qcom/sc7280.dtsi +40 -0
index 3fb6a6ef39f8..56ea172f641f 100644
@@ -584,6 +584,46 @@
 			#power-domain-cells = <1>;
 		};
 
+		remoteproc_mpss: remoteproc@4080000 {
+			compatible = "qcom,sc7280-mpss-pas";
+			reg = <0 0x04080000 0 0x10000>;
+
+			interrupts-extended = <&intc GIC_SPI 264 IRQ_TYPE_EDGE_RISING>,
+					      <&modem_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
+					      <&modem_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
+					      <&modem_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
+					      <&modem_smp2p_in 3 IRQ_TYPE_EDGE_RISING>,
+					      <&modem_smp2p_in 7 IRQ_TYPE_EDGE_RISING>;
+			interrupt-names = "wdog", "fatal", "ready", "handover",
+					  "stop-ack", "shutdown-ack";
+
+			clocks = <&rpmhcc RPMH_CXO_CLK>;
+			clock-names = "xo";
+
+			power-domains = <&rpmhpd SC7280_CX>,
+					<&rpmhpd SC7280_MSS>;
+			power-domain-names = "cx", "mss";
+
+			memory-region = <&mpss_mem>;
+
+			qcom,qmp = <&aoss_qmp>;
+
+			qcom,smem-states = <&modem_smp2p_out 0>;
+			qcom,smem-state-names = "stop";
+
+			status = "disabled";
+
+			glink-edge {
+				interrupts-extended = <&ipcc IPCC_CLIENT_MPSS
+							     IPCC_MPROC_SIGNAL_GLINK_QMP
+							     IRQ_TYPE_EDGE_RISING>;
+				mboxes = <&ipcc IPCC_CLIENT_MPSS
+						IPCC_MPROC_SIGNAL_GLINK_QMP>;
+				label = "modem";
+				qcom,remote-pid = <1>;
+			};
+		};
+
 		stm@6002000 {
 			compatible = "arm,coresight-stm", "arm,primecell";
 			reg = <0 0x06002000 0 0x1000>,
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#18 lore raw

PATCH v2 10/10 arm64: dts: qcom: sc7280: Update Q6V5 MSS node

In reply to Sibi Sankar

Update MSS node to support MSA based modem boot on SC7280 SoCs.

---
 arch/arm64/boot/dts/qcom/sc7280-idp.dts |  7 +++++++
 arch/arm64/boot/dts/qcom/sc7280.dtsi    | 19 ++++++++++++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)
arch/arm64/boot/dts/qcom/sc7280-idp.dts +7 -0
index 191e8a92d153..d66e3ca42ad5 100644
@@ -343,3 +343,10 @@
 		bias-pull-up;
 	};
 };
+
+&remoteproc_mpss {
+	status = "okay";
+	compatible = "qcom,sc7280-mss-pil";
+	iommus = <&apps_smmu 0x124 0x0>, <&apps_smmu 0x488 0x7>;
+	memory-region = <&mba_mem &mpss_mem>;
+};
arch/arm64/boot/dts/qcom/sc7280.dtsi +16 -3
index 56ea172f641f..6d3687744440 100644
@@ -586,7 +586,8 @@
 
 		remoteproc_mpss: remoteproc@4080000 {
 			compatible = "qcom,sc7280-mpss-pas";
-			reg = <0 0x04080000 0 0x10000>;
+			reg = <0 0x04080000 0 0x10000>, <0 0x04180000 0 0x48>;
+			reg-names = "qdsp6", "rmb";
 
 			interrupts-extended = <&intc GIC_SPI 264 IRQ_TYPE_EDGE_RISING>,
 					      <&modem_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
@@ -597,8 +598,11 @@
 			interrupt-names = "wdog", "fatal", "ready", "handover",
 					  "stop-ack", "shutdown-ack";
 
-			clocks = <&rpmhcc RPMH_CXO_CLK>;
-			clock-names = "xo";
+			clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
+				 <&gcc GCC_MSS_OFFLINE_AXI_CLK>,
+				 <&gcc GCC_MSS_SNOC_AXI_CLK>,
+				 <&rpmhcc RPMH_CXO_CLK>;
+			clock-names = "iface", "offline", "snoc_axi", "xo";
 
 			power-domains = <&rpmhpd SC7280_CX>,
 					<&rpmhpd SC7280_MSS>;
@@ -611,6 +615,15 @@
 			qcom,smem-states = <&modem_smp2p_out 0>;
 			qcom,smem-state-names = "stop";
 
+			resets = <&aoss_reset AOSS_CC_MSS_RESTART>,
+				 <&pdc_reset PDC_MODEM_SYNC_RESET>;
+			reset-names = "mss_restart", "pdc_reset";
+
+			qcom,halt-regs = <&tcsr_mutex 0x23000 0x25000 0x28000 0x33000>;
+			qcom,ext-regs = <&tcsr_regs 0x10000 0x10004
+					 &tcsr_mutex 0x26004 0x26008>;
+			qcom,qaccept-regs = <&tcsr_mutex 0x23030 0x23040 0x23020>;
+
 			status = "disabled";
 
 			glink-edge {
Signature · 2 lines
The Qualcomm Innovation Center, Inc. is a member of the Code Aurora Forum,
a Linux Foundation Collaborative Project
#19 lore raw

Re: [PATCH v2 10/10] arm64: dts: qcom: sc7280: Update Q6V5 MSS node

Quoting Sibi Sankar (2021-07-20 03:13:00)

Quoted 13 lines

Update MSS node to support MSA based modem boot on SC7280 SoCs.

---
 arch/arm64/boot/dts/qcom/sc7280-idp.dts |  7 +++++++
 arch/arm64/boot/dts/qcom/sc7280.dtsi    | 19 ++++++++++++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)
arch/arm64/boot/dts/qcom/sc7280-idp.dts +0 -0
index 191e8a92d153..d66e3ca42ad5 100644

arch/arm64/boot/dts/qcom/sc7280-idp.dts line 352

Quoted 10 lines
arch/arm64/boot/dts/qcom/sc7280-idp.dts +7 -0
@@ -343,3 +343,10 @@
                bias-pull-up;
        };
 };
+
+&remoteproc_mpss {
+       status = "okay";
+       compatible = "qcom,sc7280-mss-pil";
+       iommus = <&apps_smmu 0x124 0x0>, <&apps_smmu 0x488 0x7>;
+       memory-region = <&mba_mem &mpss_mem>;
+};

Can this go above the pinctrl zone in this file? Preferably sorted alphabetically by phandle.

Quoted 34 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +9 -3
index 56ea172f641f..6d3687744440 100644
@@ -586,7 +586,8 @@
 
                remoteproc_mpss: remoteproc@4080000 {
                        compatible = "qcom,sc7280-mpss-pas";
-                       reg = <0 0x04080000 0 0x10000>;
+                       reg = <0 0x04080000 0 0x10000>, <0 0x04180000 0 0x48>;
+                       reg-names = "qdsp6", "rmb";
 
                        interrupts-extended = <&intc GIC_SPI 264 IRQ_TYPE_EDGE_RISING>,
                                              <&modem_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
@@ -597,8 +598,11 @@
                        interrupt-names = "wdog", "fatal", "ready", "handover",
                                          "stop-ack", "shutdown-ack";
 
-                       clocks = <&rpmhcc RPMH_CXO_CLK>;
-                       clock-names = "xo";
+                       clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
+                                <&gcc GCC_MSS_OFFLINE_AXI_CLK>,
+                                <&gcc GCC_MSS_SNOC_AXI_CLK>,
+                                <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "iface", "offline", "snoc_axi", "xo";
 
                        power-domains = <&rpmhpd SC7280_CX>,
                                        <&rpmhpd SC7280_MSS>;
@@ -611,6 +615,15 @@
                        qcom,smem-states = <&modem_smp2p_out 0>;
                        qcom,smem-state-names = "stop";
 
+                       resets = <&aoss_reset AOSS_CC_MSS_RESTART>,
+                                <&pdc_reset PDC_MODEM_SYNC_RESET>;

arch/arm64/boot/dts/qcom/sc7280.dtsi line 629

Quoted 10 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +7 -0
+                       reset-names = "mss_restart", "pdc_reset";
+
+                       qcom,halt-regs = <&tcsr_mutex 0x23000 0x25000 0x28000 0x33000>;
+                       qcom,ext-regs = <&tcsr_regs 0x10000 0x10004
+                                        &tcsr_mutex 0x26004 0x26008>;
+                       qcom,qaccept-regs = <&tcsr_mutex 0x23030 0x23040 0x23020>;
+
                        status = "disabled";
 
                        glink-edge {

Any reason to not combine this stuff with the previous patch?

#20 lore raw

Re: [PATCH v2 10/10] arm64: dts: qcom: sc7280: Update Q6V5 MSS node

Quoted 19 lines · Stephen Boyd

Quoting Sibi Sankar (2021-07-20 03:13:00)

Quoted 18 lines

Update MSS node to support MSA based modem boot on SC7280 SoCs.

---
 arch/arm64/boot/dts/qcom/sc7280-idp.dts |  7 +++++++
 arch/arm64/boot/dts/qcom/sc7280.dtsi    | 19 ++++++++++++++++---
 2 files changed, 23 insertions(+), 3 deletions(-)
arch/arm64/boot/dts/qcom/sc7280-idp.dts +2 -0
index 191e8a92d153..d66e3ca42ad5 100644
@@ -343,3 +343,10 @@
                bias-pull-up;
        };
 };
+
+&remoteproc_mpss {
Quoted 8 lines

arch/arm64/boot/dts/qcom/sc7280-idp.dts line 352

Quoted 5 lines
arch/arm64/boot/dts/qcom/sc7280-idp.dts +5 -0
+       status = "okay";
+       compatible = "qcom,sc7280-mss-pil";
+       iommus = <&apps_smmu 0x124 0x0>, <&apps_smmu 0x488 0x7>;
+       memory-region = <&mba_mem &mpss_mem>;
+};

Can this go above the pinctrl zone in this file? Preferably sorted alphabetically by phandle.

Sure, looks like I just added
it based on sort order. Didn't
notice that it fell below the
pinctrl zone.

Quoted 51 lines
Quoted 51 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +2 -1
index 56ea172f641f..6d3687744440 100644
@@ -586,7 +586,8 @@
 
                remoteproc_mpss: remoteproc@4080000 {
                        compatible = "qcom,sc7280-mpss-pas";
-                       reg = <0 0x04080000 0 0x10000>;
+                       reg = <0 0x04080000 0 0x10000>, <0 0x04180000 
 0 0x48>;
+                       reg-names = "qdsp6", "rmb";
 
                        interrupts-extended = <&intc GIC_SPI 264 

IRQ_TYPE_EDGE_RISING>,

                                              <&modem_smp2p_in 0 

IRQ_TYPE_EDGE_RISING>,

arch/arm64/boot/dts/qcom/sc7280.dtsi +5 -2
@@ -597,8 +598,11 @@
                        interrupt-names = "wdog", "fatal", "ready", 
 "handover",
                                          "stop-ack", "shutdown-ack";
 
-                       clocks = <&rpmhcc RPMH_CXO_CLK>;
-                       clock-names = "xo";
+                       clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
+                                <&gcc GCC_MSS_OFFLINE_AXI_CLK>,
+                                <&gcc GCC_MSS_SNOC_AXI_CLK>,
+                                <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "iface", "offline", "snoc_axi", 
 "xo";
 
                        power-domains = <&rpmhpd SC7280_CX>,
                                        <&rpmhpd SC7280_MSS>;
arch/arm64/boot/dts/qcom/sc7280.dtsi +9 -0
@@ -611,6 +615,15 @@
                        qcom,smem-states = <&modem_smp2p_out 0>;
                        qcom,smem-state-names = "stop";
 
+                       resets = <&aoss_reset AOSS_CC_MSS_RESTART>,
+                                <&pdc_reset PDC_MODEM_SYNC_RESET>;
+                       reset-names = "mss_restart", "pdc_reset";
+
+                       qcom,halt-regs = <&tcsr_mutex 0x23000 0x25000 
 0x28000 0x33000>;
+                       qcom,ext-regs = <&tcsr_regs 0x10000 0x10004
+                                        &tcsr_mutex 0x26004 0x26008>;
+                       qcom,qaccept-regs = <&tcsr_mutex 0x23030 
 0x23040 0x23020>;
+
                        status = "disabled";
Quoted 3 lines
Quoted 1 line
                        glink-edge {

Any reason to not combine this stuff with the previous patch?

I split it into two separate
patches just to show that sc7280
supports two ways of bringing
modem out of reset and method
used is determined by the platform.

Quoted 5 lines

_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project.
#21 lore raw

Re: [PATCH v2 10/10] arm64: dts: qcom: sc7280: Update Q6V5 MSS node

Quoting Sibi Sankar (2021-07-21 10:16:14)

Quoted 58 lines · Stephen Boyd
Quoted 53 lines

Quoting Sibi Sankar (2021-07-20 03:13:00)

Quoted 51 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +2 -1
index 56ea172f641f..6d3687744440 100644
@@ -586,7 +586,8 @@
 
                remoteproc_mpss: remoteproc@4080000 {
                        compatible = "qcom,sc7280-mpss-pas";
-                       reg = <0 0x04080000 0 0x10000>;
+                       reg = <0 0x04080000 0 0x10000>, <0 0x04180000
 0 0x48>;
+                       reg-names = "qdsp6", "rmb";
 
                        interrupts-extended = <&intc GIC_SPI 264

IRQ_TYPE_EDGE_RISING>,

                                              <&modem_smp2p_in 0

IRQ_TYPE_EDGE_RISING>,

arch/arm64/boot/dts/qcom/sc7280.dtsi +5 -2
@@ -597,8 +598,11 @@
                        interrupt-names = "wdog", "fatal", "ready",
 "handover",
                                          "stop-ack", "shutdown-ack";
 
-                       clocks = <&rpmhcc RPMH_CXO_CLK>;
-                       clock-names = "xo";
+                       clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
+                                <&gcc GCC_MSS_OFFLINE_AXI_CLK>,
+                                <&gcc GCC_MSS_SNOC_AXI_CLK>,
+                                <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "iface", "offline", "snoc_axi",
 "xo";
 
                        power-domains = <&rpmhpd SC7280_CX>,
                                        <&rpmhpd SC7280_MSS>;
arch/arm64/boot/dts/qcom/sc7280.dtsi +9 -0
@@ -611,6 +615,15 @@
                        qcom,smem-states = <&modem_smp2p_out 0>;
                        qcom,smem-state-names = "stop";
 
+                       resets = <&aoss_reset AOSS_CC_MSS_RESTART>,
+                                <&pdc_reset PDC_MODEM_SYNC_RESET>;
+                       reset-names = "mss_restart", "pdc_reset";
+
+                       qcom,halt-regs = <&tcsr_mutex 0x23000 0x25000
 0x28000 0x33000>;
+                       qcom,ext-regs = <&tcsr_regs 0x10000 0x10004
+                                        &tcsr_mutex 0x26004 0x26008>;
+                       qcom,qaccept-regs = <&tcsr_mutex 0x23030
 0x23040 0x23020>;
+
                        status = "disabled";
Quoted 3 lines
Quoted 1 line
                        glink-edge {

Any reason to not combine this stuff with the previous patch?

Quoted 6 lines

I split it into two separate patches just to show that sc7280 supports two ways of bringing modem out of reset and method used is determined by the platform.

Ok. But if there are two methods do they work with the same node in sc7280.dtsi? Because I was expecting to see the node introduced in the SoC dtsi file in the final form instead of the half form and then be amended in this patch.

#22 lore raw

Re: [PATCH v2 10/10] arm64: dts: qcom: sc7280: Update Q6V5 MSS node

Quoted 66 lines · Stephen Boyd

Quoting Sibi Sankar (2021-07-21 10:16:14)

Quoted 58 lines · Stephen Boyd
Quoted 53 lines

Quoting Sibi Sankar (2021-07-20 03:13:00)

Quoted 51 lines
arch/arm64/boot/dts/qcom/sc7280.dtsi +2 -1
index 56ea172f641f..6d3687744440 100644
@@ -586,7 +586,8 @@
 
                remoteproc_mpss: remoteproc@4080000 {
                        compatible = "qcom,sc7280-mpss-pas";
-                       reg = <0 0x04080000 0 0x10000>;
+                       reg = <0 0x04080000 0 0x10000>, <0 0x04180000
 0 0x48>;
+                       reg-names = "qdsp6", "rmb";
 
                        interrupts-extended = <&intc GIC_SPI 264

IRQ_TYPE_EDGE_RISING>,

                                              <&modem_smp2p_in 0

IRQ_TYPE_EDGE_RISING>,

arch/arm64/boot/dts/qcom/sc7280.dtsi +5 -2
@@ -597,8 +598,11 @@
                        interrupt-names = "wdog", "fatal", "ready",
 "handover",
                                          "stop-ack", "shutdown-ack";
 
-                       clocks = <&rpmhcc RPMH_CXO_CLK>;
-                       clock-names = "xo";
+                       clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
+                                <&gcc GCC_MSS_OFFLINE_AXI_CLK>,
+                                <&gcc GCC_MSS_SNOC_AXI_CLK>,
+                                <&rpmhcc RPMH_CXO_CLK>;
+                       clock-names = "iface", "offline", "snoc_axi",
 "xo";
 
                        power-domains = <&rpmhpd SC7280_CX>,
                                        <&rpmhpd SC7280_MSS>;
arch/arm64/boot/dts/qcom/sc7280.dtsi +9 -0
@@ -611,6 +615,15 @@
                        qcom,smem-states = <&modem_smp2p_out 0>;
                        qcom,smem-state-names = "stop";
 
+                       resets = <&aoss_reset AOSS_CC_MSS_RESTART>,
+                                <&pdc_reset PDC_MODEM_SYNC_RESET>;
+                       reset-names = "mss_restart", "pdc_reset";
+
+                       qcom,halt-regs = <&tcsr_mutex 0x23000 0x25000
 0x28000 0x33000>;
+                       qcom,ext-regs = <&tcsr_regs 0x10000 0x10004
+                                        &tcsr_mutex 0x26004 0x26008>;
+                       qcom,qaccept-regs = <&tcsr_mutex 0x23030
 0x23040 0x23020>;
+
                        status = "disabled";
Quoted 3 lines
Quoted 1 line
                        glink-edge {

Any reason to not combine this stuff with the previous patch?

Quoted 6 lines

I split it into two separate patches just to show that sc7280 supports two ways of bringing modem out of reset and method used is determined by the platform.

Quoted 4 lines

Ok. But if there are two methods do they work with the same node in sc7280.dtsi? Because I was expecting to see the node introduced in the SoC dtsi file in the final form instead of the half form and then be amended in this patch.

Board files enables the mss node and overloads the compatible depending on the platform it is expected to run on. So pretty much the same node with just changing the compatible and few additional properties support both methods. Patch 9 is complete in itself i.e. it is compliant with the pas yaml, while patch 10 adds the bits required to make alternate method work.

Signature · 2 lines
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project.