Message ID | 20220801151641.1069181-1-stanimir.varbanov@linaro.org |
---|---|
State | Accepted |
Commit | 1d95af02f23031c2e1cca7607c514b86ce85bc6e |
Headers | show |
Series | venus: pm_helpers: Fix warning in OPP during probe | expand |
On 01-08-22, 18:16, Stanimir Varbanov wrote: > Fix the following WARN triggered during Venus driver probe on > 5.19.0-rc8-next-20220728: > > WARNING: CPU: 7 PID: 339 at drivers/opp/core.c:2471 dev_pm_opp_set_config+0x49c/0x610 > Modules linked in: qcom_spmi_adc5 rtc_pm8xxx qcom_spmi_adc_tm5 leds_qcom_lpg led_class_multicolor > qcom_pon qcom_vadc_common venus_core(+) qcom_spmi_temp_alarm v4l2_mem2mem videobuf2_v4l2 msm(+) > videobuf2_common crct10dif_ce spi_geni_qcom snd_soc_sm8250 i2c_qcom_geni gpu_sched > snd_soc_qcom_common videodev qcom_q6v5_pas soundwire_qcom drm_dp_aux_bus qcom_stats > drm_display_helper qcom_pil_info soundwire_bus snd_soc_lpass_va_macro mc qcom_q6v5 > phy_qcom_snps_femto_v2 qcom_rng snd_soc_lpass_macro_common snd_soc_lpass_wsa_macro > lpass_gfm_sm8250 slimbus qcom_sysmon qcom_common qcom_glink_smem qmi_helpers > qcom_wdt mdt_loader socinfo icc_osm_l3 display_connector > drm_kms_helper qnoc_sm8250 drm fuse ip_tables x_tables ipv6 > CPU: 7 PID: 339 Comm: systemd-udevd Not tainted 5.19.0-rc8-next-20220728 #4 > Hardware name: Qualcomm Technologies, Inc. Robotics RB5 (DT) > pstate: 80400005 (Nzcv daif +PAN -UAO -TCO -DIT -SSBS BTYPE=--) > pc : dev_pm_opp_set_config+0x49c/0x610 > lr : dev_pm_opp_set_config+0x58/0x610 > sp : ffff8000093c3710 > x29: ffff8000093c3710 x28: ffffbca3959d82b8 x27: ffff8000093c3d00 > x26: ffffbca3959d8e08 x25: ffff4396cac98118 x24: ffff4396c0e24810 > x23: ffff4396c4272c40 x22: ffff4396c0e24810 x21: ffff8000093c3810 > x20: ffff4396cac36800 x19: ffff4396cac96800 x18: 0000000000000000 > x17: 0000000000000003 x16: ffffbca3f4edf198 x15: 0000001cba64a858 > x14: 0000000000000180 x13: 000000000000017e x12: 0000000000000000 > x11: 0000000000000002 x10: 0000000000000a60 x9 : ffff8000093c35c0 > x8 : ffff4396c4273700 x7 : ffff43983efca6c0 x6 : ffff43983efca640 > x5 : 00000000410fd0d0 x4 : ffff4396c4272c40 x3 : ffffbca3f5d1e008 > x2 : 0000000000000000 x1 : ffff4396c2421600 x0 : ffff4396cac96860 > Call trace: > dev_pm_opp_set_config+0x49c/0x610 > devm_pm_opp_set_config+0x18/0x70 > vcodec_domains_get+0xb8/0x1638 [venus_core] > core_get_v4+0x1d8/0x218 [venus_core] > venus_probe+0xf4/0x468 [venus_core] > platform_probe+0x68/0xd8 > really_probe+0xbc/0x2a8 > __driver_probe_device+0x78/0xe0 > driver_probe_device+0x3c/0xf0 > __driver_attach+0x70/0x120 > bus_for_each_dev+0x70/0xc0 > driver_attach+0x24/0x30 > bus_add_driver+0x150/0x200 > driver_register+0x64/0x120 > __platform_driver_register+0x28/0x38 > qcom_venus_driver_init+0x24/0x1000 [venus_core] > do_one_initcall+0x54/0x1c8 > do_init_module+0x44/0x1d0 > load_module+0x16c8/0x1aa0 > __do_sys_finit_module+0xbc/0x110 > __arm64_sys_finit_module+0x20/0x30 > invoke_syscall+0x44/0x108 > el0_svc_common.constprop.0+0xcc/0xf0 > do_el0_svc+0x2c/0xb8 > el0_svc+0x2c/0x88 > el0t_64_sync_handler+0xb8/0xc0 > el0t_64_sync+0x18c/0x190 > qcom-venus: probe of aa00000.video-codec failed with error -16 > > The fix is re-ordering the code related to OPP core. The OPP core > expects all configuration options to be provided before the OPP > table is added. > > Reported-by: Linux Kernel Functional Testing <lkft@linaro.org> > Signed-off-by: Viresh Kumar <viresh.kumar@linaro.org> Changed this to Suggested-by. > Signed-off-by: Stanimir Varbanov <stanimir.varbanov@linaro.org> > --- > drivers/media/platform/qcom/venus/pm_helpers.c | 10 +++++----- > 1 file changed, 5 insertions(+), 5 deletions(-) Applied. Thanks.
diff --git a/drivers/media/platform/qcom/venus/pm_helpers.c b/drivers/media/platform/qcom/venus/pm_helpers.c index cb48c5ff3dee..c93d2906e4c7 100644 --- a/drivers/media/platform/qcom/venus/pm_helpers.c +++ b/drivers/media/platform/qcom/venus/pm_helpers.c @@ -875,7 +875,7 @@ static int vcodec_domains_get(struct venus_core *core) } skip_pmdomains: - if (!core->has_opp_table) + if (!core->res->opp_pmdomain) return 0; /* Attach the power domain for setting performance state */ @@ -1007,6 +1007,10 @@ static int core_get_v4(struct venus_core *core) if (ret) return ret; + ret = vcodec_domains_get(core); + if (ret) + return ret; + if (core->res->opp_pmdomain) { ret = devm_pm_opp_of_add_table(dev); if (!ret) { @@ -1017,10 +1021,6 @@ static int core_get_v4(struct venus_core *core) } } - ret = vcodec_domains_get(core); - if (ret) - return ret; - return 0; }