On Tue, 26 Feb 2019, Ville Syrjala <ville.syrjala@xxxxxxxxxxxxxxx> wrote: > From: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > > Pass the dimm struct to skl_is_16gb_dimm() rather than passing each > value separately. And let's replace the hardcoded set of values with > some simple arithmetic. > > Also fix the byte vs. bit inconsistency in the debug message, > and polish the wording otherwise as well. > > v2: Deobfuscate the math (Chris) Took me longer than I'd like to wrap my head around this, but looks good. Reviewed-by: Jani Nikula <jani.nikula@xxxxxxxxx> > > Signed-off-by: Ville Syrjälä <ville.syrjala@xxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_drv.c | 28 ++++++++++++---------------- > drivers/gpu/drm/i915/i915_drv.h | 8 +++++--- > 2 files changed, 17 insertions(+), 19 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index b94bf475b04c..d84f3485e775 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -1068,6 +1068,11 @@ static void intel_sanitize_options(struct drm_i915_private *dev_priv) > intel_gvt_sanitize_options(dev_priv); > } > > +static int intel_dimm_num_devices(const struct dram_dimm_info *dimm) > +{ > + return dimm->ranks * 64 / (dimm->width ?: 1); > +} > + > static int skl_get_dimm_size(u16 val) > { > return val & SKL_DRAM_SIZE_MASK; > @@ -1107,18 +1112,10 @@ static int skl_get_dimm_ranks(u16 val) > } > > static bool > -skl_is_16gb_dimm(u8 ranks, u8 size, u8 width) > +skl_is_16gb_dimm(const struct dram_dimm_info *dimm) > { > - if (ranks == 1 && width == 8 && size == 16) > - return true; > - else if (ranks == 2 && width == 8 && size == 32) > - return true; > - else if (ranks == 1 && width == 16 && size == 8) > - return true; > - else if (ranks == 2 && width == 16 && size == 16) > - return true; > - > - return false; > + /* Convert total GB to Gb per DRAM device */ > + return 8 * dimm->size / (intel_dimm_num_devices(dimm) ?: 1) == 16; > } > > static int > @@ -1148,10 +1145,9 @@ skl_dram_get_channel_info(struct dram_channel_info *ch, u32 val) > else > ch->ranks = 1; > > - ch->is_16gb_dimm = skl_is_16gb_dimm(ch->l_info.ranks, ch->l_info.size, > - ch->l_info.width) || > - skl_is_16gb_dimm(ch->s_info.ranks, ch->s_info.size, > - ch->s_info.width); > + ch->is_16gb_dimm = > + skl_is_16gb_dimm(&ch->l_info) || > + skl_is_16gb_dimm(&ch->s_info); > > DRM_DEBUG_KMS("(size:width:ranks) L(%dGB:X%d:%d) S(%dGB:X%d:%d)\n", > ch->l_info.size, ch->l_info.width, ch->l_info.ranks, > @@ -1369,7 +1365,7 @@ intel_get_dram_info(struct drm_i915_private *dev_priv) > sprintf(bandwidth_str, "unknown"); > DRM_DEBUG_KMS("DRAM bandwidth:%s, total-channels: %u\n", > bandwidth_str, dram_info->num_channels); > - DRM_DEBUG_KMS("DRAM ranks: %d, 16GB-dimm:%s\n", > + DRM_DEBUG_KMS("DRAM ranks: %d, 16Gb DIMMs: %s\n", > dram_info->ranks, yesno(dram_info->is_16gb_dimm)); > } > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index c9cb13a6edaf..fcde09934bb5 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -2065,10 +2065,12 @@ struct drm_i915_private { > */ > }; > > +struct dram_dimm_info { > + u8 size, width, ranks; > +}; > + > struct dram_channel_info { > - struct info { > - u8 size, width, ranks; > - } l_info, s_info; > + struct dram_dimm_info l_info, s_info; > u8 ranks; > bool is_16gb_dimm; > }; -- Jani Nikula, Intel Open Source Graphics Center _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx