12f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang/* 22f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * linux/arch/arm/mach-mmp/flint.c 32f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * 42f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * Support for the Marvell Flint Development Platform. 52f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * 62f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * Copyright (C) 2009 Marvell International Ltd. 72f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * 82f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * This program is free software; you can redistribute it and/or modify 92f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * it under the terms of the GNU General Public License version 2 as 102f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang * publishhed by the Free Software Foundation. 112f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang */ 122f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 132f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <linux/init.h> 142f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <linux/kernel.h> 152f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <linux/platform_device.h> 162f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <linux/smc91x.h> 172f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <linux/io.h> 182f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <linux/gpio.h> 190bd8696119904b5868c7315b644128b16ab06f59Haojian Zhuang#include <linux/interrupt.h> 202f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 212f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <asm/mach-types.h> 222f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <asm/mach/arch.h> 232f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <mach/addr-map.h> 242f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <mach/mfp-mmp2.h> 252f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include <mach/mmp2.h> 268661fb92045c5710754d450ebb82461fcfa08b65Rob Herring#include <mach/irqs.h> 272f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 282f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang#include "common.h" 292f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 308661fb92045c5710754d450ebb82461fcfa08b65Rob Herring#define FLINT_NR_IRQS (MMP_NR_IRQS + 48) 310bd8696119904b5868c7315b644128b16ab06f59Haojian Zhuang 322f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuangstatic unsigned long flint_pin_config[] __initdata = { 332f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang /* UART1 */ 342f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO45_UART1_RXD, 352f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO46_UART1_TXD, 362f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 372f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang /* UART2 */ 382f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO47_UART2_RXD, 392f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO48_UART2_TXD, 402f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 412f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang /* SMC */ 422f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO151_SMC_SCLK, 432f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO145_SMC_nCS0, 442f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO146_SMC_nCS1, 452f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO152_SMC_BE0, 462f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO153_SMC_BE1, 472f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO154_SMC_IRQ, 482f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO113_SMC_RDY, 492f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 502f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang /*Ethernet*/ 51a8fb0b55314144a37755729d3b40b027b0020e3cEric Miao GPIO155_GPIO, 522f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 532f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang /* DFI */ 542f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO168_DFI_D0, 552f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO167_DFI_D1, 562f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO166_DFI_D2, 572f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO165_DFI_D3, 582f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO107_DFI_D4, 592f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO106_DFI_D5, 602f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO105_DFI_D6, 612f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO104_DFI_D7, 622f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO111_DFI_D8, 632f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO164_DFI_D9, 642f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO163_DFI_D10, 652f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO162_DFI_D11, 662f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO161_DFI_D12, 672f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO110_DFI_D13, 682f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO109_DFI_D14, 692f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO108_DFI_D15, 702f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO143_ND_nCS0, 712f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO144_ND_nCS1, 722f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO147_ND_nWE, 732f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO148_ND_nRE, 742f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO150_ND_ALE, 752f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO149_ND_CLE, 762f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO112_ND_RDY0, 772f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang GPIO160_ND_RDY1, 782f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang}; 792f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 802f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuangstatic struct smc91x_platdata flint_smc91x_info = { 812f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .flags = SMC91X_USE_16BIT | SMC91X_NOWAIT, 822f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang}; 832f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 842f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuangstatic struct resource smc91x_resources[] = { 852f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang [0] = { 862f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .start = SMC_CS1_PHYS_BASE + 0x300, 872f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .end = SMC_CS1_PHYS_BASE + 0xfffff, 882f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .flags = IORESOURCE_MEM, 892f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang }, 902f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang [1] = { 914929f5a8a99f64378659c5658621e45c90c2aaa9Haojian Zhuang .start = MMP_GPIO_TO_IRQ(155), 924929f5a8a99f64378659c5658621e45c90c2aaa9Haojian Zhuang .end = MMP_GPIO_TO_IRQ(155), 932f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .flags = IORESOURCE_IRQ | IORESOURCE_IRQ_HIGHEDGE, 942f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang } 952f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang}; 962f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 972f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuangstatic struct platform_device smc91x_device = { 982f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .name = "smc91x", 992f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .id = 0, 1002f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .dev = { 1012f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .platform_data = &flint_smc91x_info, 1022f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang }, 1032f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .num_resources = ARRAY_SIZE(smc91x_resources), 1042f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .resource = smc91x_resources, 1052f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang}; 1062f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 1072f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuangstatic void __init flint_init(void) 1082f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang{ 1092f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang mfp_config(ARRAY_AND_SIZE(flint_pin_config)); 1102f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 1112f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang /* on-chip devices */ 1122f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang mmp2_add_uart(1); 1132f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang mmp2_add_uart(2); 114157d2644cb0c1e71a18baaffca56d2b1d0ebf10fHaojian Zhuang platform_device_register(&mmp2_device_gpio); 1152f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 1162f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang /* off-chip devices */ 1172f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang platform_device_register(&smc91x_device); 1182f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang} 1192f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang 1202f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian ZhuangMACHINE_START(FLINT, "Flint Development Platform") 1218022887cda044524610ef2a5a45feb9d96b11b4fEric Miao .map_io = mmp_map_io, 1220bd8696119904b5868c7315b644128b16ab06f59Haojian Zhuang .nr_irqs = FLINT_NR_IRQS, 1232f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .init_irq = mmp2_init_irq, 1242f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .timer = &mmp2_timer, 1252f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian Zhuang .init_machine = flint_init, 1269854a38e371a153c7c4adb2cb7951c27befe0362Russell King .restart = mmp_restart, 1272f7e8faef5a50efaa1c173e99bdaa29e0129bb99Haojian ZhuangMACHINE_END 128