On Fri, May 12, 2023 at 02:17:45AM +0300, Vinod Govindapillai wrote: > In MTL onwards, pcode locks the GV point based on the peak BW > of a QGV point. So store the peak BW of all the QGV points. > > v2: use DIV_ROUND_CLOSEST() for the peakBW calculation > > Bspec: 64636 > > Signed-off-by: Vinod Govindapillai <vinod.govindapillai@xxxxxxxxx> Reviewed-by: Stanislav Lisovskiy <stanislav.lisovskiy@xxxxxxxxx> > --- > drivers/gpu/drm/i915/display/intel_bw.c | 8 ++++++-- > drivers/gpu/drm/i915/display/intel_display_core.h | 2 ++ > 2 files changed, 8 insertions(+), 2 deletions(-) > > diff --git a/drivers/gpu/drm/i915/display/intel_bw.c b/drivers/gpu/drm/i915/display/intel_bw.c > index c8075a37c3ab..db117638d23b 100644 > --- a/drivers/gpu/drm/i915/display/intel_bw.c > +++ b/drivers/gpu/drm/i915/display/intel_bw.c > @@ -534,10 +534,14 @@ static int tgl_get_bw_info(struct drm_i915_private *dev_priv, const struct intel > > bi->deratedbw[j] = min(maxdebw, > bw * (100 - sa->derating) / 100); > + bi->peakbw[j] = DIV_ROUND_CLOSEST(sp->dclk * > + num_channels * > + qi.channel_width, 8); > > drm_dbg_kms(&dev_priv->drm, > - "BW%d / QGV %d: num_planes=%d deratedbw=%u\n", > - i, j, bi->num_planes, bi->deratedbw[j]); > + "BW%d / QGV %d: num_planes=%d deratedbw=%u peakbw: %u\n", > + i, j, bi->num_planes, bi->deratedbw[j], > + bi->peakbw[j]); > } > > for (j = 0; j < qi.num_psf_points; j++) { > diff --git a/drivers/gpu/drm/i915/display/intel_display_core.h b/drivers/gpu/drm/i915/display/intel_display_core.h > index e36f88a39b86..9f66d734edf6 100644 > --- a/drivers/gpu/drm/i915/display/intel_display_core.h > +++ b/drivers/gpu/drm/i915/display/intel_display_core.h > @@ -314,6 +314,8 @@ struct intel_display { > unsigned int deratedbw[I915_NUM_QGV_POINTS]; > /* for each PSF GV point */ > unsigned int psf_bw[I915_NUM_PSF_GV_POINTS]; > + /* Peak BW for each QGV point */ > + unsigned int peakbw[I915_NUM_QGV_POINTS]; > u8 num_qgv_points; > u8 num_psf_gv_points; > u8 num_planes; > -- > 2.34.1 >