Path: blob/master/arch/arm/mach-ixp4xx/vulcan-setup.c
10817 views
/*1* arch/arm/mach-ixp4xx/vulcan-setup.c2*3* Arcom/Eurotech Vulcan board-setup4*5* Copyright (C) 2010 Marc Zyngier <[email protected]>6*7* based on fsg-setup.c:8* Copyright (C) 2008 Rod Whitby <[email protected]>9*/1011#include <linux/if_ether.h>12#include <linux/irq.h>13#include <linux/serial.h>14#include <linux/serial_8250.h>15#include <linux/io.h>16#include <linux/w1-gpio.h>17#include <linux/mtd/plat-ram.h>18#include <asm/mach-types.h>19#include <asm/mach/arch.h>20#include <asm/mach/flash.h>2122static struct flash_platform_data vulcan_flash_data = {23.map_name = "cfi_probe",24.width = 2,25};2627static struct resource vulcan_flash_resource = {28.flags = IORESOURCE_MEM,29};3031static struct platform_device vulcan_flash = {32.name = "IXP4XX-Flash",33.id = 0,34.dev = {35.platform_data = &vulcan_flash_data,36},37.resource = &vulcan_flash_resource,38.num_resources = 1,39};4041static struct platdata_mtd_ram vulcan_sram_data = {42.mapname = "Vulcan SRAM",43.bankwidth = 1,44};4546static struct resource vulcan_sram_resource = {47.flags = IORESOURCE_MEM,48};4950static struct platform_device vulcan_sram = {51.name = "mtd-ram",52.id = 0,53.dev = {54.platform_data = &vulcan_sram_data,55},56.resource = &vulcan_sram_resource,57.num_resources = 1,58};5960static struct resource vulcan_uart_resources[] = {61[0] = {62.start = IXP4XX_UART1_BASE_PHYS,63.end = IXP4XX_UART1_BASE_PHYS + 0x0fff,64.flags = IORESOURCE_MEM,65},66[1] = {67.start = IXP4XX_UART2_BASE_PHYS,68.end = IXP4XX_UART2_BASE_PHYS + 0x0fff,69.flags = IORESOURCE_MEM,70},71[2] = {72.flags = IORESOURCE_MEM,73},74};7576static struct plat_serial8250_port vulcan_uart_data[] = {77[0] = {78.mapbase = IXP4XX_UART1_BASE_PHYS,79.membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,80.irq = IRQ_IXP4XX_UART1,81.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,82.iotype = UPIO_MEM,83.regshift = 2,84.uartclk = IXP4XX_UART_XTAL,85},86[1] = {87.mapbase = IXP4XX_UART2_BASE_PHYS,88.membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,89.irq = IRQ_IXP4XX_UART2,90.flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,91.iotype = UPIO_MEM,92.regshift = 2,93.uartclk = IXP4XX_UART_XTAL,94},95[2] = {96.irq = IXP4XX_GPIO_IRQ(4),97.irqflags = IRQF_TRIGGER_LOW,98.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,99.iotype = UPIO_MEM,100.uartclk = 1843200,101},102[3] = {103.irq = IXP4XX_GPIO_IRQ(4),104.irqflags = IRQF_TRIGGER_LOW,105.flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,106.iotype = UPIO_MEM,107.uartclk = 1843200,108},109{ }110};111112static struct platform_device vulcan_uart = {113.name = "serial8250",114.id = PLAT8250_DEV_PLATFORM,115.dev = {116.platform_data = vulcan_uart_data,117},118.resource = vulcan_uart_resources,119.num_resources = ARRAY_SIZE(vulcan_uart_resources),120};121122static struct eth_plat_info vulcan_plat_eth[] = {123[0] = {124.phy = 0,125.rxq = 3,126.txreadyq = 20,127},128[1] = {129.phy = 1,130.rxq = 4,131.txreadyq = 21,132},133};134135static struct platform_device vulcan_eth[] = {136[0] = {137.name = "ixp4xx_eth",138.id = IXP4XX_ETH_NPEB,139.dev = {140.platform_data = &vulcan_plat_eth[0],141},142},143[1] = {144.name = "ixp4xx_eth",145.id = IXP4XX_ETH_NPEC,146.dev = {147.platform_data = &vulcan_plat_eth[1],148},149},150};151152static struct resource vulcan_max6369_resource = {153.flags = IORESOURCE_MEM,154};155156static struct platform_device vulcan_max6369 = {157.name = "max6369_wdt",158.id = -1,159.resource = &vulcan_max6369_resource,160.num_resources = 1,161};162163static struct w1_gpio_platform_data vulcan_w1_gpio_pdata = {164.pin = 14,165};166167static struct platform_device vulcan_w1_gpio = {168.name = "w1-gpio",169.id = 0,170.dev = {171.platform_data = &vulcan_w1_gpio_pdata,172},173};174175static struct platform_device *vulcan_devices[] __initdata = {176&vulcan_uart,177&vulcan_flash,178&vulcan_sram,179&vulcan_max6369,180&vulcan_eth[0],181&vulcan_eth[1],182&vulcan_w1_gpio,183};184185static void __init vulcan_init(void)186{187ixp4xx_sys_init();188189/* Flash is spread over both CS0 and CS1 */190vulcan_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);191vulcan_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_32M - 1;192*IXP4XX_EXP_CS0 = IXP4XX_EXP_BUS_CS_EN |193IXP4XX_EXP_BUS_STROBE_T(3) |194IXP4XX_EXP_BUS_SIZE(0xF) |195IXP4XX_EXP_BUS_BYTE_RD16 |196IXP4XX_EXP_BUS_WR_EN;197*IXP4XX_EXP_CS1 = *IXP4XX_EXP_CS0;198199/* SRAM on CS2, (256kB, 8bit, writable) */200vulcan_sram_resource.start = IXP4XX_EXP_BUS_BASE(2);201vulcan_sram_resource.end = IXP4XX_EXP_BUS_BASE(2) + SZ_256K - 1;202*IXP4XX_EXP_CS2 = IXP4XX_EXP_BUS_CS_EN |203IXP4XX_EXP_BUS_STROBE_T(1) |204IXP4XX_EXP_BUS_HOLD_T(2) |205IXP4XX_EXP_BUS_SIZE(9) |206IXP4XX_EXP_BUS_SPLT_EN |207IXP4XX_EXP_BUS_WR_EN |208IXP4XX_EXP_BUS_BYTE_EN;209210/* XR16L2551 on CS3 (Moto style, 512 bytes, 8bits, writable) */211vulcan_uart_resources[2].start = IXP4XX_EXP_BUS_BASE(3);212vulcan_uart_resources[2].end = IXP4XX_EXP_BUS_BASE(3) + 16 - 1;213vulcan_uart_data[2].mapbase = vulcan_uart_resources[2].start;214vulcan_uart_data[3].mapbase = vulcan_uart_data[2].mapbase + 8;215*IXP4XX_EXP_CS3 = IXP4XX_EXP_BUS_CS_EN |216IXP4XX_EXP_BUS_STROBE_T(3) |217IXP4XX_EXP_BUS_CYCLES(IXP4XX_EXP_BUS_CYCLES_MOTOROLA)|218IXP4XX_EXP_BUS_WR_EN |219IXP4XX_EXP_BUS_BYTE_EN;220221/* GPIOS on CS4 (512 bytes, 8bits, writable) */222*IXP4XX_EXP_CS4 = IXP4XX_EXP_BUS_CS_EN |223IXP4XX_EXP_BUS_WR_EN |224IXP4XX_EXP_BUS_BYTE_EN;225226/* max6369 on CS5 (512 bytes, 8bits, writable) */227vulcan_max6369_resource.start = IXP4XX_EXP_BUS_BASE(5);228vulcan_max6369_resource.end = IXP4XX_EXP_BUS_BASE(5);229*IXP4XX_EXP_CS5 = IXP4XX_EXP_BUS_CS_EN |230IXP4XX_EXP_BUS_WR_EN |231IXP4XX_EXP_BUS_BYTE_EN;232233platform_add_devices(vulcan_devices, ARRAY_SIZE(vulcan_devices));234}235236MACHINE_START(ARCOM_VULCAN, "Arcom/Eurotech Vulcan")237/* Maintainer: Marc Zyngier <[email protected]> */238.map_io = ixp4xx_map_io,239.init_irq = ixp4xx_init_irq,240.timer = &ixp4xx_timer,241.boot_params = 0x0100,242.init_machine = vulcan_init,243MACHINE_END244245246