lkml.org 
[lkml]   [2023]   [Apr]   [1]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Date
    Subject[PATCH v6 15/15] drm/msm/a6xx: Add A610 speedbin support
    A610 is implemented on at least three SoCs: SM6115 (bengal), SM6125
    (trinket) and SM6225 (khaje). Trinket does not support speed binning
    (only a single SKU exists) and we don't yet support khaje upstream.
    Hence, add a fuse mapping table for bengal to allow for per-chip
    frequency limiting.

    Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org>
    Signed-off-by: Konrad Dybcio <konrad.dybcio@linaro.org>
    ---
    drivers/gpu/drm/msm/adreno/a6xx_gpu.c | 27 +++++++++++++++++++++++++++
    1 file changed, 27 insertions(+)

    diff --git a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
    index f692f540c13c..e3be878afbb0 100644
    --- a/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
    +++ b/drivers/gpu/drm/msm/adreno/a6xx_gpu.c
    @@ -2100,6 +2100,30 @@ static bool a6xx_progress(struct msm_gpu *gpu, struct msm_ringbuffer *ring)
    return progress;
    }

    +static u32 a610_get_speed_bin(u32 fuse)
    +{
    + /*
    + * There are (at least) three SoCs implementing A610: SM6125 (trinket),
    + * SM6115 (bengal) and SM6225 (khaje). Trinket does not have speedbinning,
    + * as only a single SKU exists and we don't support khaje upstream yet.
    + * Hence, this matching table is only valid for bengal and can be easily
    + * expanded if need be.
    + */
    +
    + if (fuse == 0)
    + return 0;
    + else if (fuse == 206)
    + return 1;
    + else if (fuse == 200)
    + return 2;
    + else if (fuse == 157)
    + return 3;
    + else if (fuse == 127)
    + return 4;
    +
    + return UINT_MAX;
    +}
    +
    static u32 a618_get_speed_bin(u32 fuse)
    {
    if (fuse == 0)
    @@ -2196,6 +2220,9 @@ static u32 fuse_to_supp_hw(struct device *dev, struct adreno_gpu *adreno_gpu, u3
    {
    u32 val = UINT_MAX;

    + if (adreno_is_a610(adreno_gpu))
    + val = a610_get_speed_bin(fuse);
    +
    if (adreno_is_a618(adreno_gpu))
    val = a618_get_speed_bin(fuse);

    --
    2.40.0

    \
     
     \ /
      Last update: 2023-04-01 13:57    [W:2.176 / U:0.056 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site