aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--arch/arm/mach-ixp4xx/Kconfig12
-rw-r--r--arch/arm/mach-ixp4xx/Makefile2
-rw-r--r--arch/arm/mach-ixp4xx/avila-pci.c78
-rw-r--r--arch/arm/mach-ixp4xx/avila-setup.c152
-rw-r--r--include/asm-arm/arch-ixp4xx/avila.h39
-rw-r--r--include/asm-arm/arch-ixp4xx/hardware.h1
-rw-r--r--include/asm-arm/arch-ixp4xx/irqs.h9
7 files changed, 291 insertions, 2 deletions
diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig
index e316bd93313f..8a339cdfe222 100644
--- a/arch/arm/mach-ixp4xx/Kconfig
+++ b/arch/arm/mach-ixp4xx/Kconfig
@@ -17,7 +17,7 @@ config MACH_NSLU2
17 NSLU2 NAS device. For more information on this platform, 17 NSLU2 NAS device. For more information on this platform,
18 see http://www.nslu2-linux.org 18 see http://www.nslu2-linux.org
19 19
20config ARCH_AVILA 20config MACH_AVILA
21 bool "Avila" 21 bool "Avila"
22 select PCI 22 select PCI
23 help 23 help
@@ -25,6 +25,14 @@ config ARCH_AVILA
25 Avila Network Platform. For more information on this platform, 25 Avila Network Platform. For more information on this platform,
26 see <file:Documentation/arm/IXP4xx>. 26 see <file:Documentation/arm/IXP4xx>.
27 27
28config MACH_LOFT
29 bool "Loft"
30 depends on MACH_AVILA
31 help
32 Say 'Y' here if you want your kernel to support the Giant
33 Shoulder Inc Loft board (a minor variation on the standard
34 Gateworks Avila Network Platform).
35
28config ARCH_ADI_COYOTE 36config ARCH_ADI_COYOTE
29 bool "Coyote" 37 bool "Coyote"
30 select PCI 38 select PCI
@@ -86,7 +94,7 @@ config MACH_NAS100D
86# 94#
87config ARCH_IXDP4XX 95config ARCH_IXDP4XX
88 bool 96 bool
89 depends on ARCH_IXDP425 || ARCH_AVILA || MACH_IXDP465 97 depends on ARCH_IXDP425 || MACH_IXDP465
90 default y 98 default y
91 99
92# 100#
diff --git a/arch/arm/mach-ixp4xx/Makefile b/arch/arm/mach-ixp4xx/Makefile
index 640315d8b96a..746e297284ed 100644
--- a/arch/arm/mach-ixp4xx/Makefile
+++ b/arch/arm/mach-ixp4xx/Makefile
@@ -6,6 +6,7 @@ obj-pci-y :=
6obj-pci-n := 6obj-pci-n :=
7 7
8obj-pci-$(CONFIG_ARCH_IXDP4XX) += ixdp425-pci.o 8obj-pci-$(CONFIG_ARCH_IXDP4XX) += ixdp425-pci.o
9obj-pci-$(CONFIG_MACH_AVILA) += avila-pci.o
9obj-pci-$(CONFIG_MACH_IXDPG425) += ixdpg425-pci.o 10obj-pci-$(CONFIG_MACH_IXDPG425) += ixdpg425-pci.o
10obj-pci-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o 11obj-pci-$(CONFIG_ARCH_ADI_COYOTE) += coyote-pci.o
11obj-pci-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o 12obj-pci-$(CONFIG_MACH_GTWX5715) += gtwx5715-pci.o
@@ -15,6 +16,7 @@ obj-pci-$(CONFIG_MACH_NAS100D) += nas100d-pci.o
15obj-y += common.o 16obj-y += common.o
16 17
17obj-$(CONFIG_ARCH_IXDP4XX) += ixdp425-setup.o 18obj-$(CONFIG_ARCH_IXDP4XX) += ixdp425-setup.o
19obj-$(CONFIG_MACH_AVILA) += avila-setup.o
18obj-$(CONFIG_MACH_IXDPG425) += coyote-setup.o 20obj-$(CONFIG_MACH_IXDPG425) += coyote-setup.o
19obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-setup.o 21obj-$(CONFIG_ARCH_ADI_COYOTE) += coyote-setup.o
20obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-setup.o 22obj-$(CONFIG_MACH_GTWX5715) += gtwx5715-setup.o
diff --git a/arch/arm/mach-ixp4xx/avila-pci.c b/arch/arm/mach-ixp4xx/avila-pci.c
new file mode 100644
index 000000000000..3f867691d9f2
--- /dev/null
+++ b/arch/arm/mach-ixp4xx/avila-pci.c
@@ -0,0 +1,78 @@
1/*
2 * arch/arm/mach-ixp4xx/avila-pci.c
3 *
4 * Gateworks Avila board-level PCI initialization
5 *
6 * Author: Michael-Luke Jones <mlj28@cam.ac.uk>
7 *
8 * Based on ixdp-pci.c
9 * Copyright (C) 2002 Intel Corporation.
10 * Copyright (C) 2003-2004 MontaVista Software, Inc.
11 *
12 * Maintainer: Deepak Saxena <dsaxena@plexity.net>
13 *
14 * This program is free software; you can redistribute it and/or modify
15 * it under the terms of the GNU General Public License version 2 as
16 * published by the Free Software Foundation.
17 *
18 */
19
20#include <linux/kernel.h>
21#include <linux/pci.h>
22#include <linux/init.h>
23#include <linux/irq.h>
24#include <linux/delay.h>
25
26#include <asm/mach/pci.h>
27#include <asm/irq.h>
28#include <asm/hardware.h>
29#include <asm/mach-types.h>
30
31void __init avila_pci_preinit(void)
32{
33 set_irq_type(IRQ_AVILA_PCI_INTA, IRQT_LOW);
34 set_irq_type(IRQ_AVILA_PCI_INTB, IRQT_LOW);
35 set_irq_type(IRQ_AVILA_PCI_INTC, IRQT_LOW);
36 set_irq_type(IRQ_AVILA_PCI_INTD, IRQT_LOW);
37
38 ixp4xx_pci_preinit();
39}
40
41static int __init avila_map_irq(struct pci_dev *dev, u8 slot, u8 pin)
42{
43 static int pci_irq_table[AVILA_PCI_IRQ_LINES] = {
44 IRQ_AVILA_PCI_INTA,
45 IRQ_AVILA_PCI_INTB,
46 IRQ_AVILA_PCI_INTC,
47 IRQ_AVILA_PCI_INTD
48 };
49
50 int irq = -1;
51
52 if (slot >= 1 &&
53 slot <= (machine_is_loft() ? LOFT_PCI_MAX_DEV : AVILA_PCI_MAX_DEV) &&
54 pin >= 1 && pin <= AVILA_PCI_IRQ_LINES) {
55 irq = pci_irq_table[(slot + pin - 2) % 4];
56 }
57
58 return irq;
59}
60
61struct hw_pci avila_pci __initdata = {
62 .nr_controllers = 1,
63 .preinit = avila_pci_preinit,
64 .swizzle = pci_std_swizzle,
65 .setup = ixp4xx_setup,
66 .scan = ixp4xx_scan_bus,
67 .map_irq = avila_map_irq,
68};
69
70int __init avila_pci_init(void)
71{
72 if (machine_is_avila() || machine_is_loft())
73 pci_common_init(&avila_pci);
74 return 0;
75}
76
77subsys_initcall(avila_pci_init);
78
diff --git a/arch/arm/mach-ixp4xx/avila-setup.c b/arch/arm/mach-ixp4xx/avila-setup.c
new file mode 100644
index 000000000000..9f09f94593a6
--- /dev/null
+++ b/arch/arm/mach-ixp4xx/avila-setup.c
@@ -0,0 +1,152 @@
1/*
2 * arch/arm/mach-ixp4xx/avila-setup.c
3 *
4 * Gateworks Avila board-setup
5 *
6 * Author: Michael-Luke Jones <mlj28@cam.ac.uk>
7 *
8 * Based on ixdp-setup.c
9 * Copyright (C) 2003-2005 MontaVista Software, Inc.
10 *
11 * Author: Deepak Saxena <dsaxena@plexity.net>
12 */
13
14#include <linux/kernel.h>
15#include <linux/init.h>
16#include <linux/device.h>
17#include <linux/serial.h>
18#include <linux/tty.h>
19#include <linux/serial_8250.h>
20#include <linux/slab.h>
21
22#include <asm/types.h>
23#include <asm/setup.h>
24#include <asm/memory.h>
25#include <asm/hardware.h>
26#include <asm/mach-types.h>
27#include <asm/irq.h>
28#include <asm/mach/arch.h>
29#include <asm/mach/flash.h>
30
31static struct flash_platform_data avila_flash_data = {
32 .map_name = "cfi_probe",
33 .width = 2,
34};
35
36static struct resource avila_flash_resource = {
37 .flags = IORESOURCE_MEM,
38};
39
40static struct platform_device avila_flash = {
41 .name = "IXP4XX-Flash",
42 .id = 0,
43 .dev = {
44 .platform_data = &avila_flash_data,
45 },
46 .num_resources = 1,
47 .resource = &avila_flash_resource,
48};
49
50static struct ixp4xx_i2c_pins avila_i2c_gpio_pins = {
51 .sda_pin = AVILA_SDA_PIN,
52 .scl_pin = AVILA_SCL_PIN,
53};
54
55static struct platform_device avila_i2c_controller = {
56 .name = "IXP4XX-I2C",
57 .id = 0,
58 .dev = {
59 .platform_data = &avila_i2c_gpio_pins,
60 },
61 .num_resources = 0
62};
63
64static struct resource avila_uart_resources[] = {
65 {
66 .start = IXP4XX_UART1_BASE_PHYS,
67 .end = IXP4XX_UART1_BASE_PHYS + 0x0fff,
68 .flags = IORESOURCE_MEM
69 },
70 {
71 .start = IXP4XX_UART2_BASE_PHYS,
72 .end = IXP4XX_UART2_BASE_PHYS + 0x0fff,
73 .flags = IORESOURCE_MEM
74 }
75};
76
77static struct plat_serial8250_port avila_uart_data[] = {
78 {
79 .mapbase = IXP4XX_UART1_BASE_PHYS,
80 .membase = (char *)IXP4XX_UART1_BASE_VIRT + REG_OFFSET,
81 .irq = IRQ_IXP4XX_UART1,
82 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
83 .iotype = UPIO_MEM,
84 .regshift = 2,
85 .uartclk = IXP4XX_UART_XTAL,
86 },
87 {
88 .mapbase = IXP4XX_UART2_BASE_PHYS,
89 .membase = (char *)IXP4XX_UART2_BASE_VIRT + REG_OFFSET,
90 .irq = IRQ_IXP4XX_UART2,
91 .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST,
92 .iotype = UPIO_MEM,
93 .regshift = 2,
94 .uartclk = IXP4XX_UART_XTAL,
95 },
96 { },
97};
98
99static struct platform_device avila_uart = {
100 .name = "serial8250",
101 .id = PLAT8250_DEV_PLATFORM,
102 .dev.platform_data = avila_uart_data,
103 .num_resources = 2,
104 .resource = avila_uart_resources
105};
106
107static struct platform_device *avila_devices[] __initdata = {
108 &avila_i2c_controller,
109 &avila_flash,
110 &avila_uart
111};
112
113static void __init avila_init(void)
114{
115 ixp4xx_sys_init();
116
117 avila_flash_resource.start = IXP4XX_EXP_BUS_BASE(0);
118 avila_flash_resource.end =
119 IXP4XX_EXP_BUS_BASE(0) + ixp4xx_exp_bus_size - 1;
120
121 platform_add_devices(avila_devices, ARRAY_SIZE(avila_devices));
122}
123
124MACHINE_START(AVILA, "Gateworks Avila Network Platform")
125 /* Maintainer: Deepak Saxena <dsaxena@plexity.net> */
126 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
127 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
128 .map_io = ixp4xx_map_io,
129 .init_irq = ixp4xx_init_irq,
130 .timer = &ixp4xx_timer,
131 .boot_params = 0x0100,
132 .init_machine = avila_init,
133MACHINE_END
134
135 /*
136 * Loft is functionally equivalent to Avila except that it has a
137 * different number for the maximum PCI devices. The MACHINE
138 * structure below is identical to Avila except for the comment.
139 */
140#ifdef CONFIG_MACH_LOFT
141MACHINE_START(LOFT, "Giant Shoulder Inc Loft board")
142 /* Maintainer: Tom Billman <kernel@giantshoulderinc.com> */
143 .phys_io = IXP4XX_PERIPHERAL_BASE_PHYS,
144 .io_pg_offst = ((IXP4XX_PERIPHERAL_BASE_VIRT) >> 18) & 0xfffc,
145 .map_io = ixp4xx_map_io,
146 .init_irq = ixp4xx_init_irq,
147 .timer = &ixp4xx_timer,
148 .boot_params = 0x0100,
149 .init_machine = avila_init,
150MACHINE_END
151#endif
152
diff --git a/include/asm-arm/arch-ixp4xx/avila.h b/include/asm-arm/arch-ixp4xx/avila.h
new file mode 100644
index 000000000000..0dfea0ccd6ba
--- /dev/null
+++ b/include/asm-arm/arch-ixp4xx/avila.h
@@ -0,0 +1,39 @@
1/*
2 * include/asm-arm/arch-ixp4xx/avila.h
3 *
4 * Gateworks Avila platform specific definitions
5 *
6 * Author: Michael-Luke Jones <mlj28@cam.ac.uk>
7 *
8 * Based on ixdp425.h
9 * Author: Deepak Saxena <dsaxena@plexity.net>
10 *
11 * Copyright 2004 (c) MontaVista, Software, Inc.
12 *
13 * This file is licensed under the terms of the GNU General Public
14 * License version 2. This program is licensed "as is" without any
15 * warranty of any kind, whether express or implied.
16 */
17
18#ifndef __ASM_ARCH_HARDWARE_H__
19#error "Do not include this directly, instead #include <asm/hardware.h>"
20#endif
21
22#define AVILA_SDA_PIN 7
23#define AVILA_SCL_PIN 6
24
25/*
26 * AVILA PCI IRQs
27 */
28#define AVILA_PCI_MAX_DEV 4
29#define LOFT_PCI_MAX_DEV 6
30#define AVILA_PCI_IRQ_LINES 4
31
32
33/* PCI controller GPIO to IRQ pin mappings */
34#define AVILA_PCI_INTA_PIN 11
35#define AVILA_PCI_INTB_PIN 10
36#define AVILA_PCI_INTC_PIN 9
37#define AVILA_PCI_INTD_PIN 8
38
39
diff --git a/include/asm-arm/arch-ixp4xx/hardware.h b/include/asm-arm/arch-ixp4xx/hardware.h
index 6acb69c95ef9..88fd0877dcc1 100644
--- a/include/asm-arm/arch-ixp4xx/hardware.h
+++ b/include/asm-arm/arch-ixp4xx/hardware.h
@@ -42,6 +42,7 @@ extern unsigned int processor_id;
42 42
43/* Platform specific details */ 43/* Platform specific details */
44#include "ixdp425.h" 44#include "ixdp425.h"
45#include "avila.h"
45#include "coyote.h" 46#include "coyote.h"
46#include "prpmc1100.h" 47#include "prpmc1100.h"
47#include "nslu2.h" 48#include "nslu2.h"
diff --git a/include/asm-arm/arch-ixp4xx/irqs.h b/include/asm-arm/arch-ixp4xx/irqs.h
index f24b763ca18e..e44a563d00ff 100644
--- a/include/asm-arm/arch-ixp4xx/irqs.h
+++ b/include/asm-arm/arch-ixp4xx/irqs.h
@@ -79,6 +79,15 @@
79#define IRQ_IXDP425_PCI_INTD IRQ_IXP4XX_GPIO8 79#define IRQ_IXDP425_PCI_INTD IRQ_IXP4XX_GPIO8
80 80
81/* 81/*
82 * Gateworks Avila board IRQs
83 */
84#define IRQ_AVILA_PCI_INTA IRQ_IXP4XX_GPIO11
85#define IRQ_AVILA_PCI_INTB IRQ_IXP4XX_GPIO10
86#define IRQ_AVILA_PCI_INTC IRQ_IXP4XX_GPIO9
87#define IRQ_AVILA_PCI_INTD IRQ_IXP4XX_GPIO8
88
89
90/*
82 * PrPMC1100 Board IRQs 91 * PrPMC1100 Board IRQs
83 */ 92 */
84#define IRQ_PRPMC1100_PCI_INTA IRQ_IXP4XX_GPIO11 93#define IRQ_PRPMC1100_PCI_INTA IRQ_IXP4XX_GPIO11