[Intel-gfx] [PATCH v2 03/12] drm/i915: Polish skl_is_16gb_dimm()

Jani Nikula jani.nikula at linux.intel.com
Mon Mar 4 18:19:55 UTC 2019


On Tue, 26 Feb 2019, Ville Syrjala <ville.syrjala at linux.intel.com> wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> 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 at intel.com>


>
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>  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


More information about the Intel-gfx mailing list