RE: [EXT] Re: Ask for help about cpufreq issue
From: Andy Tang <hidden>
Date: 2020-02-11 04:20:19
Hi Viresh, I checked the clk part, no issue was found. I did found a odd thing in cpufreq directory. # cat scaling_available_frequencies 1600000 1000000 800000 500000 # cat scaling_max_freq 500000 Why there is a 1600Mhz frequency available, but the max freq is only 500M? How the max freq is set? Thanks, Andy
-----Original Message----- From: Viresh Kumar <viresh.kumar@linaro.org> Sent: 2020年2月7日 15:06 To: Andy Tang <redacted> Cc: rjw@rjwysocki.net; linux-pm@vger.kernel.org Subject: Re: [EXT] Re: Ask for help about cpufreq issue Caution: EXT Email On 07-02-20, 06:03, Andy Tang wrote:quoted
Hi Viresh, I have tried performance governor, cpu frequency is at the lowestfrequency.quoted
I also tried ondemand governor with high cpu load, cpu frequency doesn'tincrease too.quoted
root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_governor performance root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_available_frequencies 1600000 1000000 800000 500000 root@localhost:~# root@localhost:~# cat /sys/devices/system/cpu/cpu0/cpufreq/scaling_cur_freq 500000 root@localhost:~# cat /sys/devices/system/cpu/cpufreq/policy0/stats/* cat: /sys/devices/system/cpu/cpufreq/policy0/stats/reset: Permission denied 1600000 214 1000000 91 800000 82 500000 480088 240 From : To : 1600000 1000000 800000 500000 1600000: 0 15 10 10 1000000: 21 0 22 18 800000: 6 23 0 44 500000: 7 23 41 0See, frequencies are getting changed according to this table (at least from cpufreq's point of view), which means that cpufreq transitions are passing just fine. I just had a look at the driver and may have some idea on what's going on. The cpufreq driver doesn't program the frequencies, but instead it just switches the parent clk for changing the frequency. And when you try to read the frequency, all we do is read the frequency from the clk pointer using clk_get_rate(). So, here are the things which can go wrong, in order of how I would like to debug them. - The frequency of all parent clocks is set to 500 MHz by someone and so clk_get_rate() always report that despite changes to the stats table. - clk_set_parent() isn't setting the parent correctly. Try putting some print messages to the driver to see if target_index() routine is able to set the parent clk properly or not. -- viresh