Skip to content

Commit 84b72b5

Browse files
committed
drm/i915/dram: Move 16Gb DIMM detection fully to the skl/icl codepaths
We are incorrectly applying the 16Gb DIMM w/a (adding 1 extra usec to WM0 latency) on MTL+ even though the w/a is only needed for SKL/ICL. The current way of setting this is up is a bit of a disaster: 1. always set has_16gb_dimms=true for all platforms except BXT/GLK 2. has_16gb_dimms potentially gets overwritten with something else * BXT/GLK don't do anything since we never set has_16gb_dimms to begin with * skl_get_dram_info() overwrites has_16gb_dimms with the actual detection results for SKL/ICL/derivatives * gen12_get_dram_info() (correctly) resets has_16gb_dimms for TGL/ADL/derivatives * xelpdp_get_dram_info() doesn't do anything, leaving has_16gb_dimms incorrectly set for MTL+ Clean up the whole mess by only setting has_16gb_dimms in the SKL/ICL codepaths where we have the actual detection code for it. This avois applying the w/a incorrectly on MTL+. v2: Rewrite commit msg (Jani) Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/20250902133113.18778-6-ville.syrjala@linux.intel.com Reviewed-by: Jani Nikula <jani.nikula@intel.com>
1 parent 115cebc commit 84b72b5

1 file changed

Lines changed: 6 additions & 11 deletions

File tree

drivers/gpu/drm/i915/soc/intel_dram.c

Lines changed: 6 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -406,6 +406,9 @@ skl_dram_get_channels_info(struct drm_i915_private *i915, struct dram_info *dram
406406
u32 val;
407407
int ret;
408408

409+
/* Assume 16Gb DIMMs are present until proven otherwise */
410+
dram_info->has_16gb_dimms = true;
411+
409412
val = intel_uncore_read(&i915->uncore,
410413
SKL_MAD_DIMM_CH0_0_0_0_MCHBAR_MCMAIN);
411414
ret = skl_dram_get_channel_info(i915, &ch0, 0, val);
@@ -435,6 +438,9 @@ skl_dram_get_channels_info(struct drm_i915_private *i915, struct dram_info *dram
435438
drm_dbg_kms(&i915->drm, "Memory configuration is symmetric? %s\n",
436439
str_yes_no(dram_info->symmetric_memory));
437440

441+
drm_dbg_kms(&i915->drm, "16Gb DIMMs: %s\n",
442+
str_yes_no(dram_info->has_16gb_dimms));
443+
438444
return 0;
439445
}
440446

@@ -673,8 +679,6 @@ static int gen11_get_dram_info(struct drm_i915_private *i915, struct dram_info *
673679

674680
static int gen12_get_dram_info(struct drm_i915_private *i915, struct dram_info *dram_info)
675681
{
676-
dram_info->has_16gb_dimms = false;
677-
678682
return icl_pcode_read_mem_global_info(i915, dram_info);
679683
}
680684

@@ -736,12 +740,6 @@ int intel_dram_detect(struct drm_i915_private *i915)
736740

737741
i915->dram_info = dram_info;
738742

739-
/*
740-
* Assume 16Gb DIMMs are present until proven
741-
* otherwise, this w/a is not needed by bxt/glk.
742-
*/
743-
dram_info->has_16gb_dimms = !IS_BROXTON(i915) && !IS_GEMINILAKE(i915);
744-
745743
if (DISPLAY_VER(display) >= 14)
746744
ret = xelpdp_get_dram_info(i915, dram_info);
747745
else if (GRAPHICS_VER(i915) >= 12)
@@ -766,9 +764,6 @@ int intel_dram_detect(struct drm_i915_private *i915)
766764

767765
drm_dbg_kms(&i915->drm, "DRAM channels: %u\n", dram_info->num_channels);
768766

769-
drm_dbg_kms(&i915->drm, "16Gb DIMMs: %s\n",
770-
str_yes_no(dram_info->has_16gb_dimms));
771-
772767
return 0;
773768
}
774769

0 commit comments

Comments
 (0)