diff options
Diffstat (limited to 'arch/arm/mach-realview')
-rw-r--r-- | arch/arm/mach-realview/Kconfig | 67 | ||||
-rw-r--r-- | arch/arm/mach-realview/Makefile | 6 | ||||
-rw-r--r-- | arch/arm/mach-realview/board-eb.h (renamed from arch/arm/mach-realview/include/mach/board-eb.h) | 4 | ||||
-rw-r--r-- | arch/arm/mach-realview/board-pb1176.h (renamed from arch/arm/mach-realview/include/mach/board-pb1176.h) | 4 | ||||
-rw-r--r-- | arch/arm/mach-realview/board-pb11mp.h (renamed from arch/arm/mach-realview/include/mach/board-pb11mp.h) | 4 | ||||
-rw-r--r-- | arch/arm/mach-realview/board-pba8.h (renamed from arch/arm/mach-realview/include/mach/board-pba8.h) | 4 | ||||
-rw-r--r-- | arch/arm/mach-realview/board-pbx.h (renamed from arch/arm/mach-realview/include/mach/board-pbx.h) | 4 | ||||
-rw-r--r-- | arch/arm/mach-realview/core.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-realview/core.h | 4 | ||||
-rw-r--r-- | arch/arm/mach-realview/hardware.h (renamed from arch/arm/mach-realview/include/mach/hardware.h) | 2 | ||||
-rw-r--r-- | arch/arm/mach-realview/include/mach/barriers.h | 8 | ||||
-rw-r--r-- | arch/arm/mach-realview/include/mach/irqs.h | 40 | ||||
-rw-r--r-- | arch/arm/mach-realview/include/mach/memory.h | 64 | ||||
-rw-r--r-- | arch/arm/mach-realview/include/mach/uncompress.h | 77 | ||||
-rw-r--r-- | arch/arm/mach-realview/irqs-eb.h (renamed from arch/arm/mach-realview/include/mach/irqs-eb.h) | 20 | ||||
-rw-r--r-- | arch/arm/mach-realview/irqs-pb1176.h (renamed from arch/arm/mach-realview/include/mach/irqs-pb1176.h) | 23 | ||||
-rw-r--r-- | arch/arm/mach-realview/irqs-pb11mp.h (renamed from arch/arm/mach-realview/include/mach/irqs-pb11mp.h) | 27 | ||||
-rw-r--r-- | arch/arm/mach-realview/irqs-pba8.h (renamed from arch/arm/mach-realview/include/mach/irqs-pba8.h) | 23 | ||||
-rw-r--r-- | arch/arm/mach-realview/irqs-pbx.h (renamed from arch/arm/mach-realview/include/mach/irqs-pbx.h) | 24 | ||||
-rw-r--r-- | arch/arm/mach-realview/platform.h (renamed from arch/arm/mach-realview/include/mach/platform.h) | 2 | ||||
-rw-r--r-- | arch/arm/mach-realview/platsmp-dt.c | 91 | ||||
-rw-r--r-- | arch/arm/mach-realview/platsmp.c | 10 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview-dt.c | 1 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview_eb.c | 13 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview_pb1176.c | 6 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview_pb11mp.c | 12 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview_pba8.c | 14 | ||||
-rw-r--r-- | arch/arm/mach-realview/realview_pbx.c | 14 |
28 files changed, 191 insertions, 383 deletions
diff --git a/arch/arm/mach-realview/Kconfig b/arch/arm/mach-realview/Kconfig index 565925f37..70ab4a25a 100644 --- a/arch/arm/mach-realview/Kconfig +++ b/arch/arm/mach-realview/Kconfig @@ -1,13 +1,30 @@ -menu "RealView platform type" - depends on ARCH_REALVIEW +menuconfig ARCH_REALVIEW + bool "ARM Ltd. RealView family" + depends on ARCH_MULTI_V5 || ARCH_MULTI_V6 || ARCH_MULTI_V7 + select ARM_AMBA + select ARM_TIMER_SP804 + select COMMON_CLK_VERSATILE + select GPIO_PL061 if GPIOLIB + select ICST + select PLAT_VERSATILE + select PLAT_VERSATILE_SCHED_CLOCK + help + This enables support for ARM Ltd RealView boards. + +if ARCH_REALVIEW config REALVIEW_DT bool "Support RealView(R) Device Tree based boot" select ARM_GIC + select CLK_SP810 + select HAVE_SMP + select ICST + select MACH_REALVIEW_EB if ARCH_MULTI_V5 select MFD_SYSCON select POWER_RESET select POWER_RESET_VERSATILE select POWER_SUPPLY + select SMP_ON_UP if SMP select SOC_REALVIEW select USE_OF help @@ -17,14 +34,32 @@ config REALVIEW_DT config MACH_REALVIEW_EB bool "Support RealView(R) Emulation Baseboard" select ARM_GIC + select CPU_ARM926T if ARCH_MULTI_V5 help Include support for the ARM(R) RealView(R) Emulation Baseboard - platform. + platform. On an ARMv5 kernel, this will include support for + the ARM926EJ-S core tile, while on an ARMv6/v7 kernel, at least + one of the ARM1136, ARM1176, ARM11MPCore or Cortex-A9MPCore + core tile options should be enabled. + +config REALVIEW_EB_ARM1136 + bool "Support ARM1136J(F)-S Tile" + depends on MACH_REALVIEW_EB && ARCH_MULTI_V6 + select CPU_V6 + help + Enable support for the ARM1136 tile fitted to the + Realview(R) Emulation Baseboard platform. + +config REALVIEW_EB_ARM1176 + bool "Support ARM1176JZ(F)-S Tile" + depends on MACH_REALVIEW_EB && ARCH_MULTI_V6 + help + Enable support for the ARM1176 tile fitted to the + Realview(R) Emulation Baseboard platform. config REALVIEW_EB_A9MP bool "Support Multicore Cortex-A9 Tile" - depends on MACH_REALVIEW_EB - select CPU_V7 + depends on MACH_REALVIEW_EB && ARCH_MULTI_V7 select HAVE_ARM_SCU if SMP select HAVE_ARM_TWD if SMP select HAVE_SMP @@ -35,9 +70,7 @@ config REALVIEW_EB_A9MP config REALVIEW_EB_ARM11MP bool "Support ARM11MPCore Tile" - depends on MACH_REALVIEW_EB - select ARCH_HAS_BARRIERS if SMP - select CPU_V6K + depends on MACH_REALVIEW_EB && ARCH_MULTI_V6 select HAVE_ARM_SCU if SMP select HAVE_ARM_TWD if SMP select HAVE_SMP @@ -48,7 +81,7 @@ config REALVIEW_EB_ARM11MP config REALVIEW_EB_ARM11MP_REVB bool "Support ARM11MPCore RevB Tile" - depends on REALVIEW_EB_ARM11MP + depends on REALVIEW_EB_ARM11MP && ARCH_MULTI_V6 help Enable support for the ARM11MPCore Revision B tile on the Realview(R) Emulation Baseboard platform. Since there are device @@ -57,9 +90,8 @@ config REALVIEW_EB_ARM11MP_REVB config MACH_REALVIEW_PB11MP bool "Support RealView(R) Platform Baseboard for ARM11MPCore" - select ARCH_HAS_BARRIERS if SMP + depends on ARCH_MULTI_V6 select ARM_GIC - select CPU_V6K select HAVE_ARM_SCU if SMP select HAVE_ARM_TWD if SMP select HAVE_PATA_PLATFORM @@ -73,6 +105,7 @@ config MACH_REALVIEW_PB11MP # ARMv6 CPU without K extensions, but does have the new exclusive ops config MACH_REALVIEW_PB1176 bool "Support RealView(R) Platform Baseboard for ARM1176JZF-S" + depends on ARCH_MULTI_V6 select ARM_GIC select CPU_V6 select HAVE_TCM @@ -92,8 +125,8 @@ config REALVIEW_PB1176_SECURE_FLASH config MACH_REALVIEW_PBA8 bool "Support RealView(R) Platform Baseboard for Cortex(tm)-A8 platform" + depends on ARCH_MULTI_V7 select ARM_GIC - select CPU_V7 select HAVE_PATA_PLATFORM help Include support for the ARM(R) RealView Platform Baseboard for @@ -101,15 +134,15 @@ config MACH_REALVIEW_PBA8 support for PCI-E and Compact Flash. config MACH_REALVIEW_PBX - bool "Support RealView(R) Platform Baseboard Explore" - select ARCH_SPARSEMEM_ENABLE if CPU_V7 && !REALVIEW_HIGH_PHYS_OFFSET + bool "Support RealView(R) Platform Baseboard Explore for Cortex-A9" + depends on ARCH_MULTI_V7 select ARM_GIC select HAVE_ARM_SCU if SMP select HAVE_ARM_TWD if SMP select HAVE_PATA_PLATFORM select HAVE_SMP select MIGHT_HAVE_CACHE_L2X0 - select ZONE_DMA if SPARSEMEM + select ZONE_DMA help Include support for the ARM(R) RealView(R) Platform Baseboard Explore. @@ -124,6 +157,6 @@ config REALVIEW_HIGH_PHYS_OFFSET the board supports 512MB of RAM, this option allows the memory to be accessed contiguously at the high physical offset. On the PBX board, disabling this option allows 1GB of - RAM to be used with SPARSEMEM. + RAM to be used with HIGHMEM. -endmenu +endif diff --git a/arch/arm/mach-realview/Makefile b/arch/arm/mach-realview/Makefile index e07fdf7ae..dae8d86ef 100644 --- a/arch/arm/mach-realview/Makefile +++ b/arch/arm/mach-realview/Makefile @@ -1,13 +1,19 @@ # # Makefile for the linux kernel. # +ccflags-$(CONFIG_ARCH_MULTIPLATFORM) := -I$(srctree)/$(src)/include \ + -I$(srctree)/arch/arm/plat-versatile/include obj-y := core.o obj-$(CONFIG_REALVIEW_DT) += realview-dt.o +obj-$(CONFIG_SMP) += platsmp-dt.o + +ifdef CONFIG_ATAGS obj-$(CONFIG_MACH_REALVIEW_EB) += realview_eb.o obj-$(CONFIG_MACH_REALVIEW_PB11MP) += realview_pb11mp.o obj-$(CONFIG_MACH_REALVIEW_PB1176) += realview_pb1176.o obj-$(CONFIG_MACH_REALVIEW_PBA8) += realview_pba8.o obj-$(CONFIG_MACH_REALVIEW_PBX) += realview_pbx.o obj-$(CONFIG_SMP) += platsmp.o +endif obj-$(CONFIG_HOTPLUG_CPU) += hotplug.o diff --git a/arch/arm/mach-realview/include/mach/board-eb.h b/arch/arm/mach-realview/board-eb.h index a301e61a5..a850ae694 100644 --- a/arch/arm/mach-realview/include/mach/board-eb.h +++ b/arch/arm/mach-realview/board-eb.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/board-eb.h - * * Copyright (C) 2007 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -21,7 +19,7 @@ #ifndef __ASM_ARCH_BOARD_EB_H #define __ASM_ARCH_BOARD_EB_H -#include <mach/platform.h> +#include "platform.h" /* * RealView EB + ARM11MPCore peripheral addresses diff --git a/arch/arm/mach-realview/include/mach/board-pb1176.h b/arch/arm/mach-realview/board-pb1176.h index 2a15fef94..29c04a9e1 100644 --- a/arch/arm/mach-realview/include/mach/board-pb1176.h +++ b/arch/arm/mach-realview/board-pb1176.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/board-pb1176.h - * * Copyright (C) 2008 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -21,7 +19,7 @@ #ifndef __ASM_ARCH_BOARD_PB1176_H #define __ASM_ARCH_BOARD_PB1176_H -#include <mach/platform.h> +#include "platform.h" /* * Peripheral addresses diff --git a/arch/arm/mach-realview/include/mach/board-pb11mp.h b/arch/arm/mach-realview/board-pb11mp.h index aa2d4e02e..b16e6e85e 100644 --- a/arch/arm/mach-realview/include/mach/board-pb11mp.h +++ b/arch/arm/mach-realview/board-pb11mp.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/board-pb11mp.h - * * Copyright (C) 2008 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -21,7 +19,7 @@ #ifndef __ASM_ARCH_BOARD_PB11MP_H #define __ASM_ARCH_BOARD_PB11MP_H -#include <mach/platform.h> +#include "platform.h" /* * Peripheral addresses diff --git a/arch/arm/mach-realview/include/mach/board-pba8.h b/arch/arm/mach-realview/board-pba8.h index 4dfc67a4f..6a1391f50 100644 --- a/arch/arm/mach-realview/include/mach/board-pba8.h +++ b/arch/arm/mach-realview/board-pba8.h @@ -1,6 +1,4 @@ /* - * include/asm-arm/arch-realview/board-pba8.h - * * Copyright (C) 2008 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -21,7 +19,7 @@ #ifndef __ASM_ARCH_BOARD_PBA8_H #define __ASM_ARCH_BOARD_PBA8_H -#include <mach/platform.h> +#include "platform.h" /* * Peripheral addresses diff --git a/arch/arm/mach-realview/include/mach/board-pbx.h b/arch/arm/mach-realview/board-pbx.h index 848bfff6d..5cda480b1 100644 --- a/arch/arm/mach-realview/include/mach/board-pbx.h +++ b/arch/arm/mach-realview/board-pbx.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/board-pbx.h - * * Copyright (C) 2009 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -20,7 +18,7 @@ #ifndef __ASM_ARCH_BOARD_PBX_H #define __ASM_ARCH_BOARD_PBX_H -#include <mach/platform.h> +#include "platform.h" /* * Peripheral addresses diff --git a/arch/arm/mach-realview/core.c b/arch/arm/mach-realview/core.c index 44575edc4..baf174542 100644 --- a/arch/arm/mach-realview/core.c +++ b/arch/arm/mach-realview/core.c @@ -36,8 +36,7 @@ #include <linux/memblock.h> #include <clocksource/timer-sp804.h> - -#include <mach/hardware.h> +#include "hardware.h" #include <asm/irq.h> #include <asm/mach-types.h> #include <asm/hardware/icst.h> @@ -46,8 +45,7 @@ #include <asm/mach/irq.h> #include <asm/mach/map.h> -#include <mach/platform.h> -#include <mach/irqs.h> +#include "platform.h" #include <plat/sched_clock.h> diff --git a/arch/arm/mach-realview/core.h b/arch/arm/mach-realview/core.h index 868ece221..05a995ea1 100644 --- a/arch/arm/mach-realview/core.h +++ b/arch/arm/mach-realview/core.h @@ -1,6 +1,4 @@ /* - * linux/arch/arm/mach-realview/core.h - * * Copyright (C) 2004 ARM Limited * Copyright (C) 2000 Deep Blue Solutions Ltd * @@ -54,7 +52,7 @@ extern int realview_usb_register(struct resource *res); extern void realview_init_early(void); extern void realview_fixup(struct tag *tags, char **from); -extern struct smp_operations realview_smp_ops; +extern const struct smp_operations realview_smp_ops; extern void realview_cpu_die(unsigned int cpu); #endif diff --git a/arch/arm/mach-realview/include/mach/hardware.h b/arch/arm/mach-realview/hardware.h index 281e71c97..957a230aa 100644 --- a/arch/arm/mach-realview/include/mach/hardware.h +++ b/arch/arm/mach-realview/hardware.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/hardware.h - * * This file contains the hardware definitions of the RealView boards. * * Copyright (C) 2003 ARM Limited. diff --git a/arch/arm/mach-realview/include/mach/barriers.h b/arch/arm/mach-realview/include/mach/barriers.h deleted file mode 100644 index 9a732195a..000000000 --- a/arch/arm/mach-realview/include/mach/barriers.h +++ /dev/null @@ -1,8 +0,0 @@ -/* - * Barriers redefined for RealView ARM11MPCore platforms with L220 cache - * controller to work around hardware errata causing the outer_sync() - * operation to deadlock the system. - */ -#define mb() dsb() -#define rmb() dsb() -#define wmb() mb() diff --git a/arch/arm/mach-realview/include/mach/irqs.h b/arch/arm/mach-realview/include/mach/irqs.h deleted file mode 100644 index 78854f2fa..000000000 --- a/arch/arm/mach-realview/include/mach/irqs.h +++ /dev/null @@ -1,40 +0,0 @@ -/* - * arch/arm/mach-realview/include/mach/irqs.h - * - * Copyright (C) 2003 ARM Limited - * Copyright (C) 2000 Deep Blue Solutions Ltd. - * - * 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; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ - -#ifndef __ASM_ARCH_IRQS_H -#define __ASM_ARCH_IRQS_H - -#include <mach/irqs-eb.h> -#include <mach/irqs-pb11mp.h> -#include <mach/irqs-pb1176.h> -#include <mach/irqs-pba8.h> -#include <mach/irqs-pbx.h> - -#define IRQ_LOCALTIMER 29 -#define IRQ_LOCALWDOG 30 - -#define IRQ_GIC_START 32 - -#ifndef NR_IRQS -#error "NR_IRQS not defined by the board-specific files" -#endif - -#endif diff --git a/arch/arm/mach-realview/include/mach/memory.h b/arch/arm/mach-realview/include/mach/memory.h deleted file mode 100644 index 23e7a313f..000000000 --- a/arch/arm/mach-realview/include/mach/memory.h +++ /dev/null @@ -1,64 +0,0 @@ -/* - * arch/arm/mach-realview/include/mach/memory.h - * - * Copyright (C) 2003 ARM Limited - * - * 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; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#ifndef __ASM_ARCH_MEMORY_H -#define __ASM_ARCH_MEMORY_H - -#ifdef CONFIG_SPARSEMEM - -/* - * Sparsemem definitions for RealView PBX. - * - * The RealView PBX board has another block of 512MB of RAM at 0x20000000, - * however only the block at 0x70000000 (or the 256MB mirror at 0x00000000) - * may be used for DMA. - * - * The macros below define a section size of 256MB and a non-linear virtual to - * physical mapping: - * - * 256MB @ 0x00000000 -> PAGE_OFFSET - * 512MB @ 0x20000000 -> PAGE_OFFSET + 0x10000000 - * 256MB @ 0x80000000 -> PAGE_OFFSET + 0x30000000 - */ -#ifdef CONFIG_REALVIEW_HIGH_PHYS_OFFSET -#error "SPARSEMEM not available with REALVIEW_HIGH_PHYS_OFFSET" -#endif - -#define MAX_PHYSMEM_BITS 32 -#define SECTION_SIZE_BITS 28 - -/* bank page offsets */ -#define PAGE_OFFSET1 (PAGE_OFFSET + 0x10000000) -#define PAGE_OFFSET2 (PAGE_OFFSET + 0x30000000) - -#define PHYS_OFFSET PLAT_PHYS_OFFSET - -#define __phys_to_virt(phys) \ - ((phys) >= 0x80000000 ? (phys) - 0x80000000 + PAGE_OFFSET2 : \ - (phys) >= 0x20000000 ? (phys) - 0x20000000 + PAGE_OFFSET1 : \ - (phys) + PAGE_OFFSET) - -#define __virt_to_phys(virt) \ - ((virt) >= PAGE_OFFSET2 ? (virt) - PAGE_OFFSET2 + 0x80000000 : \ - (virt) >= PAGE_OFFSET1 ? (virt) - PAGE_OFFSET1 + 0x20000000 : \ - (virt) - PAGE_OFFSET) - -#endif /* CONFIG_SPARSEMEM */ - -#endif diff --git a/arch/arm/mach-realview/include/mach/uncompress.h b/arch/arm/mach-realview/include/mach/uncompress.h deleted file mode 100644 index cfa30d217..000000000 --- a/arch/arm/mach-realview/include/mach/uncompress.h +++ /dev/null @@ -1,77 +0,0 @@ -/* - * arch/arm/mach-realview/include/mach/uncompress.h - * - * Copyright (C) 2003 ARM Limited - * - * 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; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - */ -#include <mach/hardware.h> -#include <asm/mach-types.h> - -#include <mach/board-eb.h> -#include <mach/board-pb11mp.h> -#include <mach/board-pb1176.h> -#include <mach/board-pba8.h> -#include <mach/board-pbx.h> - -#define AMBA_UART_DR(base) (*(volatile unsigned char *)((base) + 0x00)) -#define AMBA_UART_LCRH(base) (*(volatile unsigned char *)((base) + 0x2c)) -#define AMBA_UART_CR(base) (*(volatile unsigned char *)((base) + 0x30)) -#define AMBA_UART_FR(base) (*(volatile unsigned char *)((base) + 0x18)) - -/* - * Return the UART base address - */ -static inline unsigned long get_uart_base(void) -{ - if (machine_is_realview_eb()) - return REALVIEW_EB_UART0_BASE; - else if (machine_is_realview_pb11mp()) - return REALVIEW_PB11MP_UART0_BASE; - else if (machine_is_realview_pb1176()) - return REALVIEW_PB1176_UART0_BASE; - else if (machine_is_realview_pba8()) - return REALVIEW_PBA8_UART0_BASE; - else if (machine_is_realview_pbx()) - return REALVIEW_PBX_UART0_BASE; - else - return 0; -} - -/* - * This does not append a newline - */ -static inline void putc(int c) -{ - unsigned long base = get_uart_base(); - - while (AMBA_UART_FR(base) & (1 << 5)) - barrier(); - - AMBA_UART_DR(base) = c; -} - -static inline void flush(void) -{ - unsigned long base = get_uart_base(); - - while (AMBA_UART_FR(base) & (1 << 3)) - barrier(); -} - -/* - * nothing to do - */ -#define arch_decomp_setup() diff --git a/arch/arm/mach-realview/include/mach/irqs-eb.h b/arch/arm/mach-realview/irqs-eb.h index 44754230f..61e31680a 100644 --- a/arch/arm/mach-realview/include/mach/irqs-eb.h +++ b/arch/arm/mach-realview/irqs-eb.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/irqs-eb.h - * * Copyright (C) 2007 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -21,6 +19,7 @@ #ifndef __MACH_IRQS_EB_H #define __MACH_IRQS_EB_H +#define IRQ_LOCALTIMER 29 #define IRQ_EB_GIC_START 32 /* @@ -112,21 +111,4 @@ #define NR_GIC_EB11MP 2 -/* - * Only define NR_IRQS if less than NR_IRQS_EB - */ -#define NR_IRQS_EB (IRQ_EB_GIC_START + 128) - -#if defined(CONFIG_MACH_REALVIEW_EB) \ - && (!defined(NR_IRQS) || (NR_IRQS < NR_IRQS_EB)) -#undef NR_IRQS -#define NR_IRQS NR_IRQS_EB -#endif - -#if defined(CONFIG_REALVIEW_EB_ARM11MP) || defined(CONFIG_REALVIEW_EB_A9MP) \ - && (!defined(MAX_GIC_NR) || (MAX_GIC_NR < NR_GIC_EB11MP)) -#undef MAX_GIC_NR -#define MAX_GIC_NR NR_GIC_EB11MP -#endif - #endif /* __MACH_IRQS_EB_H */ diff --git a/arch/arm/mach-realview/include/mach/irqs-pb1176.h b/arch/arm/mach-realview/irqs-pb1176.h index 708f84156..778edfd43 100644 --- a/arch/arm/mach-realview/include/mach/irqs-pb1176.h +++ b/arch/arm/mach-realview/irqs-pb1176.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/irqs-pb1176.h - * * Copyright (C) 2008 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -76,25 +74,4 @@ #define IRQ_PB1176_SCTL -1 -#define NR_GIC_PB1176 2 - -/* - * Only define NR_IRQS if less than NR_IRQS_PB1176 - */ -#define NR_IRQS_PB1176 (IRQ_DC1176_GIC_START + 96) - -#if defined(CONFIG_MACH_REALVIEW_PB1176) - -#if !defined(NR_IRQS) || (NR_IRQS < NR_IRQS_PB1176) -#undef NR_IRQS -#define NR_IRQS NR_IRQS_PB1176 -#endif - -#if !defined(MAX_GIC_NR) || (MAX_GIC_NR < NR_GIC_PB1176) -#undef MAX_GIC_NR -#define MAX_GIC_NR NR_GIC_PB1176 -#endif - -#endif /* CONFIG_MACH_REALVIEW_PB1176 */ - #endif /* __MACH_IRQS_PB1176_H */ diff --git a/arch/arm/mach-realview/include/mach/irqs-pb11mp.h b/arch/arm/mach-realview/irqs-pb11mp.h index 34e255add..938898a3d 100644 --- a/arch/arm/mach-realview/include/mach/irqs-pb11mp.h +++ b/arch/arm/mach-realview/irqs-pb11mp.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/irqs-pb11mp.h - * * Copyright (C) 2008 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -21,6 +19,7 @@ #ifndef __MACH_IRQS_PB11MP_H #define __MACH_IRQS_PB11MP_H +#define IRQ_LOCALTIMER 29 #define IRQ_TC11MP_GIC_START 32 #define IRQ_PB11MP_GIC_START 64 @@ -95,28 +94,4 @@ #define IRQ_PB11MP_TSPEN (IRQ_PB11MP_GIC_START + 30) /* Touchscreen pen */ #define IRQ_PB11MP_TSKPAD (IRQ_PB11MP_GIC_START + 31) /* Touchscreen keypad */ -#define IRQ_PB11MP_SMC -1 -#define IRQ_PB11MP_SCTL -1 - -#define NR_GIC_PB11MP 2 - -/* - * Only define NR_IRQS if less than NR_IRQS_PB11MP - */ -#define NR_IRQS_PB11MP (IRQ_TC11MP_GIC_START + 96) - -#if defined(CONFIG_MACH_REALVIEW_PB11MP) - -#if !defined(NR_IRQS) || (NR_IRQS < NR_IRQS_PB11MP) -#undef NR_IRQS -#define NR_IRQS NR_IRQS_PB11MP -#endif - -#if !defined(MAX_GIC_NR) || (MAX_GIC_NR < NR_GIC_PB11MP) -#undef MAX_GIC_NR -#define MAX_GIC_NR NR_GIC_PB11MP -#endif - -#endif /* CONFIG_MACH_REALVIEW_PB11MP */ - #endif /* __MACH_IRQS_PB11MP_H */ diff --git a/arch/arm/mach-realview/include/mach/irqs-pba8.h b/arch/arm/mach-realview/irqs-pba8.h index 4a88a4edb..262e32193 100644 --- a/arch/arm/mach-realview/include/mach/irqs-pba8.h +++ b/arch/arm/mach-realview/irqs-pba8.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/irqs-pba8.h - * * Copyright (C) 2008 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -70,25 +68,4 @@ #define IRQ_PBA8_SMC -1 #define IRQ_PBA8_SCTL -1 -#define NR_GIC_PBA8 1 - -/* - * Only define NR_IRQS if less than NR_IRQS_PBA8 - */ -#define NR_IRQS_PBA8 (IRQ_PBA8_GIC_START + 64) - -#if defined(CONFIG_MACH_REALVIEW_PBA8) - -#if !defined(NR_IRQS) || (NR_IRQS < NR_IRQS_PBA8) -#undef NR_IRQS -#define NR_IRQS NR_IRQS_PBA8 -#endif - -#if !defined(MAX_GIC_NR) || (MAX_GIC_NR < NR_GIC_PBA8) -#undef MAX_GIC_NR -#define MAX_GIC_NR NR_GIC_PBA8 -#endif - -#endif /* CONFIG_MACH_REALVIEW_PBA8 */ - #endif /* __MACH_IRQS_PBA8_H */ diff --git a/arch/arm/mach-realview/include/mach/irqs-pbx.h b/arch/arm/mach-realview/irqs-pbx.h index 206a3001f..4ef0567de 100644 --- a/arch/arm/mach-realview/include/mach/irqs-pbx.h +++ b/arch/arm/mach-realview/irqs-pbx.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/irqs-pbx.h - * * Copyright (C) 2009 ARM Limited * * This program is free software; you can redistribute it and/or modify @@ -20,6 +18,7 @@ #ifndef __MACH_IRQS_PBX_H #define __MACH_IRQS_PBX_H +#define IRQ_LOCALTIMER 29 #define IRQ_PBX_GIC_START 32 /* @@ -85,25 +84,4 @@ #define IRQ_PBX_SMC -1 #define IRQ_PBX_SCTL -1 -#define NR_GIC_PBX 1 - -/* - * Only define NR_IRQS if less than NR_IRQS_PBX - */ -#define NR_IRQS_PBX (IRQ_PBX_GIC_START + 96) - -#if defined(CONFIG_MACH_REALVIEW_PBX) - -#if !defined(NR_IRQS) || (NR_IRQS < NR_IRQS_PBX) -#undef NR_IRQS -#define NR_IRQS NR_IRQS_PBX -#endif - -#if !defined(MAX_GIC_NR) || (MAX_GIC_NR < NR_GIC_PBX) -#undef MAX_GIC_NR -#define MAX_GIC_NR NR_GIC_PBX -#endif - -#endif /* CONFIG_MACH_REALVIEW_PBX */ - #endif /* __MACH_IRQS_PBX_H */ diff --git a/arch/arm/mach-realview/include/mach/platform.h b/arch/arm/mach-realview/platform.h index 1b77a27ba..11121739d 100644 --- a/arch/arm/mach-realview/include/mach/platform.h +++ b/arch/arm/mach-realview/platform.h @@ -1,6 +1,4 @@ /* - * arch/arm/mach-realview/include/mach/platform.h - * * Copyright (c) ARM Limited 2003. All rights reserved. * * This program is free software; you can redistribute it and/or modify diff --git a/arch/arm/mach-realview/platsmp-dt.c b/arch/arm/mach-realview/platsmp-dt.c new file mode 100644 index 000000000..6964e8876 --- /dev/null +++ b/arch/arm/mach-realview/platsmp-dt.c @@ -0,0 +1,91 @@ +/* + * Copyright (C) 2015 Linus Walleij + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + */ +#include <linux/smp.h> +#include <linux/io.h> +#include <linux/of.h> +#include <linux/of_address.h> +#include <linux/regmap.h> +#include <linux/mfd/syscon.h> + +#include <asm/cacheflush.h> +#include <asm/smp_plat.h> +#include <asm/smp_scu.h> + +#include <plat/platsmp.h> + +#include "core.h" + +#define REALVIEW_SYS_FLAGSSET_OFFSET 0x30 + +static const struct of_device_id realview_scu_match[] = { + { .compatible = "arm,arm11mp-scu", }, + { .compatible = "arm,cortex-a9-scu", }, + { .compatible = "arm,cortex-a5-scu", }, + { } +}; + +static const struct of_device_id realview_syscon_match[] = { + { .compatible = "arm,core-module-integrator", }, + { .compatible = "arm,realview-eb-syscon", }, + { .compatible = "arm,realview-pb11mp-syscon", }, + { .compatible = "arm,realview-pbx-syscon", }, + { }, +}; + +static void __init realview_smp_prepare_cpus(unsigned int max_cpus) +{ + struct device_node *np; + void __iomem *scu_base; + struct regmap *map; + unsigned int ncores; + int i; + + np = of_find_matching_node(NULL, realview_scu_match); + if (!np) { + pr_err("PLATSMP: No SCU base address\n"); + return; + } + scu_base = of_iomap(np, 0); + of_node_put(np); + if (!scu_base) { + pr_err("PLATSMP: No SCU remap\n"); + return; + } + + scu_enable(scu_base); + ncores = scu_get_core_count(scu_base); + pr_info("SCU: %d cores detected\n", ncores); + for (i = 0; i < ncores; i++) + set_cpu_possible(i, true); + iounmap(scu_base); + + /* The syscon contains the magic SMP start address registers */ + np = of_find_matching_node(NULL, realview_syscon_match); + if (!np) { + pr_err("PLATSMP: No syscon match\n"); + return; + } + map = syscon_node_to_regmap(np); + if (IS_ERR(map)) { + pr_err("PLATSMP: No syscon regmap\n"); + return; + } + /* Put the boot address in this magic register */ + regmap_write(map, REALVIEW_SYS_FLAGSSET_OFFSET, + virt_to_phys(versatile_secondary_startup)); +} + +static const struct smp_operations realview_dt_smp_ops __initconst = { + .smp_prepare_cpus = realview_smp_prepare_cpus, + .smp_secondary_init = versatile_secondary_init, + .smp_boot_secondary = versatile_boot_secondary, +#ifdef CONFIG_HOTPLUG_CPU + .cpu_die = realview_cpu_die, +#endif +}; +CPU_METHOD_OF_DECLARE(realview_smp, "arm,realview-smp", &realview_dt_smp_ops); diff --git a/arch/arm/mach-realview/platsmp.c b/arch/arm/mach-realview/platsmp.c index 98e3052b7..e8ab69c7a 100644 --- a/arch/arm/mach-realview/platsmp.c +++ b/arch/arm/mach-realview/platsmp.c @@ -13,13 +13,13 @@ #include <linux/smp.h> #include <linux/io.h> -#include <mach/hardware.h> +#include "hardware.h" #include <asm/mach-types.h> #include <asm/smp_scu.h> -#include <mach/board-eb.h> -#include <mach/board-pb11mp.h> -#include <mach/board-pbx.h> +#include "board-eb.h" +#include "board-pb11mp.h" +#include "board-pbx.h" #include <plat/platsmp.h> @@ -75,7 +75,7 @@ static void __init realview_smp_prepare_cpus(unsigned int max_cpus) __io_address(REALVIEW_SYS_FLAGSSET)); } -struct smp_operations realview_smp_ops __initdata = { +const struct smp_operations realview_smp_ops __initconst = { .smp_init_cpus = realview_smp_init_cpus, .smp_prepare_cpus = realview_smp_prepare_cpus, .smp_secondary_init = versatile_secondary_init, diff --git a/arch/arm/mach-realview/realview-dt.c b/arch/arm/mach-realview/realview-dt.c index 382cc1b90..88b672479 100644 --- a/arch/arm/mach-realview/realview-dt.c +++ b/arch/arm/mach-realview/realview-dt.c @@ -11,7 +11,6 @@ #include <linux/of_platform.h> #include <asm/mach/arch.h> #include <asm/hardware/cache-l2x0.h> -#include "core.h" static const char *const realview_dt_platform_compat[] __initconst = { "arm,realview-eb", diff --git a/arch/arm/mach-realview/realview_eb.c b/arch/arm/mach-realview/realview_eb.c index b3869cbbc..b442fa61e 100644 --- a/arch/arm/mach-realview/realview_eb.c +++ b/arch/arm/mach-realview/realview_eb.c @@ -31,20 +31,21 @@ #include <linux/platform_data/clk-realview.h> #include <linux/reboot.h> -#include <mach/hardware.h> +#include "hardware.h" #include <asm/irq.h> #include <asm/mach-types.h> #include <asm/pgtable.h> #include <asm/hardware/cache-l2x0.h> #include <asm/smp_twd.h> #include <asm/system_info.h> +#include <asm/outercache.h> #include <asm/mach/arch.h> #include <asm/mach/map.h> #include <asm/mach/time.h> -#include <mach/board-eb.h> -#include <mach/irqs.h> +#include "board-eb.h" +#include "irqs-eb.h" #include "core.h" @@ -450,6 +451,12 @@ static void __init realview_eb_init(void) * Bits: .... ...0 0111 1001 0000 .... .... .... */ l2x0_init(__io_address(REALVIEW_EB11MP_L220_BASE), 0x00790000, 0xfe000fff); + + /* + * due to a bug in the l220 cache controller, we must not call + * the sync function. stub it out here instead! + */ + outer_cache.sync = NULL; #endif pmu_device.name = core_tile_a9mp() ? "armv7-pmu" : "armv6-pmu"; platform_device_register(&pmu_device); diff --git a/arch/arm/mach-realview/realview_pb1176.c b/arch/arm/mach-realview/realview_pb1176.c index ce92c1823..537f3878d 100644 --- a/arch/arm/mach-realview/realview_pb1176.c +++ b/arch/arm/mach-realview/realview_pb1176.c @@ -34,7 +34,7 @@ #include <linux/reboot.h> #include <linux/memblock.h> -#include <mach/hardware.h> +#include "hardware.h" #include <asm/irq.h> #include <asm/mach-types.h> #include <asm/pgtable.h> @@ -45,8 +45,8 @@ #include <asm/mach/map.h> #include <asm/mach/time.h> -#include <mach/board-pb1176.h> -#include <mach/irqs.h> +#include "board-pb1176.h" +#include "irqs-pb1176.h" #include "core.h" diff --git a/arch/arm/mach-realview/realview_pb11mp.c b/arch/arm/mach-realview/realview_pb11mp.c index 15c45e250..a90a0752f 100644 --- a/arch/arm/mach-realview/realview_pb11mp.c +++ b/arch/arm/mach-realview/realview_pb11mp.c @@ -31,7 +31,7 @@ #include <linux/platform_data/clk-realview.h> #include <linux/reboot.h> -#include <mach/hardware.h> +#include "hardware.h" #include <asm/irq.h> #include <asm/mach-types.h> #include <asm/pgtable.h> @@ -42,9 +42,10 @@ #include <asm/mach/flash.h> #include <asm/mach/map.h> #include <asm/mach/time.h> +#include <asm/outercache.h> -#include <mach/board-pb11mp.h> -#include <mach/irqs.h> +#include "board-pb11mp.h" +#include "irqs-pb11mp.h" #include "core.h" @@ -345,6 +346,11 @@ static void __init realview_pb11mp_init(void) * Bits: .... ...0 0111 1001 0000 .... .... .... */ l2x0_init(__io_address(REALVIEW_TC11MP_L220_BASE), 0x00790000, 0xfe000fff); + /* + * due to a bug in the l220 cache controller, we must not call + * the sync function. stub it out here instead! + */ + outer_cache.sync = NULL; #endif realview_flash_register(realview_pb11mp_flash_resource, diff --git a/arch/arm/mach-realview/realview_pba8.c b/arch/arm/mach-realview/realview_pba8.c index 4c64662f5..ddafb67c2 100644 --- a/arch/arm/mach-realview/realview_pba8.c +++ b/arch/arm/mach-realview/realview_pba8.c @@ -39,9 +39,9 @@ #include <asm/mach/map.h> #include <asm/mach/time.h> -#include <mach/hardware.h> -#include <mach/board-pba8.h> -#include <mach/irqs.h> +#include "hardware.h" +#include "board-pba8.h" +#include "irqs-pba8.h" #include "core.h" @@ -77,14 +77,6 @@ static struct map_desc realview_pba8_io_desc[] __initdata = { .length = SZ_4K, .type = MT_DEVICE, }, -#ifdef CONFIG_PCI - { - .virtual = PCIX_UNIT_BASE, - .pfn = __phys_to_pfn(REALVIEW_PBA8_PCI_BASE), - .length = REALVIEW_PBA8_PCI_BASE_SIZE, - .type = MT_DEVICE - }, -#endif #ifdef CONFIG_DEBUG_LL { .virtual = IO_ADDRESS(REALVIEW_PBA8_UART0_BASE), diff --git a/arch/arm/mach-realview/realview_pbx.c b/arch/arm/mach-realview/realview_pbx.c index 9a22b8642..b9f075778 100644 --- a/arch/arm/mach-realview/realview_pbx.c +++ b/arch/arm/mach-realview/realview_pbx.c @@ -41,9 +41,9 @@ #include <asm/mach/map.h> #include <asm/mach/time.h> -#include <mach/hardware.h> -#include <mach/board-pbx.h> -#include <mach/irqs.h> +#include "hardware.h" +#include "board-pbx.h" +#include "irqs-pbx.h" #include "core.h" @@ -79,14 +79,6 @@ static struct map_desc realview_pbx_io_desc[] __initdata = { .length = SZ_4K, .type = MT_DEVICE, }, -#ifdef CONFIG_PCI - { - .virtual = PCIX_UNIT_BASE, - .pfn = __phys_to_pfn(REALVIEW_PBX_PCI_BASE), - .length = REALVIEW_PBX_PCI_BASE_SIZE, - .type = MT_DEVICE, - }, -#endif #ifdef CONFIG_DEBUG_LL { .virtual = IO_ADDRESS(REALVIEW_PBX_UART0_BASE), |