tree: https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git master head: 49a8133221c71b935f36a7c340c0271c2a9ee2db commit: ffa5096a7c338641f70fb06d4778e8cf400181a8 [9935/10933] cpufreq: amd-pstate: implement Pstate EPP support for the AMD processors config: i386-buildonly-randconfig-r004-20230206 (https://download.01.org/0day-ci/archive/20230208/202302080535.YeJXn11A-lkp@xxxxxxxxx/config) compiler: clang version 14.0.6 (https://github.com/llvm/llvm-project f28c006a5895fc0e329fe15fead81e37457cb1d1) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git/commit/?id=ffa5096a7c338641f70fb06d4778e8cf400181a8 git remote add linux-next https://git.kernel.org/pub/scm/linux/kernel/git/next/linux-next.git git fetch --no-tags linux-next master git checkout ffa5096a7c338641f70fb06d4778e8cf400181a8 # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=i386 SHELL=/bin/bash drivers/cpufreq/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@xxxxxxxxx> All warnings (new ones prefixed by >>): >> drivers/cpufreq/amd-pstate.c:864:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized] if (rc) ^~ drivers/cpufreq/amd-pstate.c:920:9: note: uninitialized use occurs here return ret; ^~~ drivers/cpufreq/amd-pstate.c:864:2: note: remove the 'if' if its condition is always false if (rc) ^~~~~~~ drivers/cpufreq/amd-pstate.c:853:6: warning: variable 'ret' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized] if (!dev) ^~~~ drivers/cpufreq/amd-pstate.c:920:9: note: uninitialized use occurs here return ret; ^~~ drivers/cpufreq/amd-pstate.c:853:2: note: remove the 'if' if its condition is always false if (!dev) ^~~~~~~~~ drivers/cpufreq/amd-pstate.c:841:66: note: initialize the variable 'ret' to silence this warning int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; ^ = 0 >> drivers/cpufreq/amd-pstate.c:957:6: warning: variable 'epp' is used uninitialized whenever 'if' condition is true [-Wsometimes-uninitialized] if (cpudata->epp_policy == cpudata->policy) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/cpufreq/amd-pstate.c:982:30: note: uninitialized use occurs here amd_pstate_set_epp(cpudata, epp); ^~~ drivers/cpufreq/amd-pstate.c:957:2: note: remove the 'if' if its condition is always false if (cpudata->epp_policy == cpudata->policy) ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/cpufreq/amd-pstate.c:936:9: note: initialize the variable 'epp' to silence this warning s16 epp; ^ = 0 3 warnings generated. vim +864 drivers/cpufreq/amd-pstate.c 838 839 static int amd_pstate_epp_cpu_init(struct cpufreq_policy *policy) 840 { 841 int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; 842 struct amd_cpudata *cpudata; 843 struct device *dev; 844 int rc; 845 u64 value; 846 847 /* 848 * Resetting PERF_CTL_MSR will put the CPU in P0 frequency, 849 * which is ideal for initialization process. 850 */ 851 amd_perf_ctl_reset(policy->cpu); 852 dev = get_cpu_device(policy->cpu); 853 if (!dev) 854 goto free_cpudata1; 855 856 cpudata = kzalloc(sizeof(*cpudata), GFP_KERNEL); 857 if (!cpudata) 858 return -ENOMEM; 859 860 cpudata->cpu = policy->cpu; 861 cpudata->epp_policy = 0; 862 863 rc = amd_pstate_init_perf(cpudata); > 864 if (rc) 865 goto free_cpudata1; 866 867 min_freq = amd_get_min_freq(cpudata); 868 max_freq = amd_get_max_freq(cpudata); 869 nominal_freq = amd_get_nominal_freq(cpudata); 870 lowest_nonlinear_freq = amd_get_lowest_nonlinear_freq(cpudata); 871 if (min_freq < 0 || max_freq < 0 || min_freq > max_freq) { 872 dev_err(dev, "min_freq(%d) or max_freq(%d) value is incorrect\n", 873 min_freq, max_freq); 874 ret = -EINVAL; 875 goto free_cpudata1; 876 } 877 878 policy->cpuinfo.min_freq = min_freq; 879 policy->cpuinfo.max_freq = max_freq; 880 /* It will be updated by governor */ 881 policy->cur = policy->cpuinfo.min_freq; 882 883 /* Initial processor data capability frequencies */ 884 cpudata->max_freq = max_freq; 885 cpudata->min_freq = min_freq; 886 cpudata->nominal_freq = nominal_freq; 887 cpudata->lowest_nonlinear_freq = lowest_nonlinear_freq; 888 889 policy->driver_data = cpudata; 890 891 cpudata->epp_cached = amd_pstate_get_epp(cpudata, 0); 892 893 policy->min = policy->cpuinfo.min_freq; 894 policy->max = policy->cpuinfo.max_freq; 895 896 /* 897 * Set the policy to powersave to provide a valid fallback value in case 898 * the default cpufreq governor is neither powersave nor performance. 899 */ 900 policy->policy = CPUFREQ_POLICY_POWERSAVE; 901 902 if (boot_cpu_has(X86_FEATURE_CPPC)) { 903 policy->fast_switch_possible = true; 904 ret = rdmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_REQ, &value); 905 if (ret) 906 return ret; 907 WRITE_ONCE(cpudata->cppc_req_cached, value); 908 909 ret = rdmsrl_on_cpu(cpudata->cpu, MSR_AMD_CPPC_CAP1, &value); 910 if (ret) 911 return ret; 912 WRITE_ONCE(cpudata->cppc_cap1_cached, value); 913 } 914 amd_pstate_boost_init(cpudata); 915 916 return 0; 917 918 free_cpudata1: 919 kfree(cpudata); 920 return ret; 921 } 922 923 static int amd_pstate_epp_cpu_exit(struct cpufreq_policy *policy) 924 { 925 pr_debug("CPU %d exiting\n", policy->cpu); 926 policy->fast_switch_possible = false; 927 return 0; 928 } 929 930 static void amd_pstate_epp_init(unsigned int cpu) 931 { 932 struct cpufreq_policy *policy = cpufreq_cpu_get(cpu); 933 struct amd_cpudata *cpudata = policy->driver_data; 934 u32 max_perf, min_perf; 935 u64 value; 936 s16 epp; 937 938 max_perf = READ_ONCE(cpudata->highest_perf); 939 min_perf = READ_ONCE(cpudata->lowest_perf); 940 941 value = READ_ONCE(cpudata->cppc_req_cached); 942 943 if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE) 944 min_perf = max_perf; 945 946 /* Initial min/max values for CPPC Performance Controls Register */ 947 value &= ~AMD_CPPC_MIN_PERF(~0L); 948 value |= AMD_CPPC_MIN_PERF(min_perf); 949 950 value &= ~AMD_CPPC_MAX_PERF(~0L); 951 value |= AMD_CPPC_MAX_PERF(max_perf); 952 953 /* CPPC EPP feature require to set zero to the desire perf bit */ 954 value &= ~AMD_CPPC_DES_PERF(~0L); 955 value |= AMD_CPPC_DES_PERF(0); 956 > 957 if (cpudata->epp_policy == cpudata->policy) 958 goto skip_epp; 959 960 cpudata->epp_policy = cpudata->policy; 961 962 if (cpudata->policy == CPUFREQ_POLICY_PERFORMANCE) { 963 epp = amd_pstate_get_epp(cpudata, value); 964 if (epp < 0) 965 goto skip_epp; 966 /* force the epp value to be zero for performance policy */ 967 epp = 0; 968 } else { 969 /* Get BIOS pre-defined epp value */ 970 epp = amd_pstate_get_epp(cpudata, value); 971 if (epp) 972 goto skip_epp; 973 } 974 /* Set initial EPP value */ 975 if (boot_cpu_has(X86_FEATURE_CPPC)) { 976 value &= ~GENMASK_ULL(31, 24); 977 value |= (u64)epp << 24; 978 } 979 980 skip_epp: 981 WRITE_ONCE(cpudata->cppc_req_cached, value); 982 amd_pstate_set_epp(cpudata, epp); 983 cpufreq_cpu_put(policy); 984 } 985 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests