diff options
| author | Markus Mayer <markus.mayer@linaro.org> | 2014-03-06 04:18:13 -0500 |
|---|---|---|
| committer | Matt Porter <mporter@linaro.org> | 2014-03-14 11:25:15 -0400 |
| commit | c3ceebd7ca22ec9ffaeb7ff967719edd63479ccd (patch) | |
| tree | ea35ab0aebe2908f6fd9f0a225a2f496a345218b | |
| parent | 833688f4e49f659ad90a3ea7e2905720774c3f61 (diff) | |
ARM: bcm21664: Add board support.
Add support for the Broadcom BCM21664 mobile SoC. It has two Cortex-A9
cores like the BCM281xx family of chips. BCM21664 and BCM281xx share
many IP blocks in addition to the ARM cores.
Signed-off-by: Markus Mayer <markus.mayer@linaro.org>
Signed-off-by: Matt Porter <mporter@linaro.org>
| -rw-r--r-- | arch/arm/mach-bcm/Makefile | 6 | ||||
| -rw-r--r-- | arch/arm/mach-bcm/board_bcm21664.c | 78 |
2 files changed, 82 insertions, 2 deletions
diff --git a/arch/arm/mach-bcm/Makefile b/arch/arm/mach-bcm/Makefile index 01649132c9f2..4e4a2ed6851e 100644 --- a/arch/arm/mach-bcm/Makefile +++ b/arch/arm/mach-bcm/Makefile | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | # | 1 | # |
| 2 | # Copyright (C) 2012-2013 Broadcom Corporation | 2 | # Copyright (C) 2012-2014 Broadcom Corporation |
| 3 | # | 3 | # |
| 4 | # This program is free software; you can redistribute it and/or | 4 | # This program is free software; you can redistribute it and/or |
| 5 | # modify it under the terms of the GNU General Public License as | 5 | # modify it under the terms of the GNU General Public License as |
| @@ -10,7 +10,9 @@ | |||
| 10 | # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 10 | # of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
| 11 | # GNU General Public License for more details. | 11 | # GNU General Public License for more details. |
| 12 | 12 | ||
| 13 | obj-$(CONFIG_ARCH_BCM_MOBILE) := board_bcm281xx.o bcm_kona_smc.o bcm_kona_smc_asm.o kona.o | 13 | obj-$(CONFIG_ARCH_BCM_MOBILE) := board_bcm281xx.o board_bcm21664.o \ |
| 14 | bcm_kona_smc.o bcm_kona_smc_asm.o kona.o | ||
| 15 | |||
| 14 | plus_sec := $(call as-instr,.arch_extension sec,+sec) | 16 | plus_sec := $(call as-instr,.arch_extension sec,+sec) |
| 15 | AFLAGS_bcm_kona_smc_asm.o :=-Wa,-march=armv7-a$(plus_sec) | 17 | AFLAGS_bcm_kona_smc_asm.o :=-Wa,-march=armv7-a$(plus_sec) |
| 16 | obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o | 18 | obj-$(CONFIG_ARCH_BCM_5301X) += bcm_5301x.o |
diff --git a/arch/arm/mach-bcm/board_bcm21664.c b/arch/arm/mach-bcm/board_bcm21664.c new file mode 100644 index 000000000000..acc1573fd005 --- /dev/null +++ b/arch/arm/mach-bcm/board_bcm21664.c | |||
| @@ -0,0 +1,78 @@ | |||
| 1 | /* | ||
| 2 | * Copyright (C) 2014 Broadcom Corporation | ||
| 3 | * | ||
| 4 | * This program is free software; you can redistribute it and/or | ||
| 5 | * modify it under the terms of the GNU General Public License as | ||
| 6 | * published by the Free Software Foundation version 2. | ||
| 7 | * | ||
| 8 | * This program is distributed "as is" WITHOUT ANY WARRANTY of any | ||
| 9 | * kind, whether express or implied; without even the implied warranty | ||
| 10 | * of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 11 | * GNU General Public License for more details. | ||
| 12 | */ | ||
| 13 | |||
| 14 | #include <linux/clocksource.h> | ||
| 15 | #include <linux/of_address.h> | ||
| 16 | #include <linux/of_platform.h> | ||
| 17 | |||
| 18 | #include <asm/mach/arch.h> | ||
| 19 | |||
| 20 | #include "bcm_kona_smc.h" | ||
| 21 | #include "kona.h" | ||
| 22 | |||
| 23 | #define RSTMGR_DT_STRING "brcm,bcm21664-resetmgr" | ||
| 24 | |||
| 25 | #define RSTMGR_REG_WR_ACCESS_OFFSET 0 | ||
| 26 | #define RSTMGR_REG_CHIP_SOFT_RST_OFFSET 4 | ||
| 27 | |||
| 28 | #define RSTMGR_WR_PASSWORD 0xa5a5 | ||
| 29 | #define RSTMGR_WR_PASSWORD_SHIFT 8 | ||
| 30 | #define RSTMGR_WR_ACCESS_ENABLE 1 | ||
| 31 | |||
| 32 | static void bcm21664_restart(enum reboot_mode mode, const char *cmd) | ||
| 33 | { | ||
| 34 | void __iomem *base; | ||
| 35 | struct device_node *resetmgr; | ||
| 36 | |||
| 37 | resetmgr = of_find_compatible_node(NULL, NULL, RSTMGR_DT_STRING); | ||
| 38 | if (!resetmgr) { | ||
| 39 | pr_emerg("Couldn't find " RSTMGR_DT_STRING "\n"); | ||
| 40 | return; | ||
| 41 | } | ||
| 42 | base = of_iomap(resetmgr, 0); | ||
| 43 | if (!base) { | ||
| 44 | pr_emerg("Couldn't map " RSTMGR_DT_STRING "\n"); | ||
| 45 | return; | ||
| 46 | } | ||
| 47 | |||
| 48 | /* | ||
| 49 | * A soft reset is triggered by writing a 0 to bit 0 of the soft reset | ||
| 50 | * register. To write to that register we must first write the password | ||
| 51 | * and the enable bit in the write access enable register. | ||
| 52 | */ | ||
| 53 | writel((RSTMGR_WR_PASSWORD << RSTMGR_WR_PASSWORD_SHIFT) | | ||
| 54 | RSTMGR_WR_ACCESS_ENABLE, | ||
| 55 | base + RSTMGR_REG_WR_ACCESS_OFFSET); | ||
| 56 | writel(0, base + RSTMGR_REG_CHIP_SOFT_RST_OFFSET); | ||
| 57 | |||
| 58 | /* Wait for reset */ | ||
| 59 | while (1); | ||
| 60 | } | ||
| 61 | |||
| 62 | static void __init bcm21664_init(void) | ||
| 63 | { | ||
| 64 | of_platform_populate(NULL, of_default_bus_match_table, NULL, | ||
| 65 | &platform_bus); | ||
| 66 | kona_l2_cache_init(); | ||
| 67 | } | ||
| 68 | |||
| 69 | static const char * const bcm21664_dt_compat[] = { | ||
| 70 | "brcm,bcm21664", | ||
| 71 | NULL, | ||
| 72 | }; | ||
| 73 | |||
| 74 | DT_MACHINE_START(BCM21664_DT, "BCM21664 Broadcom Application Processor") | ||
| 75 | .init_machine = bcm21664_init, | ||
| 76 | .restart = bcm21664_restart, | ||
| 77 | .dt_compat = bcm21664_dt_compat, | ||
| 78 | MACHINE_END | ||
