aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChristian Daudt <csd@broadcom.com>2013-08-06 20:04:54 -0400
committerChristian Daudt <csd@broadcom.com>2013-08-20 13:51:39 -0400
commit3a76b35186cb967a69c4a3935caf2fdf428e933b (patch)
treed26dd20cad8966e895b642c282f115dd8a75e071
parentaea237bfa0a8ce8fe364e3fa7de6850777044a60 (diff)
ARM: bcm: Make secure API call optional
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>
-rw-r--r--arch/arm/mach-bcm/bcm_kona_smc.c9
-rw-r--r--arch/arm/mach-bcm/bcm_kona_smc.h2
-rw-r--r--arch/arm/mach-bcm/board_bcm281xx.c10
3 files changed, 13 insertions, 8 deletions
diff --git a/arch/arm/mach-bcm/bcm_kona_smc.c b/arch/arm/mach-bcm/bcm_kona_smc.c
index bcc1c5903fb1..5e31e918f325 100644
--- a/arch/arm/mach-bcm/bcm_kona_smc.c
+++ b/arch/arm/mach-bcm/bcm_kona_smc.c
@@ -42,13 +42,14 @@ static const struct of_device_id bcm_kona_smc_ids[] __initconst = {
42}; 42};
43 43
44/* Map in the bounce area */ 44/* Map in the bounce area */
45void __init bcm_kona_smc_init(void) 45int __init bcm_kona_smc_init(void)
46{ 46{
47 struct device_node *node; 47 struct device_node *node;
48 48
49 /* Read buffer addr and size from the device tree node */ 49 /* Read buffer addr and size from the device tree node */
50 node = of_find_matching_node(NULL, bcm_kona_smc_ids); 50 node = of_find_matching_node(NULL, bcm_kona_smc_ids);
51 BUG_ON(!node); 51 if (!node)
52 return -ENODEV;
52 53
53 /* Don't care about size or flags of the DT node */ 54 /* Don't care about size or flags of the DT node */
54 bridge_data.buffer_addr = 55 bridge_data.buffer_addr =
@@ -60,7 +61,9 @@ void __init bcm_kona_smc_init(void)
60 61
61 bridge_data.initialized = 1; 62 bridge_data.initialized = 1;
62 63
63 pr_info("Secure API initialized!\n"); 64 pr_info("Kona Secure API initialized\n");
65
66 return 0;
64} 67}
65 68
66/* __bcm_kona_smc() should only run on CPU 0, with pre-emption disabled */ 69/* __bcm_kona_smc() should only run on CPU 0, with pre-emption disabled */
diff --git a/arch/arm/mach-bcm/bcm_kona_smc.h b/arch/arm/mach-bcm/bcm_kona_smc.h
index 3bedbed1c21b..d098a7e76744 100644
--- a/arch/arm/mach-bcm/bcm_kona_smc.h
+++ b/arch/arm/mach-bcm/bcm_kona_smc.h
@@ -64,7 +64,7 @@
64#define SSAPI_BRCM_START_VC_CORE 0x0E000008 64#define SSAPI_BRCM_START_VC_CORE 0x0E000008
65 65
66#ifndef __ASSEMBLY__ 66#ifndef __ASSEMBLY__
67extern void bcm_kona_smc_init(void); 67extern int __init bcm_kona_smc_init(void);
68 68
69extern unsigned bcm_kona_smc(unsigned service_id, 69extern unsigned bcm_kona_smc(unsigned service_id,
70 unsigned arg0, 70 unsigned arg0,
diff --git a/arch/arm/mach-bcm/board_bcm281xx.c b/arch/arm/mach-bcm/board_bcm281xx.c
index 3fe1e4d2e9a7..8d9f931164bb 100644
--- a/arch/arm/mach-bcm/board_bcm281xx.c
+++ b/arch/arm/mach-bcm/board_bcm281xx.c
@@ -29,15 +29,18 @@ static int __init kona_l2_cache_init(void)
29 if (!IS_ENABLED(CONFIG_CACHE_L2X0)) 29 if (!IS_ENABLED(CONFIG_CACHE_L2X0))
30 return 0; 30 return 0;
31 31
32 if (bcm_kona_smc_init() < 0) {
33 pr_info("Kona secure API not available. Skipping L2 init\n");
34 return 0;
35 }
36
32 bcm_kona_smc(SSAPI_ENABLE_L2_CACHE, 0, 0, 0, 0); 37 bcm_kona_smc(SSAPI_ENABLE_L2_CACHE, 0, 0, 0, 0);
33 38
34 /* 39 /*
35 * The aux_val and aux_mask have no effect since L2 cache is already 40 * The aux_val and aux_mask have no effect since L2 cache is already
36 * enabled. Pass 0s for aux_val and 1s for aux_mask for default value. 41 * enabled. Pass 0s for aux_val and 1s for aux_mask for default value.
37 */ 42 */
38 l2x0_of_init(0, ~0); 43 return l2x0_of_init(0, ~0);
39
40 return 0;
41} 44}
42 45
43static void bcm_board_setup_restart(void) 46static void bcm_board_setup_restart(void)
@@ -58,7 +61,6 @@ static void __init board_init(void)
58 of_platform_populate(NULL, of_default_bus_match_table, NULL, 61 of_platform_populate(NULL, of_default_bus_match_table, NULL,
59 &platform_bus); 62 &platform_bus);
60 63
61 bcm_kona_smc_init();
62 bcm_board_setup_restart(); 64 bcm_board_setup_restart();
63 kona_l2_cache_init(); 65 kona_l2_cache_init();
64} 66}