diff options
Diffstat (limited to 'arch/arm/mach-bcm/board_bcm21664.c')
| -rw-r--r-- | arch/arm/mach-bcm/board_bcm21664.c | 77 | 
1 files changed, 77 insertions, 0 deletions
diff --git a/arch/arm/mach-bcm/board_bcm21664.c b/arch/arm/mach-bcm/board_bcm21664.c new file mode 100644 index 00000000000..f0521cc0640 --- /dev/null +++ b/arch/arm/mach-bcm/board_bcm21664.c @@ -0,0 +1,77 @@ +/* + * Copyright (C) 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 + * 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. + */ + +#include <linux/of_address.h> +#include <linux/of_platform.h> +#include <linux/io.h> + +#include <asm/mach/arch.h> + +#include "kona_l2_cache.h" + +#define RSTMGR_DT_STRING		"brcm,bcm21664-resetmgr" + +#define RSTMGR_REG_WR_ACCESS_OFFSET	0 +#define RSTMGR_REG_CHIP_SOFT_RST_OFFSET	4 + +#define RSTMGR_WR_PASSWORD		0xa5a5 +#define RSTMGR_WR_PASSWORD_SHIFT	8 +#define RSTMGR_WR_ACCESS_ENABLE		1 + +static void bcm21664_restart(enum reboot_mode mode, const char *cmd) +{ +	void __iomem *base; +	struct device_node *resetmgr; + +	resetmgr = of_find_compatible_node(NULL, NULL, RSTMGR_DT_STRING); +	if (!resetmgr) { +		pr_emerg("Couldn't find " RSTMGR_DT_STRING "\n"); +		return; +	} +	base = of_iomap(resetmgr, 0); +	if (!base) { +		pr_emerg("Couldn't map " RSTMGR_DT_STRING "\n"); +		return; +	} + +	/* +	 * A soft reset is triggered by writing a 0 to bit 0 of the soft reset +	 * register. To write to that register we must first write the password +	 * and the enable bit in the write access enable register. +	 */ +	writel((RSTMGR_WR_PASSWORD << RSTMGR_WR_PASSWORD_SHIFT) | +		RSTMGR_WR_ACCESS_ENABLE, +		base + RSTMGR_REG_WR_ACCESS_OFFSET); +	writel(0, base + RSTMGR_REG_CHIP_SOFT_RST_OFFSET); + +	/* Wait for reset */ +	while (1); +} + +static void __init bcm21664_init(void) +{ +	of_platform_populate(NULL, of_default_bus_match_table, NULL, +		&platform_bus); +	kona_l2_cache_init(); +} + +static const char * const bcm21664_dt_compat[] = { +	"brcm,bcm21664", +	NULL, +}; + +DT_MACHINE_START(BCM21664_DT, "BCM21664 Broadcom Application Processor") +	.init_machine = bcm21664_init, +	.restart = bcm21664_restart, +	.dt_compat = bcm21664_dt_compat, +MACHINE_END  | 
