tree: https://git.kernel.org/pub/scm/linux/kernel/git/rafael/linux-pm.git bleeding-edge head: d9e98e7641ce1ef34d0c33dae1f27611bd1cbcf9 commit: 5547c0ebfc2efdab6ee93a7fd4d9c411ad87013e [180/186] cpufreq: amd-pstate: Unify computation of {max,min,nominal,lowest_nonlinear}_freq config: i386-buildonly-randconfig-002-20240427 (https://download.01.org/0day-ci/archive/20240427/202404271038.em6nJjzy-lkp@xxxxxxxxx/config) compiler: gcc-13 (Ubuntu 13.2.0-4ubuntu3) 13.2.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20240427/202404271038.em6nJjzy-lkp@xxxxxxxxx/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@xxxxxxxxx> | Closes: https://lore.kernel.org/oe-kbuild-all/202404271038.em6nJjzy-lkp@xxxxxxxxx/ All warnings (new ones prefixed by >>): drivers/cpufreq/amd-pstate.c: In function 'amd_pstate_cpu_init': >> drivers/cpufreq/amd-pstate.c:828:47: warning: variable 'lowest_nonlinear_freq' set but not used [-Wunused-but-set-variable] 828 | int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; | ^~~~~~~~~~~~~~~~~~~~~ drivers/cpufreq/amd-pstate.c:828:33: warning: variable 'nominal_freq' set but not used [-Wunused-but-set-variable] 828 | int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; | ^~~~~~~~~~~~ drivers/cpufreq/amd-pstate.c: In function 'amd_pstate_epp_cpu_init': drivers/cpufreq/amd-pstate.c:1287:47: warning: variable 'lowest_nonlinear_freq' set but not used [-Wunused-but-set-variable] 1287 | int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; | ^~~~~~~~~~~~~~~~~~~~~ drivers/cpufreq/amd-pstate.c:1287:33: warning: variable 'nominal_freq' set but not used [-Wunused-but-set-variable] 1287 | int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; | ^~~~~~~~~~~~ -- >> drivers/cpufreq/amd-pstate.c:791: warning: Function parameter or struct member 'cpudata' not described in 'amd_pstate_init_freq' vim +/lowest_nonlinear_freq +828 drivers/cpufreq/amd-pstate.c e571a5e2068ef5 Meng Li 2024-01-19 778 5547c0ebfc2efd Perry Yuan 2024-04-25 779 /** 5547c0ebfc2efd Perry Yuan 2024-04-25 780 * amd_pstate_init_freq: Initialize the max_freq, min_freq, 5547c0ebfc2efd Perry Yuan 2024-04-25 781 * nominal_freq and lowest_nonlinear_freq for 5547c0ebfc2efd Perry Yuan 2024-04-25 782 * the @cpudata object. 5547c0ebfc2efd Perry Yuan 2024-04-25 783 * 5547c0ebfc2efd Perry Yuan 2024-04-25 784 * Requires: highest_perf, lowest_perf, nominal_perf and 5547c0ebfc2efd Perry Yuan 2024-04-25 785 * lowest_nonlinear_perf members of @cpudata to be 5547c0ebfc2efd Perry Yuan 2024-04-25 786 * initialized. 5547c0ebfc2efd Perry Yuan 2024-04-25 787 * 5547c0ebfc2efd Perry Yuan 2024-04-25 788 * Returns 0 on success, non-zero value on failure. 5547c0ebfc2efd Perry Yuan 2024-04-25 789 */ 5547c0ebfc2efd Perry Yuan 2024-04-25 790 static int amd_pstate_init_freq(struct amd_cpudata *cpudata) 5547c0ebfc2efd Perry Yuan 2024-04-25 @791 { 5547c0ebfc2efd Perry Yuan 2024-04-25 792 int ret; 5547c0ebfc2efd Perry Yuan 2024-04-25 793 u32 min_freq; 5547c0ebfc2efd Perry Yuan 2024-04-25 794 u32 highest_perf, max_freq; 5547c0ebfc2efd Perry Yuan 2024-04-25 795 u32 nominal_perf, nominal_freq; 5547c0ebfc2efd Perry Yuan 2024-04-25 796 u32 lowest_nonlinear_perf, lowest_nonlinear_freq; 5547c0ebfc2efd Perry Yuan 2024-04-25 797 u32 boost_ratio, lowest_nonlinear_ratio; 5547c0ebfc2efd Perry Yuan 2024-04-25 798 struct cppc_perf_caps cppc_perf; 5547c0ebfc2efd Perry Yuan 2024-04-25 799 5547c0ebfc2efd Perry Yuan 2024-04-25 800 5547c0ebfc2efd Perry Yuan 2024-04-25 801 ret = cppc_get_perf_caps(cpudata->cpu, &cppc_perf); 5547c0ebfc2efd Perry Yuan 2024-04-25 802 if (ret) 5547c0ebfc2efd Perry Yuan 2024-04-25 803 return ret; 5547c0ebfc2efd Perry Yuan 2024-04-25 804 5547c0ebfc2efd Perry Yuan 2024-04-25 805 min_freq = cppc_perf.lowest_freq * 1000; 5547c0ebfc2efd Perry Yuan 2024-04-25 806 nominal_freq = cppc_perf.nominal_freq; 5547c0ebfc2efd Perry Yuan 2024-04-25 807 nominal_perf = READ_ONCE(cpudata->nominal_perf); 5547c0ebfc2efd Perry Yuan 2024-04-25 808 5547c0ebfc2efd Perry Yuan 2024-04-25 809 highest_perf = READ_ONCE(cpudata->highest_perf); 5547c0ebfc2efd Perry Yuan 2024-04-25 810 boost_ratio = div_u64(highest_perf << SCHED_CAPACITY_SHIFT, nominal_perf); 5547c0ebfc2efd Perry Yuan 2024-04-25 811 max_freq = (nominal_freq * boost_ratio >> SCHED_CAPACITY_SHIFT) * 1000; 5547c0ebfc2efd Perry Yuan 2024-04-25 812 5547c0ebfc2efd Perry Yuan 2024-04-25 813 lowest_nonlinear_perf = READ_ONCE(cpudata->lowest_nonlinear_perf); 5547c0ebfc2efd Perry Yuan 2024-04-25 814 lowest_nonlinear_ratio = div_u64(lowest_nonlinear_perf << SCHED_CAPACITY_SHIFT, 5547c0ebfc2efd Perry Yuan 2024-04-25 815 nominal_perf); 5547c0ebfc2efd Perry Yuan 2024-04-25 816 lowest_nonlinear_freq = (nominal_freq * lowest_nonlinear_ratio >> SCHED_CAPACITY_SHIFT) * 1000; 5547c0ebfc2efd Perry Yuan 2024-04-25 817 5547c0ebfc2efd Perry Yuan 2024-04-25 818 WRITE_ONCE(cpudata->min_freq, min_freq); 5547c0ebfc2efd Perry Yuan 2024-04-25 819 WRITE_ONCE(cpudata->lowest_nonlinear_freq, lowest_nonlinear_freq); 5547c0ebfc2efd Perry Yuan 2024-04-25 820 WRITE_ONCE(cpudata->nominal_freq, nominal_freq); 5547c0ebfc2efd Perry Yuan 2024-04-25 821 WRITE_ONCE(cpudata->max_freq, max_freq); 5547c0ebfc2efd Perry Yuan 2024-04-25 822 5547c0ebfc2efd Perry Yuan 2024-04-25 823 return 0; 5547c0ebfc2efd Perry Yuan 2024-04-25 824 } 5547c0ebfc2efd Perry Yuan 2024-04-25 825 ec437d71db77a1 Huang Rui 2021-12-24 826 static int amd_pstate_cpu_init(struct cpufreq_policy *policy) ec437d71db77a1 Huang Rui 2021-12-24 827 { ec437d71db77a1 Huang Rui 2021-12-24 @828 int min_freq, max_freq, nominal_freq, lowest_nonlinear_freq, ret; ec437d71db77a1 Huang Rui 2021-12-24 829 struct device *dev; ec437d71db77a1 Huang Rui 2021-12-24 830 struct amd_cpudata *cpudata; ec437d71db77a1 Huang Rui 2021-12-24 831 919f4557696939 Wyes Karny 2022-11-17 832 /* 919f4557696939 Wyes Karny 2022-11-17 833 * Resetting PERF_CTL_MSR will put the CPU in P0 frequency, 919f4557696939 Wyes Karny 2022-11-17 834 * which is ideal for initialization process. 919f4557696939 Wyes Karny 2022-11-17 835 */ 919f4557696939 Wyes Karny 2022-11-17 836 amd_perf_ctl_reset(policy->cpu); ec437d71db77a1 Huang Rui 2021-12-24 837 dev = get_cpu_device(policy->cpu); ec437d71db77a1 Huang Rui 2021-12-24 838 if (!dev) ec437d71db77a1 Huang Rui 2021-12-24 839 return -ENODEV; ec437d71db77a1 Huang Rui 2021-12-24 840 ec437d71db77a1 Huang Rui 2021-12-24 841 cpudata = kzalloc(sizeof(*cpudata), GFP_KERNEL); ec437d71db77a1 Huang Rui 2021-12-24 842 if (!cpudata) ec437d71db77a1 Huang Rui 2021-12-24 843 return -ENOMEM; ec437d71db77a1 Huang Rui 2021-12-24 844 ec437d71db77a1 Huang Rui 2021-12-24 845 cpudata->cpu = policy->cpu; ec437d71db77a1 Huang Rui 2021-12-24 846 f3a052391822b7 Meng Li 2024-01-19 847 amd_pstate_init_prefcore(cpudata); f3a052391822b7 Meng Li 2024-01-19 848 ec437d71db77a1 Huang Rui 2021-12-24 849 ret = amd_pstate_init_perf(cpudata); ec437d71db77a1 Huang Rui 2021-12-24 850 if (ret) 41271016dfa4a0 Huang Rui 2021-12-24 851 goto free_cpudata1; ec437d71db77a1 Huang Rui 2021-12-24 852 5547c0ebfc2efd Perry Yuan 2024-04-25 853 ret = amd_pstate_init_freq(cpudata); 5547c0ebfc2efd Perry Yuan 2024-04-25 854 if (ret) 5547c0ebfc2efd Perry Yuan 2024-04-25 855 goto free_cpudata1; 5547c0ebfc2efd Perry Yuan 2024-04-25 856 ec437d71db77a1 Huang Rui 2021-12-24 857 min_freq = amd_get_min_freq(cpudata); ec437d71db77a1 Huang Rui 2021-12-24 858 max_freq = amd_get_max_freq(cpudata); ec437d71db77a1 Huang Rui 2021-12-24 859 nominal_freq = amd_get_nominal_freq(cpudata); ec437d71db77a1 Huang Rui 2021-12-24 860 lowest_nonlinear_freq = amd_get_lowest_nonlinear_freq(cpudata); ec437d71db77a1 Huang Rui 2021-12-24 861 ec437d71db77a1 Huang Rui 2021-12-24 862 if (min_freq < 0 || max_freq < 0 || min_freq > max_freq) { ec437d71db77a1 Huang Rui 2021-12-24 863 dev_err(dev, "min_freq(%d) or max_freq(%d) value is incorrect\n", ec437d71db77a1 Huang Rui 2021-12-24 864 min_freq, max_freq); ec437d71db77a1 Huang Rui 2021-12-24 865 ret = -EINVAL; 41271016dfa4a0 Huang Rui 2021-12-24 866 goto free_cpudata1; ec437d71db77a1 Huang Rui 2021-12-24 867 } ec437d71db77a1 Huang Rui 2021-12-24 868 ec437d71db77a1 Huang Rui 2021-12-24 869 policy->cpuinfo.transition_latency = AMD_PSTATE_TRANSITION_LATENCY; ec437d71db77a1 Huang Rui 2021-12-24 870 policy->transition_delay_us = AMD_PSTATE_TRANSITION_DELAY; ec437d71db77a1 Huang Rui 2021-12-24 871 ec437d71db77a1 Huang Rui 2021-12-24 872 policy->min = min_freq; ec437d71db77a1 Huang Rui 2021-12-24 873 policy->max = max_freq; ec437d71db77a1 Huang Rui 2021-12-24 874 ec437d71db77a1 Huang Rui 2021-12-24 875 policy->cpuinfo.min_freq = min_freq; ec437d71db77a1 Huang Rui 2021-12-24 876 policy->cpuinfo.max_freq = max_freq; ec437d71db77a1 Huang Rui 2021-12-24 877 ec437d71db77a1 Huang Rui 2021-12-24 878 /* It will be updated by governor */ ec437d71db77a1 Huang Rui 2021-12-24 879 policy->cur = policy->cpuinfo.min_freq; ec437d71db77a1 Huang Rui 2021-12-24 880 e059c184da47e9 Huang Rui 2021-12-24 881 if (boot_cpu_has(X86_FEATURE_CPPC)) 1d215f0319c206 Huang Rui 2021-12-24 882 policy->fast_switch_possible = true; 1d215f0319c206 Huang Rui 2021-12-24 883 41271016dfa4a0 Huang Rui 2021-12-24 884 ret = freq_qos_add_request(&policy->constraints, &cpudata->req[0], 41271016dfa4a0 Huang Rui 2021-12-24 885 FREQ_QOS_MIN, policy->cpuinfo.min_freq); 41271016dfa4a0 Huang Rui 2021-12-24 886 if (ret < 0) { 41271016dfa4a0 Huang Rui 2021-12-24 887 dev_err(dev, "Failed to add min-freq constraint (%d)\n", ret); 41271016dfa4a0 Huang Rui 2021-12-24 888 goto free_cpudata1; 41271016dfa4a0 Huang Rui 2021-12-24 889 } 41271016dfa4a0 Huang Rui 2021-12-24 890 41271016dfa4a0 Huang Rui 2021-12-24 891 ret = freq_qos_add_request(&policy->constraints, &cpudata->req[1], 41271016dfa4a0 Huang Rui 2021-12-24 892 FREQ_QOS_MAX, policy->cpuinfo.max_freq); 41271016dfa4a0 Huang Rui 2021-12-24 893 if (ret < 0) { 41271016dfa4a0 Huang Rui 2021-12-24 894 dev_err(dev, "Failed to add max-freq constraint (%d)\n", ret); 41271016dfa4a0 Huang Rui 2021-12-24 895 goto free_cpudata2; 41271016dfa4a0 Huang Rui 2021-12-24 896 } 41271016dfa4a0 Huang Rui 2021-12-24 897 febab20caebac9 Wyes Karny 2023-11-17 898 cpudata->max_limit_freq = max_freq; febab20caebac9 Wyes Karny 2023-11-17 899 cpudata->min_limit_freq = min_freq; ec437d71db77a1 Huang Rui 2021-12-24 900 ec437d71db77a1 Huang Rui 2021-12-24 901 policy->driver_data = cpudata; ec437d71db77a1 Huang Rui 2021-12-24 902 41271016dfa4a0 Huang Rui 2021-12-24 903 amd_pstate_boost_init(cpudata); abd61c08ef349a Perry Yuan 2023-01-31 904 if (!current_pstate_driver->adjust_perf) abd61c08ef349a Perry Yuan 2023-01-31 905 current_pstate_driver->adjust_perf = amd_pstate_adjust_perf; 41271016dfa4a0 Huang Rui 2021-12-24 906 ec437d71db77a1 Huang Rui 2021-12-24 907 return 0; ec437d71db77a1 Huang Rui 2021-12-24 908 41271016dfa4a0 Huang Rui 2021-12-24 909 free_cpudata2: 41271016dfa4a0 Huang Rui 2021-12-24 910 freq_qos_remove_request(&cpudata->req[0]); 41271016dfa4a0 Huang Rui 2021-12-24 911 free_cpudata1: ec437d71db77a1 Huang Rui 2021-12-24 912 kfree(cpudata); ec437d71db77a1 Huang Rui 2021-12-24 913 return ret; ec437d71db77a1 Huang Rui 2021-12-24 914 } ec437d71db77a1 Huang Rui 2021-12-24 915 :::::: The code at line 828 was first introduced by commit :::::: ec437d71db77a181227bf6d0ac9d4a80e58ecf0f cpufreq: amd-pstate: Introduce a new AMD P-State driver to support future processors :::::: TO: Huang Rui <ray.huang@xxxxxxx> :::::: CC: Rafael J. Wysocki <rafael.j.wysocki@xxxxxxxxx> -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki