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>; >