On Thu, 28 May 2026, Vinod Govindapillai <[email protected]> wrote: > Pcode reports the number of subchannels for LPDDR4 and LPDDR5. > But the page mask selection table is based on the channels. So > adjust the number of channels for LPDDR4 and LPDDR5 so that the > correct page mask can be picked. There are two subchannels per > channel.
IMO the parsing of the information belongs in intel_dram.c. If you get subchannels from pcode or where ever, intel_dram.c should figure it out, and store the number of channels in ->num_channels. If we need the subchannel info separately, we'll need to add the subchannel info in struct dram_info. BR, Jani. > > Bspec: 68871 > Suggested-by: Ville Syrjala <[email protected]> > Signed-off-by: Vinod Govindapillai <[email protected]> > --- > drivers/gpu/drm/i915/display/intel_display_power.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_display_power.c > b/drivers/gpu/drm/i915/display/intel_display_power.c > index 2e51dfcd5dce..758ce1287cac 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_power.c > +++ b/drivers/gpu/drm/i915/display/intel_display_power.c > @@ -1614,12 +1614,18 @@ static void tgl_bw_buddy_init(struct intel_display > *display) > const struct dram_info *dram_info = intel_dram_info(display); > const struct buddy_page_mask *table; > unsigned long abox_mask = DISPLAY_INFO(display)->abox_mask; > + u8 channels = dram_info->num_channels; > int config, i; > > /* BW_BUDDY registers are not used on dgpu's beyond DG1 */ > if (display->platform.dgfx && !display->platform.dg1) > return; > > + /* For LPDDR4 / LPDDR5, pcode reports subchannels. */ > + if (dram_info->type == INTEL_DRAM_LPDDR4 || > + dram_info->type == INTEL_DRAM_LPDDR5) > + channels /= 2; > + > if (intel_display_wa(display, INTEL_DISPLAY_WA_1409767108)) > /* Wa_1409767108 */ > table = wa_1409767108_buddy_page_masks; > @@ -1627,7 +1633,7 @@ static void tgl_bw_buddy_init(struct intel_display > *display) > table = tgl_buddy_page_masks; > > for (config = 0; table[config].page_mask != 0; config++) > - if (table[config].num_channels == dram_info->num_channels && > + if (table[config].num_channels == channels && > table[config].type == dram_info->type) > break; -- Jani Nikula, Intel
