From 9c6423aa7e32c74f7992c0428d8456373a5c48a8 Mon Sep 17 00:00:00 2001 From: Alex Elder Date: Tue, 25 Feb 2014 17:01:45 -0600 Subject: [PATCH 1/5] ARM: bcm281xx: symbol cleanup This patch renames a few symbols that needlessly used "11351" rather than "281xx" in their names. Support for the bcm11351 board is being removed from the kernel, and the family of boards is more properly referred to as "bcm281xx". Signed-off-by: Alex Elder Reviewed-by: Markus Mayer Signed-off-by: Matt Porter --- arch/arm/mach-bcm/board_bcm281xx.c | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/arch/arm/mach-bcm/board_bcm281xx.c b/arch/arm/mach-bcm/board_bcm281xx.c index cb3dc364405c..d8f0b6cc78aa 100644 --- a/arch/arm/mach-bcm/board_bcm281xx.c +++ b/arch/arm/mach-bcm/board_bcm281xx.c @@ -65,10 +65,13 @@ static void __init board_init(void) kona_l2_cache_init(); } -static const char * const bcm11351_dt_compat[] = { "brcm,bcm11351", NULL, }; +static const char * const bcm281xx_dt_compat[] = { + "brcm,bcm11351", /* Have to use the first number upstreamed */ + NULL, +}; -DT_MACHINE_START(BCM11351_DT, "BCM281xx Broadcom Application Processor") +DT_MACHINE_START(BCM281XX_DT, "BCM281xx Broadcom Application Processor") .init_machine = board_init, .restart = bcm_kona_restart, - .dt_compat = bcm11351_dt_compat, + .dt_compat = bcm281xx_dt_compat, MACHINE_END From 8b1c342629ecf7c2c52600dbe626d74cffc8d6cc Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Tue, 25 Feb 2014 14:17:43 -0800 Subject: [PATCH 2/5] ARM: bcm281xx: Move kona_l2_cache_init() so it can be shared In preparation for future SoCs, move kona_l2_cache_init() from board specific board_bcm281xx.c to shared kona.c, so multiple SoC families can make use of it. Also change the return type to "void", since we never look at the return code anyway. Signed-off-by: Markus Mayer Signed-off-by: Matt Porter --- arch/arm/mach-bcm/board_bcm281xx.c | 26 +------------------------- arch/arm/mach-bcm/kona.c | 30 +++++++++++++++++++++++++++++- arch/arm/mach-bcm/kona.h | 3 ++- 3 files changed, 32 insertions(+), 27 deletions(-) diff --git a/arch/arm/mach-bcm/board_bcm281xx.c b/arch/arm/mach-bcm/board_bcm281xx.c index d8f0b6cc78aa..5494e9146761 100644 --- a/arch/arm/mach-bcm/board_bcm281xx.c +++ b/arch/arm/mach-bcm/board_bcm281xx.c @@ -12,37 +12,13 @@ */ #include -#include -#include -#include +#include #include #include -#include -#include -#include "bcm_kona_smc.h" #include "kona.h" -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. - */ - return l2x0_of_init(0, ~0); -} - static void bcm_board_setup_restart(void) { struct device_node *np; diff --git a/arch/arm/mach-bcm/kona.c b/arch/arm/mach-bcm/kona.c index 6939d9017f63..2f1db29291fe 100644 --- a/arch/arm/mach-bcm/kona.c +++ b/arch/arm/mach-bcm/kona.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 Broadcom Corporation + * Copyright (C) 2012-2014 Broadcom Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -12,10 +12,38 @@ */ #include +#include +#include #include +#include "bcm_kona_smc.h" #include "kona.h" +void __init kona_l2_cache_init(void) +{ + int ret; + + if (!IS_ENABLED(CONFIG_CACHE_L2X0)) + return; + + ret = bcm_kona_smc_init(); + if (ret) { + pr_info("Secure API not available (%d). Skipping L2 init.\n", + ret); + return; + } + + 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. + */ + ret = l2x0_of_init(0, ~0); + if (ret) + pr_err("Couldn't enable L2 cache: %d\n", ret); +} + static void __iomem *watchdog_base; void bcm_kona_setup_restart(void) diff --git a/arch/arm/mach-bcm/kona.h b/arch/arm/mach-bcm/kona.h index 291eca3e06ff..f42aef837444 100644 --- a/arch/arm/mach-bcm/kona.h +++ b/arch/arm/mach-bcm/kona.h @@ -1,5 +1,5 @@ /* - * Copyright (C) 2013 Broadcom Corporation + * Copyright (C) 2012-2014 Broadcom Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -13,5 +13,6 @@ #include +void __init kona_l2_cache_init(void); void bcm_kona_setup_restart(void); void bcm_kona_restart(enum reboot_mode mode, const char *cmd); From a21ea269b99e6b627c86c29fb1b45b859e3840b6 Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Tue, 25 Feb 2014 14:17:44 -0800 Subject: [PATCH 3/5] ARM: bcm281xx: Consolidate reboot code Consolidate reboot code and remove unnecessary functions. Signed-off-by: Markus Mayer Signed-off-by: Matt Porter --- arch/arm/mach-bcm/board_bcm281xx.c | 48 ++++++++++++++++++++-------- arch/arm/mach-bcm/kona.c | 50 ------------------------------ arch/arm/mach-bcm/kona.h | 4 --- 3 files changed, 35 insertions(+), 67 deletions(-) diff --git a/arch/arm/mach-bcm/board_bcm281xx.c b/arch/arm/mach-bcm/board_bcm281xx.c index 5494e9146761..d7fa3aef6213 100644 --- a/arch/arm/mach-bcm/board_bcm281xx.c +++ b/arch/arm/mach-bcm/board_bcm281xx.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2012-2013 Broadcom Corporation + * Copyright (C) 2012-2014 Broadcom Corporation * * This program is free software; you can redistribute it and/or * modify it under the terms of the GNU General Public License as @@ -19,25 +19,47 @@ #include "kona.h" -static void bcm_board_setup_restart(void) -{ - struct device_node *np; +#define SECWDOG_OFFSET 0x00000000 +#define SECWDOG_RESERVED_MASK 0xe2000000 +#define SECWDOG_WD_LOAD_FLAG_MASK 0x10000000 +#define SECWDOG_EN_MASK 0x08000000 +#define SECWDOG_SRSTEN_MASK 0x04000000 +#define SECWDOG_CLKS_SHIFT 20 +#define SECWDOG_COUNT_SHIFT 0 - np = of_find_compatible_node(NULL, NULL, "brcm,bcm11351"); - if (np) { - if (of_device_is_available(np)) - bcm_kona_setup_restart(); - of_node_put(np); +static void bcm281xx_restart(enum reboot_mode mode, const char *cmd) +{ + uint32_t val; + void __iomem *base; + struct device_node *np_wdog; + + np_wdog = of_find_compatible_node(NULL, NULL, "brcm,kona-wdt"); + if (!np_wdog) { + pr_emerg("Couldn't find brcm,kona-wdt\n"); + return; } - /* Restart setup for other boards goes here */ + base = of_iomap(np_wdog, 0); + if (!base) { + pr_emerg("Couldn't map brcm,kona-wdt\n"); + return; + } + + /* Enable watchdog with short timeout (244us). */ + val = readl(base + SECWDOG_OFFSET); + val &= SECWDOG_RESERVED_MASK | SECWDOG_WD_LOAD_FLAG_MASK; + val |= SECWDOG_EN_MASK | SECWDOG_SRSTEN_MASK | + (0x15 << SECWDOG_CLKS_SHIFT) | + (0x8 << SECWDOG_COUNT_SHIFT); + writel(val, base + SECWDOG_OFFSET); + + /* Wait for reset */ + while (1); } static void __init board_init(void) { of_platform_populate(NULL, of_default_bus_match_table, NULL, &platform_bus); - - bcm_board_setup_restart(); kona_l2_cache_init(); } @@ -48,6 +70,6 @@ static const char * const bcm281xx_dt_compat[] = { DT_MACHINE_START(BCM281XX_DT, "BCM281xx Broadcom Application Processor") .init_machine = board_init, - .restart = bcm_kona_restart, + .restart = bcm281xx_restart, .dt_compat = bcm281xx_dt_compat, MACHINE_END diff --git a/arch/arm/mach-bcm/kona.c b/arch/arm/mach-bcm/kona.c index 2f1db29291fe..768bc2837bf5 100644 --- a/arch/arm/mach-bcm/kona.c +++ b/arch/arm/mach-bcm/kona.c @@ -11,10 +11,8 @@ * GNU General Public License for more details. */ -#include #include #include -#include #include "bcm_kona_smc.h" #include "kona.h" @@ -43,51 +41,3 @@ void __init kona_l2_cache_init(void) if (ret) pr_err("Couldn't enable L2 cache: %d\n", ret); } - -static void __iomem *watchdog_base; - -void bcm_kona_setup_restart(void) -{ - struct device_node *np_wdog; - - /* - * The assumption is that whoever calls bcm_kona_setup_restart() - * also needs a Kona Watchdog Timer entry in Device Tree, i.e. we - * report an error if the DT entry is missing. - */ - np_wdog = of_find_compatible_node(NULL, NULL, "brcm,kona-wdt"); - if (!np_wdog) { - pr_err("brcm,kona-wdt not found in DT, reboot disabled\n"); - return; - } - watchdog_base = of_iomap(np_wdog, 0); - WARN(!watchdog_base, "failed to map watchdog base"); - of_node_put(np_wdog); -} - -#define SECWDOG_OFFSET 0x00000000 -#define SECWDOG_RESERVED_MASK 0xE2000000 -#define SECWDOG_WD_LOAD_FLAG_MASK 0x10000000 -#define SECWDOG_EN_MASK 0x08000000 -#define SECWDOG_SRSTEN_MASK 0x04000000 -#define SECWDOG_CLKS_SHIFT 20 -#define SECWDOG_LOCK_SHIFT 0 - -void bcm_kona_restart(enum reboot_mode mode, const char *cmd) -{ - uint32_t val; - - if (!watchdog_base) - panic("Watchdog not mapped. Reboot failed.\n"); - - /* Enable watchdog2 with very short timeout. */ - val = readl(watchdog_base + SECWDOG_OFFSET); - val &= SECWDOG_RESERVED_MASK | SECWDOG_WD_LOAD_FLAG_MASK; - val |= SECWDOG_EN_MASK | SECWDOG_SRSTEN_MASK | - (0x8 << SECWDOG_CLKS_SHIFT) | - (0x8 << SECWDOG_LOCK_SHIFT); - writel(val, watchdog_base + SECWDOG_OFFSET); - - while (1) - ; -} diff --git a/arch/arm/mach-bcm/kona.h b/arch/arm/mach-bcm/kona.h index f42aef837444..3a7a017c29cd 100644 --- a/arch/arm/mach-bcm/kona.h +++ b/arch/arm/mach-bcm/kona.h @@ -11,8 +11,4 @@ * GNU General Public License for more details. */ -#include - void __init kona_l2_cache_init(void); -void bcm_kona_setup_restart(void); -void bcm_kona_restart(enum reboot_mode mode, const char *cmd); From 389df03610d8a8b1263ba222175eb6fba228c186 Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Tue, 25 Feb 2014 14:17:45 -0800 Subject: [PATCH 4/5] ARM: bcm281xx: Re-order hearder files Re-order header files alphabetically. Signed-off-by: Markus Mayer Signed-off-by: Matt Porter --- arch/arm/mach-bcm/board_bcm281xx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-bcm/board_bcm281xx.c b/arch/arm/mach-bcm/board_bcm281xx.c index d7fa3aef6213..0335c3ad2966 100644 --- a/arch/arm/mach-bcm/board_bcm281xx.c +++ b/arch/arm/mach-bcm/board_bcm281xx.c @@ -11,9 +11,9 @@ * GNU General Public License for more details. */ -#include -#include #include +#include +#include #include From 0e8b860ac6d65209beea03ee9b718089838476ef Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Tue, 25 Feb 2014 14:17:46 -0800 Subject: [PATCH 5/5] ARM: bcm281xx: Rename board_init() function Rename board_init() to bcm281xx_init(), so the name reflects the board specific nature of this function. Signed-off-by: Markus Mayer Signed-off-by: Matt Porter --- arch/arm/mach-bcm/board_bcm281xx.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/arch/arm/mach-bcm/board_bcm281xx.c b/arch/arm/mach-bcm/board_bcm281xx.c index 0335c3ad2966..6be54c10f8cb 100644 --- a/arch/arm/mach-bcm/board_bcm281xx.c +++ b/arch/arm/mach-bcm/board_bcm281xx.c @@ -56,7 +56,7 @@ static void bcm281xx_restart(enum reboot_mode mode, const char *cmd) while (1); } -static void __init board_init(void) +static void __init bcm281xx_init(void) { of_platform_populate(NULL, of_default_bus_match_table, NULL, &platform_bus); @@ -69,7 +69,7 @@ static const char * const bcm281xx_dt_compat[] = { }; DT_MACHINE_START(BCM281XX_DT, "BCM281xx Broadcom Application Processor") - .init_machine = board_init, + .init_machine = bcm281xx_init, .restart = bcm281xx_restart, .dt_compat = bcm281xx_dt_compat, MACHINE_END