firmware: ti_sci: Parse all resource ranges even if some is not available
authorVignesh Raghavendra <vigneshr@ti.com>
Mon, 5 Aug 2019 17:26:44 +0000 (12:26 -0500)
committerTom Rini <trini@konsulko.com>
Mon, 12 Aug 2019 17:33:43 +0000 (13:33 -0400)
Do not fail if any of the requested subtypes are not available, but set the
number of resources to 0 and continue parsing the resource ranges.

Based on Linux kernel patch by Peter Ujfalusi <peter.ujfalusi@ti.com>

Signed-off-by: Vignesh Raghavendra <vigneshr@ti.com>
Reviewed-by: Lokesh Vutla <lokeshvutla@ti.com>
drivers/firmware/ti_sci.c

index 1fd29f2cdf55f9f0faa14b8ae36d08a6d6fc9533..62b1dc2006403b337b577de8916821f99d195503 100644 (file)
@@ -3170,6 +3170,7 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
        u32 resource_subtype;
        u16 resource_type;
        struct ti_sci_resource *res;
+       bool valid_set = false;
        int sets, i, ret;
        u32 *temp;
 
@@ -3209,12 +3210,15 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
                                                        &res->desc[i].start,
                                                        &res->desc[i].num);
                if (ret) {
-                       dev_err(dev, "type %d subtype %d not allocated for host %d\n",
+                       dev_dbg(dev, "type %d subtype %d not allocated for host %d\n",
                                resource_type, resource_subtype,
                                handle_to_ti_sci_info(handle)->host_id);
-                       return ERR_PTR(ret);
+                       res->desc[i].start = 0;
+                       res->desc[i].num = 0;
+                       continue;
                }
 
+               valid_set = true;
                dev_dbg(dev, "res type = %d, subtype = %d, start = %d, num = %d\n",
                        resource_type, resource_subtype, res->desc[i].start,
                        res->desc[i].num);
@@ -3226,7 +3230,10 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
                        return ERR_PTR(-ENOMEM);
        }
 
-       return res;
+       if (valid_set)
+               return res;
+
+       return ERR_PTR(-EINVAL);
 }
 
 /* Description for K2G */