Message ID | 20241205-topic-sm8x50-gpu-bw-vote-v4-6-9650d15dd435@linaro.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | drm/msm: adreno: add support for DDR bandwidth scaling via GMU | expand |
On 12/5/2024 8:31 PM, Neil Armstrong wrote: > Each GPU OPP requires a specific peak DDR bandwidth, let's add > those to each OPP and also the related interconnect path. > > Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> I haven't checked each bw value, still Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com> -Akhil > --- > arch/arm64/boot/dts/qcom/sm8550.dtsi | 13 +++++++++++++ > 1 file changed, 13 insertions(+) > > diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi > index e7774d32fb6d2288748ecec00bf525b2b3c40fbb..955f58b2cb4e4ca3fd33f1555e36a15cfc82d642 100644 > --- a/arch/arm64/boot/dts/qcom/sm8550.dtsi > +++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi > @@ -14,6 +14,7 @@ > #include <dt-bindings/firmware/qcom,scm.h> > #include <dt-bindings/gpio/gpio.h> > #include <dt-bindings/interrupt-controller/arm-gic.h> > +#include <dt-bindings/interconnect/qcom,icc.h> > #include <dt-bindings/interconnect/qcom,sm8550-rpmh.h> > #include <dt-bindings/mailbox/qcom-ipcc.h> > #include <dt-bindings/power/qcom-rpmpd.h> > @@ -2114,6 +2115,10 @@ gpu: gpu@3d00000 { > qcom,gmu = <&gmu>; > #cooling-cells = <2>; > > + interconnects = <&gem_noc MASTER_GFX3D QCOM_ICC_TAG_ALWAYS > + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>; > + interconnect-names = "gfx-mem"; > + > status = "disabled"; > > zap-shader { > @@ -2127,41 +2132,49 @@ gpu_opp_table: opp-table { > opp-680000000 { > opp-hz = /bits/ 64 <680000000>; > opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>; > + opp-peak-kBps = <16500000>; > }; > > opp-615000000 { > opp-hz = /bits/ 64 <615000000>; > opp-level = <RPMH_REGULATOR_LEVEL_SVS_L0>; > + opp-peak-kBps = <16500000>; > }; > > opp-550000000 { > opp-hz = /bits/ 64 <550000000>; > opp-level = <RPMH_REGULATOR_LEVEL_SVS>; > + opp-peak-kBps = <12449218>; > }; > > opp-475000000 { > opp-hz = /bits/ 64 <475000000>; > opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_L1>; > + opp-peak-kBps = <8171875>; > }; > > opp-401000000 { > opp-hz = /bits/ 64 <401000000>; > opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>; > + opp-peak-kBps = <6671875>; > }; > > opp-348000000 { > opp-hz = /bits/ 64 <348000000>; > opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D0>; > + opp-peak-kBps = <6074218>; > }; > > opp-295000000 { > opp-hz = /bits/ 64 <295000000>; > opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1>; > + opp-peak-kBps = <6074218>; > }; > > opp-220000000 { > opp-hz = /bits/ 64 <220000000>; > opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D2>; > + opp-peak-kBps = <6074218>; > }; > }; > }; >
On 12/9/2024 6:32 PM, Akhil P Oommen wrote: > On 12/5/2024 8:31 PM, Neil Armstrong wrote: >> Each GPU OPP requires a specific peak DDR bandwidth, let's add >> those to each OPP and also the related interconnect path. >> >> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> > > I haven't checked each bw value, still > > Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com> > > -Akhil > >> --- >> arch/arm64/boot/dts/qcom/sm8550.dtsi | 13 +++++++++++++ >> 1 file changed, 13 insertions(+) >> >> diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi >> index e7774d32fb6d2288748ecec00bf525b2b3c40fbb..955f58b2cb4e4ca3fd33f1555e36a15cfc82d642 100644 >> --- a/arch/arm64/boot/dts/qcom/sm8550.dtsi >> +++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi >> @@ -14,6 +14,7 @@ >> #include <dt-bindings/firmware/qcom,scm.h> >> #include <dt-bindings/gpio/gpio.h> >> #include <dt-bindings/interrupt-controller/arm-gic.h> >> +#include <dt-bindings/interconnect/qcom,icc.h> >> #include <dt-bindings/interconnect/qcom,sm8550-rpmh.h> >> #include <dt-bindings/mailbox/qcom-ipcc.h> >> #include <dt-bindings/power/qcom-rpmpd.h> >> @@ -2114,6 +2115,10 @@ gpu: gpu@3d00000 { >> qcom,gmu = <&gmu>; >> #cooling-cells = <2>; >> >> + interconnects = <&gem_noc MASTER_GFX3D QCOM_ICC_TAG_ALWAYS >> + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>; >> + interconnect-names = "gfx-mem"; >> + >> status = "disabled"; >> >> zap-shader { >> @@ -2127,41 +2132,49 @@ gpu_opp_table: opp-table { >> opp-680000000 { >> opp-hz = /bits/ 64 <680000000>; >> opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>; >> + opp-peak-kBps = <16500000>; >> }; >> >> opp-615000000 { >> opp-hz = /bits/ 64 <615000000>; >> opp-level = <RPMH_REGULATOR_LEVEL_SVS_L0>; >> + opp-peak-kBps = <16500000>; Seems like you are using value from "qcom,bus-max" node for each opp in downstream devicetree. Except for the highest OPP, we should use the value from "qcom,bus-freq" node. That is supposed to give the best perf per watt. -Akhil. >> }; >> >> opp-550000000 { >> opp-hz = /bits/ 64 <550000000>; >> opp-level = <RPMH_REGULATOR_LEVEL_SVS>; >> + opp-peak-kBps = <12449218>; >> }; >> >> opp-475000000 { >> opp-hz = /bits/ 64 <475000000>; >> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_L1>; >> + opp-peak-kBps = <8171875>; >> }; >> >> opp-401000000 { >> opp-hz = /bits/ 64 <401000000>; >> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>; >> + opp-peak-kBps = <6671875>; >> }; >> >> opp-348000000 { >> opp-hz = /bits/ 64 <348000000>; >> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D0>; >> + opp-peak-kBps = <6074218>; >> }; >> >> opp-295000000 { >> opp-hz = /bits/ 64 <295000000>; >> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1>; >> + opp-peak-kBps = <6074218>; >> }; >> >> opp-220000000 { >> opp-hz = /bits/ 64 <220000000>; >> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D2>; >> + opp-peak-kBps = <6074218>; >> }; >> }; >> }; >> >
On 09/12/2024 14:10, Akhil P Oommen wrote: > On 12/9/2024 6:32 PM, Akhil P Oommen wrote: >> On 12/5/2024 8:31 PM, Neil Armstrong wrote: >>> Each GPU OPP requires a specific peak DDR bandwidth, let's add >>> those to each OPP and also the related interconnect path. >>> >>> Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> >> >> I haven't checked each bw value, still >> >> Reviewed-by: Akhil P Oommen <quic_akhilpo@quicinc.com> >> >> -Akhil >> >>> --- >>> arch/arm64/boot/dts/qcom/sm8550.dtsi | 13 +++++++++++++ >>> 1 file changed, 13 insertions(+) >>> >>> diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi >>> index e7774d32fb6d2288748ecec00bf525b2b3c40fbb..955f58b2cb4e4ca3fd33f1555e36a15cfc82d642 100644 >>> --- a/arch/arm64/boot/dts/qcom/sm8550.dtsi >>> +++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi >>> @@ -14,6 +14,7 @@ >>> #include <dt-bindings/firmware/qcom,scm.h> >>> #include <dt-bindings/gpio/gpio.h> >>> #include <dt-bindings/interrupt-controller/arm-gic.h> >>> +#include <dt-bindings/interconnect/qcom,icc.h> >>> #include <dt-bindings/interconnect/qcom,sm8550-rpmh.h> >>> #include <dt-bindings/mailbox/qcom-ipcc.h> >>> #include <dt-bindings/power/qcom-rpmpd.h> >>> @@ -2114,6 +2115,10 @@ gpu: gpu@3d00000 { >>> qcom,gmu = <&gmu>; >>> #cooling-cells = <2>; >>> >>> + interconnects = <&gem_noc MASTER_GFX3D QCOM_ICC_TAG_ALWAYS >>> + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>; >>> + interconnect-names = "gfx-mem"; >>> + >>> status = "disabled"; >>> >>> zap-shader { >>> @@ -2127,41 +2132,49 @@ gpu_opp_table: opp-table { >>> opp-680000000 { >>> opp-hz = /bits/ 64 <680000000>; >>> opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>; >>> + opp-peak-kBps = <16500000>; >>> }; >>> >>> opp-615000000 { >>> opp-hz = /bits/ 64 <615000000>; >>> opp-level = <RPMH_REGULATOR_LEVEL_SVS_L0>; >>> + opp-peak-kBps = <16500000>; > > Seems like you are using value from "qcom,bus-max" node for each opp in > downstream devicetree. Except for the highest OPP, we should use the > value from "qcom,bus-freq" node. That is supposed to give the best perf > per watt. Ack, I'll switch to the qcom,bus-freq value, Thanks, Neil > > -Akhil. > >>> }; >>> >>> opp-550000000 { >>> opp-hz = /bits/ 64 <550000000>; >>> opp-level = <RPMH_REGULATOR_LEVEL_SVS>; >>> + opp-peak-kBps = <12449218>; >>> }; >>> >>> opp-475000000 { >>> opp-hz = /bits/ 64 <475000000>; >>> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_L1>; >>> + opp-peak-kBps = <8171875>; >>> }; >>> >>> opp-401000000 { >>> opp-hz = /bits/ 64 <401000000>; >>> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>; >>> + opp-peak-kBps = <6671875>; >>> }; >>> >>> opp-348000000 { >>> opp-hz = /bits/ 64 <348000000>; >>> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D0>; >>> + opp-peak-kBps = <6074218>; >>> }; >>> >>> opp-295000000 { >>> opp-hz = /bits/ 64 <295000000>; >>> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1>; >>> + opp-peak-kBps = <6074218>; >>> }; >>> >>> opp-220000000 { >>> opp-hz = /bits/ 64 <220000000>; >>> opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D2>; >>> + opp-peak-kBps = <6074218>; >>> }; >>> }; >>> }; >>> >> >
diff --git a/arch/arm64/boot/dts/qcom/sm8550.dtsi b/arch/arm64/boot/dts/qcom/sm8550.dtsi index e7774d32fb6d2288748ecec00bf525b2b3c40fbb..955f58b2cb4e4ca3fd33f1555e36a15cfc82d642 100644 --- a/arch/arm64/boot/dts/qcom/sm8550.dtsi +++ b/arch/arm64/boot/dts/qcom/sm8550.dtsi @@ -14,6 +14,7 @@ #include <dt-bindings/firmware/qcom,scm.h> #include <dt-bindings/gpio/gpio.h> #include <dt-bindings/interrupt-controller/arm-gic.h> +#include <dt-bindings/interconnect/qcom,icc.h> #include <dt-bindings/interconnect/qcom,sm8550-rpmh.h> #include <dt-bindings/mailbox/qcom-ipcc.h> #include <dt-bindings/power/qcom-rpmpd.h> @@ -2114,6 +2115,10 @@ gpu: gpu@3d00000 { qcom,gmu = <&gmu>; #cooling-cells = <2>; + interconnects = <&gem_noc MASTER_GFX3D QCOM_ICC_TAG_ALWAYS + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>; + interconnect-names = "gfx-mem"; + status = "disabled"; zap-shader { @@ -2127,41 +2132,49 @@ gpu_opp_table: opp-table { opp-680000000 { opp-hz = /bits/ 64 <680000000>; opp-level = <RPMH_REGULATOR_LEVEL_SVS_L1>; + opp-peak-kBps = <16500000>; }; opp-615000000 { opp-hz = /bits/ 64 <615000000>; opp-level = <RPMH_REGULATOR_LEVEL_SVS_L0>; + opp-peak-kBps = <16500000>; }; opp-550000000 { opp-hz = /bits/ 64 <550000000>; opp-level = <RPMH_REGULATOR_LEVEL_SVS>; + opp-peak-kBps = <12449218>; }; opp-475000000 { opp-hz = /bits/ 64 <475000000>; opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_L1>; + opp-peak-kBps = <8171875>; }; opp-401000000 { opp-hz = /bits/ 64 <401000000>; opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS>; + opp-peak-kBps = <6671875>; }; opp-348000000 { opp-hz = /bits/ 64 <348000000>; opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D0>; + opp-peak-kBps = <6074218>; }; opp-295000000 { opp-hz = /bits/ 64 <295000000>; opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D1>; + opp-peak-kBps = <6074218>; }; opp-220000000 { opp-hz = /bits/ 64 <220000000>; opp-level = <RPMH_REGULATOR_LEVEL_LOW_SVS_D2>; + opp-peak-kBps = <6074218>; }; }; };
Each GPU OPP requires a specific peak DDR bandwidth, let's add those to each OPP and also the related interconnect path. Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> --- arch/arm64/boot/dts/qcom/sm8550.dtsi | 13 +++++++++++++ 1 file changed, 13 insertions(+)