Hi Chanwoo and Sylwester,
On 11/3/20 09:54, Chanwoo Choi wrote:
Hi Sylwester,
When I tested this patchset on Odroid-U3, After setting 0 bps by interconnect[1][2], the frequency of devfreq devs sustain the high frequency according to the pm qos request.
So, I try to find the cause of this situation. In result, it seems that interconnect exynos driver updates the pm qos request to devfreq device during the kernel booting. Do you know why the exynos interconnect driver request the pm qos during probe without the mixer request?
That's probably because of the sync_state support, that was introduced recently. The icc_sync_state callback needs to be added to the driver (i just left a comment on that patch), and then check again if it works.
The idea of the sync_state is that there could be multiple users of a path and we must wait for all consumers to tell their bandwidth needs. Otherwise the first consumer may lower the bandwidth or disable a path needed for another consumer (driver), which has not probed yet. So we maintain a floor bandwidth until everyone has probed. By default the floor bandwidth is INT_MAX, but can be overridden by implementing the get_bw() callback.
Thanks, Georgi
PS. The passive governor has a bug related to PM_QOS interface. So, I posted the patch[4].
[1] interconnect_graph root@localhost:~# cat /sys/kernel/debug/interconnect/interconnect_graph digraph { rankdir = LR node [shape = record] subgraph cluster_1 { label = "soc:bus_dmc" "2:bus_dmc" [label="2:bus_dmc |avg_bw=0kBps |peak_bw=0kBps"] } subgraph cluster_2 { label = "soc:bus_leftbus" "3:bus_leftbus" [label="3:bus_leftbus |avg_bw=0kBps |peak_bw=0kBps"] } subgraph cluster_3 { label = "soc:bus_display" "4:bus_display" [label="4:bus_display |avg_bw=0kBps |peak_bw=0kBps"] } "3:bus_leftbus" -> "2:bus_dmc" "4:bus_display" -> "3:bus_leftbus"
[2] interconnect_summary root@localhost:~# cat /sys/kernel/debug/interconnect/interconnect_summary node tag avg peak
bus_dmc 0 0 12c10000.mixer 0 0 0 bus_leftbus 0 0 12c10000.mixer 0 0 0 bus_display 0 0 12c10000.mixer 0 0 0
[3] devfreq_summary root@localhost:~# cat /sys/kernel/debug/devfreq/devfreq_summary dev parent_dev governor timer polling_ms cur_freq_Hz min_freq_Hz max_freq_Hz
soc:bus_dmc null simple_ondemand deferrable 50 400000000 400000000 400000000 soc:bus_acp soc:bus_dmc passive null 0 267000000 100000000 267000000 soc:bus_c2c soc:bus_dmc passive null 0 400000000 100000000 400000000 soc:bus_leftbus null simple_ondemand deferrable 50 200000000 200000000 200000000 soc:bus_rightbus soc:bus_leftbus passive null 0 200000000 100000000 200000000 soc:bus_display soc:bus_leftbus passive null 0 200000000 200000000 200000000 soc:bus_fsys soc:bus_leftbus passive null 0 134000000 100000000 134000000 soc:bus_peri soc:bus_leftbus passive null 0 100000000 50000000 100000000 soc:bus_mfc soc:bus_leftbus passive null 0 200000000 100000000 200000000
[4] PM / devfreq: passive: Update frequency when start governor https://patchwork.kernel.org/project/linux-pm/patch/20201103070646.18687-1-c...