ARM: bcm: err, don't BUG() on SMC init failures
authorAlex Elder <elder@linaro.org>
Mon, 21 Apr 2014 21:53:03 +0000 (16:53 -0500)
committerMatt Porter <mporter@linaro.org>
Fri, 25 Apr 2014 12:51:32 +0000 (08:51 -0400)
Several conditions in bcm_kona_smc_init() are handled with BUG_ON().
That function is capable of returning an error, so do that instead.

Also, don't assume of_get_address() returns a valid pointer.

Signed-off-by: Alex Elder <elder@linaro.org>
Reviewed-by: Tim Kryger <tim.kryger@linaro.org>
Reviewed-by: Markus Mayer <markus.mayer@linaro.org>
Reviewed-by: Matt Porter <mporter@linaro.org>
Signed-off-by: Matt Porter <mporter@linaro.org>
arch/arm/mach-bcm/bcm_kona_smc.c

index d881c72ee878c2b6dc48a598e421273d78e25fc0..ddc2f17217ee152d23baf508645211d77997ad65 100644 (file)
@@ -45,6 +45,7 @@ static const struct of_device_id bcm_kona_smc_ids[] __initconst = {
 int __init bcm_kona_smc_init(void)
 {
        struct device_node *node;
+       const __be32 *prop_val;
 
        /* Read buffer addr and size from the device tree node */
        node = of_find_matching_node(NULL, bcm_kona_smc_ids);
@@ -52,12 +53,17 @@ int __init bcm_kona_smc_init(void)
                return -ENODEV;
 
        /* Don't care about size or flags of the DT node */
-       bridge_data.buffer_addr =
-               be32_to_cpu(*of_get_address(node, 0, NULL, NULL));
-       BUG_ON(!bridge_data.buffer_addr);
+       prop_val = of_get_address(node, 0, NULL, NULL);
+       if (!prop_val)
+               return -EINVAL;
+
+       bridge_data.buffer_addr = be32_to_cpu(*prop_val);
+       if (!bridge_data.buffer_addr)
+               return -EINVAL;
 
        bridge_data.bounce = of_iomap(node, 0);
-       BUG_ON(!bridge_data.bounce);
+       if (!bridge_data.bounce)
+               return -ENOMEM;
 
        bridge_data.initialized = 1;