mbox series

[0/9] Add support for remoteprocs on the MSM8953 platform

Message ID 20220511161602.117772-1-sireeshkodali1@gmail.com
Headers show
Series Add support for remoteprocs on the MSM8953 platform | expand

Message

Sireesh Kodali May 11, 2022, 4:15 p.m. UTC
Hi,

This patch series adds support for the audio DSP (q6v5_pas), modem
(q6v5_mss), and WiFi (wcnss-pil) subsystems found on the MSM8953
platform. Device tree bindings for MSS and WCNSS have been converted to
YAML. The relevant nodes have also been added to the MSM8953
device tree.

Sireesh Kodali (8):
  remoteproc: qcom: pas: Add MSM8953 ADSP PIL support
  remoteproc: qcom: q6v5-mss: Add modem support on MSM8953
  dt-bindings: remoteproc: qcom: wcnss: Convert to YAML
  dt-bindings: remoteproc: qcom: wcnss: Add compatible for pronto v3
  dt-bindings: remoteproc: qcom: mss: Convert bindings to YAML
  dt-bindings: remoteproc: qcom: mss: Add MSS on MSM8953
  dt-bindings: remoteproc: qcom: adsp: Add ADSP on MSM8953
  arm64: dts: qcom: msm8953: Add remote processor nodes

Vladimir Lypak (1):
  remoteproc: qcom: qcom_wcnss: Add support for pronto-v3

 .../bindings/remoteproc/qcom,adsp.yaml        |   5 +
 .../bindings/remoteproc/qcom,q6v5.txt         | 302 --------
 .../bindings/remoteproc/qcom,q6v5.yaml        | 727 ++++++++++++++++++
 .../bindings/remoteproc/qcom,wcnss-pil.txt    | 177 -----
 .../bindings/remoteproc/qcom,wcnss-pil.yaml   | 230 ++++++
 arch/arm64/boot/dts/qcom/msm8953.dtsi         | 378 +++++++++
 drivers/remoteproc/qcom_q6v5_mss.c            |  64 +-
 drivers/remoteproc/qcom_q6v5_pas.c            |  31 +
 drivers/remoteproc/qcom_wcnss.c               |  13 +
 9 files changed, 1442 insertions(+), 485 deletions(-)
 delete mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,q6v5.txt
 create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,q6v5.yaml
 delete mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,wcnss-pil.txt
 create mode 100644 Documentation/devicetree/bindings/remoteproc/qcom,wcnss-pil.yaml

Comments

Dmitry Baryshkov May 11, 2022, 4:49 p.m. UTC | #1
On 11/05/2022 19:15, Sireesh Kodali wrote:
> Add support for the Audio DSP PIL found on the Qualcomm MSM8953
> platform. The same configuration is used on all SoCs based on the
> MSM8953 platform (SDM450, SDA450, SDM625, SDM632, APQ8053).
> 
> Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> ---
>   drivers/remoteproc/qcom_q6v5_pas.c | 31 ++++++++++++++++++++++++++++++
>   1 file changed, 31 insertions(+)
> 
> diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
> index 1ae47cc153e5..4dcb714a1468 100644
> --- a/drivers/remoteproc/qcom_q6v5_pas.c
> +++ b/drivers/remoteproc/qcom_q6v5_pas.c
> @@ -617,7 +617,37 @@ static const struct adsp_data sm8350_adsp_resource = {
>   	.ssctl_id = 0x14,
>   };
>   
> +static const struct adsp_data msm8953_adsp_resource = {
> +	.crash_reason_smem = 423,
> +	.firmware_name = "adsp.mdt",
> +	.pas_id = 1,
> +	.has_aggre2_clk = false,
> +	.auto_boot = true,
> +	.proxy_pd_names = (char*[]){
> +		"cx",
> +		NULL,
> +	},
> +	.ssr_name = "lpass",
> +	.sysmon_name = "adsp",
> +	.ssctl_id = 0x14,
> +};
> +
>   static const struct adsp_data msm8996_adsp_resource = {
> +	.crash_reason_smem = 423,
> +	.firmware_name = "adsp.mdt",
> +	.pas_id = 1,
> +	.has_aggre2_clk = false,
> +	.auto_boot = true,
> +	.proxy_pd_names = (char*[]){
> +		"cx",
> +		NULL,
> +	},
> +	.ssr_name = "lpass",
> +	.sysmon_name = "adsp",
> +	.ssctl_id = 0x14,
> +};
> +
> +static const struct adsp_data msm8998_adsp_resource = {

This was dropped in 9ae45035ba2be4117edb8fd3952c3c5b84a0b820. Please 
take care when rebasing your patches.

>   		.crash_reason_smem = 423,
>   		.firmware_name = "adsp.mdt",
>   		.pas_id = 1,
> @@ -850,6 +880,7 @@ static const struct adsp_data sdx55_mpss_resource = {
>   static const struct of_device_id adsp_of_match[] = {
>   	{ .compatible = "qcom,msm8974-adsp-pil", .data = &adsp_resource_init},
>   	{ .compatible = "qcom,msm8996-adsp-pil", .data = &msm8996_adsp_resource},
> +	{ .compatible = "qcom,msm8953-adsp-pil", .data = &msm8953_adsp_resource},
>   	{ .compatible = "qcom,msm8996-slpi-pil", .data = &slpi_resource_init},
>   	{ .compatible = "qcom,msm8998-adsp-pas", .data = &msm8996_adsp_resource},
>   	{ .compatible = "qcom,msm8998-slpi-pas", .data = &slpi_resource_init},
Dmitry Baryshkov May 11, 2022, 4:51 p.m. UTC | #2
On 11/05/2022 19:15, Sireesh Kodali wrote:
> Add support for the Audio DSP PIL found on the Qualcomm MSM8953
> platform. The same configuration is used on all SoCs based on the
> MSM8953 platform (SDM450, SDA450, SDM625, SDM632, APQ8053).
> 
> Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> ---
>   drivers/remoteproc/qcom_q6v5_pas.c | 31 ++++++++++++++++++++++++++++++
>   1 file changed, 31 insertions(+)
> 
> diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
> index 1ae47cc153e5..4dcb714a1468 100644
> --- a/drivers/remoteproc/qcom_q6v5_pas.c
> +++ b/drivers/remoteproc/qcom_q6v5_pas.c
> @@ -617,7 +617,37 @@ static const struct adsp_data sm8350_adsp_resource = {
>   	.ssctl_id = 0x14,
>   };
>   
> +static const struct adsp_data msm8953_adsp_resource = {
> +	.crash_reason_smem = 423,
> +	.firmware_name = "adsp.mdt",
> +	.pas_id = 1,
> +	.has_aggre2_clk = false,
> +	.auto_boot = true,
> +	.proxy_pd_names = (char*[]){
> +		"cx",
> +		NULL,
> +	},
> +	.ssr_name = "lpass",
> +	.sysmon_name = "adsp",
> +	.ssctl_id = 0x14,
> +};
> +

Also it looks like this item is identical to msm8996_adsp_resources. So 
you can existing structure instead.

>   static const struct adsp_data msm8996_adsp_resource = {
> +	.crash_reason_smem = 423,
> +	.firmware_name = "adsp.mdt",
> +	.pas_id = 1,
> +	.has_aggre2_clk = false,
> +	.auto_boot = true,
> +	.proxy_pd_names = (char*[]){
> +		"cx",
> +		NULL,
> +	},
> +	.ssr_name = "lpass",
> +	.sysmon_name = "adsp",
> +	.ssctl_id = 0x14,
> +};
> +
> +static const struct adsp_data msm8998_adsp_resource = {
>   		.crash_reason_smem = 423,
>   		.firmware_name = "adsp.mdt",
>   		.pas_id = 1,
> @@ -850,6 +880,7 @@ static const struct adsp_data sdx55_mpss_resource = {
>   static const struct of_device_id adsp_of_match[] = {
>   	{ .compatible = "qcom,msm8974-adsp-pil", .data = &adsp_resource_init},
>   	{ .compatible = "qcom,msm8996-adsp-pil", .data = &msm8996_adsp_resource},
> +	{ .compatible = "qcom,msm8953-adsp-pil", .data = &msm8953_adsp_resource},
>   	{ .compatible = "qcom,msm8996-slpi-pil", .data = &slpi_resource_init},
>   	{ .compatible = "qcom,msm8998-adsp-pas", .data = &msm8996_adsp_resource},
>   	{ .compatible = "qcom,msm8998-slpi-pas", .data = &slpi_resource_init},
Dmitry Baryshkov May 11, 2022, 4:54 p.m. UTC | #3
On 11/05/2022 19:15, Sireesh Kodali wrote:
> The modem on the MSM8953 platform is similar to the modem on the MSM8996
> platform in terms of set up. It differs primarily in the way it needs SCM
> to bless the MPSS firmware region.
> 
> Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> ---
>   drivers/remoteproc/qcom_q6v5_mss.c | 64 +++++++++++++++++++++++++++---
>   1 file changed, 58 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
> index af217de75e4d..a73fdcddeda4 100644
> --- a/drivers/remoteproc/qcom_q6v5_mss.c
> +++ b/drivers/remoteproc/qcom_q6v5_mss.c
> @@ -234,6 +234,7 @@ struct q6v5 {
>   
>   enum {
>   	MSS_MSM8916,
> +	MSS_MSM8953,
>   	MSS_MSM8974,
>   	MSS_MSM8996,
>   	MSS_MSM8998,
> @@ -687,12 +688,14 @@ static int q6v5proc_reset(struct q6v5 *qproc)
>   		}
>   		goto pbl_wait;
>   	} else if (qproc->version == MSS_MSM8996 ||
> -		   qproc->version == MSS_MSM8998) {
> +		   qproc->version == MSS_MSM8998 ||
> +		   qproc->version == MSS_MSM8953) {
>   		int mem_pwr_ctl;
>   
>   		/* Override the ACC value if required */
> -		writel(QDSP6SS_ACC_OVERRIDE_VAL,
> -		       qproc->reg_base + QDSP6SS_STRAP_ACC);
> +		if (qproc->version != MSS_MSM8953)
> +			writel(QDSP6SS_ACC_OVERRIDE_VAL,
> +					qproc->reg_base + QDSP6SS_STRAP_ACC);
>   
>   		/* Assert resets, stop core */
>   		val = readl(qproc->reg_base + QDSP6SS_RESET_REG);
> @@ -734,7 +737,8 @@ static int q6v5proc_reset(struct q6v5 *qproc)
>   		writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG);
>   
>   		/* Turn on L1, L2, ETB and JU memories 1 at a time */
> -		if (qproc->version == MSS_MSM8996) {
> +		if (qproc->version == MSS_MSM8996 ||
> +			qproc->version == MSS_MSM8953) {
>   			mem_pwr_ctl = QDSP6SS_MEM_PWR_CTL;
>   			i = 19;
>   		} else {
> @@ -1314,7 +1318,16 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
>   			max_addr = ALIGN(phdr->p_paddr + phdr->p_memsz, SZ_4K);
>   	}
>   
> -	/*
> +	if (qproc->version == MSS_MSM8953) {
> +		ret = qcom_scm_pas_mem_setup(5, qproc->mpss_phys, qproc->mpss_size);
> +		if (ret) {
> +			dev_err(qproc->dev,
> +					"setting up mpss memory failed: %d\n", ret);
> +			goto release_firmware;
> +		}
> +	}
> +
> +	/**

Single star please

>   	 * In case of a modem subsystem restart on secure devices, the modem
>   	 * memory can be reclaimed only after MBA is loaded.
>   	 */
> @@ -1413,7 +1426,6 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
>   			writel(RMB_CMD_LOAD_READY, qproc->rmb_base + RMB_MBA_COMMAND_REG);
>   		}
>   		writel(size, qproc->rmb_base + RMB_PMI_CODE_LENGTH_REG);
> -
>   		ret = readl(qproc->rmb_base + RMB_MBA_STATUS_REG);
>   		if (ret < 0) {
>   			dev_err(qproc->dev, "MPSS authentication failed: %d\n",
> @@ -1422,6 +1434,7 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
>   		}
>   	}
>   
> +

Unnecessary


>   	/* Transfer ownership of modem ddr region to q6 */
>   	ret = q6v5_xfer_mem_ownership(qproc, &qproc->mpss_perm, false, true,
>   				      qproc->mpss_phys, qproc->mpss_size);
> @@ -2198,6 +2211,44 @@ static const struct rproc_hexagon_res msm8996_mss = {
>   	.version = MSS_MSM8996,
>   };
>   
> +static const struct rproc_hexagon_res msm8953_mss = {
> +	.hexagon_mba_image = "mba.mbn",
> +	.proxy_supply = (struct qcom_mss_reg_res[]) {
> +		{
> +			.supply = "pll",
> +			.uA = 100000,
> +		},
> +		{}
> +	},
> +	.proxy_pd_names = (char*[]) {
> +			"cx",
> +			"mx",
> +			NULL
> +	},
> +	.active_supply = (struct qcom_mss_reg_res[]) {
> +		{
> +			.supply = "mss",
> +			.uV = 1050000,
> +			.uA = 100000,
> +		},
> +		{}
> +	},
> +	.proxy_clk_names = (char*[]){
> +			"xo",
> +			NULL
> +	},
> +	.active_clk_names = (char*[]){
> +			"iface",
> +			"bus",
> +			"mem",
> +			NULL
> +	},
> +	.need_mem_protection = false,
> +	.has_alt_reset = false,
> +	.has_spare_reg = false,


Please follow the custom  and define the rest of fields here.

> +	.version = MSS_MSM8953,
> +};
> +
>   static const struct rproc_hexagon_res msm8916_mss = {
>   	.hexagon_mba_image = "mba.mbn",
>   	.proxy_supply = (struct qcom_mss_reg_res[]) {
> @@ -2301,6 +2352,7 @@ static const struct of_device_id q6v5_of_match[] = {
>   	{ .compatible = "qcom,msm8916-mss-pil", .data = &msm8916_mss},
>   	{ .compatible = "qcom,msm8974-mss-pil", .data = &msm8974_mss},
>   	{ .compatible = "qcom,msm8996-mss-pil", .data = &msm8996_mss},
> +	{ .compatible = "qcom,msm8953-mss-pil", .data = &msm8953_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},
Krzysztof Kozlowski May 11, 2022, 5:55 p.m. UTC | #4
On 11/05/2022 18:16, Sireesh Kodali wrote:
> This commit adds the modem (q6v5_mss), WiFi (wcnss-pil) and audio DSP
> (q6v5_pas) remote processor nodes for the MSM8953 platform. It also adds
> the coresponding SMP2P, SMSM and pinctrl nodes that are needed by these
> remote processors.
> 
> Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> +			};
> +
> +			wcnss_sleep: wcnss-sleep-pins {
> +				wcss_wlan2 {

No underscores in node names, unless something needs it?

> +					pins = "gpio76";
> +					function = "wcss_wlan2";
> +				};
> +				wcss_wlan1 {
> +					pins = "gpio77";
> +					function = "wcss_wlan1";
> +				};
> +				wcss_wlan0 {
> +					pins = "gpio78";
> +					function = "wcss_wlan0";
> +				};
> +				wcss_wlan {
> +					pins = "gpio79", "gpio80";
> +					function = "wcss_wlan";
> +				};
> +
> +				pinconf {
> +					pins = "gpio76", "gpio77",
> +					     "gpio78", "gpio79",
> +					     "gpio80";
> +					drive-strength = <2>;
> +					bias-pull-down;
> +				};
> +			};
>  		};
>  
>  		gcc: clock-controller@1800000 {
> @@ -745,6 +892,59 @@ spmi_bus: spmi@200f000 {
>  			#size-cells = <0>;
>  		};
>  
> +		modem: remoteproc@4080000 {
> +			compatible = "qcom,msm8953-mss-pil";
> +			reg = <0x4080000 0x100>,
> +			    <0x4020000 0x040>;
> +
> +			reg-names = "qdsp6", "rmb";
> +
> +			interrupts-extended = <&intc 0 24 1>,
> +					      <&modem_smp2p_in 0 0>,
> +					      <&modem_smp2p_in 1 0>,
> +					      <&modem_smp2p_in 2 0>,
> +					      <&modem_smp2p_in 3 0>;
> +			interrupt-names = "wdog", "fatal", "ready",
> +					  "handover", "stop-ack";
> +
> +			clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
> +				 <&gcc GCC_MSS_Q6_BIMC_AXI_CLK>,
> +				 <&gcc GCC_BOOT_ROM_AHB_CLK>,
> +				 <&xo_board>;
> +			clock-names = "iface", "bus", "mem", "xo";
> +
> +			power-domains = <&rpmpd MSM8953_VDDCX>, <&rpmpd MSM8953_VDDMX>;
> +			power-domain-names = "cx", "mx";
> +
> +			qcom,smem-states = <&modem_smp2p_out 0>;
> +			qcom,smem-state-names = "stop";
> +
> +			resets = <&gcc GCC_MSS_BCR>;
> +			reset-names = "mss_restart";
> +
> +			qcom,halt-regs = <&tcsr 0x18000 0x19000 0x1a000>;
> +
> +			status = "okay";

No need for okay.

> +
> +			mba {
> +				memory-region = <&mba_mem>;
> +			};
> +
> +			mpss {
> +				memory-region = <&mpss_mem>;
> +			};
> +
> +			smd-edge {
> +				interrupts = <GIC_SPI 25 IRQ_TYPE_EDGE_RISING>;
> +
> +				qcom,smd-edge = <0>;
> +				qcom,ipc = <&apcs 8 12>;
> +				qcom,remote-pid = <1>;
> +
> +				label = "modem";
> +			};
> +		};
> +
>  		usb3: usb@70f8800 {
>  			compatible = "qcom,msm8953-dwc3", "qcom,dwc3";
>  			reg = <0x70f8800 0x400>;
> @@ -1057,6 +1257,74 @@ i2c_8: i2c@7af8000 {
>  			status = "disabled";
>  		};
>  
> +		pronto: remoteproc@a21b000 {
> +			compatible = "qcom,pronto-v3-pil", "qcom,pronto";
> +			reg = <0xa204000 0x2000>,
> +			      <0xa202000 0x1000>,
> +			      <0xa21b000 0x3000>;
> +			reg-names = "ccu", "dxe", "pmu";
> +
> +			memory-region = <&wcnss_fw_mem>;
> +
> +			interrupts-extended = <&intc 0 149 IRQ_TYPE_EDGE_RISING>,
> +					      <&wcnss_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
> +					      <&wcnss_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
> +					      <&wcnss_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
> +					      <&wcnss_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
> +			interrupt-names = "wdog", "fatal", "ready", "handover", "stop-ack";
> +
> +			power-domains = <&rpmpd MSM8953_VDDCX>, <&rpmpd MSM8953_VDDMX>;
> +			power-domain-names = "cx", "mx";
> +
> +			qcom,state = <&wcnss_smp2p_out 0>;
> +			qcom,state-names = "stop";
> +
> +			pinctrl-names = "default", "sleep";
> +			pinctrl-0 = <&wcnss_default>;
> +			pinctrl-1 = <&wcnss_sleep>;
> +
> +			status = "okay";

No need for status.

> +
> +			iris: iris {
> +				compatible = "qcom,wcn3660b";
> +
> +				clocks = <&rpmcc RPM_SMD_RF_CLK2>;
> +				clock-names = "xo";
> +			};
> +
> +			smd-edge {
> +				interrupts = <GIC_SPI 142 IRQ_TYPE_EDGE_RISING>;
> +
> +				qcom,ipc = <&apcs 8 17>;
> +				qcom,smd-edge = <6>;
> +				qcom,remote-pid = <4>;
> +
> +				label = "pronto";
> +
> +				wcnss {
> +					compatible = "qcom,wcnss";
> +					qcom,smd-channels = "WCNSS_CTRL";
> +
> +					qcom,mmio = <&pronto>;
> +
> +					bt {
> +						compatible = "qcom,wcnss-bt";
> +					};
> +
> +					wifi {
> +						compatible = "qcom,wcnss-wlan";
> +
> +						interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>,
> +							     <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
> +						interrupt-names = "tx", "rx";
> +
> +						qcom,smem-states = <&apps_smsm 10>, <&apps_smsm 9>;
> +						qcom,smem-state-names = "tx-enable", "tx-rings-empty";
> +					};
> +				};
> +			};
> +		};
> +
>  		intc: interrupt-controller@b000000 {
>  			compatible = "qcom,msm-qgic2";
>  			interrupt-controller;
> @@ -1070,6 +1338,116 @@ apcs: mailbox@b011000 {
>  			#mbox-cells = <1>;
>  		};
>  
> +		lpass: remoteproc@c200000 {
> +			compatible = "qcom,msm8953-adsp-pil";
> +			reg = <0xc200000 0x100>;
> +
> +			interrupts-extended = <&intc 0 293 IRQ_TYPE_EDGE_RISING>,
> +					      <&smp2p_adsp_in 0 IRQ_TYPE_EDGE_RISING>,
> +					      <&smp2p_adsp_in 1 IRQ_TYPE_EDGE_RISING>,
> +					      <&smp2p_adsp_in 2 IRQ_TYPE_EDGE_RISING>,
> +					      <&smp2p_adsp_in 3 IRQ_TYPE_EDGE_RISING>;
> +			interrupt-names = "wdog", "fatal", "ready",
> +					  "handover", "stop-ack";
> +			clocks = <&xo_board>;
> +			clock-names = "xo";
> +
> +			power-domains = <&rpmpd MSM8953_VDDCX>;
> +			power-domain-names = "cx";
> +
> +			memory-region = <&adsp_fw_mem>;
> +
> +			qcom,smem-states = <&smp2p_adsp_out 0>;
> +			qcom,smem-state-names = "stop";
> +
> +			smd-edge {
> +				interrupts = <GIC_SPI 289 IRQ_TYPE_EDGE_RISING>;
> +
> +				label = "lpass";
> +				mboxes = <&apcs 8>;
> +				qcom,smd-edge = <1>;
> +				qcom,remote-pid = <2>;
> +				#address-cells = <1>;
> +				#size-cells = <0>;
> +
> +				apr {
> +					compatible = "qcom,apr-v2";
> +					qcom,smd-channels = "apr_audio_svc";
> +					qcom,apr-domain = <APR_DOMAIN_ADSP>;
> +					#address-cells = <1>;
> +					#size-cells = <0>;
> +
> +					q6core {
> +						reg = <APR_SVC_ADSP_CORE>;
> +						compatible = "qcom,q6core";
> +					};
> +
> +					q6afe: q6afe {
> +						compatible = "qcom,q6afe";
> +						reg = <APR_SVC_AFE>;
> +						q6afedai: dais {
> +							compatible = "qcom,q6afe-dais";
> +							#address-cells = <1>;
> +							#size-cells = <0>;
> +							#sound-dai-cells = <1>;
> +
> +							dai@16 {
> +								reg = <PRIMARY_MI2S_RX>;
> +								qcom,sd-lines = <0 1>;
> +							};
> +
> +							dai@21 {
> +								reg = <TERTIARY_MI2S_TX>;
> +								qcom,sd-lines = <0 1>;
> +							};
> +						};
> +						q6afecc: clock-controller {
> +							compatible = "qcom,q6afe-clocks";
> +							#clock-cells = <2>;
> +						};
> +					};
> +
> +					q6asm: q6asm {
> +						compatible = "qcom,q6asm";
> +						reg = <APR_SVC_ASM>;
> +						q6asmdai: dais {
> +							compatible = "qcom,q6asm-dais";
> +							#address-cells = <1>;
> +							#size-cells = <0>;
> +							#sound-dai-cells = <1>;
> +
> +							dai@0 {
> +								reg = <MSM_FRONTEND_DAI_MULTIMEDIA1>;
> +							};
> +
> +							dai@1 {
> +								reg = <MSM_FRONTEND_DAI_MULTIMEDIA2>;
> +							};
> +
> +							dai@2 {
> +								reg = <MSM_FRONTEND_DAI_MULTIMEDIA3>;
> +							};
> +
> +							dai@3 {
> +								reg = <MSM_FRONTEND_DAI_MULTIMEDIA4>;
> +								is-compress-dai;
> +							};
> +						};
> +					};
> +
> +					q6adm: q6adm {
> +						compatible = "qcom,q6adm";
> +						reg = <APR_SVC_ADM>;
> +						q6routing: routing {
> +							compatible = "qcom,q6adm-routing";
> +							#sound-dai-cells = <0>;
> +						};
> +					};
> +				};
> +			};
> +

Remove unneeded blank lines.

> +		};
> +
>  		timer@b120000 {
>  			compatible = "arm,armv7-timer-mem";
>  			reg = <0xb120000 0x1000>;


Best regards,
Krzysztof
Sireesh Kodali May 12, 2022, 5:16 a.m. UTC | #5
On Wed May 11, 2022 at 10:24 PM IST, Dmitry Baryshkov wrote:
> On 11/05/2022 19:15, Sireesh Kodali wrote:
> > The modem on the MSM8953 platform is similar to the modem on the MSM8996
> > platform in terms of set up. It differs primarily in the way it needs SCM
> > to bless the MPSS firmware region.
> > 
> > Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> > ---
> >   drivers/remoteproc/qcom_q6v5_mss.c | 64 +++++++++++++++++++++++++++---
> >   1 file changed, 58 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
> > index af217de75e4d..a73fdcddeda4 100644
> > --- a/drivers/remoteproc/qcom_q6v5_mss.c
> > +++ b/drivers/remoteproc/qcom_q6v5_mss.c
> > @@ -234,6 +234,7 @@ struct q6v5 {
> >   
> >   enum {
> >   	MSS_MSM8916,
> > +	MSS_MSM8953,
> >   	MSS_MSM8974,
> >   	MSS_MSM8996,
> >   	MSS_MSM8998,
> > @@ -687,12 +688,14 @@ static int q6v5proc_reset(struct q6v5 *qproc)
> >   		}
> >   		goto pbl_wait;
> >   	} else if (qproc->version == MSS_MSM8996 ||
> > -		   qproc->version == MSS_MSM8998) {
> > +		   qproc->version == MSS_MSM8998 ||
> > +		   qproc->version == MSS_MSM8953) {
> >   		int mem_pwr_ctl;
> >   
> >   		/* Override the ACC value if required */
> > -		writel(QDSP6SS_ACC_OVERRIDE_VAL,
> > -		       qproc->reg_base + QDSP6SS_STRAP_ACC);
> > +		if (qproc->version != MSS_MSM8953)
> > +			writel(QDSP6SS_ACC_OVERRIDE_VAL,
> > +					qproc->reg_base + QDSP6SS_STRAP_ACC);
> >   
> >   		/* Assert resets, stop core */
> >   		val = readl(qproc->reg_base + QDSP6SS_RESET_REG);
> > @@ -734,7 +737,8 @@ static int q6v5proc_reset(struct q6v5 *qproc)
> >   		writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG);
> >   
> >   		/* Turn on L1, L2, ETB and JU memories 1 at a time */
> > -		if (qproc->version == MSS_MSM8996) {
> > +		if (qproc->version == MSS_MSM8996 ||
> > +			qproc->version == MSS_MSM8953) {
> >   			mem_pwr_ctl = QDSP6SS_MEM_PWR_CTL;
> >   			i = 19;
> >   		} else {
> > @@ -1314,7 +1318,16 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
> >   			max_addr = ALIGN(phdr->p_paddr + phdr->p_memsz, SZ_4K);
> >   	}
> >   
> > -	/*
> > +	if (qproc->version == MSS_MSM8953) {
> > +		ret = qcom_scm_pas_mem_setup(5, qproc->mpss_phys, qproc->mpss_size);
> > +		if (ret) {
> > +			dev_err(qproc->dev,
> > +					"setting up mpss memory failed: %d\n", ret);
> > +			goto release_firmware;
> > +		}
> > +	}
> > +
> > +	/**
>
> Single star please
>
> >   	 * In case of a modem subsystem restart on secure devices, the modem
> >   	 * memory can be reclaimed only after MBA is loaded.
> >   	 */
> > @@ -1413,7 +1426,6 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
> >   			writel(RMB_CMD_LOAD_READY, qproc->rmb_base + RMB_MBA_COMMAND_REG);
> >   		}
> >   		writel(size, qproc->rmb_base + RMB_PMI_CODE_LENGTH_REG);
> > -
> >   		ret = readl(qproc->rmb_base + RMB_MBA_STATUS_REG);
> >   		if (ret < 0) {
> >   			dev_err(qproc->dev, "MPSS authentication failed: %d\n",
> > @@ -1422,6 +1434,7 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
> >   		}
> >   	}
> >   
> > +
>
> Unnecessary
>

oops

> >   	/* Transfer ownership of modem ddr region to q6 */
> >   	ret = q6v5_xfer_mem_ownership(qproc, &qproc->mpss_perm, false, true,
> >   				      qproc->mpss_phys, qproc->mpss_size);
> > @@ -2198,6 +2211,44 @@ static const struct rproc_hexagon_res msm8996_mss = {
> >   	.version = MSS_MSM8996,
> >   };
> >   
> > +static const struct rproc_hexagon_res msm8953_mss = {
> > +	.hexagon_mba_image = "mba.mbn",
> > +	.proxy_supply = (struct qcom_mss_reg_res[]) {
> > +		{
> > +			.supply = "pll",
> > +			.uA = 100000,
> > +		},
> > +		{}
> > +	},
> > +	.proxy_pd_names = (char*[]) {
> > +			"cx",
> > +			"mx",
> > +			NULL
> > +	},
> > +	.active_supply = (struct qcom_mss_reg_res[]) {
> > +		{
> > +			.supply = "mss",
> > +			.uV = 1050000,
> > +			.uA = 100000,
> > +		},
> > +		{}
> > +	},
> > +	.proxy_clk_names = (char*[]){
> > +			"xo",
> > +			NULL
> > +	},
> > +	.active_clk_names = (char*[]){
> > +			"iface",
> > +			"bus",
> > +			"mem",
> > +			NULL
> > +	},
> > +	.need_mem_protection = false,
> > +	.has_alt_reset = false,
> > +	.has_spare_reg = false,
>
>
> Please follow the custom  and define the rest of fields here.
>

I missed these in the rebase, I'll add them in v2

> > +	.version = MSS_MSM8953,
> > +};
> > +
> >   static const struct rproc_hexagon_res msm8916_mss = {
> >   	.hexagon_mba_image = "mba.mbn",
> >   	.proxy_supply = (struct qcom_mss_reg_res[]) {
> > @@ -2301,6 +2352,7 @@ static const struct of_device_id q6v5_of_match[] = {
> >   	{ .compatible = "qcom,msm8916-mss-pil", .data = &msm8916_mss},
> >   	{ .compatible = "qcom,msm8974-mss-pil", .data = &msm8974_mss},
> >   	{ .compatible = "qcom,msm8996-mss-pil", .data = &msm8996_mss},
> > +	{ .compatible = "qcom,msm8953-mss-pil", .data = &msm8953_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},
>
>
> -- 
> With best wishes
> Dmitry

Thank you for the review, I'll make the changes in v2 of this patch.

Thanks,
Sireesh
Sireesh Kodali May 12, 2022, 9:19 a.m. UTC | #6
On Wed May 11, 2022 at 11:25 PM IST, Krzysztof Kozlowski wrote:
> On 11/05/2022 18:16, Sireesh Kodali wrote:
> > This commit adds the modem (q6v5_mss), WiFi (wcnss-pil) and audio DSP
> > (q6v5_pas) remote processor nodes for the MSM8953 platform. It also adds
> > the coresponding SMP2P, SMSM and pinctrl nodes that are needed by these
> > remote processors.
> > 
> > Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> > +			};
> > +
> > +			wcnss_sleep: wcnss-sleep-pins {
> > +				wcss_wlan2 {
>
> No underscores in node names, unless something needs it?
>

wcnss_sleep is used by the pronto node defined below

> > +					pins = "gpio76";
> > +					function = "wcss_wlan2";
> > +				};
> > +				wcss_wlan1 {
> > +					pins = "gpio77";
> > +					function = "wcss_wlan1";
> > +				};
> > +				wcss_wlan0 {
> > +					pins = "gpio78";
> > +					function = "wcss_wlan0";
> > +				};
> > +				wcss_wlan {
> > +					pins = "gpio79", "gpio80";
> > +					function = "wcss_wlan";
> > +				};
> > +
> > +				pinconf {
> > +					pins = "gpio76", "gpio77",
> > +					     "gpio78", "gpio79",
> > +					     "gpio80";
> > +					drive-strength = <2>;
> > +					bias-pull-down;
> > +				};
> > +			};
> >  		};
> >  
> >  		gcc: clock-controller@1800000 {
> > @@ -745,6 +892,59 @@ spmi_bus: spmi@200f000 {
> >  			#size-cells = <0>;
> >  		};
> >  
> > +		modem: remoteproc@4080000 {
> > +			compatible = "qcom,msm8953-mss-pil";
> > +			reg = <0x4080000 0x100>,
> > +			    <0x4020000 0x040>;
> > +
> > +			reg-names = "qdsp6", "rmb";
> > +
> > +			interrupts-extended = <&intc 0 24 1>,
> > +					      <&modem_smp2p_in 0 0>,
> > +					      <&modem_smp2p_in 1 0>,
> > +					      <&modem_smp2p_in 2 0>,
> > +					      <&modem_smp2p_in 3 0>;
> > +			interrupt-names = "wdog", "fatal", "ready",
> > +					  "handover", "stop-ack";
> > +
> > +			clocks = <&gcc GCC_MSS_CFG_AHB_CLK>,
> > +				 <&gcc GCC_MSS_Q6_BIMC_AXI_CLK>,
> > +				 <&gcc GCC_BOOT_ROM_AHB_CLK>,
> > +				 <&xo_board>;
> > +			clock-names = "iface", "bus", "mem", "xo";
> > +
> > +			power-domains = <&rpmpd MSM8953_VDDCX>, <&rpmpd MSM8953_VDDMX>;
> > +			power-domain-names = "cx", "mx";
> > +
> > +			qcom,smem-states = <&modem_smp2p_out 0>;
> > +			qcom,smem-state-names = "stop";
> > +
> > +			resets = <&gcc GCC_MSS_BCR>;
> > +			reset-names = "mss_restart";
> > +
> > +			qcom,halt-regs = <&tcsr 0x18000 0x19000 0x1a000>;
> > +
> > +			status = "okay";
>
> No need for okay.

I'll drop it in v2
>
> > +
> > +			mba {
> > +				memory-region = <&mba_mem>;
> > +			};
> > +
> > +			mpss {
> > +				memory-region = <&mpss_mem>;
> > +			};
> > +
> > +			smd-edge {
> > +				interrupts = <GIC_SPI 25 IRQ_TYPE_EDGE_RISING>;
> > +
> > +				qcom,smd-edge = <0>;
> > +				qcom,ipc = <&apcs 8 12>;
> > +				qcom,remote-pid = <1>;
> > +
> > +				label = "modem";
> > +			};
> > +		};
> > +
> >  		usb3: usb@70f8800 {
> >  			compatible = "qcom,msm8953-dwc3", "qcom,dwc3";
> >  			reg = <0x70f8800 0x400>;
> > @@ -1057,6 +1257,74 @@ i2c_8: i2c@7af8000 {
> >  			status = "disabled";
> >  		};
> >  
> > +		pronto: remoteproc@a21b000 {
> > +			compatible = "qcom,pronto-v3-pil", "qcom,pronto";
> > +			reg = <0xa204000 0x2000>,
> > +			      <0xa202000 0x1000>,
> > +			      <0xa21b000 0x3000>;
> > +			reg-names = "ccu", "dxe", "pmu";
> > +
> > +			memory-region = <&wcnss_fw_mem>;
> > +
> > +			interrupts-extended = <&intc 0 149 IRQ_TYPE_EDGE_RISING>,
> > +					      <&wcnss_smp2p_in 0 IRQ_TYPE_EDGE_RISING>,
> > +					      <&wcnss_smp2p_in 1 IRQ_TYPE_EDGE_RISING>,
> > +					      <&wcnss_smp2p_in 2 IRQ_TYPE_EDGE_RISING>,
> > +					      <&wcnss_smp2p_in 3 IRQ_TYPE_EDGE_RISING>;
> > +			interrupt-names = "wdog", "fatal", "ready", "handover", "stop-ack";
> > +
> > +			power-domains = <&rpmpd MSM8953_VDDCX>, <&rpmpd MSM8953_VDDMX>;
> > +			power-domain-names = "cx", "mx";
> > +
> > +			qcom,state = <&wcnss_smp2p_out 0>;
> > +			qcom,state-names = "stop";
> > +
> > +			pinctrl-names = "default", "sleep";
> > +			pinctrl-0 = <&wcnss_default>;
> > +			pinctrl-1 = <&wcnss_sleep>;
> > +
> > +			status = "okay";
>
> No need for status.

Will be dropped in v2
>
> > +
> > +			iris: iris {
> > +				compatible = "qcom,wcn3660b";
> > +
> > +				clocks = <&rpmcc RPM_SMD_RF_CLK2>;
> > +				clock-names = "xo";
> > +			};
> > +
> > +			smd-edge {
> > +				interrupts = <GIC_SPI 142 IRQ_TYPE_EDGE_RISING>;
> > +
> > +				qcom,ipc = <&apcs 8 17>;
> > +				qcom,smd-edge = <6>;
> > +				qcom,remote-pid = <4>;
> > +
> > +				label = "pronto";
> > +
> > +				wcnss {
> > +					compatible = "qcom,wcnss";
> > +					qcom,smd-channels = "WCNSS_CTRL";
> > +
> > +					qcom,mmio = <&pronto>;
> > +
> > +					bt {
> > +						compatible = "qcom,wcnss-bt";
> > +					};
> > +
> > +					wifi {
> > +						compatible = "qcom,wcnss-wlan";
> > +
> > +						interrupts = <GIC_SPI 145 IRQ_TYPE_LEVEL_HIGH>,
> > +							     <GIC_SPI 146 IRQ_TYPE_LEVEL_HIGH>;
> > +						interrupt-names = "tx", "rx";
> > +
> > +						qcom,smem-states = <&apps_smsm 10>, <&apps_smsm 9>;
> > +						qcom,smem-state-names = "tx-enable", "tx-rings-empty";
> > +					};
> > +				};
> > +			};
> > +		};
> > +
> >  		intc: interrupt-controller@b000000 {
> >  			compatible = "qcom,msm-qgic2";
> >  			interrupt-controller;
> > @@ -1070,6 +1338,116 @@ apcs: mailbox@b011000 {
> >  			#mbox-cells = <1>;
> >  		};
> >  
> > +		lpass: remoteproc@c200000 {
> > +			compatible = "qcom,msm8953-adsp-pil";
> > +			reg = <0xc200000 0x100>;
> > +
> > +			interrupts-extended = <&intc 0 293 IRQ_TYPE_EDGE_RISING>,
> > +					      <&smp2p_adsp_in 0 IRQ_TYPE_EDGE_RISING>,
> > +					      <&smp2p_adsp_in 1 IRQ_TYPE_EDGE_RISING>,
> > +					      <&smp2p_adsp_in 2 IRQ_TYPE_EDGE_RISING>,
> > +					      <&smp2p_adsp_in 3 IRQ_TYPE_EDGE_RISING>;
> > +			interrupt-names = "wdog", "fatal", "ready",
> > +					  "handover", "stop-ack";
> > +			clocks = <&xo_board>;
> > +			clock-names = "xo";
> > +
> > +			power-domains = <&rpmpd MSM8953_VDDCX>;
> > +			power-domain-names = "cx";
> > +
> > +			memory-region = <&adsp_fw_mem>;
> > +
> > +			qcom,smem-states = <&smp2p_adsp_out 0>;
> > +			qcom,smem-state-names = "stop";
> > +
> > +			smd-edge {
> > +				interrupts = <GIC_SPI 289 IRQ_TYPE_EDGE_RISING>;
> > +
> > +				label = "lpass";
> > +				mboxes = <&apcs 8>;
> > +				qcom,smd-edge = <1>;
> > +				qcom,remote-pid = <2>;
> > +				#address-cells = <1>;
> > +				#size-cells = <0>;
> > +
> > +				apr {
> > +					compatible = "qcom,apr-v2";
> > +					qcom,smd-channels = "apr_audio_svc";
> > +					qcom,apr-domain = <APR_DOMAIN_ADSP>;
> > +					#address-cells = <1>;
> > +					#size-cells = <0>;
> > +
> > +					q6core {
> > +						reg = <APR_SVC_ADSP_CORE>;
> > +						compatible = "qcom,q6core";
> > +					};
> > +
> > +					q6afe: q6afe {
> > +						compatible = "qcom,q6afe";
> > +						reg = <APR_SVC_AFE>;
> > +						q6afedai: dais {
> > +							compatible = "qcom,q6afe-dais";
> > +							#address-cells = <1>;
> > +							#size-cells = <0>;
> > +							#sound-dai-cells = <1>;
> > +
> > +							dai@16 {
> > +								reg = <PRIMARY_MI2S_RX>;
> > +								qcom,sd-lines = <0 1>;
> > +							};
> > +
> > +							dai@21 {
> > +								reg = <TERTIARY_MI2S_TX>;
> > +								qcom,sd-lines = <0 1>;
> > +							};
> > +						};
> > +						q6afecc: clock-controller {
> > +							compatible = "qcom,q6afe-clocks";
> > +							#clock-cells = <2>;
> > +						};
> > +					};
> > +
> > +					q6asm: q6asm {
> > +						compatible = "qcom,q6asm";
> > +						reg = <APR_SVC_ASM>;
> > +						q6asmdai: dais {
> > +							compatible = "qcom,q6asm-dais";
> > +							#address-cells = <1>;
> > +							#size-cells = <0>;
> > +							#sound-dai-cells = <1>;
> > +
> > +							dai@0 {
> > +								reg = <MSM_FRONTEND_DAI_MULTIMEDIA1>;
> > +							};
> > +
> > +							dai@1 {
> > +								reg = <MSM_FRONTEND_DAI_MULTIMEDIA2>;
> > +							};
> > +
> > +							dai@2 {
> > +								reg = <MSM_FRONTEND_DAI_MULTIMEDIA3>;
> > +							};
> > +
> > +							dai@3 {
> > +								reg = <MSM_FRONTEND_DAI_MULTIMEDIA4>;
> > +								is-compress-dai;
> > +							};
> > +						};
> > +					};
> > +
> > +					q6adm: q6adm {
> > +						compatible = "qcom,q6adm";
> > +						reg = <APR_SVC_ADM>;
> > +						q6routing: routing {
> > +							compatible = "qcom,q6adm-routing";
> > +							#sound-dai-cells = <0>;
> > +						};
> > +					};
> > +				};
> > +			};
> > +
>
> Remove unneeded blank lines.

Will be fixed in v2
>
> > +		};
> > +
> >  		timer@b120000 {
> >  			compatible = "arm,armv7-timer-mem";
> >  			reg = <0xb120000 0x1000>;
>
>
> Best regards,
> Krzysztof

Thanks,
Sireesh Kodali
Sireesh Kodali May 12, 2022, 10:38 a.m. UTC | #7
On Wed May 11, 2022 at 10:24 PM IST, Dmitry Baryshkov wrote:
> On 11/05/2022 19:15, Sireesh Kodali wrote:
> > The modem on the MSM8953 platform is similar to the modem on the MSM8996
> > platform in terms of set up. It differs primarily in the way it needs SCM
> > to bless the MPSS firmware region.
> > 
> > Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> > ---
> >   drivers/remoteproc/qcom_q6v5_mss.c | 64 +++++++++++++++++++++++++++---
> >   1 file changed, 58 insertions(+), 6 deletions(-)
> > 
> > diff --git a/drivers/remoteproc/qcom_q6v5_mss.c b/drivers/remoteproc/qcom_q6v5_mss.c
> > index af217de75e4d..a73fdcddeda4 100644
> > --- a/drivers/remoteproc/qcom_q6v5_mss.c
> > +++ b/drivers/remoteproc/qcom_q6v5_mss.c
> > @@ -234,6 +234,7 @@ struct q6v5 {
> >   
> >   enum {
> >   	MSS_MSM8916,
> > +	MSS_MSM8953,
> >   	MSS_MSM8974,
> >   	MSS_MSM8996,
> >   	MSS_MSM8998,
> > @@ -687,12 +688,14 @@ static int q6v5proc_reset(struct q6v5 *qproc)
> >   		}
> >   		goto pbl_wait;
> >   	} else if (qproc->version == MSS_MSM8996 ||
> > -		   qproc->version == MSS_MSM8998) {
> > +		   qproc->version == MSS_MSM8998 ||
> > +		   qproc->version == MSS_MSM8953) {
> >   		int mem_pwr_ctl;
> >   
> >   		/* Override the ACC value if required */
> > -		writel(QDSP6SS_ACC_OVERRIDE_VAL,
> > -		       qproc->reg_base + QDSP6SS_STRAP_ACC);
> > +		if (qproc->version != MSS_MSM8953)
> > +			writel(QDSP6SS_ACC_OVERRIDE_VAL,
> > +					qproc->reg_base + QDSP6SS_STRAP_ACC);
> >   
> >   		/* Assert resets, stop core */
> >   		val = readl(qproc->reg_base + QDSP6SS_RESET_REG);
> > @@ -734,7 +737,8 @@ static int q6v5proc_reset(struct q6v5 *qproc)
> >   		writel(val, qproc->reg_base + QDSP6SS_PWR_CTL_REG);
> >   
> >   		/* Turn on L1, L2, ETB and JU memories 1 at a time */
> > -		if (qproc->version == MSS_MSM8996) {
> > +		if (qproc->version == MSS_MSM8996 ||
> > +			qproc->version == MSS_MSM8953) {
> >   			mem_pwr_ctl = QDSP6SS_MEM_PWR_CTL;
> >   			i = 19;
> >   		} else {
> > @@ -1314,7 +1318,16 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
> >   			max_addr = ALIGN(phdr->p_paddr + phdr->p_memsz, SZ_4K);
> >   	}
> >   
> > -	/*
> > +	if (qproc->version == MSS_MSM8953) {
> > +		ret = qcom_scm_pas_mem_setup(5, qproc->mpss_phys, qproc->mpss_size);
> > +		if (ret) {
> > +			dev_err(qproc->dev,
> > +					"setting up mpss memory failed: %d\n", ret);
> > +			goto release_firmware;
> > +		}
> > +	}
> > +
> > +	/**
>
> Single star please

Will fix in v2

>
> >   	 * In case of a modem subsystem restart on secure devices, the modem
> >   	 * memory can be reclaimed only after MBA is loaded.
> >   	 */
> > @@ -1413,7 +1426,6 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
> >   			writel(RMB_CMD_LOAD_READY, qproc->rmb_base + RMB_MBA_COMMAND_REG);
> >   		}
> >   		writel(size, qproc->rmb_base + RMB_PMI_CODE_LENGTH_REG);
> > -
> >   		ret = readl(qproc->rmb_base + RMB_MBA_STATUS_REG);
> >   		if (ret < 0) {
> >   			dev_err(qproc->dev, "MPSS authentication failed: %d\n",
> > @@ -1422,6 +1434,7 @@ static int q6v5_mpss_load(struct q6v5 *qproc)
> >   		}
> >   	}
> >   
> > +
>
> Unnecessary

Will fix in v2
>
>
> >   	/* Transfer ownership of modem ddr region to q6 */
> >   	ret = q6v5_xfer_mem_ownership(qproc, &qproc->mpss_perm, false, true,
> >   				      qproc->mpss_phys, qproc->mpss_size);
> > @@ -2198,6 +2211,44 @@ static const struct rproc_hexagon_res msm8996_mss = {
> >   	.version = MSS_MSM8996,
> >   };
> >   
> > +static const struct rproc_hexagon_res msm8953_mss = {
> > +	.hexagon_mba_image = "mba.mbn",
> > +	.proxy_supply = (struct qcom_mss_reg_res[]) {
> > +		{
> > +			.supply = "pll",
> > +			.uA = 100000,
> > +		},
> > +		{}
> > +	},
> > +	.proxy_pd_names = (char*[]) {
> > +			"cx",
> > +			"mx",
> > +			NULL
> > +	},
> > +	.active_supply = (struct qcom_mss_reg_res[]) {
> > +		{
> > +			.supply = "mss",
> > +			.uV = 1050000,
> > +			.uA = 100000,
> > +		},
> > +		{}
> > +	},
> > +	.proxy_clk_names = (char*[]){
> > +			"xo",
> > +			NULL
> > +	},
> > +	.active_clk_names = (char*[]){
> > +			"iface",
> > +			"bus",
> > +			"mem",
> > +			NULL
> > +	},
> > +	.need_mem_protection = false,
> > +	.has_alt_reset = false,
> > +	.has_spare_reg = false,
>
>
> Please follow the custom  and define the rest of fields here.

Will fix in v2
>
> > +	.version = MSS_MSM8953,
> > +};
> > +
> >   static const struct rproc_hexagon_res msm8916_mss = {
> >   	.hexagon_mba_image = "mba.mbn",
> >   	.proxy_supply = (struct qcom_mss_reg_res[]) {
> > @@ -2301,6 +2352,7 @@ static const struct of_device_id q6v5_of_match[] = {
> >   	{ .compatible = "qcom,msm8916-mss-pil", .data = &msm8916_mss},
> >   	{ .compatible = "qcom,msm8974-mss-pil", .data = &msm8974_mss},
> >   	{ .compatible = "qcom,msm8996-mss-pil", .data = &msm8996_mss},
> > +	{ .compatible = "qcom,msm8953-mss-pil", .data = &msm8953_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},
>
>
> -- 
> With best wishes
> Dmitry

Thanks,
Sireesh
Sireesh Kodali May 12, 2022, 10:39 a.m. UTC | #8
On Wed May 11, 2022 at 10:21 PM IST, Dmitry Baryshkov wrote:
> On 11/05/2022 19:15, Sireesh Kodali wrote:
> > Add support for the Audio DSP PIL found on the Qualcomm MSM8953
> > platform. The same configuration is used on all SoCs based on the
> > MSM8953 platform (SDM450, SDA450, SDM625, SDM632, APQ8053).
> > 
> > Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> > ---
> >   drivers/remoteproc/qcom_q6v5_pas.c | 31 ++++++++++++++++++++++++++++++
> >   1 file changed, 31 insertions(+)
> > 
> > diff --git a/drivers/remoteproc/qcom_q6v5_pas.c b/drivers/remoteproc/qcom_q6v5_pas.c
> > index 1ae47cc153e5..4dcb714a1468 100644
> > --- a/drivers/remoteproc/qcom_q6v5_pas.c
> > +++ b/drivers/remoteproc/qcom_q6v5_pas.c
> > @@ -617,7 +617,37 @@ static const struct adsp_data sm8350_adsp_resource = {
> >   	.ssctl_id = 0x14,
> >   };
> >   
> > +static const struct adsp_data msm8953_adsp_resource = {
> > +	.crash_reason_smem = 423,
> > +	.firmware_name = "adsp.mdt",
> > +	.pas_id = 1,
> > +	.has_aggre2_clk = false,
> > +	.auto_boot = true,
> > +	.proxy_pd_names = (char*[]){
> > +		"cx",
> > +		NULL,
> > +	},
> > +	.ssr_name = "lpass",
> > +	.sysmon_name = "adsp",
> > +	.ssctl_id = 0x14,
> > +};
> > +
>
> Also it looks like this item is identical to msm8996_adsp_resources. So 
> you can existing structure instead.
>


Yes, the msm8953 item is identical to the msm8996_adsp_resource. I
wasn't aware that we could re-use structs like this, I will do that in
v2 of this patch

> >   static const struct adsp_data msm8996_adsp_resource = {
> > +	.crash_reason_smem = 423,
> > +	.firmware_name = "adsp.mdt",
> > +	.pas_id = 1,
> > +	.has_aggre2_clk = false,
> > +	.auto_boot = true,
> > +	.proxy_pd_names = (char*[]){
> > +		"cx",
> > +		NULL,
> > +	},
> > +	.ssr_name = "lpass",
> > +	.sysmon_name = "adsp",
> > +	.ssctl_id = 0x14,
> > +};
> > +
> > +static const struct adsp_data msm8998_adsp_resource = {
> >   		.crash_reason_smem = 423,
> >   		.firmware_name = "adsp.mdt",
> >   		.pas_id = 1,
> > @@ -850,6 +880,7 @@ static const struct adsp_data sdx55_mpss_resource = {
> >   static const struct of_device_id adsp_of_match[] = {
> >   	{ .compatible = "qcom,msm8974-adsp-pil", .data = &adsp_resource_init},
> >   	{ .compatible = "qcom,msm8996-adsp-pil", .data = &msm8996_adsp_resource},
> > +	{ .compatible = "qcom,msm8953-adsp-pil", .data = &msm8953_adsp_resource},
> >   	{ .compatible = "qcom,msm8996-slpi-pil", .data = &slpi_resource_init},
> >   	{ .compatible = "qcom,msm8998-adsp-pas", .data = &msm8996_adsp_resource},
> >   	{ .compatible = "qcom,msm8998-slpi-pas", .data = &slpi_resource_init},
>
>
> -- 
> With best wishes
> Dmitry

Thanks,
Sireesh
Krzysztof Kozlowski May 12, 2022, 2:37 p.m. UTC | #9
On 12/05/2022 11:19, Sireesh Kodali wrote:
> On Wed May 11, 2022 at 11:25 PM IST, Krzysztof Kozlowski wrote:
>> On 11/05/2022 18:16, Sireesh Kodali wrote:
>>> This commit adds the modem (q6v5_mss), WiFi (wcnss-pil) and audio DSP
>>> (q6v5_pas) remote processor nodes for the MSM8953 platform. It also adds
>>> the coresponding SMP2P, SMSM and pinctrl nodes that are needed by these
>>> remote processors.
>>>
>>> Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
>>> +			};
>>> +
>>> +			wcnss_sleep: wcnss-sleep-pins {
>>> +				wcss_wlan2 {
>>
>> No underscores in node names, unless something needs it?
>>
> 
> wcnss_sleep is used by the pronto node defined below

wcnss_sleep is not a node name and it is not in the line where I commented.

Best regards,
Krzysztof
Sireesh Kodali May 12, 2022, 3:15 p.m. UTC | #10
On Thu May 12, 2022 at 8:07 PM IST, Krzysztof Kozlowski wrote:
> On 12/05/2022 11:19, Sireesh Kodali wrote:
> > On Wed May 11, 2022 at 11:25 PM IST, Krzysztof Kozlowski wrote:
> >> On 11/05/2022 18:16, Sireesh Kodali wrote:
> >>> This commit adds the modem (q6v5_mss), WiFi (wcnss-pil) and audio DSP
> >>> (q6v5_pas) remote processor nodes for the MSM8953 platform. It also adds
> >>> the coresponding SMP2P, SMSM and pinctrl nodes that are needed by these
> >>> remote processors.
> >>>
> >>> Signed-off-by: Sireesh Kodali <sireeshkodali1@gmail.com>
> >>> +			};
> >>> +
> >>> +			wcnss_sleep: wcnss-sleep-pins {
> >>> +				wcss_wlan2 {
> >>
> >> No underscores in node names, unless something needs it?
> >>
> > 
> > wcnss_sleep is used by the pronto node defined below
>
> wcnss_sleep is not a node name and it is not in the line where I commented.
>
Sorry, I'll fix it in v2
> Best regards,
> Krzysztof

Thanks,
Sireesh