]> Pileus Git - ~andy/linux/commitdiff
ARM: bcm: Make secure API call optional
authorChristian Daudt <csd@broadcom.com>
Wed, 7 Aug 2013 00:04:54 +0000 (17:04 -0700)
committerChristian Daudt <csd@broadcom.com>
Tue, 20 Aug 2013 17:51:39 +0000 (10:51 -0700)
The current bcm_kona_smc_init function throws a BUG_ON if there's no SMC
device node defined in the device tree.

Since secure API access is optional depending the chip configuration,
fix this by allowing the rest of the code to run even if there's no SMC
device node defined

Signed-off-by: Christian Daudt <csd@broadcom.com>
Reviewed-by: Markus Mayer <markus.mayer@linaro.org>
arch/arm/mach-bcm/bcm_kona_smc.c
arch/arm/mach-bcm/bcm_kona_smc.h
arch/arm/mach-bcm/board_bcm281xx.c

index bcc1c5903fb1ea5cccb4969be51d1ff747eca220..5e31e918f32518439e72dc4bfa1dd54538244c5f 100644 (file)
@@ -42,13 +42,14 @@ static const struct of_device_id bcm_kona_smc_ids[] __initconst = {
 };
 
 /* Map in the bounce area */
-void __init bcm_kona_smc_init(void)
+int __init bcm_kona_smc_init(void)
 {
        struct device_node *node;
 
        /* Read buffer addr and size from the device tree node */
        node = of_find_matching_node(NULL, bcm_kona_smc_ids);
-       BUG_ON(!node);
+       if (!node)
+               return -ENODEV;
 
        /* Don't care about size or flags of the DT node */
        bridge_data.buffer_addr =
@@ -60,7 +61,9 @@ void __init bcm_kona_smc_init(void)
 
        bridge_data.initialized = 1;
 
-       pr_info("Secure API initialized!\n");
+       pr_info("Kona Secure API initialized\n");
+
+       return 0;
 }
 
 /* __bcm_kona_smc() should only run on CPU 0, with pre-emption disabled */
index 3bedbed1c21bd3b66b79a06cd27e0dbd7fd15e6a..d098a7e7674429165197e5fedb2d6f469774c279 100644 (file)
@@ -64,7 +64,7 @@
 #define SSAPI_BRCM_START_VC_CORE       0x0E000008
 
 #ifndef        __ASSEMBLY__
-extern void bcm_kona_smc_init(void);
+extern int __init bcm_kona_smc_init(void);
 
 extern unsigned bcm_kona_smc(unsigned service_id,
                             unsigned arg0,
index 3fe1e4d2e9a7907c67a050c8f9619669fa0afb8a..8d9f931164bb8544aa046f01d2938bb9703cb183 100644 (file)
@@ -29,15 +29,18 @@ static int __init kona_l2_cache_init(void)
        if (!IS_ENABLED(CONFIG_CACHE_L2X0))
                return 0;
 
+       if (bcm_kona_smc_init() < 0) {
+               pr_info("Kona secure API not available. Skipping L2 init\n");
+               return 0;
+       }
+
        bcm_kona_smc(SSAPI_ENABLE_L2_CACHE, 0, 0, 0, 0);
 
        /*
         * The aux_val and aux_mask have no effect since L2 cache is already
         * enabled.  Pass 0s for aux_val and 1s for aux_mask for default value.
         */
-       l2x0_of_init(0, ~0);
-
-       return 0;
+       return l2x0_of_init(0, ~0);
 }
 
 static void bcm_board_setup_restart(void)
@@ -58,7 +61,6 @@ static void __init board_init(void)
        of_platform_populate(NULL, of_default_bus_match_table, NULL,
                &platform_bus);
 
-       bcm_kona_smc_init();
        bcm_board_setup_restart();
        kona_l2_cache_init();
 }