Messages in this thread | | | Date | Fri, 17 Feb 2023 23:25:10 +0200 | Subject | Re: [PATCH v2 13/14] drm/msm/a6xx: Add A619_holi speedbin support | From | Dmitry Baryshkov <> |
| |
On 14/02/2023 19:31, Konrad Dybcio wrote: > A619_holi is implemented on at least two SoCs: SM4350 (holi) and SM6375 > (blair). This is what seems to be a first occurrence of this happening, > but it's easy to overcome by guarding the SoC-specific fuse values with > of_machine_is_compatible(). Do just that to enable frequency limiting > on these SoCs. > > Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> > --- > drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 31 +++++++++++++++++++++++++++ > 1 file changed, 31 insertions(+) > > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > index ffe0fd431a76..94b4d93619ed 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > @@ -2094,6 +2094,34 @@ static u32 a618_get_speed_bin(u32 fuse) > return UINT_MAX; > } > > +static u32 a619_holi_get_speed_bin(u32 fuse) > +{ > + /* > + * There are (at least) two SoCs implementing A619_holi: SM4350 (holi) > + * and SM6375 (blair). Limit the fuse matching to the corresponding > + * SoC to prevent bogus frequency setting (as improbable as it may be, > + * given unexpected fuse values are.. unexpected! But still possible.) > + */ > + > + if (fuse == 0) > + return 0; > + > + if (of_machine_is_compatible("qcom,sm4350")) { > + if (fuse == 138) > + return 1; > + else if (fuse == 92) > + return 2; > + } else if (of_machine_is_compatible("qcom,sm6375")) { > + if (fuse == 190) > + return 1; > + else if (fuse == 177) > + return 2;
Ugh.
> + } else > + pr_warn("Unknown SoC implementing A619_holi!\n"); > + > + return UINT_MAX; > +} > + > static u32 a619_get_speed_bin(u32 fuse) > { > if (fuse == 0) > @@ -2153,6 +2181,9 @@ static u32 fuse_to_supp_hw(struct device *dev, struct adreno_rev rev, u32 fuse) > if (adreno_cmp_rev(ADRENO_REV(6, 1, 8, ANY_ID), rev)) > val = a618_get_speed_bin(fuse); > > + else if (adreno_cmp_rev(ADRENO_REV(6, 1, 9, 1), rev))
I really think it begs to have && !of_find_property(dev->of_node, "qcom,gmu") here.
> + val = a619_holi_get_speed_bin(fuse); > + > else if (adreno_cmp_rev(ADRENO_REV(6, 1, 9, ANY_ID), rev)) > val = a619_get_speed_bin(fuse); >
-- With best wishes Dmitry
| |