Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/radeon/dpm: simplify state adjust logic for NI

This is based on a similar patch from Alexandre Demers.
While fixing up some warnings with that patch I saw some
additional cleanups that could be applied. This patch
simplifies the logic for patching the power state.

Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Cc: Alexandre Demers <alexandre.f.demers@gmail.com>

+11 -17
+11 -17
drivers/gpu/drm/radeon/ni_dpm.c
··· 785 785 struct ni_ps *ps = ni_get_ps(rps); 786 786 struct radeon_clock_and_voltage_limits *max_limits; 787 787 bool disable_mclk_switching; 788 - u32 mclk, sclk; 789 - u16 vddc, vddci; 788 + u32 mclk; 789 + u16 vddci; 790 790 u32 max_sclk_vddc, max_mclk_vddci, max_mclk_vddc; 791 791 int i; 792 792 ··· 839 839 840 840 /* XXX validate the min clocks required for display */ 841 841 842 + /* adjust low state */ 842 843 if (disable_mclk_switching) { 843 - mclk = ps->performance_levels[ps->performance_level_count - 1].mclk; 844 - sclk = ps->performance_levels[0].sclk; 845 - vddc = ps->performance_levels[0].vddc; 846 - vddci = ps->performance_levels[ps->performance_level_count - 1].vddci; 847 - } else { 848 - sclk = ps->performance_levels[0].sclk; 849 - mclk = ps->performance_levels[0].mclk; 850 - vddc = ps->performance_levels[0].vddc; 851 - vddci = ps->performance_levels[0].vddci; 844 + ps->performance_levels[0].mclk = 845 + ps->performance_levels[ps->performance_level_count - 1].mclk; 846 + ps->performance_levels[0].vddci = 847 + ps->performance_levels[ps->performance_level_count - 1].vddci; 852 848 } 853 - 854 - /* adjusted low state */ 855 - ps->performance_levels[0].sclk = sclk; 856 - ps->performance_levels[0].mclk = mclk; 857 - ps->performance_levels[0].vddc = vddc; 858 - ps->performance_levels[0].vddci = vddci; 859 849 860 850 btc_skip_blacklist_clocks(rdev, max_limits->sclk, max_limits->mclk, 861 851 &ps->performance_levels[0].sclk, ··· 858 868 ps->performance_levels[i].vddc = ps->performance_levels[i - 1].vddc; 859 869 } 860 870 871 + /* adjust remaining states */ 861 872 if (disable_mclk_switching) { 862 873 mclk = ps->performance_levels[0].mclk; 874 + vddci = ps->performance_levels[0].vddci; 863 875 for (i = 1; i < ps->performance_level_count; i++) { 864 876 if (mclk < ps->performance_levels[i].mclk) 865 877 mclk = ps->performance_levels[i].mclk; 878 + if (vddci < ps->performance_levels[i].vddci) 879 + vddci = ps->performance_levels[i].vddci; 866 880 } 867 881 for (i = 0; i < ps->performance_level_count; i++) { 868 882 ps->performance_levels[i].mclk = mclk;