Message ID | 20240125-msm8953-gpu-v1-0-f6493a5951f3@z3ntu.xyz |
---|---|
Headers | show |
Series | Add GPU support to MSM8953 SoC | expand |
On 1/25/24 22:56, Luca Weiss wrote: > From: Vladimir Lypak <vladimir.lypak@gmail.com> > > Add the GPU node for the Adreno 506 found on this family of SoCs. The > clock speeds are a bit different per SoC variant, SDM450 maxes out at > 600MHz while MSM8953 (= SDM625) goes up to 650MHz and SDM632 goes up to > 725MHz. > > To achieve this, create a new sdm450.dtsi to hold the 600MHz OPP and > use the new dtsi for sdm450-motorola-ali. > > Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com> > Co-developed-by: Luca Weiss <luca@z3ntu.xyz> > Signed-off-by: Luca Weiss <luca@z3ntu.xyz> > --- > arch/arm64/boot/dts/qcom/msm8953.dtsi | 115 +++++++++++++++++++++++ > arch/arm64/boot/dts/qcom/sdm450-motorola-ali.dts | 2 +- > arch/arm64/boot/dts/qcom/sdm450.dtsi | 14 +++ > arch/arm64/boot/dts/qcom/sdm632.dtsi | 8 ++ > 4 files changed, 138 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/boot/dts/qcom/msm8953.dtsi b/arch/arm64/boot/dts/qcom/msm8953.dtsi > index 91d083871ab0..1fe0c0c4fd15 100644 > --- a/arch/arm64/boot/dts/qcom/msm8953.dtsi > +++ b/arch/arm64/boot/dts/qcom/msm8953.dtsi > @@ -1046,6 +1046,94 @@ mdss_dsi1_phy: phy@1a96400 { > }; > }; > > + gpu: gpu@1c00000 { > + compatible = "qcom,adreno-506.0", "qcom,adreno"; > + reg = <0x01c00000 0x40000>; > + reg-names = "kgsl_3d0_reg_memory"; > + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; > + > + clocks = <&gcc GCC_OXILI_GFX3D_CLK>, > + <&gcc GCC_OXILI_AHB_CLK>, > + <&gcc GCC_BIMC_GFX_CLK>, > + <&gcc GCC_BIMC_GPU_CLK>, > + <&gcc GCC_OXILI_TIMER_CLK>, > + <&gcc GCC_OXILI_AON_CLK>; > + clock-names = "core", > + "iface", > + "mem_iface", > + "alt_mem_iface", > + "rbbmtimer", > + "alwayson"; > + power-domains = <&gcc OXILI_GX_GDSC>; > + > + iommus = <&gpu_iommu 0>; > + operating-points-v2 = <&gpu_opp_table>; > + > + #cooling-cells = <2>; > + > + status = "disabled"; > + > + zap-shader { > + memory-region = <&zap_shader_region>; > + }; > + > + gpu_opp_table: opp-table { > + compatible = "operating-points-v2"; > + > + opp-19200000 { > + opp-hz = /bits/ 64 <19200000>; > + opp-supported-hw = <0xff>; > + required-opps = <&rpmpd_opp_min_svs>; > + }; If you remove all OPPs but this one, can the GPU still spit out pixels? Konrad
On Freitag, 26. Jänner 2024 00:50:43 CET Konrad Dybcio wrote: > On 1/25/24 22:56, Luca Weiss wrote: > > From: Vladimir Lypak <vladimir.lypak@gmail.com> > > > > Add the GPU node for the Adreno 506 found on this family of SoCs. The > > clock speeds are a bit different per SoC variant, SDM450 maxes out at > > 600MHz while MSM8953 (= SDM625) goes up to 650MHz and SDM632 goes up to > > 725MHz. > > > > To achieve this, create a new sdm450.dtsi to hold the 600MHz OPP and > > use the new dtsi for sdm450-motorola-ali. > > > > Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com> > > Co-developed-by: Luca Weiss <luca@z3ntu.xyz> > > Signed-off-by: Luca Weiss <luca@z3ntu.xyz> > > --- > > > > arch/arm64/boot/dts/qcom/msm8953.dtsi | 115 > > +++++++++++++++++++++++ > > arch/arm64/boot/dts/qcom/sdm450-motorola-ali.dts | 2 +- > > arch/arm64/boot/dts/qcom/sdm450.dtsi | 14 +++ > > arch/arm64/boot/dts/qcom/sdm632.dtsi | 8 ++ > > 4 files changed, 138 insertions(+), 1 deletion(-) > > > > diff --git a/arch/arm64/boot/dts/qcom/msm8953.dtsi > > b/arch/arm64/boot/dts/qcom/msm8953.dtsi index 91d083871ab0..1fe0c0c4fd15 > > 100644 > > --- a/arch/arm64/boot/dts/qcom/msm8953.dtsi > > +++ b/arch/arm64/boot/dts/qcom/msm8953.dtsi > > @@ -1046,6 +1046,94 @@ mdss_dsi1_phy: phy@1a96400 { > > > > }; > > > > }; > > > > + gpu: gpu@1c00000 { > > + compatible = "qcom,adreno-506.0", "qcom,adreno"; > > + reg = <0x01c00000 0x40000>; > > + reg-names = "kgsl_3d0_reg_memory"; > > + interrupts = <GIC_SPI 33 IRQ_TYPE_LEVEL_HIGH>; > > + > > + clocks = <&gcc GCC_OXILI_GFX3D_CLK>, > > + <&gcc GCC_OXILI_AHB_CLK>, > > + <&gcc GCC_BIMC_GFX_CLK>, > > + <&gcc GCC_BIMC_GPU_CLK>, > > + <&gcc GCC_OXILI_TIMER_CLK>, > > + <&gcc GCC_OXILI_AON_CLK>; > > + clock-names = "core", > > + "iface", > > + "mem_iface", > > + "alt_mem_iface", > > + "rbbmtimer", > > + "alwayson"; > > + power-domains = <&gcc OXILI_GX_GDSC>; > > + > > + iommus = <&gpu_iommu 0>; > > + operating-points-v2 = <&gpu_opp_table>; > > + > > + #cooling-cells = <2>; > > + > > + status = "disabled"; > > + > > + zap-shader { > > + memory-region = <&zap_shader_region>; > > + }; > > + > > + gpu_opp_table: opp-table { > > + compatible = "operating-points-v2"; > > + > > + opp-19200000 { > > + opp-hz = /bits/ 64 <19200000>; > > + opp-supported-hw = <0xff>; > > + required-opps = <&rpmpd_opp_min_svs>; > > + }; > > If you remove all OPPs but this one, can the GPU still spit out pixels? Yep, phosh is starting and is rendering at a few fps. fairphone-fp3:~$ cat /sys/devices/platform/soc@0/1c00000.gpu/devfreq/1c00000.gpu/min_freq 19200000 fairphone-fp3:~$ cat /sys/devices/platform/soc@0/1c00000.gpu/devfreq/1c00000.gpu/max_freq 19200000 fairphone-fp3:~$ cat /sys/devices/platform/soc@0/1c00000.gpu/devfreq/1c00000.gpu/cur_freq 19200000 Regards Luca > > Konrad
Add the GPU IOMMU and GPU nodes to the msm8953 dtsi so GPU can work. First of all, functionally this series looks fine, tested on sdm632-fairphone-fp3. Secondly and the reason this is marked RFC for now is basically just dt bindings check fail, and some questions regarding IOMMU compatible. Basically I'm unsure what compatible (or even driver) IOMMU should use. qcom,msm-iommu-v2 is now in the patchset which seems to be okay, and also should handle the gfx3d_secure secure context correctly. Apart from some special handling there qcom,msm-iommu-v1 compatible is equivalent on the driver side. Currently the dt bindings say qcom,msm8953-iommu should be followed by qcom,msm-iommu-v1 which is the case for apps_iommu. But if we use qcom,msm-iommu-v2 for gpu_iommu then we can't re-use the same qcom,msm8953-iommu I think. Possible solutions: 1. Switch apps_iommu to use qcom,msm-iommu-v2 in dts & bindings? Since there's basically no special handling for either in the driver I don't forsee any problems. Then we can also use -v2 for gpu_iommu no problem. 2. Use qcom,msm-iommu-v1 for gpu_iommu? From some testing it also seems to work, I guess because the secure context is never used? 3. Use arm_smmu driver for gpu_iommu? Vladimir Lypak has suggested that, but that would at least need some more patching to work on msm8953. I probably don't have the motivation to take this on myself. Also what benefit would it bring? Hope I haven't rambled too long here and it's somewhat understandable. Please let me know what you think, which direction we can take to resolve this. (Also GPU clock-names dt-schema check fails but that seems to be the case on more a5xx GPUs also) Signed-off-by: Luca Weiss <luca@z3ntu.xyz> --- Vladimir Lypak (2): arm64: dts: qcom: msm8953: Add GPU IOMMU arm64: dts: qcom: msm8953: Add GPU arch/arm64/boot/dts/qcom/msm8953.dtsi | 146 +++++++++++++++++++++++ arch/arm64/boot/dts/qcom/sdm450-motorola-ali.dts | 2 +- arch/arm64/boot/dts/qcom/sdm450.dtsi | 14 +++ arch/arm64/boot/dts/qcom/sdm632.dtsi | 8 ++ 4 files changed, 169 insertions(+), 1 deletion(-) --- base-commit: 0e21aa976976d5fba8cd1f8f64bcce49beb5f895 change-id: 20231212-msm8953-gpu-4c085365f594 Best regards,