On 7/5/22 10:00, Viresh Kumar wrote: > Hello, > > This patchset adds support for devices with multiple clocks. None of the clocks > is considered primary in this case and all are handled equally. > > The drivers, for multiple clock case, are expected to call dev_pm_opp_set_opp() > to set the specific OPP. Though how they find the target OPP is left for the > users to handle. For some, we may have another unique OPP property, like level, > which can be used to find the OPP. While in case of others, we may want to > implement freq-based OPP finder APIs for multiple clock rates. I have decided > not to implement them in advance, and add them only someone wants to use them. > > This is rebased over a lot of other OPP changes and is pushed here: > > git://git.kernel.org/pub/scm/linux/kernel/git/vireshk/pm.git opp/linux-next > > V1->V2: > > - Fix broken git bisect for: > OPP: Reuse _opp_compare_key() in _opp_add_static_v2() > > - Include binding changes written by Krzysztof earlier. > > - Check config_clks before calling it, it isn't always set. > > - Add config_clks for Tegra30's devfreq to handle its corner case. > > - _opp_compare_key() supports multi-clk case now, earlier it skipped freq > comparison for such a case. > > - New patch to compare all bandwidth values as well in _opp_compare_key(). > > - New patch to remove *_noclk() interface. > > - Various other minor fixes. > > -- > Viresh > > Krzysztof Kozlowski (1): > dt-bindings: opp: accept array of frequencies > > Viresh Kumar (12): > OPP: Use consistent names for OPP table instances > OPP: Remove rate_not_available parameter to _opp_add() > OPP: Reuse _opp_compare_key() in _opp_add_static_v2() > OPP: Make dev_pm_opp_set_opp() independent of frequency > OPP: Allow multiple clocks for a device > OPP: Compare bandwidths for all paths in _opp_compare_key() > OPP: Add key specific assert() method to key finding helpers > OPP: Assert clk_count == 1 for single clk helpers > OPP: Provide a simple implementation to configure multiple clocks > OPP: Allow config_clks helper for single clk case > PM / devfreq: tegra30: Register config_clks helper Hello Viresh, This patch breaks Tegra again, please take a look: OPP: Remove dev{m}_pm_opp_of_add_table_noclk() 8<--- cut here --- Unable to handle kernel paging request at virtual address ffffffff [ffffffff] *pgd=9effd861, *pte=00000000, *ppte=00000000 Internal error: Oops: 37 [#1] PREEMPT SMP ARM Modules linked in: CPU: 3 PID: 8 Comm: kworker/u8:0 Not tainted 5.19.0-rc1-00040-g30b62d123f4f #82 Hardware name: NVIDIA Tegra SoC (Flattened Device Tree) Workqueue: events_unbound deferred_probe_work_func PC is at _opp_compare_key+0x40/0xc4 LR is at 0xfffffffb pc : [<c0b91b54>] lr : [<fffffffb>] psr: 20000113 sp : df831b08 ip : c33cd4d0 fp : df831b24 r10: c2586078 r9 : c258606c r8 : 00000000 r7 : 00000000 r6 : 00000001 r5 : c33cd480 r4 : c2586000 r3 : 00000000 r2 : c33cd480 r1 : c258606c r0 : c2586000 Flags: nzCv IRQs on FIQs on Mode SVC_32 ISA ARM Segment none Control: 10c5387d Table: 8000404a DAC: 00000051 ... Backtrace: _opp_compare_key from _set_opp+0x80/0x408 r7:00000000 r6:c27c0010 r5:c33cd480 r4:c2586000 _set_opp from dev_pm_opp_set_opp+0x74/0xdc r10:00000001 r9:000f4240 r8:c33b6840 r7:c33b6840 r6:c33cd480 r5:c27c0010 r4:c2586000 dev_pm_opp_set_opp from tegra_pmc_core_pd_set_performance_state+0x54/0xbc r6:c33b6840 r5:c1a21760 r4:c33cd480 tegra_pmc_core_pd_set_performance_state from _genpd_set_performance_state+0x1f0/0x280 r6:c33b6b58 r5:c33b6b48 r4:000f4240 _genpd_set_performance_state from _genpd_set_performance_state+0xb4/0x280 r10:00000001 r9:000f4240 r8:c33b9800 r7:c33b6840 r6:c33b9b18 r5:c33d0040 r4:000f4240 _genpd_set_performance_state from genpd_set_performance_state+0xb8/0xd4 r10:c33b9a98 r9:c33d0400 r8:00000000 r7:00000000 r6:c33b9800 r5:00000000 r4:c33d0400 genpd_set_performance_state from genpd_runtime_resume+0x22c/0x240 r5:00000000 r4:c27c0810 genpd_runtime_resume from __rpm_callback+0x4c/0x1ac r10:c27ba8bc r9:00000000 r8:c27c0960 r7:c27c08cc r6:c27ba800 r5:c09611b8 r4:c27c0810 __rpm_callback from rpm_callback+0x60/0x64 r9:df831ce4 r8:c27c0960 r7:00000004 r6:c27ba800 r5:c09611b8 r4:c27c0810 rpm_callback from rpm_resume+0x480/0x7e0 r7:00000004 r6:c27ba800 r5:c09611b8 r4:c27c0810 rpm_resume from __pm_runtime_resume+0x58/0xb0 r10:00000000 r9:c2587194 r8:c2587210 r7:c27c0810 r6:c27c08cc r5:60000113 r4:c27c0810 __pm_runtime_resume from host1x_probe+0x3d4/0x6d4 r7:c27c0810 r6:c27c0800 r5:00000000 r4:c2587040 host1x_probe from platform_probe+0x6c/0xc0 r10:c191438c r9:c1aa8e20 r8:0000000d r7:c27c0810 r6:c1a2d354 r5:c27c0810 r4:00000000 platform_probe from really_probe.part.0+0xac/0x2c0 r7:c27c0810 r6:c1a2d354 r5:c27c0810 r4:00000000 really_probe.part.0 from __driver_probe_device+0xb8/0x14c r7:c27c0810 r6:c1a2d354 r5:00000000 r4:c27c0810 __driver_probe_device from driver_probe_device+0x44/0x11c r7:c27c0810 r6:c27c0810 r5:c2137c58 r4:c2137c54 driver_probe_device from __device_attach_driver+0xc8/0x10c r9:c1aa8e20 r8:c242c000 r7:00000000 r6:c27c0810 r5:df831e6c r4:c1a2d354 __device_attach_driver from bus_for_each_drv+0x90/0xdc r7:00000000 r6:c09440f8 r5:df831e6c r4:00000000 bus_for_each_drv from __device_attach+0xbc/0x1d4 r6:c27c0854 r5:00000001 r4:c27c0810 __device_attach from device_initial_probe+0x1c/0x20 r6:c1a30df8 r5:c27c0810 r4:c27c0810 device_initial_probe from bus_probe_device+0x98/0xa0 bus_probe_device from deferred_probe_work_func+0x8c/0xbc r7:00000000 r6:c1a309e8 r5:c1a3099c r4:c27c0810 deferred_probe_work_func from process_one_work+0x2b8/0x774 r7:c25c8000 r6:c2407000 r5:c2557480 r4:c1a309f8 process_one_work from worker_thread+0x17c/0x56c r10:00000088 r9:c25c8000 r8:c1905d40 r7:c240703c r6:c2557498 r5:c2407000 r4:c2557480 worker_thread from kthread+0x108/0x13c r10:00000000 r9:df815e2c r8:c2557500 r7:c2557480 r6:c0151924 r5:c25c8000 r4:c2554540 kthread from ret_from_fork+0x14/0x28 Exception stack(0xdf831fb0 to 0xdf831ff8) 1fa0: 00000000 00000000 00000000 00000000 1fc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000 1fe0: 00000000 00000000 00000000 00000000 00000013 00000000 r9:00000000 r8:00000000 r7:00000000 r6:00000000 r5:c015ba68 r4:c2554540 Code: e24cc004 ea000001 e1530006 0a000007 (e5be5004) ---[ end trace 0000000000000000 ]--- -- Best regards, Dmitry