On 12/06, Loys Ollivier wrote:
> When using other platform architectures, in the init of the qcom_scm
> driver, of_node_put is called on /firmware if no qcom dt is found.
> This results in a kernel error: Bad of_node_put() on /firmware.
> 
> The call to of_node_put from the qcom_scm init is unnecessary as
> of_find_matching_node is calling it automatically.
> 
> Remove this of_node_put().
> 
> Fixes: d0f6fa7ba2d6 ("firmware: qcom: scm: Convert SCM to platform driver")
> Signed-off-by: Loys Ollivier <lolliv...@baylibre.com>
> ---

This still looks wrong. Especially if of_find_matching_node() is
going to look for siblings of the /firmware node for the
compatible string for scm device. Why do we check at all? Can't
we just delete this and let of_platform_populate() take care of
it? BTW, OP-TEE driver seems to have a similar problem.

---8<----

diff --git a/drivers/firmware/qcom_scm.c b/drivers/firmware/qcom_scm.c
index af4c75217ea6..440d8f796faa 100644
--- a/drivers/firmware/qcom_scm.c
+++ b/drivers/firmware/qcom_scm.c
@@ -626,23 +626,11 @@ static int __init qcom_scm_init(void)
        int ret;
 
        fw_np = of_find_node_by_name(NULL, "firmware");
-
        if (!fw_np)
-               return -ENODEV;
-
-       np = of_find_matching_node(fw_np, qcom_scm_dt_match);
-
-       if (!np) {
-               of_node_put(fw_np);
-               return -ENODEV;
-       }
-
-       of_node_put(np);
+               return 0;
 
        ret = of_platform_populate(fw_np, qcom_scm_dt_match, NULL, NULL);
-
        of_node_put(fw_np);
-
        if (ret)
                return ret;
 

-- 
Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project

Reply via email to