On 19-04-21, 13:52, Bjorn Andersson wrote: > On Tue 19 Jan 11:45 CST 2021, AngeloGioacchino Del Regno wrote: > @Viresh, do you have any suggestion regarding my last comment? > > static int qcom_cpufreq_hw_driver_probe(struct platform_device *pdev) > > { > > + const struct qcom_cpufreq_soc_data *soc_data; > > + struct device_node *pd_node; > > + struct platform_device *pd_dev; > > struct device *cpu_dev; > > struct clk *clk; > > - int ret; > > + int clk_div, ret; > > + > > + cpu_dev = get_cpu_device(0); > > + if (!cpu_dev) > > + return -EPROBE_DEFER; > > + > > + soc_data = of_device_get_match_data(&pdev->dev); > > + if (!soc_data) > > + return -EINVAL; > > + > > + if (!soc_data->uses_tz) { > > + /* > > + * When the OSM is not pre-programmed from TZ, we will > > + * need to program the sequencer through SCM calls. > > + */ > > + if (!qcom_scm_is_available()) > > + return -EPROBE_DEFER; > > + > > + /* > > + * If there are no power-domains, OSM programming cannot be > > + * performed, as in that case, we wouldn't know where to take > > + * the params from... > > + */ > > + pd_node = of_parse_phandle(cpu_dev->of_node, > > + "power-domains", 0); > > + if (!pd_node) { > > + ret = PTR_ERR(pd_node); > > + dev_err(cpu_dev, "power domain not found: %d\n", ret); > > + return ret; > > + } > > + > > + /* > > + * If the power domain device is not registered yet, then > > + * defer probing this driver until that is available. > > + */ > > + pd_dev = of_find_device_by_node(pd_node); > > + if (!pd_dev || !pd_dev->dev.driver || > > + !device_is_bound(&pd_dev->dev)) > > + return -EPROBE_DEFER; > > I wonder if there's a more appropriate way to probe defer on resources > described in the CPU nodes... Recently we made some updates to the OPP core to start returning EPROBE_DEFER on failure to acquire resources. I think you can get rid of many checks for resources here by just trying to create the OPP table and check its return value for EPROBE_DEFER. -- viresh