Re: [PATCH 11/14] arm64: dts: qcom: Add rpm-proc node for SMD platforms

From: Konrad Dybcio
Date: Mon Jun 05 2023 - 15:07:53 EST




On 5.06.2023 09:08, Stephan Gerhold wrote:
> Rather than having the RPM SMD channels as the only child of a dummy
> SMD node, switch to representing the RPM as remoteproc like all the
> other remoteprocs (WCNSS, modem DSP).
>
> This allows assigning additional subdevices to it like the MPM
> interrupt-controller or rpm-master-stats.
>
> Signed-off-by: Stephan Gerhold <stephan@xxxxxxxxxxx>
> ---
Reviewed-by: Konrad Dybcio <konrad.dybcio@xxxxxxxxxx>

Konrad
> arch/arm64/boot/dts/qcom/msm8916.dtsi | 6 +-
> arch/arm64/boot/dts/qcom/msm8939.dtsi | 112 ++++++++++++-------------
> arch/arm64/boot/dts/qcom/msm8953.dtsi | 136 +++++++++++++++---------------
> arch/arm64/boot/dts/qcom/msm8976.dtsi | 152 +++++++++++++++++-----------------
> arch/arm64/boot/dts/qcom/msm8994.dtsi | 99 +++++++++++-----------
> 5 files changed, 253 insertions(+), 252 deletions(-)
>
> diff --git a/arch/arm64/boot/dts/qcom/msm8916.dtsi b/arch/arm64/boot/dts/qcom/msm8916.dtsi
> index 9494b6512d87..667748612d3e 100644
> --- a/arch/arm64/boot/dts/qcom/msm8916.dtsi
> +++ b/arch/arm64/boot/dts/qcom/msm8916.dtsi
> @@ -282,10 +282,10 @@ CLUSTER_PD: power-domain-cluster {
> };
> };
>
> - smd {
> - compatible = "qcom,smd";
> + rpm: remoteproc-rpm {
> + compatible = "qcom,msm8916-rpm-proc", "qcom,rpm-proc";
>
> - rpm {
> + smd-edge {
> interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> qcom,ipc = <&apcs 8 0>;
> qcom,smd-edge = <15>;
> diff --git a/arch/arm64/boot/dts/qcom/msm8939.dtsi b/arch/arm64/boot/dts/qcom/msm8939.dtsi
> index 0d9f8b951b66..f11d522586eb 100644
> --- a/arch/arm64/boot/dts/qcom/msm8939.dtsi
> +++ b/arch/arm64/boot/dts/qcom/msm8939.dtsi
> @@ -240,6 +240,62 @@ pmu {
> interrupts = <GIC_PPI 7 (GIC_CPU_MASK_SIMPLE(8) | IRQ_TYPE_LEVEL_HIGH)>;
> };
>
> + rpm: remoteproc-rpm {
> + compatible = "qcom,msm8936-rpm-proc", "qcom,rpm-proc";
> +
> + smd-edge {
> + interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> + qcom,ipc = <&apcs1_mbox 8 0>;
> + qcom,smd-edge = <15>;
> +
> + rpm_requests: rpm-requests {
> + compatible = "qcom,rpm-msm8936";
> + qcom,smd-channels = "rpm_requests";
> +
> + rpmcc: clock-controller {
> + compatible = "qcom,rpmcc-msm8936", "qcom,rpmcc";
> + #clock-cells = <1>;
> + clock-names = "xo";
> + clocks = <&xo_board>;
> + };
> +
> + rpmpd: power-controller {
> + compatible = "qcom,msm8939-rpmpd";
> + #power-domain-cells = <1>;
> + operating-points-v2 = <&rpmpd_opp_table>;
> +
> + rpmpd_opp_table: opp-table {
> + compatible = "operating-points-v2";
> +
> + rpmpd_opp_ret: opp1 {
> + opp-level = <1>;
> + };
> +
> + rpmpd_opp_svs_krait: opp2 {
> + opp-level = <2>;
> + };
> +
> + rpmpd_opp_svs_soc: opp3 {
> + opp-level = <3>;
> + };
> +
> + rpmpd_opp_nom: opp4 {
> + opp-level = <4>;
> + };
> +
> + rpmpd_opp_turbo: opp5 {
> + opp-level = <5>;
> + };
> +
> + rpmpd_opp_super_turbo: opp6 {
> + opp-level = <6>;
> + };
> + };
> + };
> + };
> + };
> + };
> +
> reserved-memory {
> #address-cells = <2>;
> #size-cells = <2>;
> @@ -308,62 +364,6 @@ mba_mem: mba@8cb00000 {
> };
> };
>
> - smd {
> - compatible = "qcom,smd";
> -
> - rpm {
> - interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> - qcom,ipc = <&apcs1_mbox 8 0>;
> - qcom,smd-edge = <15>;
> -
> - rpm_requests: rpm-requests {
> - compatible = "qcom,rpm-msm8936";
> - qcom,smd-channels = "rpm_requests";
> -
> - rpmcc: clock-controller {
> - compatible = "qcom,rpmcc-msm8936", "qcom,rpmcc";
> - #clock-cells = <1>;
> - clock-names = "xo";
> - clocks = <&xo_board>;
> - };
> -
> - rpmpd: power-controller {
> - compatible = "qcom,msm8939-rpmpd";
> - #power-domain-cells = <1>;
> - operating-points-v2 = <&rpmpd_opp_table>;
> -
> - rpmpd_opp_table: opp-table {
> - compatible = "operating-points-v2";
> -
> - rpmpd_opp_ret: opp1 {
> - opp-level = <1>;
> - };
> -
> - rpmpd_opp_svs_krait: opp2 {
> - opp-level = <2>;
> - };
> -
> - rpmpd_opp_svs_soc: opp3 {
> - opp-level = <3>;
> - };
> -
> - rpmpd_opp_nom: opp4 {
> - opp-level = <4>;
> - };
> -
> - rpmpd_opp_turbo: opp5 {
> - opp-level = <5>;
> - };
> -
> - rpmpd_opp_super_turbo: opp6 {
> - opp-level = <6>;
> - };
> - };
> - };
> - };
> - };
> - };
> -
> smp2p-hexagon {
> compatible = "qcom,smp2p";
> qcom,smem = <435>, <428>;
> diff --git a/arch/arm64/boot/dts/qcom/msm8953.dtsi b/arch/arm64/boot/dts/qcom/msm8953.dtsi
> index 7d193a467819..4b2f02850a10 100644
> --- a/arch/arm64/boot/dts/qcom/msm8953.dtsi
> +++ b/arch/arm64/boot/dts/qcom/msm8953.dtsi
> @@ -190,6 +190,74 @@ psci {
> method = "smc";
> };
>
> + rpm: remoteproc-rpm {
> + compatible = "qcom,msm8953-rpm-proc", "qcom,rpm-proc";
> +
> + smd-edge {
> + interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> + qcom,ipc = <&apcs 8 0>;
> + qcom,smd-edge = <15>;
> +
> + rpm_requests: rpm-requests {
> + compatible = "qcom,rpm-msm8953";
> + qcom,smd-channels = "rpm_requests";
> +
> + rpmcc: clock-controller {
> + compatible = "qcom,rpmcc-msm8953", "qcom,rpmcc";
> + clocks = <&xo_board>;
> + clock-names = "xo";
> + #clock-cells = <1>;
> + };
> +
> + rpmpd: power-controller {
> + compatible = "qcom,msm8953-rpmpd";
> + #power-domain-cells = <1>;
> + operating-points-v2 = <&rpmpd_opp_table>;
> +
> + rpmpd_opp_table: opp-table {
> + compatible = "operating-points-v2";
> +
> + rpmpd_opp_ret: opp1 {
> + opp-level = <RPM_SMD_LEVEL_RETENTION>;
> + };
> +
> + rpmpd_opp_ret_plus: opp2 {
> + opp-level = <RPM_SMD_LEVEL_RETENTION_PLUS>;
> + };
> +
> + rpmpd_opp_min_svs: opp3 {
> + opp-level = <RPM_SMD_LEVEL_MIN_SVS>;
> + };
> +
> + rpmpd_opp_low_svs: opp4 {
> + opp-level = <RPM_SMD_LEVEL_LOW_SVS>;
> + };
> +
> + rpmpd_opp_svs: opp5 {
> + opp-level = <RPM_SMD_LEVEL_SVS>;
> + };
> +
> + rpmpd_opp_svs_plus: opp6 {
> + opp-level = <RPM_SMD_LEVEL_SVS_PLUS>;
> + };
> +
> + rpmpd_opp_nom: opp7 {
> + opp-level = <RPM_SMD_LEVEL_NOM>;
> + };
> +
> + rpmpd_opp_nom_plus: opp8 {
> + opp-level = <RPM_SMD_LEVEL_NOM_PLUS>;
> + };
> +
> + rpmpd_opp_turbo: opp9 {
> + opp-level = <RPM_SMD_LEVEL_TURBO>;
> + };
> + };
> + };
> + };
> + };
> + };
> +
> reserved-memory {
> #address-cells = <2>;
> #size-cells = <2>;
> @@ -263,74 +331,6 @@ rmtfs@f2d00000 {
> };
> };
>
> - smd {
> - compatible = "qcom,smd";
> -
> - rpm {
> - interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> - qcom,ipc = <&apcs 8 0>;
> - qcom,smd-edge = <15>;
> -
> - rpm_requests: rpm-requests {
> - compatible = "qcom,rpm-msm8953";
> - qcom,smd-channels = "rpm_requests";
> -
> - rpmcc: clock-controller {
> - compatible = "qcom,rpmcc-msm8953", "qcom,rpmcc";
> - clocks = <&xo_board>;
> - clock-names = "xo";
> - #clock-cells = <1>;
> - };
> -
> - rpmpd: power-controller {
> - compatible = "qcom,msm8953-rpmpd";
> - #power-domain-cells = <1>;
> - operating-points-v2 = <&rpmpd_opp_table>;
> -
> - rpmpd_opp_table: opp-table {
> - compatible = "operating-points-v2";
> -
> - rpmpd_opp_ret: opp1 {
> - opp-level = <RPM_SMD_LEVEL_RETENTION>;
> - };
> -
> - rpmpd_opp_ret_plus: opp2 {
> - opp-level = <RPM_SMD_LEVEL_RETENTION_PLUS>;
> - };
> -
> - rpmpd_opp_min_svs: opp3 {
> - opp-level = <RPM_SMD_LEVEL_MIN_SVS>;
> - };
> -
> - rpmpd_opp_low_svs: opp4 {
> - opp-level = <RPM_SMD_LEVEL_LOW_SVS>;
> - };
> -
> - rpmpd_opp_svs: opp5 {
> - opp-level = <RPM_SMD_LEVEL_SVS>;
> - };
> -
> - rpmpd_opp_svs_plus: opp6 {
> - opp-level = <RPM_SMD_LEVEL_SVS_PLUS>;
> - };
> -
> - rpmpd_opp_nom: opp7 {
> - opp-level = <RPM_SMD_LEVEL_NOM>;
> - };
> -
> - rpmpd_opp_nom_plus: opp8 {
> - opp-level = <RPM_SMD_LEVEL_NOM_PLUS>;
> - };
> -
> - rpmpd_opp_turbo: opp9 {
> - opp-level = <RPM_SMD_LEVEL_TURBO>;
> - };
> - };
> - };
> - };
> - };
> - };
> -
> smp2p-adsp {
> compatible = "qcom,smp2p";
> qcom,smem = <443>, <429>;
> diff --git a/arch/arm64/boot/dts/qcom/msm8976.dtsi b/arch/arm64/boot/dts/qcom/msm8976.dtsi
> index 753b9a2105ed..6f856562923f 100644
> --- a/arch/arm64/boot/dts/qcom/msm8976.dtsi
> +++ b/arch/arm64/boot/dts/qcom/msm8976.dtsi
> @@ -232,6 +232,82 @@ psci {
> method = "smc";
> };
>
> + rpm: remoteproc-rpm {
> + compatible = "qcom,msm8976-rpm-proc", "qcom,rpm-proc";
> +
> + smd-edge {
> + interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> + qcom,ipc = <&apcs 8 0>;
> + qcom,smd-edge = <15>;
> +
> + rpm_requests: rpm-requests {
> + compatible = "qcom,rpm-msm8976";
> + qcom,smd-channels = "rpm_requests";
> +
> + rpmcc: clock-controller {
> + compatible = "qcom,rpmcc-msm8976", "qcom,rpmcc";
> + clocks = <&xo_board>;
> + clock-names = "xo";
> + #clock-cells = <1>;
> + };
> +
> + rpmpd: power-controller {
> + compatible = "qcom,msm8976-rpmpd";
> + #power-domain-cells = <1>;
> + operating-points-v2 = <&rpmpd_opp_table>;
> +
> + rpmpd_opp_table: opp-table {
> + compatible = "operating-points-v2";
> +
> + rpmpd_opp_ret: opp1 {
> + opp-level = <RPM_SMD_LEVEL_RETENTION>;
> + };
> +
> + rpmpd_opp_ret_plus: opp2 {
> + opp-level = <RPM_SMD_LEVEL_RETENTION_PLUS>;
> + };
> +
> + rpmpd_opp_min_svs: opp3 {
> + opp-level = <RPM_SMD_LEVEL_MIN_SVS>;
> + };
> +
> + rpmpd_opp_low_svs: opp4 {
> + opp-level = <RPM_SMD_LEVEL_LOW_SVS>;
> + };
> +
> + rpmpd_opp_svs: opp5 {
> + opp-level = <RPM_SMD_LEVEL_SVS>;
> + };
> +
> + rpmpd_opp_svs_plus: opp6 {
> + opp-level = <RPM_SMD_LEVEL_SVS_PLUS>;
> + };
> +
> + rpmpd_opp_nom: opp7 {
> + opp-level = <RPM_SMD_LEVEL_NOM>;
> + };
> +
> + rpmpd_opp_nom_plus: opp8 {
> + opp-level = <RPM_SMD_LEVEL_NOM_PLUS>;
> + };
> +
> + rpmpd_opp_turbo: opp9 {
> + opp-level = <RPM_SMD_LEVEL_TURBO>;
> + };
> +
> + rpmpd_opp_turbo_no_cpr: opp10 {
> + opp-level = <RPM_SMD_LEVEL_TURBO_NO_CPR>;
> + };
> +
> + rpmpd_opp_turbo_high: opp111 {
> + opp-level = <RPM_SMD_LEVEL_TURBO_HIGH>;
> + };
> + };
> + };
> + };
> + };
> + };
> +
> reserved-memory {
> #address-cells = <2>;
> #size-cells = <2>;
> @@ -346,82 +422,6 @@ wcnss_smp2p_in: slave-kernel {
> };
> };
>
> - smd {
> - compatible = "qcom,smd";
> -
> - rpm {
> - interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> - qcom,ipc = <&apcs 8 0>;
> - qcom,smd-edge = <15>;
> -
> - rpm_requests: rpm-requests {
> - compatible = "qcom,rpm-msm8976";
> - qcom,smd-channels = "rpm_requests";
> -
> - rpmcc: clock-controller {
> - compatible = "qcom,rpmcc-msm8976", "qcom,rpmcc";
> - clocks = <&xo_board>;
> - clock-names = "xo";
> - #clock-cells = <1>;
> - };
> -
> - rpmpd: power-controller {
> - compatible = "qcom,msm8976-rpmpd";
> - #power-domain-cells = <1>;
> - operating-points-v2 = <&rpmpd_opp_table>;
> -
> - rpmpd_opp_table: opp-table {
> - compatible = "operating-points-v2";
> -
> - rpmpd_opp_ret: opp1 {
> - opp-level = <RPM_SMD_LEVEL_RETENTION>;
> - };
> -
> - rpmpd_opp_ret_plus: opp2 {
> - opp-level = <RPM_SMD_LEVEL_RETENTION_PLUS>;
> - };
> -
> - rpmpd_opp_min_svs: opp3 {
> - opp-level = <RPM_SMD_LEVEL_MIN_SVS>;
> - };
> -
> - rpmpd_opp_low_svs: opp4 {
> - opp-level = <RPM_SMD_LEVEL_LOW_SVS>;
> - };
> -
> - rpmpd_opp_svs: opp5 {
> - opp-level = <RPM_SMD_LEVEL_SVS>;
> - };
> -
> - rpmpd_opp_svs_plus: opp6 {
> - opp-level = <RPM_SMD_LEVEL_SVS_PLUS>;
> - };
> -
> - rpmpd_opp_nom: opp7 {
> - opp-level = <RPM_SMD_LEVEL_NOM>;
> - };
> -
> - rpmpd_opp_nom_plus: opp8 {
> - opp-level = <RPM_SMD_LEVEL_NOM_PLUS>;
> - };
> -
> - rpmpd_opp_turbo: opp9 {
> - opp-level = <RPM_SMD_LEVEL_TURBO>;
> - };
> -
> - rpmpd_opp_turbo_no_cpr: opp10 {
> - opp-level = <RPM_SMD_LEVEL_TURBO_NO_CPR>;
> - };
> -
> - rpmpd_opp_turbo_high: opp111 {
> - opp-level = <RPM_SMD_LEVEL_TURBO_HIGH>;
> - };
> - };
> - };
> - };
> - };
> - };
> -
> smsm {
> compatible = "qcom,smsm";
>
> diff --git a/arch/arm64/boot/dts/qcom/msm8994.dtsi b/arch/arm64/boot/dts/qcom/msm8994.dtsi
> index 5a7923d7c62a..6168d0aeff57 100644
> --- a/arch/arm64/boot/dts/qcom/msm8994.dtsi
> +++ b/arch/arm64/boot/dts/qcom/msm8994.dtsi
> @@ -178,6 +178,56 @@ psci {
> method = "hvc";
> };
>
> + rpm: remoteproc-rpm {
> + compatible = "qcom,msm8994-rpm-proc", "qcom,rpm-proc";
> +
> + smd-edge {
> + interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> + qcom,ipc = <&apcs 8 0>;
> + qcom,smd-edge = <15>;
> + qcom,remote-pid = <6>;
> +
> + rpm_requests: rpm-requests {
> + compatible = "qcom,rpm-msm8994";
> + qcom,smd-channels = "rpm_requests";
> +
> + rpmcc: clock-controller {
> + compatible = "qcom,rpmcc-msm8994", "qcom,rpmcc";
> + #clock-cells = <1>;
> + };
> +
> + rpmpd: power-controller {
> + compatible = "qcom,msm8994-rpmpd";
> + #power-domain-cells = <1>;
> + operating-points-v2 = <&rpmpd_opp_table>;
> +
> + rpmpd_opp_table: opp-table {
> + compatible = "operating-points-v2";
> +
> + rpmpd_opp_ret: opp1 {
> + opp-level = <1>;
> + };
> + rpmpd_opp_svs_krait: opp2 {
> + opp-level = <2>;
> + };
> + rpmpd_opp_svs_soc: opp3 {
> + opp-level = <3>;
> + };
> + rpmpd_opp_nom: opp4 {
> + opp-level = <4>;
> + };
> + rpmpd_opp_turbo: opp5 {
> + opp-level = <5>;
> + };
> + rpmpd_opp_super_turbo: opp6 {
> + opp-level = <6>;
> + };
> + };
> + };
> + };
> + };
> + };
> +
> reserved-memory {
> #address-cells = <2>;
> #size-cells = <2>;
> @@ -237,55 +287,6 @@ reserved@6c00000 {
> };
> };
>
> - smd {
> - compatible = "qcom,smd";
> - rpm {
> - interrupts = <GIC_SPI 168 IRQ_TYPE_EDGE_RISING>;
> - qcom,ipc = <&apcs 8 0>;
> - qcom,smd-edge = <15>;
> - qcom,remote-pid = <6>;
> -
> - rpm_requests: rpm-requests {
> - compatible = "qcom,rpm-msm8994";
> - qcom,smd-channels = "rpm_requests";
> -
> - rpmcc: clock-controller {
> - compatible = "qcom,rpmcc-msm8994", "qcom,rpmcc";
> - #clock-cells = <1>;
> - };
> -
> - rpmpd: power-controller {
> - compatible = "qcom,msm8994-rpmpd";
> - #power-domain-cells = <1>;
> - operating-points-v2 = <&rpmpd_opp_table>;
> -
> - rpmpd_opp_table: opp-table {
> - compatible = "operating-points-v2";
> -
> - rpmpd_opp_ret: opp1 {
> - opp-level = <1>;
> - };
> - rpmpd_opp_svs_krait: opp2 {
> - opp-level = <2>;
> - };
> - rpmpd_opp_svs_soc: opp3 {
> - opp-level = <3>;
> - };
> - rpmpd_opp_nom: opp4 {
> - opp-level = <4>;
> - };
> - rpmpd_opp_turbo: opp5 {
> - opp-level = <5>;
> - };
> - rpmpd_opp_super_turbo: opp6 {
> - opp-level = <6>;
> - };
> - };
> - };
> - };
> - };
> - };
> -
> smem {
> compatible = "qcom,smem";
> memory-region = <&smem_mem>;
>