DF-1385 / fix.diff
diff --git a/sys/dev/drm/radeon/cypress_dpm.c b/sys/dev/drm/radeon/cypress_dpm.c --- a/sys/dev/drm/radeon/cypress_dpm.c +++ b/sys/dev/drm/radeon/cypress_dpm.c @@ -1084,6 +1084,17 @@ if (ret) return ret; + /* num_entries comes from the VBIOS usModuleSize and drives the loop + * in cypress_retrieve_ac_timing_for_all_ranges() writing + * mc_reg_table_entry[NUM_ENTRIES] where NUM_ENTRIES = MAX_AC_TIMING_ENTRIES + * = 16. btc_dpm.c:1995 validates this; cypress did not. */ + if (range_table.num_entries > MAX_AC_TIMING_ENTRIES) { + dev_warn(rdev->dev, "cypress_dpm: VBIOS mclk range table " + "num_entries %u > %d, clamping\n", + range_table.num_entries, MAX_AC_TIMING_ENTRIES); + range_table.num_entries = MAX_AC_TIMING_ENTRIES; + } + cypress_retrieve_ac_timing_for_all_ranges(rdev, &range_table); return 0; |