Message ID | 20240405-topic-smem_speedbin-v1-3-ce2b864251b1@linaro.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | Add SMEM-based speedbin matching | expand |
On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: > From: Neil Armstrong <neil.armstrong@linaro.org> > > Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock > the highest. Falling back to it when things go wrong is largely > suboptimal, as more often than not, the top frequencies are not > supposed to work on other bins. Isn't it better to just return an error here instead of trying to guess which speedbin to use? If that's not the case, I think the commit should be expanded with actually setting default_speedbin for the existing GPUs. > > Let the developer specify the intended "lowest common denominator" bin > in struct adreno_info. If not specified, partial struct initialization > will ensure it's set to zero, retaining previous behavior. > > Signed-off-by: Neil Armstrong <neil.armstrong@linaro.org> > [Konrad: clean up, add commit message] > Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org> > --- > drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 2 +- > drivers/gpu/drm/msm/adreno/adreno_gpu.h | 1 + > 2 files changed, 2 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > index 0674aca0f8a3..4cbdfabbcee5 100644 > --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c > @@ -2915,7 +2915,7 @@ static int a6xx_set_supported_hw(struct device *dev, const struct adreno_info *i > DRM_DEV_ERROR(dev, > "missing support for speed-bin: %u. Some OPPs may not be supported by hardware\n", > speedbin); > - supp_hw = BIT(0); /* Default */ > + supp_hw = BIT(info->default_speedbin); /* Default */ > } > > ret = devm_pm_opp_set_supported_hw(dev, &supp_hw, 1); > diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/adreno/adreno_gpu.h > index 77526892eb8c..460b399be37b 100644 > --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h > +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h > @@ -110,6 +110,7 @@ struct adreno_info { > * {SHRT_MAX, 0} sentinal. > */ > struct adreno_speedbin *speedbins; > + unsigned int default_speedbin; > }; > > #define ADRENO_CHIP_IDS(tbl...) (uint32_t[]) { tbl, 0 } > > -- > 2.40.1 >
On 4/6/24 04:56, Dmitry Baryshkov wrote: > On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: >> From: Neil Armstrong <neil.armstrong@linaro.org> >> >> Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock >> the highest. Falling back to it when things go wrong is largely >> suboptimal, as more often than not, the top frequencies are not >> supposed to work on other bins. > > Isn't it better to just return an error here instead of trying to guess > which speedbin to use? Not sure. I'd rather better compatibility for e.g. booting up a new laptop with just dt. > > If that's not the case, I think the commit should be expanded with > actually setting default_speedbin for the existing GPUs. I think that should be addressed, although separately. Konrad
On Tue, Apr 09, 2024 at 05:12:46PM +0200, Konrad Dybcio wrote: > > > On 4/6/24 04:56, Dmitry Baryshkov wrote: > > On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: > > > From: Neil Armstrong <neil.armstrong@linaro.org> > > > > > > Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock > > > the highest. Falling back to it when things go wrong is largely > > > suboptimal, as more often than not, the top frequencies are not > > > supposed to work on other bins. > > > > Isn't it better to just return an error here instead of trying to guess > > which speedbin to use? > > Not sure. I'd rather better compatibility for e.g. booting up a new > laptop with just dt. New speedbin can have lower max speed, so by attempting to run it at higher freq you might be breaking it. > > > > > If that's not the case, I think the commit should be expanded with > > actually setting default_speedbin for the existing GPUs. > > I think that should be addressed, although separately. I'd prefer to have it as a part of this patch, but I'd not NAK it just for this reason.
On Tue, Apr 9, 2024 at 8:23 AM Dmitry Baryshkov <dmitry.baryshkov@linaro.org> wrote: > > On Tue, Apr 09, 2024 at 05:12:46PM +0200, Konrad Dybcio wrote: > > > > > > On 4/6/24 04:56, Dmitry Baryshkov wrote: > > > On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: > > > > From: Neil Armstrong <neil.armstrong@linaro.org> > > > > > > > > Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock > > > > the highest. Falling back to it when things go wrong is largely > > > > suboptimal, as more often than not, the top frequencies are not > > > > supposed to work on other bins. > > > > > > Isn't it better to just return an error here instead of trying to guess > > > which speedbin to use? > > > > Not sure. I'd rather better compatibility for e.g. booting up a new > > laptop with just dt. > > New speedbin can have lower max speed, so by attempting to run it at > higher freq you might be breaking it. Usually there are some OPPs in common to all speedbins, so picking a freq from that set would seem like the safe thing to do BR, -R > > > > > > > > > If that's not the case, I think the commit should be expanded with > > > actually setting default_speedbin for the existing GPUs. > > > > I think that should be addressed, although separately. > > I'd prefer to have it as a part of this patch, but I'd not NAK it just > for this reason. > > -- > With best wishes > Dmitry
On Tue, Apr 09, 2024 at 10:12:00AM -0700, Rob Clark wrote: > On Tue, Apr 9, 2024 at 8:23 AM Dmitry Baryshkov > <dmitry.baryshkov@linaro.org> wrote: > > > > On Tue, Apr 09, 2024 at 05:12:46PM +0200, Konrad Dybcio wrote: > > > > > > > > > On 4/6/24 04:56, Dmitry Baryshkov wrote: > > > > On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: > > > > > From: Neil Armstrong <neil.armstrong@linaro.org> > > > > > > > > > > Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock > > > > > the highest. Falling back to it when things go wrong is largely > > > > > suboptimal, as more often than not, the top frequencies are not > > > > > supposed to work on other bins. > > > > > > > > Isn't it better to just return an error here instead of trying to guess > > > > which speedbin to use? > > > > > > Not sure. I'd rather better compatibility for e.g. booting up a new > > > laptop with just dt. > > > > New speedbin can have lower max speed, so by attempting to run it at > > higher freq you might be breaking it. > > Usually there are some OPPs in common to all speedbins, so picking a > freq from that set would seem like the safe thing to do Well, the issue is about an uknown speed bin. So in theory we know nothing about the set of speeds itsupports. My point is that we should simplfy fail in such case. > > BR, > -R > > > > > > > > > > > > > > If that's not the case, I think the commit should be expanded with > > > > actually setting default_speedbin for the existing GPUs. > > > > > > I think that should be addressed, although separately. > > > > I'd prefer to have it as a part of this patch, but I'd not NAK it just > > for this reason. > > > > -- > > With best wishes > > Dmitry
On 4/9/24 20:04, Dmitry Baryshkov wrote: > On Tue, Apr 09, 2024 at 10:12:00AM -0700, Rob Clark wrote: >> On Tue, Apr 9, 2024 at 8:23 AM Dmitry Baryshkov >> <dmitry.baryshkov@linaro.org> wrote: >>> >>> On Tue, Apr 09, 2024 at 05:12:46PM +0200, Konrad Dybcio wrote: >>>> >>>> >>>> On 4/6/24 04:56, Dmitry Baryshkov wrote: >>>>> On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: >>>>>> From: Neil Armstrong <neil.armstrong@linaro.org> >>>>>> >>>>>> Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock >>>>>> the highest. Falling back to it when things go wrong is largely >>>>>> suboptimal, as more often than not, the top frequencies are not >>>>>> supposed to work on other bins. >>>>> >>>>> Isn't it better to just return an error here instead of trying to guess >>>>> which speedbin to use? >>>> >>>> Not sure. I'd rather better compatibility for e.g. booting up a new >>>> laptop with just dt. >>> >>> New speedbin can have lower max speed, so by attempting to run it at >>> higher freq you might be breaking it. >> >> Usually there are some OPPs in common to all speedbins, so picking a >> freq from that set would seem like the safe thing to do > > Well, the issue is about an uknown speed bin. So in theory we know > nothing about the set of speeds itsupports. My point is that we should > simplfy fail in such case. Or we could allow e.g. the lowest frequency (or 2) which if often shared across the board to work, giving a compromise between OOBE and sanity Konrad
On Tue, Apr 09, 2024 at 08:07:56PM +0200, Konrad Dybcio wrote: > > > On 4/9/24 20:04, Dmitry Baryshkov wrote: > > On Tue, Apr 09, 2024 at 10:12:00AM -0700, Rob Clark wrote: > > > On Tue, Apr 9, 2024 at 8:23 AM Dmitry Baryshkov > > > <dmitry.baryshkov@linaro.org> wrote: > > > > > > > > On Tue, Apr 09, 2024 at 05:12:46PM +0200, Konrad Dybcio wrote: > > > > > > > > > > > > > > > On 4/6/24 04:56, Dmitry Baryshkov wrote: > > > > > > On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: > > > > > > > From: Neil Armstrong <neil.armstrong@linaro.org> > > > > > > > > > > > > > > Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock > > > > > > > the highest. Falling back to it when things go wrong is largely > > > > > > > suboptimal, as more often than not, the top frequencies are not > > > > > > > supposed to work on other bins. > > > > > > > > > > > > Isn't it better to just return an error here instead of trying to guess > > > > > > which speedbin to use? > > > > > > > > > > Not sure. I'd rather better compatibility for e.g. booting up a new > > > > > laptop with just dt. > > > > > > > > New speedbin can have lower max speed, so by attempting to run it at > > > > higher freq you might be breaking it. > > > > > > Usually there are some OPPs in common to all speedbins, so picking a > > > freq from that set would seem like the safe thing to do > > > > Well, the issue is about an uknown speed bin. So in theory we know > > nothing about the set of speeds itsupports. My point is that we should > > simplfy fail in such case. > > Or we could allow e.g. the lowest frequency (or 2) which if often shared > across the board to work, giving a compromise between OOBE and sanity That's also an option. But we should not be using existing speed table for the unknown bin.
On 4/9/24 20:15, Dmitry Baryshkov wrote: > On Tue, Apr 09, 2024 at 08:07:56PM +0200, Konrad Dybcio wrote: >> >> >> On 4/9/24 20:04, Dmitry Baryshkov wrote: >>> On Tue, Apr 09, 2024 at 10:12:00AM -0700, Rob Clark wrote: >>>> On Tue, Apr 9, 2024 at 8:23 AM Dmitry Baryshkov >>>> <dmitry.baryshkov@linaro.org> wrote: >>>>> >>>>> On Tue, Apr 09, 2024 at 05:12:46PM +0200, Konrad Dybcio wrote: >>>>>> >>>>>> >>>>>> On 4/6/24 04:56, Dmitry Baryshkov wrote: >>>>>>> On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: >>>>>>>> From: Neil Armstrong <neil.armstrong@linaro.org> >>>>>>>> >>>>>>>> Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock >>>>>>>> the highest. Falling back to it when things go wrong is largely >>>>>>>> suboptimal, as more often than not, the top frequencies are not >>>>>>>> supposed to work on other bins. >>>>>>> >>>>>>> Isn't it better to just return an error here instead of trying to guess >>>>>>> which speedbin to use? >>>>>> >>>>>> Not sure. I'd rather better compatibility for e.g. booting up a new >>>>>> laptop with just dt. >>>>> >>>>> New speedbin can have lower max speed, so by attempting to run it at >>>>> higher freq you might be breaking it. >>>> >>>> Usually there are some OPPs in common to all speedbins, so picking a >>>> freq from that set would seem like the safe thing to do >>> >>> Well, the issue is about an uknown speed bin. So in theory we know >>> nothing about the set of speeds itsupports. My point is that we should >>> simplfy fail in such case. >> >> Or we could allow e.g. the lowest frequency (or 2) which if often shared >> across the board to work, giving a compromise between OOBE and sanity > > That's also an option. But we should not be using existing speed table for > the unknown bin. I derived this logic from msm-5.15 where it's "intended behavior".. I suppose we can do better as you said though There have been cases in the past where the default speed bin ended up having a higher max freq than subsequent ones, and I don't think I can trust this product/feature code approach to guarantee this never happening again. So. I think sticking to a single lowest freq and printing a big red line in dmesg makes sense here Konrad
On Tue, 9 Apr 2024 at 21:27, Konrad Dybcio <konrad.dybcio@linaro.org> wrote: > > > > On 4/9/24 20:15, Dmitry Baryshkov wrote: > > On Tue, Apr 09, 2024 at 08:07:56PM +0200, Konrad Dybcio wrote: > >> > >> > >> On 4/9/24 20:04, Dmitry Baryshkov wrote: > >>> On Tue, Apr 09, 2024 at 10:12:00AM -0700, Rob Clark wrote: > >>>> On Tue, Apr 9, 2024 at 8:23 AM Dmitry Baryshkov > >>>> <dmitry.baryshkov@linaro.org> wrote: > >>>>> > >>>>> On Tue, Apr 09, 2024 at 05:12:46PM +0200, Konrad Dybcio wrote: > >>>>>> > >>>>>> > >>>>>> On 4/6/24 04:56, Dmitry Baryshkov wrote: > >>>>>>> On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: > >>>>>>>> From: Neil Armstrong <neil.armstrong@linaro.org> > >>>>>>>> > >>>>>>>> Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock > >>>>>>>> the highest. Falling back to it when things go wrong is largely > >>>>>>>> suboptimal, as more often than not, the top frequencies are not > >>>>>>>> supposed to work on other bins. > >>>>>>> > >>>>>>> Isn't it better to just return an error here instead of trying to guess > >>>>>>> which speedbin to use? > >>>>>> > >>>>>> Not sure. I'd rather better compatibility for e.g. booting up a new > >>>>>> laptop with just dt. > >>>>> > >>>>> New speedbin can have lower max speed, so by attempting to run it at > >>>>> higher freq you might be breaking it. > >>>> > >>>> Usually there are some OPPs in common to all speedbins, so picking a > >>>> freq from that set would seem like the safe thing to do > >>> > >>> Well, the issue is about an uknown speed bin. So in theory we know > >>> nothing about the set of speeds itsupports. My point is that we should > >>> simplfy fail in such case. > >> > >> Or we could allow e.g. the lowest frequency (or 2) which if often shared > >> across the board to work, giving a compromise between OOBE and sanity > > > > That's also an option. But we should not be using existing speed table for > > the unknown bin. > > I derived this logic from msm-5.15 where it's "intended behavior".. I > suppose we can do better as you said though > > There have been cases in the past where the default speed bin ended up > having a higher max freq than subsequent ones, and I don't think I can > trust this product/feature code approach to guarantee this never > happening again. > > So. I think sticking to a single lowest freq and printing a big red line > in dmesg makes sense here Make 0x80 the default supported-hw, make sure that the lowest freq has 0xff. Plus big-red-line. And hope that we'll never see 16 speed bins for the hardware.
On 4/9/24 20:31, Dmitry Baryshkov wrote: > On Tue, 9 Apr 2024 at 21:27, Konrad Dybcio <konrad.dybcio@linaro.org> wrote: >> >> >> >> On 4/9/24 20:15, Dmitry Baryshkov wrote: >>> On Tue, Apr 09, 2024 at 08:07:56PM +0200, Konrad Dybcio wrote: >>>> >>>> >>>> On 4/9/24 20:04, Dmitry Baryshkov wrote: >>>>> On Tue, Apr 09, 2024 at 10:12:00AM -0700, Rob Clark wrote: >>>>>> On Tue, Apr 9, 2024 at 8:23 AM Dmitry Baryshkov >>>>>> <dmitry.baryshkov@linaro.org> wrote: >>>>>>> >>>>>>> On Tue, Apr 09, 2024 at 05:12:46PM +0200, Konrad Dybcio wrote: >>>>>>>> >>>>>>>> >>>>>>>> On 4/6/24 04:56, Dmitry Baryshkov wrote: >>>>>>>>> On Fri, Apr 05, 2024 at 10:41:31AM +0200, Konrad Dybcio wrote: >>>>>>>>>> From: Neil Armstrong <neil.armstrong@linaro.org> >>>>>>>>>> >>>>>>>>>> Usually, speedbin 0 is the "super SKU", a.k.a the one which can clock >>>>>>>>>> the highest. Falling back to it when things go wrong is largely >>>>>>>>>> suboptimal, as more often than not, the top frequencies are not >>>>>>>>>> supposed to work on other bins. >>>>>>>>> >>>>>>>>> Isn't it better to just return an error here instead of trying to guess >>>>>>>>> which speedbin to use? >>>>>>>> >>>>>>>> Not sure. I'd rather better compatibility for e.g. booting up a new >>>>>>>> laptop with just dt. >>>>>>> >>>>>>> New speedbin can have lower max speed, so by attempting to run it at >>>>>>> higher freq you might be breaking it. >>>>>> >>>>>> Usually there are some OPPs in common to all speedbins, so picking a >>>>>> freq from that set would seem like the safe thing to do >>>>> >>>>> Well, the issue is about an uknown speed bin. So in theory we know >>>>> nothing about the set of speeds itsupports. My point is that we should >>>>> simplfy fail in such case. >>>> >>>> Or we could allow e.g. the lowest frequency (or 2) which if often shared >>>> across the board to work, giving a compromise between OOBE and sanity >>> >>> That's also an option. But we should not be using existing speed table for >>> the unknown bin. >> >> I derived this logic from msm-5.15 where it's "intended behavior".. I >> suppose we can do better as you said though >> >> There have been cases in the past where the default speed bin ended up >> having a higher max freq than subsequent ones, and I don't think I can >> trust this product/feature code approach to guarantee this never >> happening again. >> >> So. I think sticking to a single lowest freq and printing a big red line >> in dmesg makes sense here > > Make 0x80 the default supported-hw, make sure that the lowest freq has > 0xff. Plus big-red-line. > And hope that we'll never see 16 speed bins for the hardware. opp-supported-hw is a u32 bitmask fwiw I was thinking, either 0xffffffff or some driver-side hackery (dev_pm_opp_enable). Perhaps I'd be more in favor of the latter, as putting meaningless gobblygoo in dt is not good Konrad
diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c index 0674aca0f8a3..4cbdfabbcee5 100644 --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c @@ -2915,7 +2915,7 @@ static int a6xx_set_supported_hw(struct device *dev, const struct adreno_info *i DRM_DEV_ERROR(dev, "missing support for speed-bin: %u. Some OPPs may not be supported by hardware\n", speedbin); - supp_hw = BIT(0); /* Default */ + supp_hw = BIT(info->default_speedbin); /* Default */ } ret = devm_pm_opp_set_supported_hw(dev, &supp_hw, 1); diff --git a/drivers/gpu/drm/msm/adreno/adreno_gpu.h b/drivers/gpu/drm/msm/adreno/adreno_gpu.h index 77526892eb8c..460b399be37b 100644 --- a/drivers/gpu/drm/msm/adreno/adreno_gpu.h +++ b/drivers/gpu/drm/msm/adreno/adreno_gpu.h @@ -110,6 +110,7 @@ struct adreno_info { * {SHRT_MAX, 0} sentinal. */ struct adreno_speedbin *speedbins; + unsigned int default_speedbin; }; #define ADRENO_CHIP_IDS(tbl...) (uint32_t[]) { tbl, 0 }