PageRenderTime 33ms CodeModel.GetById 8ms app.highlight 17ms RepoModel.GetById 2ms app.codeStats 0ms

/arch/arm/mach-sa1100/pleb.c

https://bitbucket.org/evzijst/gittest
C | 154 lines | 104 code | 33 blank | 17 comment | 0 complexity | 66d990828b874045ea1cc0ead2fa5272 MD5 | raw file
  1/*
  2 * linux/arch/arm/mach-sa1100/pleb.c
  3 */
  4
  5#include <linux/init.h>
  6#include <linux/kernel.h>
  7#include <linux/tty.h>
  8#include <linux/ioport.h>
  9#include <linux/device.h>
 10
 11#include <linux/mtd/partitions.h>
 12
 13#include <asm/hardware.h>
 14#include <asm/io.h>
 15#include <asm/setup.h>
 16#include <asm/mach-types.h>
 17
 18#include <asm/mach/arch.h>
 19#include <asm/mach/map.h>
 20#include <asm/mach/flash.h>
 21#include <asm/mach/serial_sa1100.h>
 22#include <asm/arch/irqs.h>
 23
 24#include "generic.h"
 25
 26
 27/*
 28 * Ethernet IRQ mappings
 29 */
 30
 31#define PLEB_ETH0_P		(0x20000300)	/* Ethernet 0 in PCMCIA0 IO */
 32#define PLEB_ETH0_V		(0xf6000300)
 33
 34#define GPIO_ETH0_IRQ		GPIO_GPIO(21)
 35#define GPIO_ETH0_EN		GPIO_GPIO(26)
 36
 37#define IRQ_GPIO_ETH0_IRQ	IRQ_GPIO21
 38
 39static struct resource smc91x_resources[] = {
 40	[0] = {
 41		.start	=  PLEB_ETH0_P,
 42		.end	=  PLEB_ETH0_P | 0x03ffffff,
 43		.flags	= IORESOURCE_MEM,
 44	},
 45#if 0 /* Autoprobe instead, to get rising/falling edge characteristic right */
 46	[1] = {
 47		.start	= IRQ_GPIO_ETH0_IRQ,
 48		.end	= IRQ_GPIO_ETH0_IRQ,
 49		.flags	= IORESOURCE_IRQ,
 50	},
 51#endif
 52};
 53
 54
 55static struct platform_device smc91x_device = {
 56	.name		= "smc91x",
 57	.id		= 0,
 58	.num_resources	= ARRAY_SIZE(smc91x_resources),
 59	.resource	= smc91x_resources,
 60};
 61
 62static struct platform_device *devices[] __initdata = {
 63	&smc91x_device,
 64};
 65
 66
 67/*
 68 * Pleb's memory map
 69 * has flash memory (typically 4 or 8 meg) selected by
 70 * the two SA1100 lowest chip select outputs.
 71 */
 72static struct resource pleb_flash_resources[] = {
 73	[0] = {
 74		.start = SA1100_CS0_PHYS,
 75		.end   = SA1100_CS0_PHYS + SZ_8M - 1,
 76		.flags = IORESOURCE_MEM,
 77	},
 78	[1] = {
 79		.start = SA1100_CS1_PHYS,
 80		.end   = SA1100_CS1_PHYS + SZ_8M - 1,
 81		.flags = IORESOURCE_MEM,
 82	}
 83};
 84
 85
 86static struct mtd_partition pleb_partitions[] = {
 87	{
 88		.name		= "blob",
 89		.offset 	= 0,
 90		.size		= 0x00020000,
 91	}, {
 92		.name		= "kernel",
 93		.offset 	= MTDPART_OFS_APPEND,
 94		.size		= 0x000e0000,
 95	}, {
 96		.name		= "rootfs",
 97		.offset 	= MTDPART_OFS_APPEND,
 98		.size		= 0x00300000,
 99	}
100};
101
102
103static struct flash_platform_data pleb_flash_data = {
104	.map_name = "cfi_probe",
105	.parts = pleb_partitions,
106	.nr_parts = ARRAY_SIZE(pleb_partitions),
107};
108
109
110static void __init pleb_init(void)
111{
112	sa11x0_set_flash_data(&pleb_flash_data, pleb_flash_resources,
113			      ARRAY_SIZE(pleb_flash_resources));
114
115
116	platform_add_devices(devices, ARRAY_SIZE(devices));
117}
118
119
120static void __init pleb_map_io(void)
121{
122	sa1100_map_io();
123
124	sa1100_register_uart(0, 3);
125        sa1100_register_uart(1, 1);
126
127        GAFR |= (GPIO_UART_TXD | GPIO_UART_RXD);
128        GPDR |= GPIO_UART_TXD;
129        GPDR &= ~GPIO_UART_RXD;
130        PPAR |= PPAR_UPR;
131
132	/*
133	 * Fix expansion memory timing for network card
134	 */
135	MECR = ((2<<10) | (2<<5) | (2<<0));
136
137	/*
138	 * Enable the SMC ethernet controller
139	 */
140	GPDR |= GPIO_ETH0_EN;	/* set to output */
141	GPCR  = GPIO_ETH0_EN;	/* clear MCLK (enable smc) */
142
143	GPDR &= ~GPIO_ETH0_IRQ;
144
145	set_irq_type(GPIO_ETH0_IRQ, IRQT_FALLING);
146}
147
148MACHINE_START(PLEB, "PLEB")
149	BOOT_MEM(0xc0000000, 0x80000000, 0xf8000000)
150	MAPIO(pleb_map_io)
151	INITIRQ(sa1100_init_irq)
152	.timer		= &sa1100_timer,
153	.init_machine   = pleb_init,
154MACHINE_END