2012-11-19 09:46:10 -08:00
/*
2014-02-25 14:17:44 -08:00
* Copyright ( C ) 2012 - 2014 Broadcom Corporation
2012-11-19 09:46:10 -08:00
*
* This program is free software ; you can redistribute it and / or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation version 2.
*
* This program is distributed " as is " WITHOUT ANY WARRANTY of any
* kind , whether express or implied ; without even the implied warranty
* of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*/
2013-03-13 14:27:27 -07:00
# include <linux/clocksource.h>
2014-02-25 14:17:45 -08:00
# include <linux/of_address.h>
2012-11-19 09:46:10 -08:00
# include <asm/mach/arch.h>
2014-04-21 16:53:11 -05:00
# include "kona_l2_cache.h"
2013-02-26 21:48:49 -08:00
2014-02-25 14:17:44 -08: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-24 15:39:33 -07:00
{
2014-02-25 14:17:44 -08:00
uint32_t val ;
void __iomem * base ;
struct device_node * np_wdog ;
2013-06-24 15:39:33 -07:00
2014-02-25 14:17:44 -08: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 19:33:53 +08:00
of_node_put ( np_wdog ) ;
2014-02-25 14:17:44 -08:00
if ( ! base ) {
pr_emerg ( " Couldn't map brcm,kona-wdt \n " ) ;
return ;
2013-06-24 15:39:33 -07:00
}
2014-02-25 14:17:44 -08: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-24 15:39:33 -07:00
}
2014-02-25 14:17:46 -08:00
static void __init bcm281xx_init ( void )
2012-11-19 09:46:10 -08:00
{
2013-02-26 21:48:49 -08:00
kona_l2_cache_init ( ) ;
2012-11-19 09:46:10 -08:00
}
2014-02-25 17:01:45 -06:00
static const char * const bcm281xx_dt_compat [ ] = {
" brcm,bcm11351 " , /* Have to use the first number upstreamed */
NULL ,
} ;
2012-11-19 09:46:10 -08:00
2014-02-25 17:01:45 -06:00
DT_MACHINE_START ( BCM281XX_DT , " BCM281xx Broadcom Application Processor " )
2014-02-25 14:17:46 -08:00
. init_machine = bcm281xx_init ,
2014-02-25 14:17:44 -08:00
. restart = bcm281xx_restart ,
2014-02-25 17:01:45 -06:00
. dt_compat = bcm281xx_dt_compat ,
2012-11-19 09:46:10 -08:00
MACHINE_END