Re: [PATCH v7 0/6] Exynos: Simple QoS for exynos-bus using interconnect
From: Chanwoo Choi
Date: Tue Nov 03 2020 - 03:39:25 EST
Hi Georgi,
On 11/3/20 5:29 PM, Georgi Djakov wrote:
> 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 for guide. I tested it with your comment of patch2.
It is well working without problem as I mentioned previously.
I caught the reset operation of PM QoS requested from interconnect
on kernel log. In result, after completed the kernel booting,
there is no pm qos request if hdmi cable is not connected.
[Test Result]
1. Set 622080 Bps with HDMI cable
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 155520000 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 100000000 200000000
soc:bus_rightbus soc:bus_leftbus passive null 0 200000000 100000000 200000000
soc:bus_display soc:bus_leftbus passive null 0 200000000 160000000 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
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=622080kBps
|peak_bw=622080kBps"]
}
subgraph cluster_2 {
label = "soc:bus_leftbus"
"3:bus_leftbus" [label="3:bus_leftbus
|avg_bw=622080kBps
|peak_bw=622080kBps"]
}
subgraph cluster_3 {
label = "soc:bus_display"
"4:bus_display" [label="4:bus_display
|avg_bw=622080kBps
|peak_bw=622080kBps"]
}
"3:bus_leftbus" -> "2:bus_dmc"
"4:bus_display" -> "3:bus_leftbus"
}root@localhost:~# cat /sys/kernel/debug/interconnect/interconnect_summary;
node tag avg peak
--------------------------------------------------------------------
bus_dmc 622080 622080
12c10000.mixer 0 622080 622080
bus_leftbus 622080 622080
12c10000.mixer 0 622080 622080
bus_display 622080 622080
12c10000.mixer 0 622080 622080
2. Set 0Bps without HDMI cable
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 100000000 100000000 400000000
soc:bus_acp soc:bus_dmc passive null 0 100000000 100000000 267000000
soc:bus_c2c soc:bus_dmc passive null 0 100000000 100000000 400000000
soc:bus_leftbus null simple_ondemand deferrable 50 100000000 100000000 200000000
soc:bus_rightbus soc:bus_leftbus passive null 0 100000000 100000000 200000000
soc:bus_display soc:bus_leftbus passive null 0 160000000 160000000 200000000
soc:bus_fsys soc:bus_leftbus passive null 0 100000000 100000000 134000000
soc:bus_peri soc:bus_leftbus passive null 0 50000000 50000000 100000000
soc:bus_mfc soc:bus_leftbus passive null 0 100000000 100000000 200000000
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"
}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
Thanks,
Chanwoo Choi
>
> 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-cw00.choi@xxxxxxxxxxx/
>>
>>
>
>
--
Best Regards,
Chanwoo Choi
Samsung Electronics