On Fri, May 12, 2023 at 02:17:47AM +0300, Vinod Govindapillai wrote: > MTL uses the peak BW of a QGV point to lock the required QGV > point instead of the QGV index. Instead of passing the deratedbw > of the selected bw_info, return the index to the selected > bw_info so that either deratedbw or peakbw can be used based on > the platform. > > v2: use idx to store index returned by max_bw_index functions > > v3: return UINT_MAX in icl_max_bw_index in case no match found > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@xxxxxxxxx> Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_bw.c | 27 ++++++++++++++++--------- > 1 file changed, 17 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c > index d83aafd0cc2b..f466b4e087bb 100644 > --- a/drivers/gpu/drm/i915/display/intel_bw.c > +++ b/drivers/gpu/drm/i915/display/intel_bw.c > @@ -593,8 +593,8 @@ static void dg2_get_bw_info(struct drm_i915_private *i915) > i915->display.sagv.status = I915_SAGV_NOT_CONTROLLED; > } > > -static unsigned int icl_max_bw(struct drm_i915_private *dev_priv, > - int num_planes, int qgv_point) > +static unsigned int icl_max_bw_index(struct drm_i915_private *dev_priv, > + int num_planes, int qgv_point) > { > int i; > > @@ -615,14 +615,14 @@ static unsigned int icl_max_bw(struct drm_i915_private *dev_priv, > return UINT_MAX; > > if (num_planes >= bi->num_planes) > - return bi->deratedbw[qgv_point]; > + return i; > } > > - return 0; > + return UINT_MAX; > } > > -static unsigned int tgl_max_bw(struct drm_i915_private *dev_priv, > - int num_planes, int qgv_point) > +static unsigned int tgl_max_bw_index(struct drm_i915_private *dev_priv, > + int num_planes, int qgv_point) > { > int i; > > @@ -643,10 +643,10 @@ static unsigned int tgl_max_bw(struct drm_i915_private *dev_priv, > return UINT_MAX; > > if (num_planes <= bi->num_planes) > - return bi->deratedbw[qgv_point]; > + return i; > } > > - return dev_priv->display.bw.max[0].deratedbw[qgv_point]; > + return 0; > } > > static unsigned int adl_psf_bw(struct drm_i915_private *dev_priv, > @@ -823,12 +823,19 @@ static int icl_find_qgv_points(struct drm_i915_private *i915, > return ret; > > for (i = 0; i < num_qgv_points; i++) { > + unsigned int idx; > unsigned int max_data_rate; > > if (DISPLAY_VER(i915) > 11) > - max_data_rate = tgl_max_bw(i915, num_active_planes, i); > + idx = tgl_max_bw_index(i915, num_active_planes, i); > else > - max_data_rate = icl_max_bw(i915, num_active_planes, i); > + idx = icl_max_bw_index(i915, num_active_planes, i); > + > + if (idx > ARRAY_SIZE(i915->display.bw.max)) > + continue; > + > + max_data_rate = i915->display.bw.max[idx].deratedbw[i]; > + > /* > * We need to know which qgv point gives us > * maximum bandwidth in order to disable SAGV > -- > 2.34.1 >