Skip to content

Commit ef88d7a

Browse files
committed
Merge tag 'drm-intel-fixes-2021-09-23' of git://anongit.freedesktop.org/drm/drm-intel into drm-fixes
drm/i915 fixes for v5.15-rc3: - Fix ADL-P memory bandwidth parameters - Fix memory corruption due to a double free - Fix memory leak in DMC firmware handling Signed-off-by: Dave Airlie <[email protected]> From: Jani Nikula <[email protected]> Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
2 parents 22a9460 + b875fb3 commit ef88d7a

File tree

3 files changed

+25
-8
lines changed

3 files changed

+25
-8
lines changed

drivers/gpu/drm/i915/display/intel_bw.c

Lines changed: 16 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -222,31 +222,42 @@ static int icl_sagv_max_dclk(const struct intel_qgv_info *qi)
222222

223223
struct intel_sa_info {
224224
u16 displayrtids;
225-
u8 deburst, deprogbwlimit;
225+
u8 deburst, deprogbwlimit, derating;
226226
};
227227

228228
static const struct intel_sa_info icl_sa_info = {
229229
.deburst = 8,
230230
.deprogbwlimit = 25, /* GB/s */
231231
.displayrtids = 128,
232+
.derating = 10,
232233
};
233234

234235
static const struct intel_sa_info tgl_sa_info = {
235236
.deburst = 16,
236237
.deprogbwlimit = 34, /* GB/s */
237238
.displayrtids = 256,
239+
.derating = 10,
238240
};
239241

240242
static const struct intel_sa_info rkl_sa_info = {
241243
.deburst = 16,
242244
.deprogbwlimit = 20, /* GB/s */
243245
.displayrtids = 128,
246+
.derating = 10,
244247
};
245248

246249
static const struct intel_sa_info adls_sa_info = {
247250
.deburst = 16,
248251
.deprogbwlimit = 38, /* GB/s */
249252
.displayrtids = 256,
253+
.derating = 10,
254+
};
255+
256+
static const struct intel_sa_info adlp_sa_info = {
257+
.deburst = 16,
258+
.deprogbwlimit = 38, /* GB/s */
259+
.displayrtids = 256,
260+
.derating = 20,
250261
};
251262

252263
static int icl_get_bw_info(struct drm_i915_private *dev_priv, const struct intel_sa_info *sa)
@@ -302,7 +313,7 @@ static int icl_get_bw_info(struct drm_i915_private *dev_priv, const struct intel
302313
bw = icl_calc_bw(sp->dclk, clpchgroup * 32 * num_channels, ct);
303314

304315
bi->deratedbw[j] = min(maxdebw,
305-
bw * 9 / 10); /* 90% */
316+
bw * (100 - sa->derating) / 100);
306317

307318
drm_dbg_kms(&dev_priv->drm,
308319
"BW%d / QGV %d: num_planes=%d deratedbw=%u\n",
@@ -400,7 +411,9 @@ void intel_bw_init_hw(struct drm_i915_private *dev_priv)
400411

401412
if (IS_DG2(dev_priv))
402413
dg2_get_bw_info(dev_priv);
403-
else if (IS_ALDERLAKE_S(dev_priv) || IS_ALDERLAKE_P(dev_priv))
414+
else if (IS_ALDERLAKE_P(dev_priv))
415+
icl_get_bw_info(dev_priv, &adlp_sa_info);
416+
else if (IS_ALDERLAKE_S(dev_priv))
404417
icl_get_bw_info(dev_priv, &adls_sa_info);
405418
else if (IS_ROCKETLAKE(dev_priv))
406419
icl_get_bw_info(dev_priv, &rkl_sa_info);

drivers/gpu/drm/i915/display/intel_dmc.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -805,11 +805,14 @@ void intel_dmc_ucode_resume(struct drm_i915_private *dev_priv)
805805
*/
806806
void intel_dmc_ucode_fini(struct drm_i915_private *dev_priv)
807807
{
808+
int id;
809+
808810
if (!HAS_DMC(dev_priv))
809811
return;
810812

811813
intel_dmc_ucode_suspend(dev_priv);
812814
drm_WARN_ON(&dev_priv->drm, dev_priv->dmc.wakeref);
813815

814-
kfree(dev_priv->dmc.dmc_info[DMC_FW_MAIN].payload);
816+
for (id = 0; id < DMC_FW_MAX; id++)
817+
kfree(dev_priv->dmc.dmc_info[id].payload);
815818
}

drivers/gpu/drm/i915/gem/i915_gem_ttm.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -356,11 +356,8 @@ static void i915_ttm_delete_mem_notify(struct ttm_buffer_object *bo)
356356
{
357357
struct drm_i915_gem_object *obj = i915_ttm_to_gem(bo);
358358

359-
if (likely(obj)) {
360-
/* This releases all gem object bindings to the backend. */
359+
if (likely(obj))
361360
i915_ttm_free_cached_io_st(obj);
362-
__i915_gem_free_object(obj);
363-
}
364361
}
365362

366363
static struct intel_memory_region *
@@ -875,8 +872,12 @@ void i915_ttm_bo_destroy(struct ttm_buffer_object *bo)
875872
{
876873
struct drm_i915_gem_object *obj = i915_ttm_to_gem(bo);
877874

875+
/* This releases all gem object bindings to the backend. */
876+
__i915_gem_free_object(obj);
877+
878878
i915_gem_object_release_memory_region(obj);
879879
mutex_destroy(&obj->ttm.get_io_page.lock);
880+
880881
if (obj->ttm.created)
881882
call_rcu(&obj->rcu, __i915_gem_free_object_rcu);
882883
}

0 commit comments

Comments
 (0)