[PATCH v3 1/4] drm/xe/bmg: Update Wa_14022085890

Belgaumkar, Vinay vinay.belgaumkar at intel.com
Tue Jun 3 20:31:59 UTC 2025


On 6/3/2025 12:31 PM, Summers, Stuart wrote:
> On Tue, 2025-06-03 at 11:41 -0700, Belgaumkar, Vinay wrote:
>> On 6/3/2025 10:36 AM, Summers, Stuart wrote:
>>> On Mon, 2025-06-02 at 16:44 -0700, Vinay Belgaumkar wrote:
>>>> Set GT min frequency to 1200Mhz once driver load is
>>>> complete.
>>>>
>>>> v2: Review comments (Rodrigo)
>>>> v3: Apply Wa earlier so user_req_min is not clobbered.
>>>>
>>>> Cc: Matt Roper <matthew.d.roper at intel.com>
>>>> Cc: Rodrigo Vivi <rodrigo.vivi at intel.com>
>>>> Signed-off-by: Vinay Belgaumkar <vinay.belgaumkar at intel.com>
>>>> ---
>>>>    drivers/gpu/drm/xe/xe_guc_pc.c     | 5 +++++
>>>>    drivers/gpu/drm/xe/xe_wa_oob.rules | 1 +
>>>>    2 files changed, 6 insertions(+)
>>>>
>>>> diff --git a/drivers/gpu/drm/xe/xe_guc_pc.c
>>>> b/drivers/gpu/drm/xe/xe_guc_pc.c
>>>> index 18c623992035..cb0563494fcc 100644
>>>> --- a/drivers/gpu/drm/xe/xe_guc_pc.c
>>>> +++ b/drivers/gpu/drm/xe/xe_guc_pc.c
>>>> @@ -51,6 +51,7 @@
>>>>    
>>>>    #define LNL_MERT_FREQ_CAP      800
>>>>    #define BMG_MERT_FREQ_CAP      2133
>>>> +#define BMG_MIN_FREQ           1200
>>>>    
>>>>    #define SLPC_RESET_TIMEOUT_MS 5 /* roughly 5ms, but no need for
>>>> precision */
>>>>    #define SLPC_RESET_EXTENDED_TIMEOUT_MS 1000 /* To be used only
>>>> at
>>>> pc_start */
>>>> @@ -843,6 +844,9 @@ static int pc_adjust_freq_bounds(struct
>>>> xe_guc_pc
>>>> *pc)
>>>>           if (pc_get_min_freq(pc) > pc->rp0_freq)
>>>>                   ret = pc_set_min_freq(pc, pc->rp0_freq);
>>>>    
>>>> +       if (XE_WA(pc_to_gt(pc), 14022085890))
>>>> +               ret = pc_set_min_freq(pc, max(BMG_MIN_FREQ,
>>>> pc_get_min_freq(pc)));
>>> Do we want this above the get_min_freq() call above? Seems like
>>> that
>>> would further limit which is what we'd want in that case right?
>> No, this is during SLPC init, we don't need to read the min freq at
>> this
>> point. We will adjust it later in the flow if there was a user
>> request.

This ensures min frequency is set to 1200. That is required by the WA. 
If there was no previous user request (like before a GT reset), the min 
will be set to 1200 instead of the usual RPe (which is around 500).

Thanks,

Vinay.

> So then what is the purpose of the code just above this?
>
> -Stuart
>
>> Thanks,
>>
>> Vinay.
>>
>>> Thanks,
>>> Stuart
>>>
>>>> +
>>>>    out:
>>>>           return ret;
>>>>    }
>>>> @@ -879,6 +883,7 @@ static int pc_set_mert_freq_cap(struct
>>>> xe_guc_pc
>>>> *pc)
>>>>                   ret = xe_guc_pc_get_min_freq(pc, &pc-
>>>>> stashed_min_freq);
>>>>                   if (!ret)
>>>>                           ret = xe_guc_pc_get_max_freq(pc, &pc-
>>>>> stashed_max_freq);
>>>> +
>>>>                   if (ret)
>>>>                           return ret;
>>>>    
>>>> diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules
>>>> b/drivers/gpu/drm/xe/xe_wa_oob.rules
>>>> index 9efc5accd43d..75fbdab68d44 100644
>>>> --- a/drivers/gpu/drm/xe/xe_wa_oob.rules
>>>> +++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
>>>> @@ -59,3 +59,4 @@ no_media_l3   MEDIA_VERSION(3000)
>>>>                   MEDIA_VERSION_RANGE(1301, 3000)
>>>>    16026508708    GRAPHICS_VERSION_RANGE(1200, 3001)
>>>>                   MEDIA_VERSION_RANGE(1300, 3000)
>>>> +14022085890    GRAPHICS_VERSION(2001)


More information about the Intel-xe mailing list