DF-4145 / fix.diff
--- a/dev/drm/radeon/trinity_dpm.c +++ b/dev/drm/radeon/trinity_dpm.c @@ -1616,6 +1616,7 @@ ps->Dpm0PgNbPsHi = 0x1; ps->DpmXNbPsLo = force_high ? 0x2 : 0x3; ps->DpmXNbPsHi = 0x2; + if (ps->num_levels > 0) ps->levels[ps->num_levels - 1].allow_gnb_slow = 0; } } @@ -1798,6 +1799,16 @@ clock_info); k++; } + if (k == 0) { + DRM_ERROR("power state %d has no dpm levels\n", i); + for (k = i - 1; k >= 0; k--) + kfree(rdev->pm.dpm.ps[k].ps_priv); + kfree(rdev->pm.dpm.ps); + rdev->pm.dpm.ps = NULL; + rdev->pm.dpm.boot_ps = NULL; + rdev->pm.dpm.uvd_ps = NULL; + return -EINVAL; + } trinity_parse_pplib_non_clock_info(rdev, &rdev->pm.dpm.ps[i], non_clock_info, non_clock_info_array->ucEntrySize); |