From a21ea269b99e6b627c86c29fb1b45b859e3840b6 Mon Sep 17 00:00:00 2001 From: Markus Mayer Date: Tue, 25 Feb 2014 14:17:44 -0800 Subject: 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 | 46 ++++++++++++++++++++++++++++---------- 1 file changed, 34 insertions(+), 12 deletions(-) (limited to 'arch/arm/mach-bcm/board_bcm281xx.c') 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) +#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 + +static void bcm281xx_restart(enum reboot_mode mode, const char *cmd) { - struct device_node *np; + uint32_t val; + void __iomem *base; + struct device_node *np_wdog; - 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); + np_wdog = of_find_compatible_node(NULL, NULL, "brcm,kona-wdt"); + if (!np_wdog) { + pr_emerg("Couldn't find brcm,kona-wdt\n"); + return; + } + base = of_iomap(np_wdog, 0); + if (!base) { + pr_emerg("Couldn't map brcm,kona-wdt\n"); + return; } - /* Restart setup for other boards goes here */ + + /* 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 -- cgit v1.2.3-59-g8ed1b