realview_pb1176.c revision ba9279519b371340e01cadf4c230e9d52a4bf8c4
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> 24a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <linux/sysdev.h> 25a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <linux/amba/bus.h> 26a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 27a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/hardware.h> 28a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/io.h> 29a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/irq.h> 30a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/leds.h> 31a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach-types.h> 32a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/hardware/gic.h> 33a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/hardware/icst307.h> 34a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/hardware/cache-l2x0.h> 35a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 36a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/arch.h> 37a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/flash.h> 38a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/map.h> 39a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/mmc.h> 40a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/mach/time.h> 41a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 42a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/arch/board-pb1176.h> 43a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include <asm/arch/irqs.h> 44a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 45a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include "core.h" 46a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#include "clock.h" 47a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 48a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct map_desc realview_pb1176_io_desc[] __initdata = { 49a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban { 50a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_SYS_BASE), 51a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_SYS_BASE), 52a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 53a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 54a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 55a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_GIC_CPU_BASE), 56a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_GIC_CPU_BASE), 57a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 58a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 59a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 60a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_GIC_DIST_BASE), 61a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_GIC_DIST_BASE), 62a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 63a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 64a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 65a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_DC1176_GIC_CPU_BASE), 66a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_DC1176_GIC_CPU_BASE), 67a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 68a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 69a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 70a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_DC1176_GIC_DIST_BASE), 71a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_DC1176_GIC_DIST_BASE), 72a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 73a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 74a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 75a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_SCTL_BASE), 76a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_SCTL_BASE), 77a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 78a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 79a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 80a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_TIMER0_1_BASE), 81a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_TIMER0_1_BASE), 82a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 83a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 84a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 85a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_TIMER2_3_BASE), 86a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_TIMER2_3_BASE), 87a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 88a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 89a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, { 90a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_L220_BASE), 91a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_L220_BASE), 92a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_8K, 93a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 94a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, 95a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#ifdef CONFIG_DEBUG_LL 96a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban { 97a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .virtual = IO_ADDRESS(REALVIEW_PB1176_UART0_BASE), 98a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .pfn = __phys_to_pfn(REALVIEW_PB1176_UART0_BASE), 99a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .length = SZ_4K, 100a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .type = MT_DEVICE, 101a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, 102a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#endif 103a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 104a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 105a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic void __init realview_pb1176_map_io(void) 106a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban{ 107a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban iotable_init(realview_pb1176_io_desc, ARRAY_SIZE(realview_pb1176_io_desc)); 108a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban} 109a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 110a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* 111a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * RealView PB1176 AMBA devices 112a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban */ 113a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define GPIO2_IRQ { IRQ_PB1176_GPIO2, NO_IRQ } 114a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define GPIO2_DMA { 0, 0 } 115a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define GPIO3_IRQ { IRQ_PB1176_GPIO3, NO_IRQ } 116a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define GPIO3_DMA { 0, 0 } 117a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define AACI_IRQ { IRQ_PB1176_AACI, NO_IRQ } 118a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define AACI_DMA { 0x80, 0x81 } 119a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define MMCI0_IRQ { IRQ_PB1176_MMCI0A, IRQ_PB1176_MMCI0B } 120a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define MMCI0_DMA { 0x84, 0 } 121a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define KMI0_IRQ { IRQ_PB1176_KMI0, NO_IRQ } 122a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define KMI0_DMA { 0, 0 } 123a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define KMI1_IRQ { IRQ_PB1176_KMI1, NO_IRQ } 124a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define KMI1_DMA { 0, 0 } 125a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_SMC_IRQ { NO_IRQ, NO_IRQ } 126a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_SMC_DMA { 0, 0 } 127a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define MPMC_IRQ { NO_IRQ, NO_IRQ } 128a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define MPMC_DMA { 0, 0 } 129a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_CLCD_IRQ { IRQ_DC1176_CLCD, NO_IRQ } 130a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_CLCD_DMA { 0, 0 } 131a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define DMAC_IRQ { IRQ_PB1176_DMAC, NO_IRQ } 132a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define DMAC_DMA { 0, 0 } 133a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define SCTL_IRQ { NO_IRQ, NO_IRQ } 134a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define SCTL_DMA { 0, 0 } 135a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_WATCHDOG_IRQ { IRQ_DC1176_WATCHDOG, NO_IRQ } 136a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_WATCHDOG_DMA { 0, 0 } 137a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_GPIO0_IRQ { IRQ_PB1176_GPIO0, NO_IRQ } 138a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_GPIO0_DMA { 0, 0 } 139a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define GPIO1_IRQ { IRQ_PB1176_GPIO1, NO_IRQ } 140a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define GPIO1_DMA { 0, 0 } 141a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_RTC_IRQ { IRQ_DC1176_RTC, NO_IRQ } 142a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_RTC_DMA { 0, 0 } 143a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define SCI_IRQ { IRQ_PB1176_SCI, NO_IRQ } 144a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define SCI_DMA { 7, 6 } 145a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_UART0_IRQ { IRQ_DC1176_UART0, NO_IRQ } 146a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_UART0_DMA { 15, 14 } 147a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_UART1_IRQ { IRQ_DC1176_UART1, NO_IRQ } 148a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_UART1_DMA { 13, 12 } 149a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_UART2_IRQ { IRQ_DC1176_UART2, NO_IRQ } 150a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_UART2_DMA { 11, 10 } 151a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_UART3_IRQ { IRQ_DC1176_UART3, NO_IRQ } 152a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_UART3_DMA { 0x86, 0x87 } 153a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_SSP_IRQ { IRQ_PB1176_SSP, NO_IRQ } 154a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#define PB1176_SSP_DMA { 9, 8 } 155a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 156a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* FPGA Primecells */ 157a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(aaci, "fpga:04", AACI, NULL); 158a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(mmc0, "fpga:05", MMCI0, &realview_mmc0_plat_data); 159a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(kmi0, "fpga:06", KMI0, NULL); 160a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(kmi1, "fpga:07", KMI1, NULL); 161a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(uart3, "fpga:09", PB1176_UART3, NULL); 162a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 163a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* DevChip Primecells */ 164a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(smc, "dev:00", PB1176_SMC, NULL); 165a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(sctl, "dev:e0", SCTL, NULL); 166a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(wdog, "dev:e1", PB1176_WATCHDOG, NULL); 167a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(gpio0, "dev:e4", PB1176_GPIO0, NULL); 168a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(gpio1, "dev:e5", GPIO1, NULL); 169a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(gpio2, "dev:e6", GPIO2, NULL); 170a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(rtc, "dev:e8", PB1176_RTC, NULL); 171a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(sci0, "dev:f0", SCI, NULL); 172a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(uart0, "dev:f1", PB1176_UART0, NULL); 173a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(uart1, "dev:f2", PB1176_UART1, NULL); 174a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(uart2, "dev:f3", PB1176_UART2, NULL); 175a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(ssp0, "dev:f4", PB1176_SSP, NULL); 176a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 177a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* Primecells on the NEC ISSP chip */ 178a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanAMBA_DEVICE(clcd, "issp:20", PB1176_CLCD, &clcd_plat_data); 179a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban//AMBA_DEVICE(dmac, "issp:30", PB1176_DMAC, NULL); 180a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 181a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct amba_device *amba_devs[] __initdata = { 182a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban// &dmac_device, 183a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &uart0_device, 184a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &uart1_device, 185a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &uart2_device, 186a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &uart3_device, 187a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &smc_device, 188a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &clcd_device, 189a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &sctl_device, 190a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &wdog_device, 191a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &gpio0_device, 192a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &gpio1_device, 193a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &gpio2_device, 194a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &rtc_device, 195a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &sci0_device, 196a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &ssp0_device, 197a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &aaci_device, 198a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &mmc0_device, 199a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &kmi0_device, 200a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban &kmi1_device, 201a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 202a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 203a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban/* 204a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban * RealView PB1176 platform devices 205a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban */ 206a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct resource realview_pb1176_flash_resource = { 207a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .start = REALVIEW_PB1176_FLASH_BASE, 208a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .end = REALVIEW_PB1176_FLASH_BASE + REALVIEW_PB1176_FLASH_SIZE - 1, 209a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .flags = IORESOURCE_MEM, 210a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 211a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 212a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct resource realview_pb1176_smsc911x_resources[] = { 213a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban [0] = { 214a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .start = REALVIEW_PB1176_ETH_BASE, 215a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .end = REALVIEW_PB1176_ETH_BASE + SZ_64K - 1, 216a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .flags = IORESOURCE_MEM, 217a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, 218a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban [1] = { 219a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .start = IRQ_PB1176_ETH, 220a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .end = IRQ_PB1176_ETH, 221a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .flags = IORESOURCE_IRQ, 222a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban }, 223a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 224a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 225a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct platform_device realview_pb1176_smsc911x_device = { 226a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .name = "smc911x", 227a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .id = 0, 228a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .num_resources = ARRAY_SIZE(realview_pb1176_smsc911x_resources), 229a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .resource = realview_pb1176_smsc911x_resources, 230a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 231a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 232a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic void __init gic_init_irq(void) 233a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban{ 234a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban /* ARM1176 DevChip GIC, primary */ 235a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban gic_cpu_base_addr = __io_address(REALVIEW_DC1176_GIC_CPU_BASE); 236a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban gic_dist_init(0, __io_address(REALVIEW_DC1176_GIC_DIST_BASE), IRQ_DC1176_GIC_START); 237a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban gic_cpu_init(0, gic_cpu_base_addr); 238a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 239a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban /* board GIC, secondary */ 240a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban gic_dist_init(1, __io_address(REALVIEW_PB1176_GIC_DIST_BASE), IRQ_PB1176_GIC_START); 241a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban gic_cpu_init(1, __io_address(REALVIEW_PB1176_GIC_CPU_BASE)); 242a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban gic_cascade_irq(1, IRQ_DC1176_PB_IRQ1); 243a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban} 244a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 245a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic void __init realview_pb1176_timer_init(void) 246a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban{ 247a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban timer0_va_base = __io_address(REALVIEW_PB1176_TIMER0_1_BASE); 248a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban timer1_va_base = __io_address(REALVIEW_PB1176_TIMER0_1_BASE) + 0x20; 249a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban timer2_va_base = __io_address(REALVIEW_PB1176_TIMER2_3_BASE); 250a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban timer3_va_base = __io_address(REALVIEW_PB1176_TIMER2_3_BASE) + 0x20; 251a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 252a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban realview_timer_init(IRQ_DC1176_TIMER0); 253a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban} 254a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 255a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic struct sys_timer realview_pb1176_timer = { 256a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .init = realview_pb1176_timer_init, 257a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban}; 258a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 259a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balbanstatic void __init realview_pb1176_init(void) 260a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban{ 261a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban int i; 262a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 263ba9279519b371340e01cadf4c230e9d52a4bf8c4Catalin Marinas#ifdef CONFIG_CACHE_L2X0 264a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban /* 128Kb (16Kb/way) 8-way associativity. evmon/parity/share enabled. */ 265a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban l2x0_init(__io_address(REALVIEW_PB1176_L220_BASE), 0x00730000, 0xfe000fff); 266ba9279519b371340e01cadf4c230e9d52a4bf8c4Catalin Marinas#endif 267a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 268a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban clk_register(&realview_clcd_clk); 269a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 270a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban realview_flash_register(&realview_pb1176_flash_resource, 1); 271a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban platform_device_register(&realview_pb1176_smsc911x_device); 272a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 273a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban for (i = 0; i < ARRAY_SIZE(amba_devs); i++) { 274a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban struct amba_device *d = amba_devs[i]; 275a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban amba_device_register(d, &iomem_resource); 276a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban } 277a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 278a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#ifdef CONFIG_LEDS 279a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban leds_event = realview_leds_event; 280a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban#endif 281a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban} 282a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban 283a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanMACHINE_START(REALVIEW_PB1176, "ARM-RealView PB1176") 284a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban /* Maintainer: ARM Ltd/Deep Blue Solutions Ltd */ 285a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .phys_io = REALVIEW_PB1176_UART0_BASE, 286a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .io_pg_offst = (IO_ADDRESS(REALVIEW_PB1176_UART0_BASE) >> 18) & 0xfffc, 287a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .boot_params = 0x00000100, 288a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .map_io = realview_pb1176_map_io, 289a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .init_irq = gic_init_irq, 290a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .timer = &realview_pb1176_timer, 291a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir Balban .init_machine = realview_pb1176_init, 292a0316b244e75d80df3790b69b0a2cb0bbf4c1562Bahadir BalbanMACHINE_END 293