2022-06-07 17:11:11 +03:00
// SPDX-License-Identifier: GPL-2.0-only
// Copyright (C) 2012-2014 Broadcom Corporation
2012-11-19 21:46:10 +04:00
2013-03-14 01:27:27 +04:00
# include <linux/clocksource.h>
2014-02-26 02:17:45 +04:00
# include <linux/of_address.h>
2012-11-19 21:46:10 +04:00
# include <asm/mach/arch.h>
2014-04-22 01:53:11 +04:00
# include "kona_l2_cache.h"
2013-02-27 09:48:49 +04:00
2014-02-26 02:17:44 +04:00
# 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 )
2013-06-25 02:39:33 +04:00
{
2014-02-26 02:17:44 +04:00
uint32_t val ;
void __iomem * base ;
struct device_node * np_wdog ;
2013-06-25 02:39:33 +04:00
2014-02-26 02:17:44 +04:00
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 ) ;
2019-03-05 14:33:53 +03:00
of_node_put ( np_wdog ) ;
2014-02-26 02:17:44 +04:00
if ( ! base ) {
pr_emerg ( " Couldn't map brcm,kona-wdt \n " ) ;
return ;
2013-06-25 02:39:33 +04:00
}
2014-02-26 02:17:44 +04:00
/* 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 ) ;
2013-06-25 02:39:33 +04:00
}
2014-02-26 02:17:46 +04:00
static void __init bcm281xx_init ( void )
2012-11-19 21:46:10 +04:00
{
2013-02-27 09:48:49 +04:00
kona_l2_cache_init ( ) ;
2012-11-19 21:46:10 +04:00
}
2014-02-26 03:01:45 +04:00
static const char * const bcm281xx_dt_compat [ ] = {
" brcm,bcm11351 " , /* Have to use the first number upstreamed */
NULL ,
} ;
2012-11-19 21:46:10 +04:00
2014-02-26 03:01:45 +04:00
DT_MACHINE_START ( BCM281XX_DT , " BCM281xx Broadcom Application Processor " )
2014-02-26 02:17:46 +04:00
. init_machine = bcm281xx_init ,
2014-02-26 02:17:44 +04:00
. restart = bcm281xx_restart ,
2014-02-26 03:01:45 +04:00
. dt_compat = bcm281xx_dt_compat ,
2012-11-19 21:46:10 +04:00
MACHINE_END