Re: [PATCH v7 0/6] Exynos: Simple QoS for exynos-bus using interconnect

From: Georgi Djakov
Date: Tue Nov 03 2020 - 03:29:35 EST


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-cw00.choi@xxxxxxxxxxx/
>
>