1a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* 2a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * linux/arch/arm/mach-realview/realview_pb1176.c 3a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * 4a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * Copyright (C) 2008 ARM Limited 5a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * Copyright (C) 2000 Deep Blue Solutions Ltd 6a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * 7a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * This program is free software; you can redistribute it and/or modify 8a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * it under the terms of the GNU General Public License as published by 9a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * the Free Software Foundation; either version 2 of the License, or 10a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * (at your option) any later version. 11a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * 12a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * This program is distributed in the hope that it will be useful, 13a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * but WITHOUT ANY WARRANTY; without even the implied warranty of 14a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 15a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * GNU General Public License for more details. 16a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * 17a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * You should have received a copy of the GNU General Public License 18a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * along with this program; if not, write to the Free Software 19a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 20a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban */ 21a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 22a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <linux/init.h> 23a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <linux/platform_device.h> 24edbaa603eb801655e80808a9cf3d3b622e8ac66bKay Sievers#include <linux/device.h> 25a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <linux/amba/bus.h> 26eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King#include <linux/amba/pl061.h> 276ef297f86b62f187c59475784208f75c2ed8ccd8Linus Walleij#include <linux/amba/mmci.h> 28d6ada8609b8548e528cd91a922338aff7c616820Linus Walleij#include <linux/amba/pl022.h> 290ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij#include <linux/mtd/physmap.h> 300ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij#include <linux/mtd/partitions.h> 31fced80c735941fa518ac67c0b61bbe153fb8c050Russell King#include <linux/io.h> 32a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 33a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/hardware.h> 34a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/irq.h> 35a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/leds.h> 36a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach-types.h> 37f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon#include <asm/pmu.h> 38cc9897df72ddea33762f9d24ecaa2b23ef0ad1b4Catalin Marinas#include <asm/pgtable.h> 39a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/hardware/gic.h> 40a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/hardware/cache-l2x0.h> 41a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 42a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/arch.h> 43a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/flash.h> 44a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/map.h> 45a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/time.h> 46a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 47a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/board-pb1176.h> 48a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/irqs.h> 49a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 50a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include "core.h" 51a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 52a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct map_desc realview_pb1176_io_desc[] __initdata = { 53a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban { 54a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_SYS_BASE), 55a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_SYS_BASE), 56a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 57a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 58a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 59a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_GIC_CPU_BASE), 60a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_GIC_CPU_BASE), 61a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 62a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 63a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 64a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_GIC_DIST_BASE), 65a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_GIC_DIST_BASE), 66a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 67a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 68a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 69a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_DC1176_GIC_CPU_BASE), 70a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_DC1176_GIC_CPU_BASE), 71a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 72a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 73a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 74a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_DC1176_GIC_DIST_BASE), 75a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_DC1176_GIC_DIST_BASE), 76a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 77a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 78a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 79a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_SCTL_BASE), 80a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_SCTL_BASE), 81a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 82a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 83a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 84a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_TIMER0_1_BASE), 85a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_TIMER0_1_BASE), 86a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 87a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 88a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 89a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_TIMER2_3_BASE), 90a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_TIMER2_3_BASE), 91a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 92a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 93a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 94a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_L220_BASE), 95a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_L220_BASE), 96a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_8K, 97a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 98a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, 99a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#ifdef CONFIG_DEBUG_LL 100a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban { 101a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_UART0_BASE), 102a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_UART0_BASE), 103a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 104a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 105a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, 106a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#endif 107a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 108a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 109a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic void __init realview_pb1176_map_io(void) 110a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban{ 111a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban iotable_init(realview_pb1176_io_desc, ARRAY_SIZE(realview_pb1176_io_desc)); 112a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban} 113a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 114eb7fffa39a3f114832df54a3e373d7580d8fe757Russell Kingstatic struct pl061_platform_data gpio0_plat_data = { 115eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King .gpio_base = 0, 116eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King}; 117eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King 118eb7fffa39a3f114832df54a3e373d7580d8fe757Russell Kingstatic struct pl061_platform_data gpio1_plat_data = { 119eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King .gpio_base = 8, 120eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King}; 121eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King 122eb7fffa39a3f114832df54a3e373d7580d8fe757Russell Kingstatic struct pl061_platform_data gpio2_plat_data = { 123eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King .gpio_base = 16, 124eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King}; 125eb7fffa39a3f114832df54a3e373d7580d8fe757Russell King 126d6ada8609b8548e528cd91a922338aff7c616820Linus Walleijstatic struct pl022_ssp_controller ssp0_plat_data = { 127d6ada8609b8548e528cd91a922338aff7c616820Linus Walleij .bus_id = 0, 128d6ada8609b8548e528cd91a922338aff7c616820Linus Walleij .enable_dma = 0, 129d6ada8609b8548e528cd91a922338aff7c616820Linus Walleij .num_chipselect = 1, 130d6ada8609b8548e528cd91a922338aff7c616820Linus Walleij}; 131d6ada8609b8548e528cd91a922338aff7c616820Linus Walleij 132a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* 133a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * RealView PB1176 AMBA devices 134a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban */ 1350dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define GPIO2_IRQ { IRQ_PB1176_GPIO2 } 1360dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define GPIO3_IRQ { IRQ_PB1176_GPIO3 } 1370dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define AACI_IRQ { IRQ_PB1176_AACI } 138a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define MMCI0_IRQ { IRQ_PB1176_MMCI0A, IRQ_PB1176_MMCI0B } 1390dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define KMI0_IRQ { IRQ_PB1176_KMI0 } 1400dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define KMI1_IRQ { IRQ_PB1176_KMI1 } 1410dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_SMC_IRQ { } 1420dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define MPMC_IRQ { } 1430dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_CLCD_IRQ { IRQ_DC1176_CLCD } 1440dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define SCTL_IRQ { } 1450dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_WATCHDOG_IRQ { IRQ_DC1176_WATCHDOG } 1460dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_GPIO0_IRQ { IRQ_DC1176_GPIO0 } 1470dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define GPIO1_IRQ { IRQ_PB1176_GPIO1 } 1480dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_RTC_IRQ { IRQ_DC1176_RTC } 1490dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define SCI_IRQ { IRQ_PB1176_SCI } 1500dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_UART0_IRQ { IRQ_DC1176_UART0 } 1510dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_UART1_IRQ { IRQ_DC1176_UART1 } 1520dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_UART2_IRQ { IRQ_DC1176_UART2 } 1530dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_UART3_IRQ { IRQ_DC1176_UART3 } 1540dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_UART4_IRQ { IRQ_PB1176_UART4 } 1550dada61a29ddaaca5985c76aafec341b4ad3e989Russell King#define PB1176_SSP_IRQ { IRQ_DC1176_SSP } 156a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 157a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* FPGA Primecells */ 1589199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(aaci, "fpga:aaci", AACI, NULL); 1599199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(mmc0, "fpga:mmc0", MMCI0, &realview_mmc0_plat_data); 1609199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(kmi0, "fpga:kmi0", KMI0, NULL); 1619199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(kmi1, "fpga:kmi1", KMI1, NULL); 1629199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(uart4, "fpga:uart4", PB1176_UART4, NULL); 163a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 164a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* DevChip Primecells */ 1659199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAHB_DEVICE(smc, "dev:smc", PB1176_SMC, NULL); 1669199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAHB_DEVICE(sctl, "dev:sctl", SCTL, NULL); 1679199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(wdog, "dev:wdog", PB1176_WATCHDOG, NULL); 1689199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(gpio0, "dev:gpio0", PB1176_GPIO0, &gpio0_plat_data); 1699199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(gpio1, "dev:gpio1", GPIO1, &gpio1_plat_data); 1709199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(gpio2, "dev:gpio2", GPIO2, &gpio2_plat_data); 1719199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(rtc, "dev:rtc", PB1176_RTC, NULL); 1729199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(sci0, "dev:sci0", SCI, NULL); 1739199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(uart0, "dev:uart0", PB1176_UART0, NULL); 1749199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(uart1, "dev:uart1", PB1176_UART1, NULL); 1759199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(uart2, "dev:uart2", PB1176_UART2, NULL); 1769199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(uart3, "dev:uart3", PB1176_UART3, NULL); 1779199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAPB_DEVICE(ssp0, "dev:ssp0", PB1176_SSP, &ssp0_plat_data); 1789199340bf02f72eed3ca264a0989ac645b292ca6Russell KingAHB_DEVICE(clcd, "dev:clcd", PB1176_CLCD, &clcd_plat_data); 179a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 180a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct amba_device *amba_devs[] __initdata = { 181a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &uart0_device, 182a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &uart1_device, 183a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &uart2_device, 184a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &uart3_device, 18548f1d5a3cef5782cbc7a32c29f1eda2342877c13Linus Walleij &uart4_device, 186a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &smc_device, 187a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &clcd_device, 188a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &sctl_device, 189a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &wdog_device, 190a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &gpio0_device, 191a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &gpio1_device, 192a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &gpio2_device, 193a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &rtc_device, 194a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &sci0_device, 195a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &ssp0_device, 196a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &aaci_device, 197a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &mmc0_device, 198a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &kmi0_device, 199a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &kmi1_device, 200a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 201a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 202a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* 203a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * RealView PB1176 platform devices 204a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban */ 205af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinasstatic struct resource realview_pb1176_flash_resources[] = { 2060ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij { 207af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas .start = REALVIEW_PB1176_FLASH_BASE, 208af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas .end = REALVIEW_PB1176_FLASH_BASE + REALVIEW_PB1176_FLASH_SIZE - 1, 209af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas .flags = IORESOURCE_MEM, 210af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas }, 2110ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij#ifdef CONFIG_REALVIEW_PB1176_SECURE_FLASH 2120ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij { 213af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas .start = REALVIEW_PB1176_SEC_FLASH_BASE, 214af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas .end = REALVIEW_PB1176_SEC_FLASH_BASE + REALVIEW_PB1176_SEC_FLASH_SIZE - 1, 215af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas .flags = IORESOURCE_MEM, 216af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas }, 217af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas#endif 2180ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij}; 2190ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij 2200ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleijstatic struct physmap_flash_data pb1176_rom_pdata = { 2210ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .probe_type = "map_rom", 2220ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .width = 4, 2230ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .nr_parts = 0, 2240ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij}; 2250ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij 2260ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleijstatic struct resource pb1176_rom_resources[] = { 2270ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij /* 2280ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij * This exposes the PB1176 DevChip ROM as an MTD ROM mapping. 2290ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij * The reference manual states that this is actually a pseudo-ROM 2300ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij * programmed in NVRAM. 2310ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij */ 2320ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij { 2330ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .start = REALVIEW_DC1176_ROM_BASE, 2340ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .end = REALVIEW_DC1176_ROM_BASE + SZ_16K - 1, 2350ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .flags = IORESOURCE_MEM, 2360ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij } 2370ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij}; 2380ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij 2390ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleijstatic struct platform_device pb1176_rom_device = { 2400ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .name = "physmap-flash", 2410ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .id = -1, 2420ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .num_resources = ARRAY_SIZE(pb1176_rom_resources), 2430ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .resource = pb1176_rom_resources, 2440ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .dev = { 2450ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij .platform_data = &pb1176_rom_pdata, 2460ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij }, 2470ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij}; 248a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 249a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct resource realview_pb1176_smsc911x_resources[] = { 250a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban [0] = { 251a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .start = REALVIEW_PB1176_ETH_BASE, 252a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .end = REALVIEW_PB1176_ETH_BASE + SZ_64K - 1, 253a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .flags = IORESOURCE_MEM, 254a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, 255a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban [1] = { 256a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .start = IRQ_PB1176_ETH, 257a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .end = IRQ_PB1176_ETH, 258a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .flags = IORESOURCE_IRQ, 259a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, 260a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 261a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 2627db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinasstatic struct resource realview_pb1176_isp1761_resources[] = { 2637db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas [0] = { 2647db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas .start = REALVIEW_PB1176_USB_BASE, 2657db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas .end = REALVIEW_PB1176_USB_BASE + SZ_128K - 1, 2667db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas .flags = IORESOURCE_MEM, 2677db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas }, 2687db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas [1] = { 2697db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas .start = IRQ_PB1176_USB, 2707db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas .end = IRQ_PB1176_USB, 2717db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas .flags = IORESOURCE_IRQ, 2727db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas }, 2737db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas}; 2747db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas 275f417cbad7394fdccec850d13d7d5621516d693ceWill Deaconstatic struct resource pmu_resource = { 276f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon .start = IRQ_DC1176_CORE_PMU, 277f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon .end = IRQ_DC1176_CORE_PMU, 278f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon .flags = IORESOURCE_IRQ, 279f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon}; 280f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon 281f417cbad7394fdccec850d13d7d5621516d693ceWill Deaconstatic struct platform_device pmu_device = { 282f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon .name = "arm-pmu", 283f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon .id = ARM_PMU_DEVICE_CPU, 284f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon .num_resources = 1, 285f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon .resource = &pmu_resource, 286f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon}; 287f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon 288d161edfbf20597752e315e60e31026393680485aLinus Walleijstatic struct resource char_lcd_resources[] = { 289d161edfbf20597752e315e60e31026393680485aLinus Walleij { 290d161edfbf20597752e315e60e31026393680485aLinus Walleij .start = REALVIEW_CHAR_LCD_BASE, 291d161edfbf20597752e315e60e31026393680485aLinus Walleij .end = (REALVIEW_CHAR_LCD_BASE + SZ_4K - 1), 292d161edfbf20597752e315e60e31026393680485aLinus Walleij .flags = IORESOURCE_MEM, 293d161edfbf20597752e315e60e31026393680485aLinus Walleij }, 294d161edfbf20597752e315e60e31026393680485aLinus Walleij { 295d161edfbf20597752e315e60e31026393680485aLinus Walleij .start = IRQ_PB1176_CHARLCD, 296d161edfbf20597752e315e60e31026393680485aLinus Walleij .end = IRQ_PB1176_CHARLCD, 297d161edfbf20597752e315e60e31026393680485aLinus Walleij .flags = IORESOURCE_IRQ, 298d161edfbf20597752e315e60e31026393680485aLinus Walleij }, 299d161edfbf20597752e315e60e31026393680485aLinus Walleij}; 300d161edfbf20597752e315e60e31026393680485aLinus Walleij 301d161edfbf20597752e315e60e31026393680485aLinus Walleijstatic struct platform_device char_lcd_device = { 302d161edfbf20597752e315e60e31026393680485aLinus Walleij .name = "arm-charlcd", 303d161edfbf20597752e315e60e31026393680485aLinus Walleij .id = -1, 304d161edfbf20597752e315e60e31026393680485aLinus Walleij .num_resources = ARRAY_SIZE(char_lcd_resources), 305d161edfbf20597752e315e60e31026393680485aLinus Walleij .resource = char_lcd_resources, 306d161edfbf20597752e315e60e31026393680485aLinus Walleij}; 307d161edfbf20597752e315e60e31026393680485aLinus Walleij 308a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic void __init gic_init_irq(void) 309a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban{ 310a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban /* ARM1176 DevChip GIC, primary */ 311b580b899dd05a007ad232ee49a07b32d91876462Russell King gic_init(0, IRQ_DC1176_GIC_START, 312b580b899dd05a007ad232ee49a07b32d91876462Russell King __io_address(REALVIEW_DC1176_GIC_DIST_BASE), 313ff2e27ae0b17f53a6a289c87d325f706598f3788Russell King __io_address(REALVIEW_DC1176_GIC_CPU_BASE)); 314a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 315a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban /* board GIC, secondary */ 316b580b899dd05a007ad232ee49a07b32d91876462Russell King gic_init(1, IRQ_PB1176_GIC_START, 317b580b899dd05a007ad232ee49a07b32d91876462Russell King __io_address(REALVIEW_PB1176_GIC_DIST_BASE), 318b580b899dd05a007ad232ee49a07b32d91876462Russell King __io_address(REALVIEW_PB1176_GIC_CPU_BASE)); 319a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban gic_cascade_irq(1, IRQ_DC1176_PB_IRQ1); 320a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban} 321a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 322a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic void __init realview_pb1176_timer_init(void) 323a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban{ 324a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban timer0_va_base = __io_address(REALVIEW_PB1176_TIMER0_1_BASE); 325a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban timer1_va_base = __io_address(REALVIEW_PB1176_TIMER0_1_BASE) + 0x20; 326a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban timer2_va_base = __io_address(REALVIEW_PB1176_TIMER2_3_BASE); 327a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban timer3_va_base = __io_address(REALVIEW_PB1176_TIMER2_3_BASE) + 0x20; 328a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 329a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban realview_timer_init(IRQ_DC1176_TIMER0); 330a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban} 331a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 332a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct sys_timer realview_pb1176_timer = { 333a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .init = realview_pb1176_timer_init, 334a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 335a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 33647cacdd4ed95d18e5cc28b46d8835c96a9cadfb3Russell Kingstatic void realview_pb1176_restart(char mode, const char *cmd) 337426fcd2a351e4bf662fee9fa2cf2603a48223164Philby John{ 3384c9f8be7dab831c78b5f491739fc5cd01f2efb03Colin Tuckley void __iomem *reset_ctrl = __io_address(REALVIEW_SYS_RESETCTL); 3394c9f8be7dab831c78b5f491739fc5cd01f2efb03Colin Tuckley void __iomem *lock_ctrl = __io_address(REALVIEW_SYS_LOCK); 3404c9f8be7dab831c78b5f491739fc5cd01f2efb03Colin Tuckley __raw_writel(REALVIEW_SYS_LOCK_VAL, lock_ctrl); 3414c9f8be7dab831c78b5f491739fc5cd01f2efb03Colin Tuckley __raw_writel(REALVIEW_PB1176_SYS_SOFT_RESET, reset_ctrl); 34247cacdd4ed95d18e5cc28b46d8835c96a9cadfb3Russell King dsb(); 343426fcd2a351e4bf662fee9fa2cf2603a48223164Philby John} 344426fcd2a351e4bf662fee9fa2cf2603a48223164Philby John 3450744a3ee37784dfda0025963716a36c3f1e3adccRussell Kingstatic void realview_pb1176_fixup(struct tag *tags, char **from, 3465b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas struct meminfo *meminfo) 3475b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas{ 3485b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas /* 3495b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas * RealView PB1176 only has 128MB of RAM mapped at 0. 3505b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas */ 3515b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas meminfo->bank[0].start = 0; 3525b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas meminfo->bank[0].size = SZ_128M; 3535b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas meminfo->nr_banks = 1; 3545b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas} 3555b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas 356a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic void __init realview_pb1176_init(void) 357a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban{ 358a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban int i; 359a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 360ba9279519b371340e01cadf4c230e9d52a4bf8c4Catalin Marinas#ifdef CONFIG_CACHE_L2X0 361a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban /* 128Kb (16Kb/way) 8-way associativity. evmon/parity/share enabled. */ 362a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban l2x0_init(__io_address(REALVIEW_PB1176_L220_BASE), 0x00730000, 0xfe000fff); 363ba9279519b371340e01cadf4c230e9d52a4bf8c4Catalin Marinas#endif 364a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 365af607747def54d8f76d2509c1394587da5d9bdfdCatalin Marinas realview_flash_register(realview_pb1176_flash_resources, 3660ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij ARRAY_SIZE(realview_pb1176_flash_resources)); 3670ec5a95bbb8ba0b95506693a6bc0de72f1b5d969Linus Walleij platform_device_register(&pb1176_rom_device); 3680a3813306f432e8925ff648c84bd488b840e5185Catalin Marinas realview_eth_register(NULL, realview_pb1176_smsc911x_resources); 369533ad5e60c0a5ff3cef7583b5b1b0eee84c2bda6Catalin Marinas platform_device_register(&realview_i2c_device); 3707db21712aeb7c9693f7bc554923b35c35303a067Catalin Marinas realview_usb_register(realview_pb1176_isp1761_resources); 371f417cbad7394fdccec850d13d7d5621516d693ceWill Deacon platform_device_register(&pmu_device); 372d161edfbf20597752e315e60e31026393680485aLinus Walleij platform_device_register(&char_lcd_device); 373a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 374a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { 375a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban struct amba_device *d = amba_devs[i]; 376a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban amba_device_register(d, &iomem_resource); 377a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban } 378a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 379a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#ifdef CONFIG_LEDS 380a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban leds_event = realview_leds_event; 381a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#endif 382a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban} 383a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 384a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanMACHINE_START(REALVIEW_PB1176, "ARM-RealView PB1176") 385a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ 3869ddea57eb7496d1d4dee188f601b84dcedf27a43Nicolas Pitre .atag_offset = 0x100, 3875b39d1548dc2751f8de89e6f429b6560a137eebbCatalin Marinas .fixup = realview_pb1176_fixup, 388a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .map_io = realview_pb1176_map_io, 389631e55f966668d7a957342b38d7148643d919d73Russell King .init_early = realview_init_early, 390a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .init_irq = gic_init_irq, 391a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .timer = &realview_pb1176_timer, 3921b99d9ccb52d64bfdab0d58915909b10cbbdf9e1Marc Zyngier .handle_irq = gic_handle_irq, 393a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .init_machine = realview_pb1176_init, 39400e9125e061022dcba2daea95491d5400c47789bNicolas Pitre#ifdef CONFIG_ZONE_DMA 39500e9125e061022dcba2daea95491d5400c47789bNicolas Pitre .dma_zone_size = SZ_256M, 39600e9125e061022dcba2daea95491d5400c47789bNicolas Pitre#endif 39747cacdd4ed95d18e5cc28b46d8835c96a9cadfb3Russell King .restart = realview_pb1176_restart, 398a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanMACHINE_END 399