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