On Tue, Jun 16, 2026 at 01:15:53PM +0300, Vinod Govindapillai wrote:
> Bspec has been updated for xe2_lpd+ platforms on how to handle
> the bw buddy prgramming in case no matching memory configuration
> is found w.r.t the current page mask table. The recommendation
> is to keep the default settings for the related registers as it
> is without explicitly disabling the bw buddy.
> 
> Bspec: 68871
> Suggested-by: Ville Syrjala <[email protected]>
> Signed-off-by: Vinod Govindapillai <[email protected]>
> ---
>  .../drm/i915/display/intel_display_power.c    | 43 +++++++++++++------
>  1 file changed, 30 insertions(+), 13 deletions(-)
> 
> diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c 
> b/drivers/gpu/drm/i915/display/intel_display_power.c
> index 2e51dfcd5dce..dcfd78f48622 100644
> --- a/drivers/gpu/drm/i915/display/intel_display_power.c
> +++ b/drivers/gpu/drm/i915/display/intel_display_power.c
> @@ -1631,23 +1631,40 @@ static void tgl_bw_buddy_init(struct intel_display 
> *display)
>                   table[config].type == dram_info->type)
>                       break;
>  
> +     /*
> +      * If we don't recognize the memory configuration, explicitly disable
> +      * the address buddy logic in pre-xe2_lpd platforms as it was before.
> +      * In xe2_lpd+ cases, page masks must be set to 0 if no matching
> +      * configuration is found in the table. So keep the default settings
> +      * as it is. By default, BW_BUDDY_CTL bit 31 is 0 (bw buddy enabled)
> +      * and BW_BUDDY_PAGE_MASK is 0x0

This seems to mostly just repeat what the code already says.

> +      *
> +      * TODO: Revisit the buddy page masks table when bspec updates the
> +      * table with the correct number of channels for each dram type.
> +      */

That TODO is unrelated to the changes here, and also seems misplaced.

>       if (table[config].page_mask == 0) {
>               drm_dbg_kms(display->drm,
>                           "Unknown memory configuration; disabling address 
> buddy logic.\n");
> -             for_each_set_bit(i, &abox_mask, BITS_PER_TYPE(abox_mask))
> -                     intel_de_write(display, BW_BUDDY_CTL(i),
> -                                    BW_BUDDY_DISABLE);
> -     } else {
> -             for_each_set_bit(i, &abox_mask, BITS_PER_TYPE(abox_mask)) {
> -                     intel_de_write(display, BW_BUDDY_PAGE_MASK(i),
> -                                    table[config].page_mask);
> -
> -                     /* Wa_22010178259:tgl,dg1,rkl,adl-s */
> -                     if (intel_display_wa(display, 
> INTEL_DISPLAY_WA_22010178259))
> -                             intel_de_rmw(display, BW_BUDDY_CTL(i),
> -                                          BW_BUDDY_TLB_REQ_TIMER_MASK,
> -                                          BW_BUDDY_TLB_REQ_TIMER(0x8));
> +
> +             if (DISPLAY_VER(display) < 20) {
> +                     for_each_set_bit(i, &abox_mask, 
> BITS_PER_TYPE(abox_mask))
> +                             intel_de_write(display, BW_BUDDY_CTL(i),
> +                                            BW_BUDDY_DISABLE);
>               }
> +
> +             return;
> +     }
> +
> +     /* We found a matching configuration. Program the BW_BUDDY registers. */

Seems obvious. The comment is redundant.

> +     for_each_set_bit(i, &abox_mask, BITS_PER_TYPE(abox_mask)) {
> +             intel_de_write(display, BW_BUDDY_PAGE_MASK(i),
> +                            table[config].page_mask);

Please split code restructuring from functional changes. This diff
is too hard to read.

> +
> +             /* Wa_22010178259:tgl,dg1,rkl,adl-s */
> +             if (intel_display_wa(display, INTEL_DISPLAY_WA_22010178259))
> +                     intel_de_rmw(display, BW_BUDDY_CTL(i),
> +                                  BW_BUDDY_TLB_REQ_TIMER_MASK,
> +                                  BW_BUDDY_TLB_REQ_TIMER(0x8));
>       }
>  }
>  
> -- 
> 2.43.0

-- 
Ville Syrjälä
Intel

Reply via email to