11da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
21da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * arch/arm/mach-ixp4xx/gtwx5715-setup.c
31da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
46cbdc8c5357276307a77deeada3f04626ff17da6Simon Arlott * Gemtek GTWX5715 (Linksys WRV54G) board setup
51da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
61da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Copyright (C) 2004 George T. Joseph
71da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Derived from Coyote
81da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
91da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is free software; you can redistribute it and/or
101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * modify it under the terms of the GNU General Public License
111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * as published by the Free Software Foundation; either version 2
121da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * of the License, or (at your option) any later version.
131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * This program is distributed in the hope that it will be useful,
151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * but WITHOUT ANY WARRANTY; without even the implied warranty of
161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * GNU General Public License for more details.
181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * You should have received a copy of the GNU General Public License
201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * along with this program; if not, write to the Free Software
211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
221da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/init.h>
261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/device.h>
271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/serial.h>
281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/tty.h>
291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <linux/serial_8250.h>
301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/types.h>
311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/setup.h>
321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/memory.h>
33a09e64fbc0094e3073dbb09c3b4bfe4ab669244bRussell King#include <mach/hardware.h>
341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/irq.h>
351da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach-types.h>
361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach/arch.h>
371da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#include <asm/mach/flash.h>
38a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa
39a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa/* GPIO 5,6,7 and 12 are hard wired to the Kendin KS8995M Switch
40a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   and operate as an SPI type interface.  The details of the interface
41a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   are available on Kendin/Micrel's web site. */
42a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa
43a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_KSSPI_SELECT	5
44a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_KSSPI_TXD	6
45a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_KSSPI_CLOCK	7
46a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_KSSPI_RXD	12
47a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa
48a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa/* The "reset" button is wired to GPIO 3.
49a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   The GPIO is brought "low" when the button is pushed. */
50a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa
51a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_BUTTON_GPIO	3
52a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa
53a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa/* Board Label      Front Label
54a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   LED1             Power
55a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   LED2             Wireless-G
56a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   LED3             not populated but could be
57a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   LED4             Internet
58a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   LED5 - LED8      Controlled by KS8995M Switch
59a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa   LED9             DMZ */
60a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa
61a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED1_GPIO	2
62a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED2_GPIO	9
63a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED3_GPIO	8
64a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED4_GPIO	1
65a8b7b34075f693632cd1483b817d4211c7a63257Krzysztof Hałasa#define GTWX5715_LED9_GPIO	4
661da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
671da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
681da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Xscale UART registers are 32 bits wide with only the least
691da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * significant 8 bits having any meaning.  From a configuration
701da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * perspective, this means 2 things...
711da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
721da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   Setting .regshift = 2 so that the standard 16550 registers
731da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   line up on every 4th byte.
741da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *
751da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   Shifting the register start virtual address +3 bytes when
761da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   compiled big-endian.  Since register writes are done on a
771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   single byte basis, if the shift isn't done the driver will
781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   write the value into the most significant byte of the register,
791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds *   which is ignored, instead of the least significant.
801da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
811da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
821da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#ifdef	__ARMEB__
831da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	REG_OFFSET	3
841da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#else
851da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#define	REG_OFFSET	0
861da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds#endif
871da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
881da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds/*
891da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds * Only the second or "console" uart is connected on the gtwx5715.
901da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds */
911da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
921da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct resource gtwx5715_uart_resources[] = {
931da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	{
941da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		.start	= IXP4XX_UART2_BASE_PHYS,
951da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		.end	= IXP4XX_UART2_BASE_PHYS + 0x0fff,
961da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		.flags	= IORESOURCE_MEM,
971da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	},
981da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	{
991da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		.start	= IRQ_IXP4XX_UART2,
1001da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		.end	= IRQ_IXP4XX_UART2,
1011da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		.flags	= IORESOURCE_IRQ,
1021da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	},
1031da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	{ },
1041da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1051da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1061da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1071da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct plat_serial8250_port gtwx5715_uart_platform_data[] = {
1081da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	{
1091da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.mapbase	= IXP4XX_UART2_BASE_PHYS,
1101da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.membase	= (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
1111da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.irq		= IRQ_IXP4XX_UART2,
1128c741ed74d121dbc97c9fb7f9a66c768d4c547c4Deepak Saxena	.flags		= UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
1131da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.iotype		= UPIO_MEM,
1141da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.regshift	= 2,
1151da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.uartclk	= IXP4XX_UART_XTAL,
1161da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	},
1171da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	{ },
1181da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1191da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1201da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct platform_device gtwx5715_uart_device = {
1211da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.name		= "serial8250",
1226df29debb7fc04ac3f92038c57437f40bab4e72dRussell King	.id		= PLAT8250_DEV_PLATFORM,
1231da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.dev			= {
1241da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		.platform_data	= gtwx5715_uart_platform_data,
1251da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	},
1261da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.num_resources	= 2,
1271da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.resource	= gtwx5715_uart_resources,
1281da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1291da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1301da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct flash_platform_data gtwx5715_flash_data = {
1311da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.map_name	= "cfi_probe",
1321da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.width		= 2,
1331da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1341da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1354c756f4e954186630f6ee91a4da9a4b39fe3618dMartin Michlmayrstatic struct resource gtwx5715_flash_resource = {
1361da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.flags		= IORESOURCE_MEM,
1374c756f4e954186630f6ee91a4da9a4b39fe3618dMartin Michlmayr};
1381da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1391da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct platform_device gtwx5715_flash = {
1401da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.name		= "IXP4XX-Flash",
1411da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.id		= 0,
1421da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.dev		= {
1431da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds		.platform_data = &gtwx5715_flash_data,
1441da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	},
1451da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.num_resources	= 1,
1461da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	.resource	= &gtwx5715_flash_resource,
1471da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1481da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1491da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic struct platform_device *gtwx5715_devices[] __initdata = {
1501da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	&gtwx5715_uart_device,
1511da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	&gtwx5715_flash,
1521da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds};
1531da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1541da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvaldsstatic void __init gtwx5715_init(void)
1551da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds{
15654e269ead6e672325866037b0617a72edd1396b9Deepak Saxena	ixp4xx_sys_init();
15754e269ead6e672325866037b0617a72edd1396b9Deepak Saxena
15854e269ead6e672325866037b0617a72edd1396b9Deepak Saxena	gtwx5715_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
15954e269ead6e672325866037b0617a72edd1396b9Deepak Saxena	gtwx5715_flash_resource.end = IXP4XX_EXP_BUS_BASE(0) + SZ_8M - 1;
16054e269ead6e672325866037b0617a72edd1396b9Deepak Saxena
1611da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds	platform_add_devices(gtwx5715_devices, ARRAY_SIZE(gtwx5715_devices));
1621da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds}
1631da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1641da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1651da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMACHINE_START(GTWX5715, "Gemtek GTWX5715 (Linksys WRV54G)")
166e9dea0c65d2de6981356c055781fb99d7191b14eRussell King	/* Maintainer: George Joseph */
167e605ecd7c8a38f65759c938a235a1b84f41a744eDeepak Saxena	.map_io		= ixp4xx_map_io,
168f449588c65e23637aef59cae2ea7b6b2b1b767ecRob Herring	.init_early	= ixp4xx_init_early,
169e9dea0c65d2de6981356c055781fb99d7191b14eRussell King	.init_irq	= ixp4xx_init_irq,
170e9dea0c65d2de6981356c055781fb99d7191b14eRussell King	.timer		= &ixp4xx_timer,
171e022c729da8d14e381c04264b07e11d9009d44edNicolas Pitre	.atag_offset	= 0x100,
172e9dea0c65d2de6981356c055781fb99d7191b14eRussell King	.init_machine	= gtwx5715_init,
1737553ee777b513c3bc8f45bb9fc75fb1bbc584ba1Nicolas Pitre#if defined(CONFIG_PCI)
1747553ee777b513c3bc8f45bb9fc75fb1bbc584ba1Nicolas Pitre	.dma_zone_size	= SZ_64M,
1757553ee777b513c3bc8f45bb9fc75fb1bbc584ba1Nicolas Pitre#endif
176d1b860fbb2b0d25a5ccd8165ea4db2914b0820f5Russell King	.restart	= ixp4xx_restart,
1771da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus TorvaldsMACHINE_END
1781da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
1791da177e4c3f41524e886b7f1b8a0c1fc7321cacLinus Torvalds
180