Hi Viresh, On Fri, Oct 16, 2020 at 7:03 AM Viresh Kumar <viresh.kumar@xxxxxxxxxx> wrote: > On 14-10-20, 18:40, Geert Uytterhoeven wrote: > > On this platform (r8a7791-koelsch.dts), there is no opp table in DT. I think you missed the clue above: this DTS does not have an opp-table with operating-points-v2, but cpu0 does have the operating-points (v1) property (note the latter is something I missed before). > > > > Before: > > I assume this means before this patchset came in.. Indeed. > > boot: > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:362 > > cpu cpu0: resources_available:95 > > cpu cpu0: resources_available:102: clk_get() returned z > > cpu cpu0: resources_available:120: > > dev_pm_opp_of_find_icc_paths() returned 0 > > cpu cpu0: resources_available:125: find_supply_name() returned cpu0 > > cpu cpu0: resources_available:132: regulator_get_optional() > > returned -EPROBE_DEFER > > cpu cpu0: cpu0 regulator not ready, retry > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:371: > > resources_available() returned -517 > > we deferred probe once. > > > ... > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:362 > > cpu cpu0: resources_available:95 > > cpu cpu0: resources_available:102: clk_get() returned z > > cpu cpu0: resources_available:120: > > dev_pm_opp_of_find_icc_paths() returned 0 > > cpu cpu0: resources_available:125: find_supply_name() returned cpu0 > > cpu cpu0: resources_available:132: regulator_get_optional() > > returned (ptrval) > > found regulator next time. > > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:371: > > resources_available() returned 0 > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:375 > > cpufreq_dt: cpufreq_init:162 > > cpu cpu0: cpufreq_init:170: clk_get() returned z > > cpu cpu0: cpufreq_init:179: dev_pm_opp_of_get_sharing_cpus() returned -2 > > cpu cpu0: cpufreq_init:198: find_supply_name() returned cpu0 > > <i2c comm> > > cpu cpu0: cpufreq_init:201: dev_pm_opp_set_regulators() returned (ptrval) > > <i2c comm> > > cpu cpu0: cpufreq_init:230: dev_pm_opp_of_cpumask_add_table() returned 0 > > cpu cpu0: cpufreq_init:239: dev_pm_opp_get_opp_count() returned 0 > > cpu cpu0: OPP table is not ready, deferring probe > > This failed, as we couldn't have deferred probe from cpufreq_init. > Which means that cpufreq didn't work here. No opp-table in DT. Shouldn't it use operating-points v1 instead? > > cpufreq_dt: cpufreq_init:162 > > cpu cpu1: cpufreq_init:170: clk_get() returned z > > cpu cpu1: cpufreq_init:179: dev_pm_opp_of_get_sharing_cpus() returned -2 > > cpu cpu1: no regulator for cpu1 > > cpu cpu1: cpufreq_init:198: find_supply_name() returned (null) > > cpu cpu1: cpufreq_init:230: dev_pm_opp_of_cpumask_add_table() returned 0 > > cpu cpu1: cpufreq_init:239: dev_pm_opp_get_opp_count() returned 0 > > cpu cpu1: OPP table is not ready, deferring probe > > Same for CPU1. Note that only CPU0 has operating-points v1. > > > > > s2ram: > > cpufreq_dt: cpufreq_init:162 > > cpu cpu1: cpufreq_init:170: clk_get() returned z > > cpu cpu1: cpufreq_init:179: dev_pm_opp_of_get_sharing_cpus() returned -2 > > cpu cpu1: no regulator for cpu1 > > cpu cpu1: cpufreq_init:198: find_supply_name() returned (null) > > cpu cpu1: cpufreq_init:230: dev_pm_opp_of_cpumask_add_table() returned 0 > > cpu cpu1: cpufreq_init:239: dev_pm_opp_get_opp_count() returned 0 > > cpu cpu1: OPP table is not ready, deferring probe > > And same here. > > > CPU1 is up > > > > After: > > boot: > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:356 > > cpufreq_dt: dt_cpufreq_early_init:251 > > cpu cpu0: dt_cpufreq_early_init:256 > > cpu cpu0: dt_cpufreq_early_init:271: dev_pm_opp_get_opp_table() > > returned (ptrval) > > cpu cpu0: dt_cpufreq_early_init:284: find_supply_name() returned cpu0 > > cpu cpu0: dt_cpufreq_early_init:288: dev_pm_opp_set_regulators() > > returned -EPROBE_DEFER > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:360: > > dt_cpufreq_early_init() returned -517 > > ... > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:356 > > cpufreq_dt: dt_cpufreq_early_init:251 > > cpu cpu0: dt_cpufreq_early_init:256 > > cpu cpu0: dt_cpufreq_early_init:271: dev_pm_opp_get_opp_table() > > returned (ptrval) > > cpu cpu0: dt_cpufreq_early_init:284: find_supply_name() returned cpu0 > > cpu cpu0: dt_cpufreq_early_init:288: dev_pm_opp_set_regulators() > > returned (ptrval) > > cpu cpu0: dt_cpufreq_early_init:301: > > dev_pm_opp_of_get_sharing_cpus() returned -2 > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:360: > > dt_cpufreq_early_init() returned 0 > > cpufreq_dt: dt_cpufreq_early_init:251 > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:360: > > dt_cpufreq_early_init() returned 0 > > cpufreq-dt cpufreq-dt: dt_cpufreq_probe:365 > > cpufreq_dt: cpufreq_init:114 > > cpu cpu0: cpufreq_init:124: clk_get() returned z > > cpu cpu0: cpufreq_init:142: dev_pm_opp_of_cpumask_add_table() returned 0 > > cpu cpu0: cpufreq_init:151: dev_pm_opp_get_opp_count() returned 0 > > cpu cpu0: OPP table can't be empty > > Same issue here. > > > cpufreq_dt: cpufreq_init:114 > > cpu cpu0: cpufreq_init:124: clk_get() returned z > > <i2c comm> > > cpu cpu0: cpufreq_init:142: dev_pm_opp_of_cpumask_add_table() returned 0 > > cpu cpu0: cpufreq_init:151: dev_pm_opp_get_opp_count() returned 0 > > > > s2ram: > > > > cpufreq_dt: cpufreq_init:114 > > cpu cpu0: cpufreq_init:124: clk_get() returned z > > WARNING: CPU: 1 PID: 14 at drivers/i2c/i2c-core.h:54 > > __i2c_transfer+0x2d8/0x310 > > i2c i2c-6: Transfer while suspended > > cpu cpu0: cpufreq_init:142: dev_pm_opp_of_cpumask_add_table() returned 0 > > cpu cpu0: cpufreq_init:151: dev_pm_opp_get_opp_count() returned 0 > > cpu cpu0: OPP table can't be empty > > CPU1 is up > > > > I hope this helps. > > Unfortunately it raised more questions than what it answered :( Before, it bailed out before talking to the regulator during s2ram, After, it talks to the regulator before bailing out, triggering the WARN(). 1. Why is it bailing out without an opp-table, as operating-points (v1) is present? 2. Even in the presence of an opp-table, the code would talk to the PMIC while the I2C controller is suspended. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@xxxxxxxxxxxxxx In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds