diff options
38 files changed, 461 insertions, 911 deletions
diff --git a/arch/arm/mach-ixp4xx/Kconfig b/arch/arm/mach-ixp4xx/Kconfig index 264f4d59f898..9e5070da17ae 100644 --- a/arch/arm/mach-ixp4xx/Kconfig +++ b/arch/arm/mach-ixp4xx/Kconfig | |||
| @@ -179,21 +179,21 @@ config IXP4XX_INDIRECT_PCI | |||
| 179 | help | 179 | help |
| 180 | IXP4xx provides two methods of accessing PCI memory space: | 180 | IXP4xx provides two methods of accessing PCI memory space: |
| 181 | 181 | ||
| 182 | 1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB). | 182 | 1) A direct mapped window from 0x48000000 to 0x4BFFFFFF (64MB). |
| 183 | To access PCI via this space, we simply ioremap() the BAR | 183 | To access PCI via this space, we simply ioremap() the BAR |
| 184 | into the kernel and we can use the standard read[bwl]/write[bwl] | 184 | into the kernel and we can use the standard read[bwl]/write[bwl] |
| 185 | macros. This is the preferred method due to speed but it | 185 | macros. This is the preferred method due to speed but it |
| 186 | limits the system to just 64MB of PCI memory. This can be | 186 | limits the system to just 64MB of PCI memory. This can be |
| 187 | problematic if using video cards and other memory-heavy devices. | 187 | problematic if using video cards and other memory-heavy devices. |
| 188 | 188 | ||
| 189 | 2) If > 64MB of memory space is required, the IXP4xx can be | 189 | 2) If > 64MB of memory space is required, the IXP4xx can be |
| 190 | configured to use indirect registers to access PCI This allows | 190 | configured to use indirect registers to access the whole PCI |
| 191 | for up to 128MB (0x48000000 to 0x4fffffff) of memory on the bus. | 191 | memory space. This currently allows for up to 1 GB (0x10000000 |
| 192 | The disadvantage of this is that every PCI access requires | 192 | to 0x4FFFFFFF) of memory on the bus. The disadvantage of this |
| 193 | three local register accesses plus a spinlock, but in some | 193 | is that every PCI access requires three local register accesses |
| 194 | cases the performance hit is acceptable. In addition, you cannot | 194 | plus a spinlock, but in some cases the performance hit is |
| 195 | mmap() PCI devices in this case due to the indirect nature | 195 | acceptable. In addition, you cannot mmap() PCI devices in this |
| 196 | of the PCI window. | 196 | case due to the indirect nature of the PCI window. |
| 197 | 197 | ||
| 198 | By default, the direct method is used. Choose this option if you | 198 | By default, the direct method is used. Choose this option if you |
| 199 | need to use the indirect method instead. If you don't know | 199 | need to use the indirect method instead. If you don't know |
diff --git a/arch/arm/mach-ixp4xx/avila-pci.c b/arch/arm/mach-ixp4xx/avila-pci.c index 08d65dcdb5fe..845e1b500548 100644 --- a/arch/arm/mach-ixp4xx/avila-pci.c +++ b/arch/arm/mach-ixp4xx/avila-pci.c | |||
| @@ -22,40 +22,45 @@ | |||
| 22 | #include <linux/init.h> | 22 | #include <linux/init.h> |
| 23 | #include <linux/irq.h> | 23 | #include <linux/irq.h> |
| 24 | #include <linux/delay.h> | 24 | #include <linux/delay.h> |
| 25 | |||
| 26 | #include <asm/mach/pci.h> | 25 | #include <asm/mach/pci.h> |
| 27 | #include <asm/irq.h> | 26 | #include <asm/irq.h> |
| 28 | #include <mach/hardware.h> | 27 | #include <mach/hardware.h> |
| 29 | #include <asm/mach-types.h> | 28 | #include <asm/mach-types.h> |
| 30 | 29 | ||
| 30 | #define AVILA_MAX_DEV 4 | ||
| 31 | #define LOFT_MAX_DEV 6 | ||
| 32 | #define IRQ_LINES 4 | ||
| 33 | |||
| 34 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 35 | #define INTA 11 | ||
| 36 | #define INTB 10 | ||
| 37 | #define INTC 9 | ||
| 38 | #define INTD 8 | ||
| 39 | |||
| 31 | void __init avila_pci_preinit(void) | 40 | void __init avila_pci_preinit(void) |
| 32 | { | 41 | { |
| 33 | set_irq_type(IRQ_AVILA_PCI_INTA, IRQ_TYPE_LEVEL_LOW); | 42 | set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); |
| 34 | set_irq_type(IRQ_AVILA_PCI_INTB, IRQ_TYPE_LEVEL_LOW); | 43 | set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); |
| 35 | set_irq_type(IRQ_AVILA_PCI_INTC, IRQ_TYPE_LEVEL_LOW); | 44 | set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); |
| 36 | set_irq_type(IRQ_AVILA_PCI_INTD, IRQ_TYPE_LEVEL_LOW); | 45 | set_irq_type(IXP4XX_GPIO_IRQ(INTD), IRQ_TYPE_LEVEL_LOW); |
| 37 | |||
| 38 | ixp4xx_pci_preinit(); | 46 | ixp4xx_pci_preinit(); |
| 39 | } | 47 | } |
| 40 | 48 | ||
| 41 | static int __init avila_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 49 | static int __init avila_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 42 | { | 50 | { |
| 43 | static int pci_irq_table[AVILA_PCI_IRQ_LINES] = { | 51 | static int pci_irq_table[IRQ_LINES] = { |
| 44 | IRQ_AVILA_PCI_INTA, | 52 | IXP4XX_GPIO_IRQ(INTA), |
| 45 | IRQ_AVILA_PCI_INTB, | 53 | IXP4XX_GPIO_IRQ(INTB), |
| 46 | IRQ_AVILA_PCI_INTC, | 54 | IXP4XX_GPIO_IRQ(INTC), |
| 47 | IRQ_AVILA_PCI_INTD | 55 | IXP4XX_GPIO_IRQ(INTD) |
| 48 | }; | 56 | }; |
| 49 | 57 | ||
| 50 | int irq = -1; | ||
| 51 | |||
| 52 | if (slot >= 1 && | 58 | if (slot >= 1 && |
| 53 | slot <= (machine_is_loft() ? LOFT_PCI_MAX_DEV : AVILA_PCI_MAX_DEV) && | 59 | slot <= (machine_is_loft() ? LOFT_MAX_DEV : AVILA_MAX_DEV) && |
| 54 | pin >= 1 && pin <= AVILA_PCI_IRQ_LINES) { | 60 | pin >= 1 && pin <= IRQ_LINES) |
| 55 | irq = pci_irq_table[(slot + pin - 2) % 4]; | 61 | return pci_irq_table[(slot + pin - 2) % 4]; |
| 56 | } | ||
| 57 | 62 | ||
| 58 | return irq; | 63 | return -1; |
| 59 | } | 64 | } |
| 60 | 65 | ||
| 61 | struct hw_pci avila_pci __initdata = { | 66 | struct hw_pci avila_pci __initdata = { |
| @@ -75,4 +80,3 @@ int __init avila_pci_init(void) | |||
| 75 | } | 80 | } |
| 76 | 81 | ||
| 77 | subsys_initcall(avila_pci_init); | 82 | subsys_initcall(avila_pci_init); |
| 78 | |||
diff --git a/arch/arm/mach-ixp4xx/avila-setup.c b/arch/arm/mach-ixp4xx/avila-setup.c index 797995ce18b9..6e558a76457d 100644 --- a/arch/arm/mach-ixp4xx/avila-setup.c +++ b/arch/arm/mach-ixp4xx/avila-setup.c | |||
| @@ -19,7 +19,6 @@ | |||
| 19 | #include <linux/serial_8250.h> | 19 | #include <linux/serial_8250.h> |
| 20 | #include <linux/slab.h> | 20 | #include <linux/slab.h> |
| 21 | #include <linux/i2c-gpio.h> | 21 | #include <linux/i2c-gpio.h> |
| 22 | |||
| 23 | #include <asm/types.h> | 22 | #include <asm/types.h> |
| 24 | #include <asm/setup.h> | 23 | #include <asm/setup.h> |
| 25 | #include <asm/memory.h> | 24 | #include <asm/memory.h> |
| @@ -29,6 +28,9 @@ | |||
| 29 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
| 30 | #include <asm/mach/flash.h> | 29 | #include <asm/mach/flash.h> |
| 31 | 30 | ||
| 31 | #define AVILA_SDA_PIN 7 | ||
| 32 | #define AVILA_SCL_PIN 6 | ||
| 33 | |||
| 32 | static struct flash_platform_data avila_flash_data = { | 34 | static struct flash_platform_data avila_flash_data = { |
| 33 | .map_name = "cfi_probe", | 35 | .map_name = "cfi_probe", |
| 34 | .width = 2, | 36 | .width = 2, |
diff --git a/arch/arm/mach-ixp4xx/common-pci.c b/arch/arm/mach-ixp4xx/common-pci.c index 70afcfe5b881..c4a01594c761 100644 --- a/arch/arm/mach-ixp4xx/common-pci.c +++ b/arch/arm/mach-ixp4xx/common-pci.c | |||
| @@ -481,11 +481,7 @@ int ixp4xx_setup(int nr, struct pci_sys_data *sys) | |||
| 481 | 481 | ||
| 482 | res[1].name = "PCI Memory Space"; | 482 | res[1].name = "PCI Memory Space"; |
| 483 | res[1].start = PCIBIOS_MIN_MEM; | 483 | res[1].start = PCIBIOS_MIN_MEM; |
| 484 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 484 | res[1].end = PCIBIOS_MAX_MEM; |
| 485 | res[1].end = 0x4bffffff; | ||
| 486 | #else | ||
| 487 | res[1].end = 0x4fffffff; | ||
| 488 | #endif | ||
| 489 | res[1].flags = IORESOURCE_MEM; | 485 | res[1].flags = IORESOURCE_MEM; |
| 490 | 486 | ||
| 491 | request_resource(&ioport_resource, &res[0]); | 487 | request_resource(&ioport_resource, &res[0]); |
diff --git a/arch/arm/mach-ixp4xx/common.c b/arch/arm/mach-ixp4xx/common.c index cfd52fb341cb..3bbf40f6d964 100644 --- a/arch/arm/mach-ixp4xx/common.c +++ b/arch/arm/mach-ixp4xx/common.c | |||
| @@ -117,7 +117,7 @@ int gpio_to_irq(int gpio) | |||
| 117 | } | 117 | } |
| 118 | EXPORT_SYMBOL(gpio_to_irq); | 118 | EXPORT_SYMBOL(gpio_to_irq); |
| 119 | 119 | ||
| 120 | int irq_to_gpio(int irq) | 120 | int irq_to_gpio(unsigned int irq) |
| 121 | { | 121 | { |
| 122 | int gpio = (irq < 32) ? irq2gpio[irq] : -EINVAL; | 122 | int gpio = (irq < 32) ? irq2gpio[irq] : -EINVAL; |
| 123 | 123 | ||
diff --git a/arch/arm/mach-ixp4xx/coyote-pci.c b/arch/arm/mach-ixp4xx/coyote-pci.c index efddf01ed17b..b978ea8bd6f0 100644 --- a/arch/arm/mach-ixp4xx/coyote-pci.c +++ b/arch/arm/mach-ixp4xx/coyote-pci.c | |||
| @@ -18,27 +18,31 @@ | |||
| 18 | #include <linux/pci.h> | 18 | #include <linux/pci.h> |
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
| 21 | |||
| 22 | #include <asm/mach-types.h> | 21 | #include <asm/mach-types.h> |
| 23 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
| 24 | #include <asm/irq.h> | 23 | #include <asm/irq.h> |
| 25 | |||
| 26 | #include <asm/mach/pci.h> | 24 | #include <asm/mach/pci.h> |
| 27 | 25 | ||
| 26 | #define SLOT0_DEVID 14 | ||
| 27 | #define SLOT1_DEVID 15 | ||
| 28 | |||
| 29 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 30 | #define SLOT0_INTA 6 | ||
| 31 | #define SLOT1_INTA 11 | ||
| 32 | |||
| 28 | void __init coyote_pci_preinit(void) | 33 | void __init coyote_pci_preinit(void) |
| 29 | { | 34 | { |
| 30 | set_irq_type(IRQ_COYOTE_PCI_SLOT0, IRQ_TYPE_LEVEL_LOW); | 35 | set_irq_type(IXP4XX_GPIO_IRQ(SLOT0_INTA), IRQ_TYPE_LEVEL_LOW); |
| 31 | set_irq_type(IRQ_COYOTE_PCI_SLOT1, IRQ_TYPE_LEVEL_LOW); | 36 | set_irq_type(IXP4XX_GPIO_IRQ(SLOT1_INTA), IRQ_TYPE_LEVEL_LOW); |
| 32 | |||
| 33 | ixp4xx_pci_preinit(); | 37 | ixp4xx_pci_preinit(); |
| 34 | } | 38 | } |
| 35 | 39 | ||
| 36 | static int __init coyote_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 40 | static int __init coyote_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 37 | { | 41 | { |
| 38 | if (slot == COYOTE_PCI_SLOT0_DEVID) | 42 | if (slot == SLOT0_DEVID) |
| 39 | return IRQ_COYOTE_PCI_SLOT0; | 43 | return IXP4XX_GPIO_IRQ(SLOT0_INTA); |
| 40 | else if (slot == COYOTE_PCI_SLOT1_DEVID) | 44 | else if (slot == SLOT1_DEVID) |
| 41 | return IRQ_COYOTE_PCI_SLOT1; | 45 | return IXP4XX_GPIO_IRQ(SLOT1_INTA); |
| 42 | else return -1; | 46 | else return -1; |
| 43 | } | 47 | } |
| 44 | 48 | ||
diff --git a/arch/arm/mach-ixp4xx/coyote-setup.c b/arch/arm/mach-ixp4xx/coyote-setup.c index aab1954e2747..25bf5ad770ea 100644 --- a/arch/arm/mach-ixp4xx/coyote-setup.c +++ b/arch/arm/mach-ixp4xx/coyote-setup.c | |||
| @@ -25,6 +25,15 @@ | |||
| 25 | #include <asm/mach/arch.h> | 25 | #include <asm/mach/arch.h> |
| 26 | #include <asm/mach/flash.h> | 26 | #include <asm/mach/flash.h> |
| 27 | 27 | ||
| 28 | #define COYOTE_IDE_BASE_PHYS IXP4XX_EXP_BUS_BASE(3) | ||
| 29 | #define COYOTE_IDE_BASE_VIRT 0xFFFE1000 | ||
| 30 | #define COYOTE_IDE_REGION_SIZE 0x1000 | ||
| 31 | |||
| 32 | #define COYOTE_IDE_DATA_PORT 0xFFFE10E0 | ||
| 33 | #define COYOTE_IDE_CTRL_PORT 0xFFFE10FC | ||
| 34 | #define COYOTE_IDE_ERROR_PORT 0xFFFE10E2 | ||
| 35 | #define IRQ_COYOTE_IDE IRQ_IXP4XX_GPIO5 | ||
| 36 | |||
| 28 | static struct flash_platform_data coyote_flash_data = { | 37 | static struct flash_platform_data coyote_flash_data = { |
| 29 | .map_name = "cfi_probe", | 38 | .map_name = "cfi_probe", |
| 30 | .width = 2, | 39 | .width = 2, |
diff --git a/arch/arm/mach-ixp4xx/dsmg600-pci.c b/arch/arm/mach-ixp4xx/dsmg600-pci.c index 926d15f885fb..fa70fed462ba 100644 --- a/arch/arm/mach-ixp4xx/dsmg600-pci.c +++ b/arch/arm/mach-ixp4xx/dsmg600-pci.c | |||
| @@ -19,39 +19,45 @@ | |||
| 19 | #include <linux/pci.h> | 19 | #include <linux/pci.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | #include <linux/irq.h> | 21 | #include <linux/irq.h> |
| 22 | |||
| 23 | #include <asm/mach/pci.h> | 22 | #include <asm/mach/pci.h> |
| 24 | #include <asm/mach-types.h> | 23 | #include <asm/mach-types.h> |
| 25 | 24 | ||
| 25 | #define MAX_DEV 4 | ||
| 26 | #define IRQ_LINES 3 | ||
| 27 | |||
| 28 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 29 | #define INTA 11 | ||
| 30 | #define INTB 10 | ||
| 31 | #define INTC 9 | ||
| 32 | #define INTD 8 | ||
| 33 | #define INTE 7 | ||
| 34 | #define INTF 6 | ||
| 35 | |||
| 26 | void __init dsmg600_pci_preinit(void) | 36 | void __init dsmg600_pci_preinit(void) |
| 27 | { | 37 | { |
| 28 | set_irq_type(IRQ_DSMG600_PCI_INTA, IRQ_TYPE_LEVEL_LOW); | 38 | set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); |
| 29 | set_irq_type(IRQ_DSMG600_PCI_INTB, IRQ_TYPE_LEVEL_LOW); | 39 | set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); |
| 30 | set_irq_type(IRQ_DSMG600_PCI_INTC, IRQ_TYPE_LEVEL_LOW); | 40 | set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); |
| 31 | set_irq_type(IRQ_DSMG600_PCI_INTD, IRQ_TYPE_LEVEL_LOW); | 41 | set_irq_type(IXP4XX_GPIO_IRQ(INTD), IRQ_TYPE_LEVEL_LOW); |
| 32 | set_irq_type(IRQ_DSMG600_PCI_INTE, IRQ_TYPE_LEVEL_LOW); | 42 | set_irq_type(IXP4XX_GPIO_IRQ(INTE), IRQ_TYPE_LEVEL_LOW); |
| 33 | set_irq_type(IRQ_DSMG600_PCI_INTF, IRQ_TYPE_LEVEL_LOW); | 43 | set_irq_type(IXP4XX_GPIO_IRQ(INTF), IRQ_TYPE_LEVEL_LOW); |
| 34 | |||
| 35 | ixp4xx_pci_preinit(); | 44 | ixp4xx_pci_preinit(); |
| 36 | } | 45 | } |
| 37 | 46 | ||
| 38 | static int __init dsmg600_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 47 | static int __init dsmg600_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 39 | { | 48 | { |
| 40 | static int pci_irq_table[DSMG600_PCI_MAX_DEV][DSMG600_PCI_IRQ_LINES] = | 49 | static int pci_irq_table[MAX_DEV][IRQ_LINES] = { |
| 41 | { | 50 | { IXP4XX_GPIO_IRQ(INTE), -1, -1 }, |
| 42 | { IRQ_DSMG600_PCI_INTE, -1, -1 }, | 51 | { IXP4XX_GPIO_IRQ(INTA), -1, -1 }, |
| 43 | { IRQ_DSMG600_PCI_INTA, -1, -1 }, | 52 | { IXP4XX_GPIO_IRQ(INTB), IXP4XX_GPIO_IRQ(INTC), |
| 44 | { IRQ_DSMG600_PCI_INTB, IRQ_DSMG600_PCI_INTC, IRQ_DSMG600_PCI_INTD }, | 53 | IXP4XX_GPIO_IRQ(INTD) }, |
| 45 | { IRQ_DSMG600_PCI_INTF, -1, -1 }, | 54 | { IXP4XX_GPIO_IRQ(INTF), -1, -1 }, |
| 46 | }; | 55 | }; |
| 47 | 56 | ||
| 48 | int irq = -1; | 57 | if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) |
| 49 | 58 | return pci_irq_table[slot - 1][pin - 1]; | |
| 50 | if (slot >= 1 && slot <= DSMG600_PCI_MAX_DEV && | ||
| 51 | pin >= 1 && pin <= DSMG600_PCI_IRQ_LINES) | ||
| 52 | irq = pci_irq_table[slot-1][pin-1]; | ||
| 53 | 59 | ||
| 54 | return irq; | 60 | return -1; |
| 55 | } | 61 | } |
| 56 | 62 | ||
| 57 | struct hw_pci __initdata dsmg600_pci = { | 63 | struct hw_pci __initdata dsmg600_pci = { |
diff --git a/arch/arm/mach-ixp4xx/dsmg600-setup.c b/arch/arm/mach-ixp4xx/dsmg600-setup.c index a51bfa6978b6..7c1fa54a6145 100644 --- a/arch/arm/mach-ixp4xx/dsmg600-setup.c +++ b/arch/arm/mach-ixp4xx/dsmg600-setup.c | |||
| @@ -33,6 +33,23 @@ | |||
| 33 | #include <asm/mach/time.h> | 33 | #include <asm/mach/time.h> |
| 34 | #include <asm/gpio.h> | 34 | #include <asm/gpio.h> |
| 35 | 35 | ||
| 36 | #define DSMG600_SDA_PIN 5 | ||
| 37 | #define DSMG600_SCL_PIN 4 | ||
| 38 | |||
| 39 | /* DSM-G600 Timer Setting */ | ||
| 40 | #define DSMG600_FREQ 66000000 | ||
| 41 | |||
| 42 | /* Buttons */ | ||
| 43 | #define DSMG600_PB_GPIO 15 /* power button */ | ||
| 44 | #define DSMG600_RB_GPIO 3 /* reset button */ | ||
| 45 | |||
| 46 | /* Power control */ | ||
| 47 | #define DSMG600_PO_GPIO 2 /* power off */ | ||
| 48 | |||
| 49 | /* LEDs */ | ||
| 50 | #define DSMG600_LED_PWR_GPIO 0 | ||
| 51 | #define DSMG600_LED_WLAN_GPIO 14 | ||
| 52 | |||
| 36 | static struct flash_platform_data dsmg600_flash_data = { | 53 | static struct flash_platform_data dsmg600_flash_data = { |
| 37 | .map_name = "cfi_probe", | 54 | .map_name = "cfi_probe", |
| 38 | .width = 2, | 55 | .width = 2, |
diff --git a/arch/arm/mach-ixp4xx/fsg-pci.c b/arch/arm/mach-ixp4xx/fsg-pci.c index ca12a9ca0830..5a810c930624 100644 --- a/arch/arm/mach-ixp4xx/fsg-pci.c +++ b/arch/arm/mach-ixp4xx/fsg-pci.c | |||
| @@ -19,33 +19,38 @@ | |||
| 19 | #include <linux/pci.h> | 19 | #include <linux/pci.h> |
| 20 | #include <linux/init.h> | 20 | #include <linux/init.h> |
| 21 | #include <linux/irq.h> | 21 | #include <linux/irq.h> |
| 22 | |||
| 23 | #include <asm/mach/pci.h> | 22 | #include <asm/mach/pci.h> |
| 24 | #include <asm/mach-types.h> | 23 | #include <asm/mach-types.h> |
| 25 | 24 | ||
| 25 | #define MAX_DEV 3 | ||
| 26 | #define IRQ_LINES 3 | ||
| 27 | |||
| 28 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 29 | #define INTA 6 | ||
| 30 | #define INTB 7 | ||
| 31 | #define INTC 5 | ||
| 32 | |||
| 26 | void __init fsg_pci_preinit(void) | 33 | void __init fsg_pci_preinit(void) |
| 27 | { | 34 | { |
| 28 | set_irq_type(IRQ_FSG_PCI_INTA, IRQ_TYPE_LEVEL_LOW); | 35 | set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); |
| 29 | set_irq_type(IRQ_FSG_PCI_INTB, IRQ_TYPE_LEVEL_LOW); | 36 | set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); |
| 30 | set_irq_type(IRQ_FSG_PCI_INTC, IRQ_TYPE_LEVEL_LOW); | 37 | set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); |
| 31 | |||
| 32 | ixp4xx_pci_preinit(); | 38 | ixp4xx_pci_preinit(); |
| 33 | } | 39 | } |
| 34 | 40 | ||
| 35 | static int __init fsg_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 41 | static int __init fsg_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 36 | { | 42 | { |
| 37 | static int pci_irq_table[FSG_PCI_IRQ_LINES] = { | 43 | static int pci_irq_table[IRQ_LINES] = { |
| 38 | IRQ_FSG_PCI_INTC, | 44 | IXP4XX_GPIO_IRQ(INTC), |
| 39 | IRQ_FSG_PCI_INTB, | 45 | IXP4XX_GPIO_IRQ(INTB), |
| 40 | IRQ_FSG_PCI_INTA, | 46 | IXP4XX_GPIO_IRQ(INTA), |
| 41 | }; | 47 | }; |
| 42 | 48 | ||
| 43 | int irq = -1; | 49 | int irq = -1; |
| 44 | slot = slot - 11; | 50 | slot -= 11; |
| 45 | 51 | ||
| 46 | if (slot >= 1 && slot <= FSG_PCI_MAX_DEV && | 52 | if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) |
| 47 | pin >= 1 && pin <= FSG_PCI_IRQ_LINES) | 53 | irq = pci_irq_table[slot - 1]; |
| 48 | irq = pci_irq_table[(slot - 1)]; | ||
| 49 | printk(KERN_INFO "%s: Mapped slot %d pin %d to IRQ %d\n", | 54 | printk(KERN_INFO "%s: Mapped slot %d pin %d to IRQ %d\n", |
| 50 | __func__, slot, pin, irq); | 55 | __func__, slot, pin, irq); |
| 51 | 56 | ||
diff --git a/arch/arm/mach-ixp4xx/fsg-setup.c b/arch/arm/mach-ixp4xx/fsg-setup.c index 5add22fc9899..e7f4befba422 100644 --- a/arch/arm/mach-ixp4xx/fsg-setup.c +++ b/arch/arm/mach-ixp4xx/fsg-setup.c | |||
| @@ -24,12 +24,18 @@ | |||
| 24 | #include <linux/i2c.h> | 24 | #include <linux/i2c.h> |
| 25 | #include <linux/i2c-gpio.h> | 25 | #include <linux/i2c-gpio.h> |
| 26 | #include <linux/io.h> | 26 | #include <linux/io.h> |
| 27 | |||
| 28 | #include <asm/mach-types.h> | 27 | #include <asm/mach-types.h> |
| 29 | #include <asm/mach/arch.h> | 28 | #include <asm/mach/arch.h> |
| 30 | #include <asm/mach/flash.h> | 29 | #include <asm/mach/flash.h> |
| 31 | #include <asm/gpio.h> | 30 | #include <asm/gpio.h> |
| 32 | 31 | ||
| 32 | #define FSG_SDA_PIN 12 | ||
| 33 | #define FSG_SCL_PIN 13 | ||
| 34 | |||
| 35 | #define FSG_SB_GPIO 4 /* sync button */ | ||
| 36 | #define FSG_RB_GPIO 9 /* reset button */ | ||
| 37 | #define FSG_UB_GPIO 10 /* usb button */ | ||
| 38 | |||
| 33 | static struct flash_platform_data fsg_flash_data = { | 39 | static struct flash_platform_data fsg_flash_data = { |
| 34 | .map_name = "cfi_probe", | 40 | .map_name = "cfi_probe", |
| 35 | .width = 2, | 41 | .width = 2, |
diff --git a/arch/arm/mach-ixp4xx/goramo_mlr.c b/arch/arm/mach-ixp4xx/goramo_mlr.c index a733b8ff3cec..1c28048209c1 100644 --- a/arch/arm/mach-ixp4xx/goramo_mlr.c +++ b/arch/arm/mach-ixp4xx/goramo_mlr.c | |||
| @@ -17,29 +17,28 @@ | |||
| 17 | #include <asm/mach/flash.h> | 17 | #include <asm/mach/flash.h> |
| 18 | #include <asm/mach/pci.h> | 18 | #include <asm/mach/pci.h> |
| 19 | 19 | ||
| 20 | #define xgpio_irq(n) (IRQ_IXP4XX_GPIO ## n) | ||
| 21 | #define gpio_irq(n) xgpio_irq(n) | ||
| 22 | |||
| 23 | #define SLOT_ETHA 0x0B /* IDSEL = AD21 */ | 20 | #define SLOT_ETHA 0x0B /* IDSEL = AD21 */ |
| 24 | #define SLOT_ETHB 0x0C /* IDSEL = AD20 */ | 21 | #define SLOT_ETHB 0x0C /* IDSEL = AD20 */ |
| 25 | #define SLOT_MPCI 0x0D /* IDSEL = AD19 */ | 22 | #define SLOT_MPCI 0x0D /* IDSEL = AD19 */ |
| 26 | #define SLOT_NEC 0x0E /* IDSEL = AD18 */ | 23 | #define SLOT_NEC 0x0E /* IDSEL = AD18 */ |
| 27 | 24 | ||
| 28 | #define IRQ_ETHA IRQ_IXP4XX_GPIO4 | ||
| 29 | #define IRQ_ETHB IRQ_IXP4XX_GPIO5 | ||
| 30 | #define IRQ_NEC IRQ_IXP4XX_GPIO3 | ||
| 31 | #define IRQ_MPCI IRQ_IXP4XX_GPIO12 | ||
| 32 | |||
| 33 | /* GPIO lines */ | 25 | /* GPIO lines */ |
| 34 | #define GPIO_SCL 0 | 26 | #define GPIO_SCL 0 |
| 35 | #define GPIO_SDA 1 | 27 | #define GPIO_SDA 1 |
| 36 | #define GPIO_STR 2 | 28 | #define GPIO_STR 2 |
| 29 | #define GPIO_IRQ_NEC 3 | ||
| 30 | #define GPIO_IRQ_ETHA 4 | ||
| 31 | #define GPIO_IRQ_ETHB 5 | ||
| 37 | #define GPIO_HSS0_DCD_N 6 | 32 | #define GPIO_HSS0_DCD_N 6 |
| 38 | #define GPIO_HSS1_DCD_N 7 | 33 | #define GPIO_HSS1_DCD_N 7 |
| 34 | #define GPIO_UART0_DCD 8 | ||
| 35 | #define GPIO_UART1_DCD 9 | ||
| 39 | #define GPIO_HSS0_CTS_N 10 | 36 | #define GPIO_HSS0_CTS_N 10 |
| 40 | #define GPIO_HSS1_CTS_N 11 | 37 | #define GPIO_HSS1_CTS_N 11 |
| 38 | #define GPIO_IRQ_MPCI 12 | ||
| 41 | #define GPIO_HSS1_RTS_N 13 | 39 | #define GPIO_HSS1_RTS_N 13 |
| 42 | #define GPIO_HSS0_RTS_N 14 | 40 | #define GPIO_HSS0_RTS_N 14 |
| 41 | /* GPIO15 is not connected */ | ||
| 43 | 42 | ||
| 44 | /* Control outputs from 74HC4094 */ | 43 | /* Control outputs from 74HC4094 */ |
| 45 | #define CONTROL_HSS0_CLK_INT 0 | 44 | #define CONTROL_HSS0_CLK_INT 0 |
| @@ -152,7 +151,7 @@ static int hss_set_clock(int port, unsigned int clock_type) | |||
| 152 | 151 | ||
| 153 | static irqreturn_t hss_dcd_irq(int irq, void *pdev) | 152 | static irqreturn_t hss_dcd_irq(int irq, void *pdev) |
| 154 | { | 153 | { |
| 155 | int i, port = (irq == gpio_irq(GPIO_HSS1_DCD_N)); | 154 | int i, port = (irq == IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N)); |
| 156 | gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); | 155 | gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); |
| 157 | set_carrier_cb_tab[port](pdev, !i); | 156 | set_carrier_cb_tab[port](pdev, !i); |
| 158 | return IRQ_HANDLED; | 157 | return IRQ_HANDLED; |
| @@ -165,9 +164,9 @@ static int hss_open(int port, void *pdev, | |||
| 165 | int i, irq; | 164 | int i, irq; |
| 166 | 165 | ||
| 167 | if (!port) | 166 | if (!port) |
| 168 | irq = gpio_irq(GPIO_HSS0_DCD_N); | 167 | irq = IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N); |
| 169 | else | 168 | else |
| 170 | irq = gpio_irq(GPIO_HSS1_DCD_N); | 169 | irq = IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N); |
| 171 | 170 | ||
| 172 | gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); | 171 | gpio_line_get(port ? GPIO_HSS1_DCD_N : GPIO_HSS0_DCD_N, &i); |
| 173 | set_carrier_cb(pdev, !i); | 172 | set_carrier_cb(pdev, !i); |
| @@ -188,8 +187,8 @@ static int hss_open(int port, void *pdev, | |||
| 188 | 187 | ||
| 189 | static void hss_close(int port, void *pdev) | 188 | static void hss_close(int port, void *pdev) |
| 190 | { | 189 | { |
| 191 | free_irq(port ? gpio_irq(GPIO_HSS1_DCD_N) : gpio_irq(GPIO_HSS0_DCD_N), | 190 | free_irq(port ? IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N) : |
| 192 | pdev); | 191 | IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N), pdev); |
| 193 | set_carrier_cb_tab[!!port] = NULL; /* catch bugs */ | 192 | set_carrier_cb_tab[!!port] = NULL; /* catch bugs */ |
| 194 | 193 | ||
| 195 | set_control(port ? CONTROL_HSS1_DTR_N : CONTROL_HSS0_DTR_N, 1); | 194 | set_control(port ? CONTROL_HSS1_DTR_N : CONTROL_HSS0_DTR_N, 1); |
| @@ -421,8 +420,8 @@ static void __init gmlr_init(void) | |||
| 421 | gpio_line_config(GPIO_HSS1_RTS_N, IXP4XX_GPIO_OUT); | 420 | gpio_line_config(GPIO_HSS1_RTS_N, IXP4XX_GPIO_OUT); |
| 422 | gpio_line_config(GPIO_HSS0_DCD_N, IXP4XX_GPIO_IN); | 421 | gpio_line_config(GPIO_HSS0_DCD_N, IXP4XX_GPIO_IN); |
| 423 | gpio_line_config(GPIO_HSS1_DCD_N, IXP4XX_GPIO_IN); | 422 | gpio_line_config(GPIO_HSS1_DCD_N, IXP4XX_GPIO_IN); |
| 424 | set_irq_type(gpio_irq(GPIO_HSS0_DCD_N), IRQ_TYPE_EDGE_BOTH); | 423 | set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS0_DCD_N), IRQ_TYPE_EDGE_BOTH); |
| 425 | set_irq_type(gpio_irq(GPIO_HSS1_DCD_N), IRQ_TYPE_EDGE_BOTH); | 424 | set_irq_type(IXP4XX_GPIO_IRQ(GPIO_HSS1_DCD_N), IRQ_TYPE_EDGE_BOTH); |
| 426 | 425 | ||
| 427 | set_control(CONTROL_HSS0_DTR_N, 1); | 426 | set_control(CONTROL_HSS0_DTR_N, 1); |
| 428 | set_control(CONTROL_HSS1_DTR_N, 1); | 427 | set_control(CONTROL_HSS1_DTR_N, 1); |
| @@ -442,10 +441,10 @@ static void __init gmlr_init(void) | |||
| 442 | #ifdef CONFIG_PCI | 441 | #ifdef CONFIG_PCI |
| 443 | static void __init gmlr_pci_preinit(void) | 442 | static void __init gmlr_pci_preinit(void) |
| 444 | { | 443 | { |
| 445 | set_irq_type(IRQ_ETHA, IRQ_TYPE_LEVEL_LOW); | 444 | set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHA), IRQ_TYPE_LEVEL_LOW); |
| 446 | set_irq_type(IRQ_ETHB, IRQ_TYPE_LEVEL_LOW); | 445 | set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHB), IRQ_TYPE_LEVEL_LOW); |
| 447 | set_irq_type(IRQ_NEC, IRQ_TYPE_LEVEL_LOW); | 446 | set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_NEC), IRQ_TYPE_LEVEL_LOW); |
| 448 | set_irq_type(IRQ_MPCI, IRQ_TYPE_LEVEL_LOW); | 447 | set_irq_type(IXP4XX_GPIO_IRQ(GPIO_IRQ_MPCI), IRQ_TYPE_LEVEL_LOW); |
| 449 | ixp4xx_pci_preinit(); | 448 | ixp4xx_pci_preinit(); |
| 450 | } | 449 | } |
| 451 | 450 | ||
| @@ -466,10 +465,10 @@ static void __init gmlr_pci_postinit(void) | |||
| 466 | static int __init gmlr_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 465 | static int __init gmlr_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 467 | { | 466 | { |
| 468 | switch(slot) { | 467 | switch(slot) { |
| 469 | case SLOT_ETHA: return IRQ_ETHA; | 468 | case SLOT_ETHA: return IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHA); |
| 470 | case SLOT_ETHB: return IRQ_ETHB; | 469 | case SLOT_ETHB: return IXP4XX_GPIO_IRQ(GPIO_IRQ_ETHB); |
| 471 | case SLOT_NEC: return IRQ_NEC; | 470 | case SLOT_NEC: return IXP4XX_GPIO_IRQ(GPIO_IRQ_NEC); |
| 472 | default: return IRQ_MPCI; | 471 | default: return IXP4XX_GPIO_IRQ(GPIO_IRQ_MPCI); |
| 473 | } | 472 | } |
| 474 | } | 473 | } |
| 475 | 474 | ||
diff --git a/arch/arm/mach-ixp4xx/gtwx5715-pci.c b/arch/arm/mach-ixp4xx/gtwx5715-pci.c index 7b8a2c323840..25d2c333c204 100644 --- a/arch/arm/mach-ixp4xx/gtwx5715-pci.c +++ b/arch/arm/mach-ixp4xx/gtwx5715-pci.c | |||
| @@ -26,14 +26,16 @@ | |||
| 26 | #include <linux/init.h> | 26 | #include <linux/init.h> |
| 27 | #include <linux/delay.h> | 27 | #include <linux/delay.h> |
| 28 | #include <linux/irq.h> | 28 | #include <linux/irq.h> |
| 29 | |||
| 30 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 31 | #include <mach/hardware.h> | 30 | #include <mach/hardware.h> |
| 32 | #include <mach/gtwx5715.h> | ||
| 33 | #include <asm/mach/pci.h> | 31 | #include <asm/mach/pci.h> |
| 34 | 32 | ||
| 33 | #define SLOT0_DEVID 0 | ||
| 34 | #define SLOT1_DEVID 1 | ||
| 35 | #define INTA 10 /* slot 1 has INTA and INTB crossed */ | ||
| 36 | #define INTB 11 | ||
| 37 | |||
| 35 | /* | 38 | /* |
| 36 | * The exact GPIO pins and IRQs are defined in arch-ixp4xx/gtwx5715.h | ||
| 37 | * Slot 0 isn't actually populated with a card connector but | 39 | * Slot 0 isn't actually populated with a card connector but |
| 38 | * we initialize it anyway in case a future version has the | 40 | * we initialize it anyway in case a future version has the |
| 39 | * slot populated or someone with good soldering skills has | 41 | * slot populated or someone with good soldering skills has |
| @@ -41,32 +43,26 @@ | |||
| 41 | */ | 43 | */ |
| 42 | void __init gtwx5715_pci_preinit(void) | 44 | void __init gtwx5715_pci_preinit(void) |
| 43 | { | 45 | { |
| 44 | set_irq_type(GTWX5715_PCI_SLOT0_INTA_IRQ, IRQ_TYPE_LEVEL_LOW); | 46 | set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); |
| 45 | set_irq_type(GTWX5715_PCI_SLOT0_INTB_IRQ, IRQ_TYPE_LEVEL_LOW); | 47 | set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); |
| 46 | set_irq_type(GTWX5715_PCI_SLOT1_INTA_IRQ, IRQ_TYPE_LEVEL_LOW); | ||
| 47 | set_irq_type(GTWX5715_PCI_SLOT1_INTB_IRQ, IRQ_TYPE_LEVEL_LOW); | ||
| 48 | |||
| 49 | ixp4xx_pci_preinit(); | 48 | ixp4xx_pci_preinit(); |
| 50 | } | 49 | } |
| 51 | 50 | ||
| 52 | 51 | ||
| 53 | static int __init gtwx5715_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 52 | static int __init gtwx5715_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 54 | { | 53 | { |
| 55 | int rc; | 54 | int rc = -1; |
| 56 | static int gtwx5715_irqmap | ||
| 57 | [GTWX5715_PCI_SLOT_COUNT] | ||
| 58 | [GTWX5715_PCI_INT_PIN_COUNT] = { | ||
| 59 | {GTWX5715_PCI_SLOT0_INTA_IRQ, GTWX5715_PCI_SLOT0_INTB_IRQ}, | ||
| 60 | {GTWX5715_PCI_SLOT1_INTA_IRQ, GTWX5715_PCI_SLOT1_INTB_IRQ}, | ||
| 61 | }; | ||
| 62 | 55 | ||
| 63 | if (slot >= GTWX5715_PCI_SLOT_COUNT || | 56 | if ((slot == SLOT0_DEVID && pin == 1) || |
| 64 | pin >= GTWX5715_PCI_INT_PIN_COUNT) rc = -1; | 57 | (slot == SLOT1_DEVID && pin == 2)) |
| 65 | else | 58 | rc = IXP4XX_GPIO_IRQ(INTA); |
| 66 | rc = gtwx5715_irqmap[slot][pin-1]; | 59 | else if ((slot == SLOT0_DEVID && pin == 2) || |
| 60 | (slot == SLOT1_DEVID && pin == 1)) | ||
| 61 | rc = IXP4XX_GPIO_IRQ(INTB); | ||
| 67 | 62 | ||
| 68 | printk("%s: Mapped slot %d pin %d to IRQ %d\n", __func__, slot, pin, rc); | 63 | printk(KERN_INFO "%s: Mapped slot %d pin %d to IRQ %d\n", |
| 69 | return(rc); | 64 | __func__, slot, pin, rc); |
| 65 | return rc; | ||
| 70 | } | 66 | } |
| 71 | 67 | ||
| 72 | struct hw_pci gtwx5715_pci __initdata = { | 68 | struct hw_pci gtwx5715_pci __initdata = { |
| @@ -81,9 +77,7 @@ struct hw_pci gtwx5715_pci __initdata = { | |||
| 81 | int __init gtwx5715_pci_init(void) | 77 | int __init gtwx5715_pci_init(void) |
| 82 | { | 78 | { |
| 83 | if (machine_is_gtwx5715()) | 79 | if (machine_is_gtwx5715()) |
| 84 | { | ||
| 85 | pci_common_init(>wx5715_pci); | 80 | pci_common_init(>wx5715_pci); |
| 86 | } | ||
| 87 | 81 | ||
| 88 | return 0; | 82 | return 0; |
| 89 | } | 83 | } |
diff --git a/arch/arm/mach-ixp4xx/gtwx5715-setup.c b/arch/arm/mach-ixp4xx/gtwx5715-setup.c index 25c21d6665ec..0bc7185cb6f7 100644 --- a/arch/arm/mach-ixp4xx/gtwx5715-setup.c +++ b/arch/arm/mach-ixp4xx/gtwx5715-setup.c | |||
| @@ -28,7 +28,6 @@ | |||
| 28 | #include <linux/tty.h> | 28 | #include <linux/tty.h> |
| 29 | #include <linux/serial_8250.h> | 29 | #include <linux/serial_8250.h> |
| 30 | #include <linux/slab.h> | 30 | #include <linux/slab.h> |
| 31 | |||
| 32 | #include <asm/types.h> | 31 | #include <asm/types.h> |
| 33 | #include <asm/setup.h> | 32 | #include <asm/setup.h> |
| 34 | #include <asm/memory.h> | 33 | #include <asm/memory.h> |
| @@ -37,7 +36,34 @@ | |||
| 37 | #include <asm/mach-types.h> | 36 | #include <asm/mach-types.h> |
| 38 | #include <asm/mach/arch.h> | 37 | #include <asm/mach/arch.h> |
| 39 | #include <asm/mach/flash.h> | 38 | #include <asm/mach/flash.h> |
| 40 | #include <mach/gtwx5715.h> | 39 | |
| 40 | /* GPIO 5,6,7 and 12 are hard wired to the Kendin KS8995M Switch | ||
| 41 | and operate as an SPI type interface. The details of the interface | ||
| 42 | are available on Kendin/Micrel's web site. */ | ||
| 43 | |||
| 44 | #define GTWX5715_KSSPI_SELECT 5 | ||
| 45 | #define GTWX5715_KSSPI_TXD 6 | ||
| 46 | #define GTWX5715_KSSPI_CLOCK 7 | ||
| 47 | #define GTWX5715_KSSPI_RXD 12 | ||
| 48 | |||
| 49 | /* The "reset" button is wired to GPIO 3. | ||
| 50 | The GPIO is brought "low" when the button is pushed. */ | ||
| 51 | |||
| 52 | #define GTWX5715_BUTTON_GPIO 3 | ||
| 53 | |||
| 54 | /* Board Label Front Label | ||
| 55 | LED1 Power | ||
| 56 | LED2 Wireless-G | ||
| 57 | LED3 not populated but could be | ||
| 58 | LED4 Internet | ||
| 59 | LED5 - LED8 Controlled by KS8995M Switch | ||
| 60 | LED9 DMZ */ | ||
| 61 | |||
| 62 | #define GTWX5715_LED1_GPIO 2 | ||
| 63 | #define GTWX5715_LED2_GPIO 9 | ||
| 64 | #define GTWX5715_LED3_GPIO 8 | ||
| 65 | #define GTWX5715_LED4_GPIO 1 | ||
| 66 | #define GTWX5715_LED9_GPIO 4 | ||
| 41 | 67 | ||
| 42 | /* | 68 | /* |
| 43 | * Xscale UART registers are 32 bits wide with only the least | 69 | * Xscale UART registers are 32 bits wide with only the least |
diff --git a/arch/arm/mach-ixp4xx/include/mach/avila.h b/arch/arm/mach-ixp4xx/include/mach/avila.h deleted file mode 100644 index 1640cb61972b..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/avila.h +++ /dev/null | |||
| @@ -1,39 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/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 <mach/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/arch/arm/mach-ixp4xx/include/mach/coyote.h b/arch/arm/mach-ixp4xx/include/mach/coyote.h deleted file mode 100644 index 717ac6d16f55..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/coyote.h +++ /dev/null | |||
| @@ -1,33 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/coyote.h | ||
| 3 | * | ||
| 4 | * ADI Engineering platform specific definitions | ||
| 5 | * | ||
| 6 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
| 7 | * | ||
| 8 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
| 9 | * | ||
| 10 | * This file is licensed under the terms of the GNU General Public | ||
| 11 | * License version 2. This program is licensed "as is" without any | ||
| 12 | * warranty of any kind, whether express or implied. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
| 16 | #error "Do not include this directly, instead #include <mach/hardware.h>" | ||
| 17 | #endif | ||
| 18 | |||
| 19 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 20 | #define COYOTE_PCI_SLOT0_PIN 6 | ||
| 21 | #define COYOTE_PCI_SLOT1_PIN 11 | ||
| 22 | |||
| 23 | #define COYOTE_PCI_SLOT0_DEVID 14 | ||
| 24 | #define COYOTE_PCI_SLOT1_DEVID 15 | ||
| 25 | |||
| 26 | #define COYOTE_IDE_BASE_PHYS IXP4XX_EXP_BUS_BASE(3) | ||
| 27 | #define COYOTE_IDE_BASE_VIRT 0xFFFE1000 | ||
| 28 | #define COYOTE_IDE_REGION_SIZE 0x1000 | ||
| 29 | |||
| 30 | #define COYOTE_IDE_DATA_PORT 0xFFFE10E0 | ||
| 31 | #define COYOTE_IDE_CTRL_PORT 0xFFFE10FC | ||
| 32 | #define COYOTE_IDE_ERROR_PORT 0xFFFE10E2 | ||
| 33 | |||
diff --git a/arch/arm/mach-ixp4xx/include/mach/dsmg600.h b/arch/arm/mach-ixp4xx/include/mach/dsmg600.h deleted file mode 100644 index dc087a34a268..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/dsmg600.h +++ /dev/null | |||
| @@ -1,52 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * DSM-G600 platform specific definitions | ||
| 3 | * | ||
| 4 | * Copyright (C) 2006 Tower Technologies | ||
| 5 | * Author: Alessandro Zummo <a.zummo@towertech.it> | ||
| 6 | * | ||
| 7 | * based on ixdp425.h: | ||
| 8 | * Copyright 2004 (C) MontaVista, Software, Inc. | ||
| 9 | * | ||
| 10 | * This file is licensed under the terms of the GNU General Public | ||
| 11 | * License version 2. This program is licensed "as is" without any | ||
| 12 | * warranty of any kind, whether express or implied. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
| 16 | #error "Do not include this directly, instead #include <mach/hardware.h>" | ||
| 17 | #endif | ||
| 18 | |||
| 19 | #define DSMG600_SDA_PIN 5 | ||
| 20 | #define DSMG600_SCL_PIN 4 | ||
| 21 | |||
| 22 | /* | ||
| 23 | * DSMG600 PCI IRQs | ||
| 24 | */ | ||
| 25 | #define DSMG600_PCI_MAX_DEV 4 | ||
| 26 | #define DSMG600_PCI_IRQ_LINES 3 | ||
| 27 | |||
| 28 | |||
| 29 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 30 | #define DSMG600_PCI_INTA_PIN 11 | ||
| 31 | #define DSMG600_PCI_INTB_PIN 10 | ||
| 32 | #define DSMG600_PCI_INTC_PIN 9 | ||
| 33 | #define DSMG600_PCI_INTD_PIN 8 | ||
| 34 | #define DSMG600_PCI_INTE_PIN 7 | ||
| 35 | #define DSMG600_PCI_INTF_PIN 6 | ||
| 36 | |||
| 37 | /* DSM-G600 Timer Setting */ | ||
| 38 | #define DSMG600_FREQ 66000000 | ||
| 39 | |||
| 40 | /* Buttons */ | ||
| 41 | |||
| 42 | #define DSMG600_PB_GPIO 15 /* power button */ | ||
| 43 | #define DSMG600_RB_GPIO 3 /* reset button */ | ||
| 44 | |||
| 45 | /* Power control */ | ||
| 46 | |||
| 47 | #define DSMG600_PO_GPIO 2 /* power off */ | ||
| 48 | |||
| 49 | /* LEDs */ | ||
| 50 | |||
| 51 | #define DSMG600_LED_PWR_GPIO 0 | ||
| 52 | #define DSMG600_LED_WLAN_GPIO 14 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/fsg.h b/arch/arm/mach-ixp4xx/include/mach/fsg.h deleted file mode 100644 index 1f02b7e22a13..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/fsg.h +++ /dev/null | |||
| @@ -1,50 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/fsg.h | ||
| 3 | * | ||
| 4 | * Freecom FSG-3 platform specific definitions | ||
| 5 | * | ||
| 6 | * Author: Rod Whitby <rod@whitby.id.au> | ||
| 7 | * Author: Tomasz Chmielewski <mangoo@wpkg.org> | ||
| 8 | * Maintainers: http://www.nslu2-linux.org | ||
| 9 | * | ||
| 10 | * Based on coyote.h by | ||
| 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 <mach/hardware.h>" | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #define FSG_SDA_PIN 12 | ||
| 23 | #define FSG_SCL_PIN 13 | ||
| 24 | |||
| 25 | /* | ||
| 26 | * FSG PCI IRQs | ||
| 27 | */ | ||
| 28 | #define FSG_PCI_MAX_DEV 3 | ||
| 29 | #define FSG_PCI_IRQ_LINES 3 | ||
| 30 | |||
| 31 | |||
| 32 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 33 | #define FSG_PCI_INTA_PIN 6 | ||
| 34 | #define FSG_PCI_INTB_PIN 7 | ||
| 35 | #define FSG_PCI_INTC_PIN 5 | ||
| 36 | |||
| 37 | /* Buttons */ | ||
| 38 | |||
| 39 | #define FSG_SB_GPIO 4 /* sync button */ | ||
| 40 | #define FSG_RB_GPIO 9 /* reset button */ | ||
| 41 | #define FSG_UB_GPIO 10 /* usb button */ | ||
| 42 | |||
| 43 | /* LEDs */ | ||
| 44 | |||
| 45 | #define FSG_LED_WLAN_BIT 0 | ||
| 46 | #define FSG_LED_WAN_BIT 1 | ||
| 47 | #define FSG_LED_SATA_BIT 2 | ||
| 48 | #define FSG_LED_USB_BIT 4 | ||
| 49 | #define FSG_LED_RING_BIT 5 | ||
| 50 | #define FSG_LED_SYNC_BIT 7 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/gpio.h b/arch/arm/mach-ixp4xx/include/mach/gpio.h index cd5aec26c072..a5f87ded2f28 100644 --- a/arch/arm/mach-ixp4xx/include/mach/gpio.h +++ b/arch/arm/mach-ixp4xx/include/mach/gpio.h | |||
| @@ -70,7 +70,7 @@ static inline void gpio_set_value(unsigned gpio, int value) | |||
| 70 | #include <asm-generic/gpio.h> /* cansleep wrappers */ | 70 | #include <asm-generic/gpio.h> /* cansleep wrappers */ |
| 71 | 71 | ||
| 72 | extern int gpio_to_irq(int gpio); | 72 | extern int gpio_to_irq(int gpio); |
| 73 | extern int irq_to_gpio(int gpio); | 73 | extern int irq_to_gpio(unsigned int irq); |
| 74 | 74 | ||
| 75 | #endif | 75 | #endif |
| 76 | 76 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/gtwx5715.h b/arch/arm/mach-ixp4xx/include/mach/gtwx5715.h deleted file mode 100644 index 5d5e201cac7e..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/gtwx5715.h +++ /dev/null | |||
| @@ -1,116 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/gtwx5715.h | ||
| 3 | * | ||
| 4 | * Gemtek GTWX5715 Gateway (Linksys WRV54G) | ||
| 5 | * | ||
| 6 | * Copyright 2004 (c) George T. Joseph | ||
| 7 | * | ||
| 8 | * This program is free software; you can redistribute it and/or | ||
| 9 | * modify it under the terms of the GNU General Public License | ||
| 10 | * as published by the Free Software Foundation; either version 2 | ||
| 11 | * of the License, or (at your option) any later version. | ||
| 12 | * | ||
| 13 | * This program is distributed in the hope that it will be useful, | ||
| 14 | * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||
| 15 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | ||
| 16 | * GNU General Public License for more details. | ||
| 17 | * | ||
| 18 | * You should have received a copy of the GNU General Public License | ||
| 19 | * along with this program; if not, write to the Free Software | ||
| 20 | * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. | ||
| 21 | */ | ||
| 22 | |||
| 23 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
| 24 | #error "Do not include this directly, instead #include <mach/hardware.h>" | ||
| 25 | #endif | ||
| 26 | #include "irqs.h" | ||
| 27 | |||
| 28 | #define GTWX5715_GPIO0 0 | ||
| 29 | #define GTWX5715_GPIO1 1 | ||
| 30 | #define GTWX5715_GPIO2 2 | ||
| 31 | #define GTWX5715_GPIO3 3 | ||
| 32 | #define GTWX5715_GPIO4 4 | ||
| 33 | #define GTWX5715_GPIO5 5 | ||
| 34 | #define GTWX5715_GPIO6 6 | ||
| 35 | #define GTWX5715_GPIO7 7 | ||
| 36 | #define GTWX5715_GPIO8 8 | ||
| 37 | #define GTWX5715_GPIO9 9 | ||
| 38 | #define GTWX5715_GPIO10 10 | ||
| 39 | #define GTWX5715_GPIO11 11 | ||
| 40 | #define GTWX5715_GPIO12 12 | ||
| 41 | #define GTWX5715_GPIO13 13 | ||
| 42 | #define GTWX5715_GPIO14 14 | ||
| 43 | |||
| 44 | #define GTWX5715_GPIO0_IRQ IRQ_IXP4XX_GPIO0 | ||
| 45 | #define GTWX5715_GPIO1_IRQ IRQ_IXP4XX_GPIO1 | ||
| 46 | #define GTWX5715_GPIO2_IRQ IRQ_IXP4XX_GPIO2 | ||
| 47 | #define GTWX5715_GPIO3_IRQ IRQ_IXP4XX_GPIO3 | ||
| 48 | #define GTWX5715_GPIO4_IRQ IRQ_IXP4XX_GPIO4 | ||
| 49 | #define GTWX5715_GPIO5_IRQ IRQ_IXP4XX_GPIO5 | ||
| 50 | #define GTWX5715_GPIO6_IRQ IRQ_IXP4XX_GPIO6 | ||
| 51 | #define GTWX5715_GPIO7_IRQ IRQ_IXP4XX_GPIO7 | ||
| 52 | #define GTWX5715_GPIO8_IRQ IRQ_IXP4XX_GPIO8 | ||
| 53 | #define GTWX5715_GPIO9_IRQ IRQ_IXP4XX_GPIO9 | ||
| 54 | #define GTWX5715_GPIO10_IRQ IRQ_IXP4XX_GPIO10 | ||
| 55 | #define GTWX5715_GPIO11_IRQ IRQ_IXP4XX_GPIO11 | ||
| 56 | #define GTWX5715_GPIO12_IRQ IRQ_IXP4XX_GPIO12 | ||
| 57 | #define GTWX5715_GPIO13_IRQ IRQ_IXP4XX_SW_INT1 | ||
| 58 | #define GTWX5715_GPIO14_IRQ IRQ_IXP4XX_SW_INT2 | ||
| 59 | |||
| 60 | /* PCI controller GPIO to IRQ pin mappings | ||
| 61 | |||
| 62 | INTA INTB | ||
| 63 | SLOT 0 10 11 | ||
| 64 | SLOT 1 11 10 | ||
| 65 | |||
| 66 | */ | ||
| 67 | |||
| 68 | #define GTWX5715_PCI_SLOT0_DEVID 0 | ||
| 69 | #define GTWX5715_PCI_SLOT0_INTA_GPIO GTWX5715_GPIO10 | ||
| 70 | #define GTWX5715_PCI_SLOT0_INTB_GPIO GTWX5715_GPIO11 | ||
| 71 | #define GTWX5715_PCI_SLOT0_INTA_IRQ GTWX5715_GPIO10_IRQ | ||
| 72 | #define GTWX5715_PCI_SLOT0_INTB_IRQ GTWX5715_GPIO11_IRQ | ||
| 73 | |||
| 74 | #define GTWX5715_PCI_SLOT1_DEVID 1 | ||
| 75 | #define GTWX5715_PCI_SLOT1_INTA_GPIO GTWX5715_GPIO11 | ||
| 76 | #define GTWX5715_PCI_SLOT1_INTB_GPIO GTWX5715_GPIO10 | ||
| 77 | #define GTWX5715_PCI_SLOT1_INTA_IRQ GTWX5715_GPIO11_IRQ | ||
| 78 | #define GTWX5715_PCI_SLOT1_INTB_IRQ GTWX5715_GPIO10_IRQ | ||
| 79 | |||
| 80 | #define GTWX5715_PCI_SLOT_COUNT 2 | ||
| 81 | #define GTWX5715_PCI_INT_PIN_COUNT 2 | ||
| 82 | |||
| 83 | /* | ||
| 84 | * GPIO 5,6,7 and12 are hard wired to the Kendin KS8995M Switch | ||
| 85 | * and operate as an SPI type interface. The details of the interface | ||
| 86 | * are available on Kendin/Micrel's web site. | ||
| 87 | */ | ||
| 88 | |||
| 89 | #define GTWX5715_KSSPI_SELECT GTWX5715_GPIO5 | ||
| 90 | #define GTWX5715_KSSPI_TXD GTWX5715_GPIO6 | ||
| 91 | #define GTWX5715_KSSPI_CLOCK GTWX5715_GPIO7 | ||
| 92 | #define GTWX5715_KSSPI_RXD GTWX5715_GPIO12 | ||
| 93 | |||
| 94 | /* | ||
| 95 | * The "reset" button is wired to GPIO 3. | ||
| 96 | * The GPIO is brought "low" when the button is pushed. | ||
| 97 | */ | ||
| 98 | |||
| 99 | #define GTWX5715_BUTTON_GPIO GTWX5715_GPIO3 | ||
| 100 | #define GTWX5715_BUTTON_IRQ GTWX5715_GPIO3_IRQ | ||
| 101 | |||
| 102 | /* | ||
| 103 | * Board Label Front Label | ||
| 104 | * LED1 Power | ||
| 105 | * LED2 Wireless-G | ||
| 106 | * LED3 not populated but could be | ||
| 107 | * LED4 Internet | ||
| 108 | * LED5 - LED8 Controlled by KS8995M Switch | ||
| 109 | * LED9 DMZ | ||
| 110 | */ | ||
| 111 | |||
| 112 | #define GTWX5715_LED1_GPIO GTWX5715_GPIO2 | ||
| 113 | #define GTWX5715_LED2_GPIO GTWX5715_GPIO9 | ||
| 114 | #define GTWX5715_LED3_GPIO GTWX5715_GPIO8 | ||
| 115 | #define GTWX5715_LED4_GPIO GTWX5715_GPIO1 | ||
| 116 | #define GTWX5715_LED9_GPIO GTWX5715_GPIO4 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/hardware.h b/arch/arm/mach-ixp4xx/include/mach/hardware.h index f58a43a23966..f9d1c43e4a54 100644 --- a/arch/arm/mach-ixp4xx/include/mach/hardware.h +++ b/arch/arm/mach-ixp4xx/include/mach/hardware.h | |||
| @@ -18,7 +18,13 @@ | |||
| 18 | #define __ASM_ARCH_HARDWARE_H__ | 18 | #define __ASM_ARCH_HARDWARE_H__ |
| 19 | 19 | ||
| 20 | #define PCIBIOS_MIN_IO 0x00001000 | 20 | #define PCIBIOS_MIN_IO 0x00001000 |
| 21 | #define PCIBIOS_MIN_MEM (cpu_is_ixp43x() ? 0x40000000 : 0x48000000) | 21 | #ifdef CONFIG_IXP4XX_INDIRECT_PCI |
| 22 | #define PCIBIOS_MIN_MEM 0x10000000 /* 1 GB of indirect PCI MMIO space */ | ||
| 23 | #define PCIBIOS_MAX_MEM 0x4FFFFFFF | ||
| 24 | #else | ||
| 25 | #define PCIBIOS_MIN_MEM 0x48000000 /* 64 MB of PCI MMIO space */ | ||
| 26 | #define PCIBIOS_MAX_MEM 0x4BFFFFFF | ||
| 27 | #endif | ||
| 22 | 28 | ||
| 23 | /* | 29 | /* |
| 24 | * We override the standard dma-mask routines for bouncing. | 30 | * We override the standard dma-mask routines for bouncing. |
| @@ -37,14 +43,4 @@ | |||
| 37 | /* Platform helper functions and definitions */ | 43 | /* Platform helper functions and definitions */ |
| 38 | #include "platform.h" | 44 | #include "platform.h" |
| 39 | 45 | ||
| 40 | /* Platform specific details */ | ||
| 41 | #include "ixdp425.h" | ||
| 42 | #include "avila.h" | ||
| 43 | #include "coyote.h" | ||
| 44 | #include "prpmc1100.h" | ||
| 45 | #include "nslu2.h" | ||
| 46 | #include "nas100d.h" | ||
| 47 | #include "dsmg600.h" | ||
| 48 | #include "fsg.h" | ||
| 49 | |||
| 50 | #endif /* _ASM_ARCH_HARDWARE_H */ | 46 | #endif /* _ASM_ARCH_HARDWARE_H */ |
diff --git a/arch/arm/mach-ixp4xx/include/mach/io.h b/arch/arm/mach-ixp4xx/include/mach/io.h index 8a947d42a6f1..6ea7e2fb2701 100644 --- a/arch/arm/mach-ixp4xx/include/mach/io.h +++ b/arch/arm/mach-ixp4xx/include/mach/io.h | |||
| @@ -26,22 +26,20 @@ extern int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data); | |||
| 26 | /* | 26 | /* |
| 27 | * IXP4xx provides two methods of accessing PCI memory space: | 27 | * IXP4xx provides two methods of accessing PCI memory space: |
| 28 | * | 28 | * |
| 29 | * 1) A direct mapped window from 0x48000000 to 0x4bffffff (64MB). | 29 | * 1) A direct mapped window from 0x48000000 to 0x4BFFFFFF (64MB). |
| 30 | * To access PCI via this space, we simply ioremap() the BAR | 30 | * To access PCI via this space, we simply ioremap() the BAR |
| 31 | * into the kernel and we can use the standard read[bwl]/write[bwl] | 31 | * into the kernel and we can use the standard read[bwl]/write[bwl] |
| 32 | * macros. This is the preffered method due to speed but it | 32 | * macros. This is the preffered method due to speed but it |
| 33 | * limits the system to just 64MB of PCI memory. This can be | 33 | * limits the system to just 64MB of PCI memory. This can be |
| 34 | * problamatic if using video cards and other memory-heavy | 34 | * problematic if using video cards and other memory-heavy targets. |
| 35 | * targets. | ||
| 36 | * | ||
| 37 | * 2) If > 64MB of memory space is required, the IXP4xx can be configured | ||
| 38 | * to use indirect registers to access PCI (as we do below for I/O | ||
| 39 | * transactions). This allows for up to 128MB (0x48000000 to 0x4fffffff) | ||
| 40 | * of memory on the bus. The disadvantage of this is that every | ||
| 41 | * PCI access requires three local register accesses plus a spinlock, | ||
| 42 | * but in some cases the performance hit is acceptable. In addition, | ||
| 43 | * you cannot mmap() PCI devices in this case. | ||
| 44 | * | 35 | * |
| 36 | * 2) If > 64MB of memory space is required, the IXP4xx can use indirect | ||
| 37 | * registers to access the whole 4 GB of PCI memory space (as we do below | ||
| 38 | * for I/O transactions). This allows currently for up to 1 GB (0x10000000 | ||
| 39 | * to 0x4FFFFFFF) of memory on the bus. The disadvantage of this is that | ||
| 40 | * every PCI access requires three local register accesses plus a spinlock, | ||
| 41 | * but in some cases the performance hit is acceptable. In addition, you | ||
| 42 | * cannot mmap() PCI devices in this case. | ||
| 45 | */ | 43 | */ |
| 46 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 44 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 47 | 45 | ||
| @@ -55,48 +53,52 @@ extern int ixp4xx_pci_write(u32 addr, u32 cmd, u32 data); | |||
| 55 | * access registers. If something outside of PCI is ioremap'd, we | 53 | * access registers. If something outside of PCI is ioremap'd, we |
| 56 | * fallback to the default. | 54 | * fallback to the default. |
| 57 | */ | 55 | */ |
| 58 | static inline void __iomem * | 56 | |
| 59 | __ixp4xx_ioremap(unsigned long addr, size_t size, unsigned int mtype) | 57 | static inline int is_pci_memory(u32 addr) |
| 58 | { | ||
| 59 | return (addr >= PCIBIOS_MIN_MEM) && (addr <= 0x4FFFFFFF); | ||
| 60 | } | ||
| 61 | |||
| 62 | static inline void __iomem * __indirect_ioremap(unsigned long addr, size_t size, | ||
| 63 | unsigned int mtype) | ||
| 60 | { | 64 | { |
| 61 | if((addr < PCIBIOS_MIN_MEM) || (addr > 0x4fffffff)) | 65 | if (!is_pci_memory(addr)) |
| 62 | return __arm_ioremap(addr, size, mtype); | 66 | return __arm_ioremap(addr, size, mtype); |
| 63 | 67 | ||
| 64 | return (void __iomem *)addr; | 68 | return (void __iomem *)addr; |
| 65 | } | 69 | } |
| 66 | 70 | ||
| 67 | static inline void | 71 | static inline void __indirect_iounmap(void __iomem *addr) |
| 68 | __ixp4xx_iounmap(void __iomem *addr) | ||
| 69 | { | 72 | { |
| 70 | if ((__force u32)addr >= VMALLOC_START) | 73 | if (!is_pci_memory((__force u32)addr)) |
| 71 | __iounmap(addr); | 74 | __iounmap(addr); |
| 72 | } | 75 | } |
| 73 | 76 | ||
| 74 | #define __arch_ioremap(a, s, f) __ixp4xx_ioremap(a, s, f) | 77 | #define __arch_ioremap(a, s, f) __indirect_ioremap(a, s, f) |
| 75 | #define __arch_iounmap(a) __ixp4xx_iounmap(a) | 78 | #define __arch_iounmap(a) __indirect_iounmap(a) |
| 76 | 79 | ||
| 77 | #define writeb(v, p) __ixp4xx_writeb(v, p) | 80 | #define writeb(v, p) __indirect_writeb(v, p) |
| 78 | #define writew(v, p) __ixp4xx_writew(v, p) | 81 | #define writew(v, p) __indirect_writew(v, p) |
| 79 | #define writel(v, p) __ixp4xx_writel(v, p) | 82 | #define writel(v, p) __indirect_writel(v, p) |
| 80 | 83 | ||
| 81 | #define writesb(p, v, l) __ixp4xx_writesb(p, v, l) | 84 | #define writesb(p, v, l) __indirect_writesb(p, v, l) |
| 82 | #define writesw(p, v, l) __ixp4xx_writesw(p, v, l) | 85 | #define writesw(p, v, l) __indirect_writesw(p, v, l) |
| 83 | #define writesl(p, v, l) __ixp4xx_writesl(p, v, l) | 86 | #define writesl(p, v, l) __indirect_writesl(p, v, l) |
| 84 | |||
| 85 | #define readb(p) __ixp4xx_readb(p) | ||
| 86 | #define readw(p) __ixp4xx_readw(p) | ||
| 87 | #define readl(p) __ixp4xx_readl(p) | ||
| 88 | |||
| 89 | #define readsb(p, v, l) __ixp4xx_readsb(p, v, l) | ||
| 90 | #define readsw(p, v, l) __ixp4xx_readsw(p, v, l) | ||
| 91 | #define readsl(p, v, l) __ixp4xx_readsl(p, v, l) | ||
| 92 | 87 | ||
| 93 | static inline void | 88 | #define readb(p) __indirect_readb(p) |
| 94 | __ixp4xx_writeb(u8 value, volatile void __iomem *p) | 89 | #define readw(p) __indirect_readw(p) |
| 90 | #define readl(p) __indirect_readl(p) | ||
| 91 | |||
| 92 | #define readsb(p, v, l) __indirect_readsb(p, v, l) | ||
| 93 | #define readsw(p, v, l) __indirect_readsw(p, v, l) | ||
| 94 | #define readsl(p, v, l) __indirect_readsl(p, v, l) | ||
| 95 | |||
| 96 | static inline void __indirect_writeb(u8 value, volatile void __iomem *p) | ||
| 95 | { | 97 | { |
| 96 | u32 addr = (u32)p; | 98 | u32 addr = (u32)p; |
| 97 | u32 n, byte_enables, data; | 99 | u32 n, byte_enables, data; |
| 98 | 100 | ||
| 99 | if (addr >= VMALLOC_START) { | 101 | if (!is_pci_memory(addr)) { |
| 100 | __raw_writeb(value, addr); | 102 | __raw_writeb(value, addr); |
| 101 | return; | 103 | return; |
| 102 | } | 104 | } |
| @@ -107,20 +109,19 @@ __ixp4xx_writeb(u8 value, volatile void __iomem *p) | |||
| 107 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); | 109 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); |
| 108 | } | 110 | } |
| 109 | 111 | ||
| 110 | static inline void | 112 | static inline void __indirect_writesb(volatile void __iomem *bus_addr, |
| 111 | __ixp4xx_writesb(volatile void __iomem *bus_addr, const u8 *vaddr, int count) | 113 | const u8 *vaddr, int count) |
| 112 | { | 114 | { |
| 113 | while (count--) | 115 | while (count--) |
| 114 | writeb(*vaddr++, bus_addr); | 116 | writeb(*vaddr++, bus_addr); |
| 115 | } | 117 | } |
| 116 | 118 | ||
| 117 | static inline void | 119 | static inline void __indirect_writew(u16 value, volatile void __iomem *p) |
| 118 | __ixp4xx_writew(u16 value, volatile void __iomem *p) | ||
| 119 | { | 120 | { |
| 120 | u32 addr = (u32)p; | 121 | u32 addr = (u32)p; |
| 121 | u32 n, byte_enables, data; | 122 | u32 n, byte_enables, data; |
| 122 | 123 | ||
| 123 | if (addr >= VMALLOC_START) { | 124 | if (!is_pci_memory(addr)) { |
| 124 | __raw_writew(value, addr); | 125 | __raw_writew(value, addr); |
| 125 | return; | 126 | return; |
| 126 | } | 127 | } |
| @@ -131,18 +132,18 @@ __ixp4xx_writew(u16 value, volatile void __iomem *p) | |||
| 131 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); | 132 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_MEMWRITE, data); |
| 132 | } | 133 | } |
| 133 | 134 | ||
| 134 | static inline void | 135 | static inline void __indirect_writesw(volatile void __iomem *bus_addr, |
| 135 | __ixp4xx_writesw(volatile void __iomem *bus_addr, const u16 *vaddr, int count) | 136 | const u16 *vaddr, int count) |
| 136 | { | 137 | { |
| 137 | while (count--) | 138 | while (count--) |
| 138 | writew(*vaddr++, bus_addr); | 139 | writew(*vaddr++, bus_addr); |
| 139 | } | 140 | } |
| 140 | 141 | ||
| 141 | static inline void | 142 | static inline void __indirect_writel(u32 value, volatile void __iomem *p) |
| 142 | __ixp4xx_writel(u32 value, volatile void __iomem *p) | ||
| 143 | { | 143 | { |
| 144 | u32 addr = (__force u32)p; | 144 | u32 addr = (__force u32)p; |
| 145 | if (addr >= VMALLOC_START) { | 145 | |
| 146 | if (!is_pci_memory(addr)) { | ||
| 146 | __raw_writel(value, p); | 147 | __raw_writel(value, p); |
| 147 | return; | 148 | return; |
| 148 | } | 149 | } |
| @@ -150,20 +151,19 @@ __ixp4xx_writel(u32 value, volatile void __iomem *p) | |||
| 150 | ixp4xx_pci_write(addr, NP_CMD_MEMWRITE, value); | 151 | ixp4xx_pci_write(addr, NP_CMD_MEMWRITE, value); |
| 151 | } | 152 | } |
| 152 | 153 | ||
| 153 | static inline void | 154 | static inline void __indirect_writesl(volatile void __iomem *bus_addr, |
| 154 | __ixp4xx_writesl(volatile void __iomem *bus_addr, const u32 *vaddr, int count) | 155 | const u32 *vaddr, int count) |
| 155 | { | 156 | { |
| 156 | while (count--) | 157 | while (count--) |
| 157 | writel(*vaddr++, bus_addr); | 158 | writel(*vaddr++, bus_addr); |
| 158 | } | 159 | } |
| 159 | 160 | ||
| 160 | static inline unsigned char | 161 | static inline unsigned char __indirect_readb(const volatile void __iomem *p) |
| 161 | __ixp4xx_readb(const volatile void __iomem *p) | ||
| 162 | { | 162 | { |
| 163 | u32 addr = (u32)p; | 163 | u32 addr = (u32)p; |
| 164 | u32 n, byte_enables, data; | 164 | u32 n, byte_enables, data; |
| 165 | 165 | ||
| 166 | if (addr >= VMALLOC_START) | 166 | if (!is_pci_memory(addr)) |
| 167 | return __raw_readb(addr); | 167 | return __raw_readb(addr); |
| 168 | 168 | ||
| 169 | n = addr % 4; | 169 | n = addr % 4; |
| @@ -174,20 +174,19 @@ __ixp4xx_readb(const volatile void __iomem *p) | |||
| 174 | return data >> (8*n); | 174 | return data >> (8*n); |
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | static inline void | 177 | static inline void __indirect_readsb(const volatile void __iomem *bus_addr, |
| 178 | __ixp4xx_readsb(const volatile void __iomem *bus_addr, u8 *vaddr, u32 count) | 178 | u8 *vaddr, u32 count) |
| 179 | { | 179 | { |
| 180 | while (count--) | 180 | while (count--) |
| 181 | *vaddr++ = readb(bus_addr); | 181 | *vaddr++ = readb(bus_addr); |
| 182 | } | 182 | } |
| 183 | 183 | ||
| 184 | static inline unsigned short | 184 | static inline unsigned short __indirect_readw(const volatile void __iomem *p) |
| 185 | __ixp4xx_readw(const volatile void __iomem *p) | ||
| 186 | { | 185 | { |
| 187 | u32 addr = (u32)p; | 186 | u32 addr = (u32)p; |
| 188 | u32 n, byte_enables, data; | 187 | u32 n, byte_enables, data; |
| 189 | 188 | ||
| 190 | if (addr >= VMALLOC_START) | 189 | if (!is_pci_memory(addr)) |
| 191 | return __raw_readw(addr); | 190 | return __raw_readw(addr); |
| 192 | 191 | ||
| 193 | n = addr % 4; | 192 | n = addr % 4; |
| @@ -198,20 +197,19 @@ __ixp4xx_readw(const volatile void __iomem *p) | |||
| 198 | return data>>(8*n); | 197 | return data>>(8*n); |
| 199 | } | 198 | } |
| 200 | 199 | ||
| 201 | static inline void | 200 | static inline void __indirect_readsw(const volatile void __iomem *bus_addr, |
| 202 | __ixp4xx_readsw(const volatile void __iomem *bus_addr, u16 *vaddr, u32 count) | 201 | u16 *vaddr, u32 count) |
| 203 | { | 202 | { |
| 204 | while (count--) | 203 | while (count--) |
| 205 | *vaddr++ = readw(bus_addr); | 204 | *vaddr++ = readw(bus_addr); |
| 206 | } | 205 | } |
| 207 | 206 | ||
| 208 | static inline unsigned long | 207 | static inline unsigned long __indirect_readl(const volatile void __iomem *p) |
| 209 | __ixp4xx_readl(const volatile void __iomem *p) | ||
| 210 | { | 208 | { |
| 211 | u32 addr = (__force u32)p; | 209 | u32 addr = (__force u32)p; |
| 212 | u32 data; | 210 | u32 data; |
| 213 | 211 | ||
| 214 | if (addr >= VMALLOC_START) | 212 | if (!is_pci_memory(addr)) |
| 215 | return __raw_readl(p); | 213 | return __raw_readl(p); |
| 216 | 214 | ||
| 217 | if (ixp4xx_pci_read(addr, NP_CMD_MEMREAD, &data)) | 215 | if (ixp4xx_pci_read(addr, NP_CMD_MEMREAD, &data)) |
| @@ -220,8 +218,8 @@ __ixp4xx_readl(const volatile void __iomem *p) | |||
| 220 | return data; | 218 | return data; |
| 221 | } | 219 | } |
| 222 | 220 | ||
| 223 | static inline void | 221 | static inline void __indirect_readsl(const volatile void __iomem *bus_addr, |
| 224 | __ixp4xx_readsl(const volatile void __iomem *bus_addr, u32 *vaddr, u32 count) | 222 | u32 *vaddr, u32 count) |
| 225 | { | 223 | { |
| 226 | while (count--) | 224 | while (count--) |
| 227 | *vaddr++ = readl(bus_addr); | 225 | *vaddr++ = readl(bus_addr); |
| @@ -235,7 +233,7 @@ __ixp4xx_readsl(const volatile void __iomem *bus_addr, u32 *vaddr, u32 count) | |||
| 235 | #define memcpy_fromio(a,c,l) _memcpy_fromio((a),(c),(l)) | 233 | #define memcpy_fromio(a,c,l) _memcpy_fromio((a),(c),(l)) |
| 236 | #define memcpy_toio(c,a,l) _memcpy_toio((c),(a),(l)) | 234 | #define memcpy_toio(c,a,l) _memcpy_toio((c),(a),(l)) |
| 237 | 235 | ||
| 238 | #endif | 236 | #endif /* CONFIG_IXP4XX_INDIRECT_PCI */ |
| 239 | 237 | ||
| 240 | #ifndef CONFIG_PCI | 238 | #ifndef CONFIG_PCI |
| 241 | 239 | ||
| @@ -250,25 +248,8 @@ __ixp4xx_readsl(const volatile void __iomem *bus_addr, u32 *vaddr, u32 count) | |||
| 250 | * transaction. This means that we need to override the default | 248 | * transaction. This means that we need to override the default |
| 251 | * I/O functions. | 249 | * I/O functions. |
| 252 | */ | 250 | */ |
| 253 | #define outb(p, v) __ixp4xx_outb(p, v) | ||
| 254 | #define outw(p, v) __ixp4xx_outw(p, v) | ||
| 255 | #define outl(p, v) __ixp4xx_outl(p, v) | ||
| 256 | |||
| 257 | #define outsb(p, v, l) __ixp4xx_outsb(p, v, l) | ||
| 258 | #define outsw(p, v, l) __ixp4xx_outsw(p, v, l) | ||
| 259 | #define outsl(p, v, l) __ixp4xx_outsl(p, v, l) | ||
| 260 | 251 | ||
| 261 | #define inb(p) __ixp4xx_inb(p) | 252 | static inline void outb(u8 value, u32 addr) |
| 262 | #define inw(p) __ixp4xx_inw(p) | ||
| 263 | #define inl(p) __ixp4xx_inl(p) | ||
| 264 | |||
| 265 | #define insb(p, v, l) __ixp4xx_insb(p, v, l) | ||
| 266 | #define insw(p, v, l) __ixp4xx_insw(p, v, l) | ||
| 267 | #define insl(p, v, l) __ixp4xx_insl(p, v, l) | ||
| 268 | |||
| 269 | |||
| 270 | static inline void | ||
| 271 | __ixp4xx_outb(u8 value, u32 addr) | ||
| 272 | { | 253 | { |
| 273 | u32 n, byte_enables, data; | 254 | u32 n, byte_enables, data; |
| 274 | n = addr % 4; | 255 | n = addr % 4; |
| @@ -277,15 +258,13 @@ __ixp4xx_outb(u8 value, u32 addr) | |||
| 277 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_IOWRITE, data); | 258 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_IOWRITE, data); |
| 278 | } | 259 | } |
| 279 | 260 | ||
| 280 | static inline void | 261 | static inline void outsb(u32 io_addr, const u8 *vaddr, u32 count) |
| 281 | __ixp4xx_outsb(u32 io_addr, const u8 *vaddr, u32 count) | ||
| 282 | { | 262 | { |
| 283 | while (count--) | 263 | while (count--) |
| 284 | outb(*vaddr++, io_addr); | 264 | outb(*vaddr++, io_addr); |
| 285 | } | 265 | } |
| 286 | 266 | ||
| 287 | static inline void | 267 | static inline void outw(u16 value, u32 addr) |
| 288 | __ixp4xx_outw(u16 value, u32 addr) | ||
| 289 | { | 268 | { |
| 290 | u32 n, byte_enables, data; | 269 | u32 n, byte_enables, data; |
| 291 | n = addr % 4; | 270 | n = addr % 4; |
| @@ -294,28 +273,24 @@ __ixp4xx_outw(u16 value, u32 addr) | |||
| 294 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_IOWRITE, data); | 273 | ixp4xx_pci_write(addr, byte_enables | NP_CMD_IOWRITE, data); |
| 295 | } | 274 | } |
| 296 | 275 | ||
| 297 | static inline void | 276 | static inline void outsw(u32 io_addr, const u16 *vaddr, u32 count) |
| 298 | __ixp4xx_outsw(u32 io_addr, const u16 *vaddr, u32 count) | ||
| 299 | { | 277 | { |
| 300 | while (count--) | 278 | while (count--) |
| 301 | outw(cpu_to_le16(*vaddr++), io_addr); | 279 | outw(cpu_to_le16(*vaddr++), io_addr); |
| 302 | } | 280 | } |
| 303 | 281 | ||
| 304 | static inline void | 282 | static inline void outl(u32 value, u32 addr) |
| 305 | __ixp4xx_outl(u32 value, u32 addr) | ||
| 306 | { | 283 | { |
| 307 | ixp4xx_pci_write(addr, NP_CMD_IOWRITE, value); | 284 | ixp4xx_pci_write(addr, NP_CMD_IOWRITE, value); |
| 308 | } | 285 | } |
| 309 | 286 | ||
| 310 | static inline void | 287 | static inline void outsl(u32 io_addr, const u32 *vaddr, u32 count) |
| 311 | __ixp4xx_outsl(u32 io_addr, const u32 *vaddr, u32 count) | ||
| 312 | { | 288 | { |
| 313 | while (count--) | 289 | while (count--) |
| 314 | outl(*vaddr++, io_addr); | 290 | outl(cpu_to_le32(*vaddr++), io_addr); |
| 315 | } | 291 | } |
| 316 | 292 | ||
| 317 | static inline u8 | 293 | static inline u8 inb(u32 addr) |
| 318 | __ixp4xx_inb(u32 addr) | ||
| 319 | { | 294 | { |
| 320 | u32 n, byte_enables, data; | 295 | u32 n, byte_enables, data; |
| 321 | n = addr % 4; | 296 | n = addr % 4; |
| @@ -326,15 +301,13 @@ __ixp4xx_inb(u32 addr) | |||
| 326 | return data >> (8*n); | 301 | return data >> (8*n); |
| 327 | } | 302 | } |
| 328 | 303 | ||
| 329 | static inline void | 304 | static inline void insb(u32 io_addr, u8 *vaddr, u32 count) |
| 330 | __ixp4xx_insb(u32 io_addr, u8 *vaddr, u32 count) | ||
| 331 | { | 305 | { |
| 332 | while (count--) | 306 | while (count--) |
| 333 | *vaddr++ = inb(io_addr); | 307 | *vaddr++ = inb(io_addr); |
| 334 | } | 308 | } |
| 335 | 309 | ||
| 336 | static inline u16 | 310 | static inline u16 inw(u32 addr) |
| 337 | __ixp4xx_inw(u32 addr) | ||
| 338 | { | 311 | { |
| 339 | u32 n, byte_enables, data; | 312 | u32 n, byte_enables, data; |
| 340 | n = addr % 4; | 313 | n = addr % 4; |
| @@ -345,15 +318,13 @@ __ixp4xx_inw(u32 addr) | |||
| 345 | return data>>(8*n); | 318 | return data>>(8*n); |
| 346 | } | 319 | } |
| 347 | 320 | ||
| 348 | static inline void | 321 | static inline void insw(u32 io_addr, u16 *vaddr, u32 count) |
| 349 | __ixp4xx_insw(u32 io_addr, u16 *vaddr, u32 count) | ||
| 350 | { | 322 | { |
| 351 | while (count--) | 323 | while (count--) |
| 352 | *vaddr++ = le16_to_cpu(inw(io_addr)); | 324 | *vaddr++ = le16_to_cpu(inw(io_addr)); |
| 353 | } | 325 | } |
| 354 | 326 | ||
| 355 | static inline u32 | 327 | static inline u32 inl(u32 addr) |
| 356 | __ixp4xx_inl(u32 addr) | ||
| 357 | { | 328 | { |
| 358 | u32 data; | 329 | u32 data; |
| 359 | if (ixp4xx_pci_read(addr, NP_CMD_IOREAD, &data)) | 330 | if (ixp4xx_pci_read(addr, NP_CMD_IOREAD, &data)) |
| @@ -362,11 +333,10 @@ __ixp4xx_inl(u32 addr) | |||
| 362 | return data; | 333 | return data; |
| 363 | } | 334 | } |
| 364 | 335 | ||
| 365 | static inline void | 336 | static inline void insl(u32 io_addr, u32 *vaddr, u32 count) |
| 366 | __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count) | ||
| 367 | { | 337 | { |
| 368 | while (count--) | 338 | while (count--) |
| 369 | *vaddr++ = inl(io_addr); | 339 | *vaddr++ = le32_to_cpu(inl(io_addr)); |
| 370 | } | 340 | } |
| 371 | 341 | ||
| 372 | #define PIO_OFFSET 0x10000UL | 342 | #define PIO_OFFSET 0x10000UL |
| @@ -374,194 +344,183 @@ __ixp4xx_insl(u32 io_addr, u32 *vaddr, u32 count) | |||
| 374 | 344 | ||
| 375 | #define __is_io_address(p) (((unsigned long)p >= PIO_OFFSET) && \ | 345 | #define __is_io_address(p) (((unsigned long)p >= PIO_OFFSET) && \ |
| 376 | ((unsigned long)p <= (PIO_MASK + PIO_OFFSET))) | 346 | ((unsigned long)p <= (PIO_MASK + PIO_OFFSET))) |
| 377 | static inline unsigned int | 347 | |
| 378 | __ixp4xx_ioread8(const void __iomem *addr) | 348 | #define ioread8(p) ioread8(p) |
| 349 | static inline unsigned int ioread8(const void __iomem *addr) | ||
| 379 | { | 350 | { |
| 380 | unsigned long port = (unsigned long __force)addr; | 351 | unsigned long port = (unsigned long __force)addr; |
| 381 | if (__is_io_address(port)) | 352 | if (__is_io_address(port)) |
| 382 | return (unsigned int)__ixp4xx_inb(port & PIO_MASK); | 353 | return (unsigned int)inb(port & PIO_MASK); |
| 383 | else | 354 | else |
| 384 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 355 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 385 | return (unsigned int)__raw_readb(port); | 356 | return (unsigned int)__raw_readb(port); |
| 386 | #else | 357 | #else |
| 387 | return (unsigned int)__ixp4xx_readb(addr); | 358 | return (unsigned int)__indirect_readb(addr); |
| 388 | #endif | 359 | #endif |
| 389 | } | 360 | } |
| 390 | 361 | ||
| 391 | static inline void | 362 | #define ioread8_rep(p, v, c) ioread8_rep(p, v, c) |
| 392 | __ixp4xx_ioread8_rep(const void __iomem *addr, void *vaddr, u32 count) | 363 | static inline void ioread8_rep(const void __iomem *addr, void *vaddr, u32 count) |
| 393 | { | 364 | { |
| 394 | unsigned long port = (unsigned long __force)addr; | 365 | unsigned long port = (unsigned long __force)addr; |
| 395 | if (__is_io_address(port)) | 366 | if (__is_io_address(port)) |
| 396 | __ixp4xx_insb(port & PIO_MASK, vaddr, count); | 367 | insb(port & PIO_MASK, vaddr, count); |
| 397 | else | 368 | else |
| 398 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 369 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 399 | __raw_readsb(addr, vaddr, count); | 370 | __raw_readsb(addr, vaddr, count); |
| 400 | #else | 371 | #else |
| 401 | __ixp4xx_readsb(addr, vaddr, count); | 372 | __indirect_readsb(addr, vaddr, count); |
| 402 | #endif | 373 | #endif |
| 403 | } | 374 | } |
| 404 | 375 | ||
| 405 | static inline unsigned int | 376 | #define ioread16(p) ioread16(p) |
| 406 | __ixp4xx_ioread16(const void __iomem *addr) | 377 | static inline unsigned int ioread16(const void __iomem *addr) |
| 407 | { | 378 | { |
| 408 | unsigned long port = (unsigned long __force)addr; | 379 | unsigned long port = (unsigned long __force)addr; |
| 409 | if (__is_io_address(port)) | 380 | if (__is_io_address(port)) |
| 410 | return (unsigned int)__ixp4xx_inw(port & PIO_MASK); | 381 | return (unsigned int)inw(port & PIO_MASK); |
| 411 | else | 382 | else |
| 412 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 383 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 413 | return le16_to_cpu(__raw_readw((u32)port)); | 384 | return le16_to_cpu(__raw_readw((u32)port)); |
| 414 | #else | 385 | #else |
| 415 | return (unsigned int)__ixp4xx_readw(addr); | 386 | return (unsigned int)__indirect_readw(addr); |
| 416 | #endif | 387 | #endif |
| 417 | } | 388 | } |
| 418 | 389 | ||
| 419 | static inline void | 390 | #define ioread16_rep(p, v, c) ioread16_rep(p, v, c) |
| 420 | __ixp4xx_ioread16_rep(const void __iomem *addr, void *vaddr, u32 count) | 391 | static inline void ioread16_rep(const void __iomem *addr, void *vaddr, |
| 392 | u32 count) | ||
| 421 | { | 393 | { |
| 422 | unsigned long port = (unsigned long __force)addr; | 394 | unsigned long port = (unsigned long __force)addr; |
| 423 | if (__is_io_address(port)) | 395 | if (__is_io_address(port)) |
| 424 | __ixp4xx_insw(port & PIO_MASK, vaddr, count); | 396 | insw(port & PIO_MASK, vaddr, count); |
| 425 | else | 397 | else |
| 426 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 398 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 427 | __raw_readsw(addr, vaddr, count); | 399 | __raw_readsw(addr, vaddr, count); |
| 428 | #else | 400 | #else |
| 429 | __ixp4xx_readsw(addr, vaddr, count); | 401 | __indirect_readsw(addr, vaddr, count); |
| 430 | #endif | 402 | #endif |
| 431 | } | 403 | } |
| 432 | 404 | ||
| 433 | static inline unsigned int | 405 | #define ioread32(p) ioread32(p) |
| 434 | __ixp4xx_ioread32(const void __iomem *addr) | 406 | static inline unsigned int ioread32(const void __iomem *addr) |
| 435 | { | 407 | { |
| 436 | unsigned long port = (unsigned long __force)addr; | 408 | unsigned long port = (unsigned long __force)addr; |
| 437 | if (__is_io_address(port)) | 409 | if (__is_io_address(port)) |
| 438 | return (unsigned int)__ixp4xx_inl(port & PIO_MASK); | 410 | return (unsigned int)inl(port & PIO_MASK); |
| 439 | else { | 411 | else { |
| 440 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 412 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 441 | return le32_to_cpu((__force __le32)__raw_readl(addr)); | 413 | return le32_to_cpu((__force __le32)__raw_readl(addr)); |
| 442 | #else | 414 | #else |
| 443 | return (unsigned int)__ixp4xx_readl(addr); | 415 | return (unsigned int)__indirect_readl(addr); |
| 444 | #endif | 416 | #endif |
| 445 | } | 417 | } |
| 446 | } | 418 | } |
| 447 | 419 | ||
| 448 | static inline void | 420 | #define ioread32_rep(p, v, c) ioread32_rep(p, v, c) |
| 449 | __ixp4xx_ioread32_rep(const void __iomem *addr, void *vaddr, u32 count) | 421 | static inline void ioread32_rep(const void __iomem *addr, void *vaddr, |
| 422 | u32 count) | ||
| 450 | { | 423 | { |
| 451 | unsigned long port = (unsigned long __force)addr; | 424 | unsigned long port = (unsigned long __force)addr; |
| 452 | if (__is_io_address(port)) | 425 | if (__is_io_address(port)) |
| 453 | __ixp4xx_insl(port & PIO_MASK, vaddr, count); | 426 | insl(port & PIO_MASK, vaddr, count); |
| 454 | else | 427 | else |
| 455 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 428 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 456 | __raw_readsl(addr, vaddr, count); | 429 | __raw_readsl(addr, vaddr, count); |
| 457 | #else | 430 | #else |
| 458 | __ixp4xx_readsl(addr, vaddr, count); | 431 | __indirect_readsl(addr, vaddr, count); |
| 459 | #endif | 432 | #endif |
| 460 | } | 433 | } |
| 461 | 434 | ||
| 462 | static inline void | 435 | #define iowrite8(v, p) iowrite8(v, p) |
| 463 | __ixp4xx_iowrite8(u8 value, void __iomem *addr) | 436 | static inline void iowrite8(u8 value, void __iomem *addr) |
| 464 | { | 437 | { |
| 465 | unsigned long port = (unsigned long __force)addr; | 438 | unsigned long port = (unsigned long __force)addr; |
| 466 | if (__is_io_address(port)) | 439 | if (__is_io_address(port)) |
| 467 | __ixp4xx_outb(value, port & PIO_MASK); | 440 | outb(value, port & PIO_MASK); |
| 468 | else | 441 | else |
| 469 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 442 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 470 | __raw_writeb(value, port); | 443 | __raw_writeb(value, port); |
| 471 | #else | 444 | #else |
| 472 | __ixp4xx_writeb(value, addr); | 445 | __indirect_writeb(value, addr); |
| 473 | #endif | 446 | #endif |
| 474 | } | 447 | } |
| 475 | 448 | ||
| 476 | static inline void | 449 | #define iowrite8_rep(p, v, c) iowrite8_rep(p, v, c) |
| 477 | __ixp4xx_iowrite8_rep(void __iomem *addr, const void *vaddr, u32 count) | 450 | static inline void iowrite8_rep(void __iomem *addr, const void *vaddr, |
| 451 | u32 count) | ||
| 478 | { | 452 | { |
| 479 | unsigned long port = (unsigned long __force)addr; | 453 | unsigned long port = (unsigned long __force)addr; |
| 480 | if (__is_io_address(port)) | 454 | if (__is_io_address(port)) |
| 481 | __ixp4xx_outsb(port & PIO_MASK, vaddr, count); | 455 | outsb(port & PIO_MASK, vaddr, count); |
| 482 | else | 456 | else |
| 483 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 457 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 484 | __raw_writesb(addr, vaddr, count); | 458 | __raw_writesb(addr, vaddr, count); |
| 485 | #else | 459 | #else |
| 486 | __ixp4xx_writesb(addr, vaddr, count); | 460 | __indirect_writesb(addr, vaddr, count); |
| 487 | #endif | 461 | #endif |
| 488 | } | 462 | } |
| 489 | 463 | ||
| 490 | static inline void | 464 | #define iowrite16(v, p) iowrite16(v, p) |
| 491 | __ixp4xx_iowrite16(u16 value, void __iomem *addr) | 465 | static inline void iowrite16(u16 value, void __iomem *addr) |
| 492 | { | 466 | { |
| 493 | unsigned long port = (unsigned long __force)addr; | 467 | unsigned long port = (unsigned long __force)addr; |
| 494 | if (__is_io_address(port)) | 468 | if (__is_io_address(port)) |
| 495 | __ixp4xx_outw(value, port & PIO_MASK); | 469 | outw(value, port & PIO_MASK); |
| 496 | else | 470 | else |
| 497 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 471 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 498 | __raw_writew(cpu_to_le16(value), addr); | 472 | __raw_writew(cpu_to_le16(value), addr); |
| 499 | #else | 473 | #else |
| 500 | __ixp4xx_writew(value, addr); | 474 | __indirect_writew(value, addr); |
| 501 | #endif | 475 | #endif |
| 502 | } | 476 | } |
| 503 | 477 | ||
| 504 | static inline void | 478 | #define iowrite16_rep(p, v, c) iowrite16_rep(p, v, c) |
| 505 | __ixp4xx_iowrite16_rep(void __iomem *addr, const void *vaddr, u32 count) | 479 | static inline void iowrite16_rep(void __iomem *addr, const void *vaddr, |
| 480 | u32 count) | ||
| 506 | { | 481 | { |
| 507 | unsigned long port = (unsigned long __force)addr; | 482 | unsigned long port = (unsigned long __force)addr; |
| 508 | if (__is_io_address(port)) | 483 | if (__is_io_address(port)) |
| 509 | __ixp4xx_outsw(port & PIO_MASK, vaddr, count); | 484 | outsw(port & PIO_MASK, vaddr, count); |
| 510 | else | 485 | else |
| 511 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 486 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 512 | __raw_writesw(addr, vaddr, count); | 487 | __raw_writesw(addr, vaddr, count); |
| 513 | #else | 488 | #else |
| 514 | __ixp4xx_writesw(addr, vaddr, count); | 489 | __indirect_writesw(addr, vaddr, count); |
| 515 | #endif | 490 | #endif |
| 516 | } | 491 | } |
| 517 | 492 | ||
| 518 | static inline void | 493 | #define iowrite32(v, p) iowrite32(v, p) |
| 519 | __ixp4xx_iowrite32(u32 value, void __iomem *addr) | 494 | static inline void iowrite32(u32 value, void __iomem *addr) |
| 520 | { | 495 | { |
| 521 | unsigned long port = (unsigned long __force)addr; | 496 | unsigned long port = (unsigned long __force)addr; |
| 522 | if (__is_io_address(port)) | 497 | if (__is_io_address(port)) |
| 523 | __ixp4xx_outl(value, port & PIO_MASK); | 498 | outl(value, port & PIO_MASK); |
| 524 | else | 499 | else |
| 525 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 500 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 526 | __raw_writel((u32 __force)cpu_to_le32(value), addr); | 501 | __raw_writel((u32 __force)cpu_to_le32(value), addr); |
| 527 | #else | 502 | #else |
| 528 | __ixp4xx_writel(value, addr); | 503 | __indirect_writel(value, addr); |
| 529 | #endif | 504 | #endif |
| 530 | } | 505 | } |
| 531 | 506 | ||
| 532 | static inline void | 507 | #define iowrite32_rep(p, v, c) iowrite32_rep(p, v, c) |
| 533 | __ixp4xx_iowrite32_rep(void __iomem *addr, const void *vaddr, u32 count) | 508 | static inline void iowrite32_rep(void __iomem *addr, const void *vaddr, |
| 509 | u32 count) | ||
| 534 | { | 510 | { |
| 535 | unsigned long port = (unsigned long __force)addr; | 511 | unsigned long port = (unsigned long __force)addr; |
| 536 | if (__is_io_address(port)) | 512 | if (__is_io_address(port)) |
| 537 | __ixp4xx_outsl(port & PIO_MASK, vaddr, count); | 513 | outsl(port & PIO_MASK, vaddr, count); |
| 538 | else | 514 | else |
| 539 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI | 515 | #ifndef CONFIG_IXP4XX_INDIRECT_PCI |
| 540 | __raw_writesl(addr, vaddr, count); | 516 | __raw_writesl(addr, vaddr, count); |
| 541 | #else | 517 | #else |
| 542 | __ixp4xx_writesl(addr, vaddr, count); | 518 | __indirect_writesl(addr, vaddr, count); |
| 543 | #endif | 519 | #endif |
| 544 | } | 520 | } |
| 545 | 521 | ||
| 546 | #define ioread8(p) __ixp4xx_ioread8(p) | ||
| 547 | #define ioread16(p) __ixp4xx_ioread16(p) | ||
| 548 | #define ioread32(p) __ixp4xx_ioread32(p) | ||
| 549 | |||
| 550 | #define ioread8_rep(p, v, c) __ixp4xx_ioread8_rep(p, v, c) | ||
| 551 | #define ioread16_rep(p, v, c) __ixp4xx_ioread16_rep(p, v, c) | ||
| 552 | #define ioread32_rep(p, v, c) __ixp4xx_ioread32_rep(p, v, c) | ||
| 553 | |||
| 554 | #define iowrite8(v,p) __ixp4xx_iowrite8(v,p) | ||
| 555 | #define iowrite16(v,p) __ixp4xx_iowrite16(v,p) | ||
| 556 | #define iowrite32(v,p) __ixp4xx_iowrite32(v,p) | ||
| 557 | |||
| 558 | #define iowrite8_rep(p, v, c) __ixp4xx_iowrite8_rep(p, v, c) | ||
| 559 | #define iowrite16_rep(p, v, c) __ixp4xx_iowrite16_rep(p, v, c) | ||
| 560 | #define iowrite32_rep(p, v, c) __ixp4xx_iowrite32_rep(p, v, c) | ||
| 561 | |||
| 562 | #define ioport_map(port, nr) ((void __iomem*)(port + PIO_OFFSET)) | 522 | #define ioport_map(port, nr) ((void __iomem*)(port + PIO_OFFSET)) |
| 563 | #define ioport_unmap(addr) | 523 | #define ioport_unmap(addr) |
| 564 | #endif // !CONFIG_PCI | 524 | #endif /* CONFIG_PCI */ |
| 565 | |||
| 566 | #endif // __ASM_ARM_ARCH_IO_H | ||
| 567 | 525 | ||
| 526 | #endif /* __ASM_ARM_ARCH_IO_H */ | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/irqs.h b/arch/arm/mach-ixp4xx/include/mach/irqs.h index f4d74de1566a..7e6d4cce7c27 100644 --- a/arch/arm/mach-ixp4xx/include/mach/irqs.h +++ b/arch/arm/mach-ixp4xx/include/mach/irqs.h | |||
| @@ -15,7 +15,6 @@ | |||
| 15 | #ifndef _ARCH_IXP4XX_IRQS_H_ | 15 | #ifndef _ARCH_IXP4XX_IRQS_H_ |
| 16 | #define _ARCH_IXP4XX_IRQS_H_ | 16 | #define _ARCH_IXP4XX_IRQS_H_ |
| 17 | 17 | ||
| 18 | |||
| 19 | #define IRQ_IXP4XX_NPEA 0 | 18 | #define IRQ_IXP4XX_NPEA 0 |
| 20 | #define IRQ_IXP4XX_NPEB 1 | 19 | #define IRQ_IXP4XX_NPEB 1 |
| 21 | #define IRQ_IXP4XX_NPEC 2 | 20 | #define IRQ_IXP4XX_NPEC 2 |
| @@ -59,6 +58,9 @@ | |||
| 59 | #define IRQ_IXP4XX_MCU_ECC 61 | 58 | #define IRQ_IXP4XX_MCU_ECC 61 |
| 60 | #define IRQ_IXP4XX_EXP_PE 62 | 59 | #define IRQ_IXP4XX_EXP_PE 62 |
| 61 | 60 | ||
| 61 | #define _IXP4XX_GPIO_IRQ(n) (IRQ_IXP4XX_GPIO ## n) | ||
| 62 | #define IXP4XX_GPIO_IRQ(n) _IXP4XX_GPIO_IRQ(n) | ||
| 63 | |||
| 62 | /* | 64 | /* |
| 63 | * Only first 32 sources are valid if running on IXP42x systems | 65 | * Only first 32 sources are valid if running on IXP42x systems |
| 64 | */ | 66 | */ |
| @@ -70,69 +72,4 @@ | |||
| 70 | 72 | ||
| 71 | #define XSCALE_PMU_IRQ (IRQ_IXP4XX_XSCALE_PMU) | 73 | #define XSCALE_PMU_IRQ (IRQ_IXP4XX_XSCALE_PMU) |
| 72 | 74 | ||
| 73 | /* | ||
| 74 | * IXDP425 board IRQs | ||
| 75 | */ | ||
| 76 | #define IRQ_IXDP425_PCI_INTA IRQ_IXP4XX_GPIO11 | ||
| 77 | #define IRQ_IXDP425_PCI_INTB IRQ_IXP4XX_GPIO10 | ||
| 78 | #define IRQ_IXDP425_PCI_INTC IRQ_IXP4XX_GPIO9 | ||
| 79 | #define IRQ_IXDP425_PCI_INTD IRQ_IXP4XX_GPIO8 | ||
| 80 | |||
| 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 | /* | ||
| 91 | * PrPMC1100 Board IRQs | ||
| 92 | */ | ||
| 93 | #define IRQ_PRPMC1100_PCI_INTA IRQ_IXP4XX_GPIO11 | ||
| 94 | #define IRQ_PRPMC1100_PCI_INTB IRQ_IXP4XX_GPIO10 | ||
| 95 | #define IRQ_PRPMC1100_PCI_INTC IRQ_IXP4XX_GPIO9 | ||
| 96 | #define IRQ_PRPMC1100_PCI_INTD IRQ_IXP4XX_GPIO8 | ||
| 97 | |||
| 98 | /* | ||
| 99 | * ADI Coyote Board IRQs | ||
| 100 | */ | ||
| 101 | #define IRQ_COYOTE_PCI_SLOT0 IRQ_IXP4XX_GPIO6 | ||
| 102 | #define IRQ_COYOTE_PCI_SLOT1 IRQ_IXP4XX_GPIO11 | ||
| 103 | #define IRQ_COYOTE_IDE IRQ_IXP4XX_GPIO5 | ||
| 104 | |||
| 105 | /* | ||
| 106 | * NSLU2 board IRQs | ||
| 107 | */ | ||
| 108 | #define IRQ_NSLU2_PCI_INTA IRQ_IXP4XX_GPIO11 | ||
| 109 | #define IRQ_NSLU2_PCI_INTB IRQ_IXP4XX_GPIO10 | ||
| 110 | #define IRQ_NSLU2_PCI_INTC IRQ_IXP4XX_GPIO9 | ||
| 111 | |||
| 112 | /* | ||
| 113 | * NAS100D board IRQs | ||
| 114 | */ | ||
| 115 | #define IRQ_NAS100D_PCI_INTA IRQ_IXP4XX_GPIO11 | ||
| 116 | #define IRQ_NAS100D_PCI_INTB IRQ_IXP4XX_GPIO10 | ||
| 117 | #define IRQ_NAS100D_PCI_INTC IRQ_IXP4XX_GPIO9 | ||
| 118 | #define IRQ_NAS100D_PCI_INTD IRQ_IXP4XX_GPIO8 | ||
| 119 | #define IRQ_NAS100D_PCI_INTE IRQ_IXP4XX_GPIO7 | ||
| 120 | |||
| 121 | /* | ||
| 122 | * D-Link DSM-G600 RevA board IRQs | ||
| 123 | */ | ||
| 124 | #define IRQ_DSMG600_PCI_INTA IRQ_IXP4XX_GPIO11 | ||
| 125 | #define IRQ_DSMG600_PCI_INTB IRQ_IXP4XX_GPIO10 | ||
| 126 | #define IRQ_DSMG600_PCI_INTC IRQ_IXP4XX_GPIO9 | ||
| 127 | #define IRQ_DSMG600_PCI_INTD IRQ_IXP4XX_GPIO8 | ||
| 128 | #define IRQ_DSMG600_PCI_INTE IRQ_IXP4XX_GPIO7 | ||
| 129 | #define IRQ_DSMG600_PCI_INTF IRQ_IXP4XX_GPIO6 | ||
| 130 | |||
| 131 | /* | ||
| 132 | * Freecom FSG-3 Board IRQs | ||
| 133 | */ | ||
| 134 | #define IRQ_FSG_PCI_INTA IRQ_IXP4XX_GPIO6 | ||
| 135 | #define IRQ_FSG_PCI_INTB IRQ_IXP4XX_GPIO7 | ||
| 136 | #define IRQ_FSG_PCI_INTC IRQ_IXP4XX_GPIO5 | ||
| 137 | |||
| 138 | #endif | 75 | #endif |
diff --git a/arch/arm/mach-ixp4xx/include/mach/ixdp425.h b/arch/arm/mach-ixp4xx/include/mach/ixdp425.h deleted file mode 100644 index 2cafe65ebfee..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/ixdp425.h +++ /dev/null | |||
| @@ -1,39 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/ixdp425.h | ||
| 3 | * | ||
| 4 | * IXDP425 platform specific definitions | ||
| 5 | * | ||
| 6 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
| 7 | * | ||
| 8 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
| 9 | * | ||
| 10 | * This file is licensed under the terms of the GNU General Public | ||
| 11 | * License version 2. This program is licensed "as is" without any | ||
| 12 | * warranty of any kind, whether express or implied. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
| 16 | #error "Do not include this directly, instead #include <mach/hardware.h>" | ||
| 17 | #endif | ||
| 18 | |||
| 19 | #define IXDP425_SDA_PIN 7 | ||
| 20 | #define IXDP425_SCL_PIN 6 | ||
| 21 | |||
| 22 | /* | ||
| 23 | * IXDP425 PCI IRQs | ||
| 24 | */ | ||
| 25 | #define IXDP425_PCI_MAX_DEV 4 | ||
| 26 | #define IXDP425_PCI_IRQ_LINES 4 | ||
| 27 | |||
| 28 | |||
| 29 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 30 | #define IXDP425_PCI_INTA_PIN 11 | ||
| 31 | #define IXDP425_PCI_INTB_PIN 10 | ||
| 32 | #define IXDP425_PCI_INTC_PIN 9 | ||
| 33 | #define IXDP425_PCI_INTD_PIN 8 | ||
| 34 | |||
| 35 | /* NAND Flash pins */ | ||
| 36 | #define IXDP425_NAND_NCE_PIN 12 | ||
| 37 | |||
| 38 | #define IXDP425_NAND_CMD_BYTE 0x01 | ||
| 39 | #define IXDP425_NAND_ADDR_BYTE 0x02 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/nas100d.h b/arch/arm/mach-ixp4xx/include/mach/nas100d.h deleted file mode 100644 index 3771d62a9748..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/nas100d.h +++ /dev/null | |||
| @@ -1,52 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/nas100d.h | ||
| 3 | * | ||
| 4 | * NAS100D platform specific definitions | ||
| 5 | * | ||
| 6 | * Copyright (c) 2005 Tower Technologies | ||
| 7 | * | ||
| 8 | * Author: Alessandro Zummo <a.zummo@towertech.it> | ||
| 9 | * | ||
| 10 | * based on ixdp425.h: | ||
| 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 <mach/hardware.h>" | ||
| 20 | #endif | ||
| 21 | |||
| 22 | #define NAS100D_SDA_PIN 5 | ||
| 23 | #define NAS100D_SCL_PIN 6 | ||
| 24 | |||
| 25 | /* | ||
| 26 | * NAS100D PCI IRQs | ||
| 27 | */ | ||
| 28 | #define NAS100D_PCI_MAX_DEV 3 | ||
| 29 | #define NAS100D_PCI_IRQ_LINES 3 | ||
| 30 | |||
| 31 | |||
| 32 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 33 | #define NAS100D_PCI_INTA_PIN 11 | ||
| 34 | #define NAS100D_PCI_INTB_PIN 10 | ||
| 35 | #define NAS100D_PCI_INTC_PIN 9 | ||
| 36 | #define NAS100D_PCI_INTD_PIN 8 | ||
| 37 | #define NAS100D_PCI_INTE_PIN 7 | ||
| 38 | |||
| 39 | /* Buttons */ | ||
| 40 | |||
| 41 | #define NAS100D_PB_GPIO 14 /* power button */ | ||
| 42 | #define NAS100D_RB_GPIO 4 /* reset button */ | ||
| 43 | |||
| 44 | /* Power control */ | ||
| 45 | |||
| 46 | #define NAS100D_PO_GPIO 12 /* power off */ | ||
| 47 | |||
| 48 | /* LEDs */ | ||
| 49 | |||
| 50 | #define NAS100D_LED_WLAN_GPIO 0 | ||
| 51 | #define NAS100D_LED_DISK_GPIO 3 | ||
| 52 | #define NAS100D_LED_PWR_GPIO 15 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/npe.h b/arch/arm/mach-ixp4xx/include/mach/npe.h index 37d0511689dc..e320db2457ae 100644 --- a/arch/arm/mach-ixp4xx/include/mach/npe.h +++ b/arch/arm/mach-ixp4xx/include/mach/npe.h | |||
| @@ -33,7 +33,7 @@ int npe_send_message(struct npe *npe, const void *msg, const char *what); | |||
| 33 | int npe_recv_message(struct npe *npe, void *msg, const char *what); | 33 | int npe_recv_message(struct npe *npe, void *msg, const char *what); |
| 34 | int npe_send_recv_message(struct npe *npe, void *msg, const char *what); | 34 | int npe_send_recv_message(struct npe *npe, void *msg, const char *what); |
| 35 | int npe_load_firmware(struct npe *npe, const char *name, struct device *dev); | 35 | int npe_load_firmware(struct npe *npe, const char *name, struct device *dev); |
| 36 | struct npe *npe_request(int id); | 36 | struct npe *npe_request(unsigned id); |
| 37 | void npe_release(struct npe *npe); | 37 | void npe_release(struct npe *npe); |
| 38 | 38 | ||
| 39 | #endif /* __IXP4XX_NPE_H */ | 39 | #endif /* __IXP4XX_NPE_H */ |
diff --git a/arch/arm/mach-ixp4xx/include/mach/nslu2.h b/arch/arm/mach-ixp4xx/include/mach/nslu2.h deleted file mode 100644 index 85d00adbfb92..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/nslu2.h +++ /dev/null | |||
| @@ -1,55 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/nslu2.h | ||
| 3 | * | ||
| 4 | * NSLU2 platform specific definitions | ||
| 5 | * | ||
| 6 | * Author: Mark Rakes <mrakes AT mac.com> | ||
| 7 | * Maintainers: http://www.nslu2-linux.org | ||
| 8 | * | ||
| 9 | * based on ixdp425.h: | ||
| 10 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
| 11 | * | ||
| 12 | * This file is licensed under the terms of the GNU General Public | ||
| 13 | * License version 2. This program is licensed "as is" without any | ||
| 14 | * warranty of any kind, whether express or implied. | ||
| 15 | */ | ||
| 16 | |||
| 17 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
| 18 | #error "Do not include this directly, instead #include <mach/hardware.h>" | ||
| 19 | #endif | ||
| 20 | |||
| 21 | #define NSLU2_SDA_PIN 7 | ||
| 22 | #define NSLU2_SCL_PIN 6 | ||
| 23 | |||
| 24 | /* | ||
| 25 | * NSLU2 PCI IRQs | ||
| 26 | */ | ||
| 27 | #define NSLU2_PCI_MAX_DEV 3 | ||
| 28 | #define NSLU2_PCI_IRQ_LINES 3 | ||
| 29 | |||
| 30 | |||
| 31 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 32 | #define NSLU2_PCI_INTA_PIN 11 | ||
| 33 | #define NSLU2_PCI_INTB_PIN 10 | ||
| 34 | #define NSLU2_PCI_INTC_PIN 9 | ||
| 35 | #define NSLU2_PCI_INTD_PIN 8 | ||
| 36 | |||
| 37 | /* NSLU2 Timer */ | ||
| 38 | #define NSLU2_FREQ 66000000 | ||
| 39 | |||
| 40 | /* Buttons */ | ||
| 41 | |||
| 42 | #define NSLU2_PB_GPIO 5 /* power button */ | ||
| 43 | #define NSLU2_PO_GPIO 8 /* power off */ | ||
| 44 | #define NSLU2_RB_GPIO 12 /* reset button */ | ||
| 45 | |||
| 46 | /* Buzzer */ | ||
| 47 | |||
| 48 | #define NSLU2_GPIO_BUZZ 4 | ||
| 49 | |||
| 50 | /* LEDs */ | ||
| 51 | |||
| 52 | #define NSLU2_LED_RED_GPIO 0 | ||
| 53 | #define NSLU2_LED_GRN_GPIO 1 | ||
| 54 | #define NSLU2_LED_DISK1_GPIO 3 | ||
| 55 | #define NSLU2_LED_DISK2_GPIO 2 | ||
diff --git a/arch/arm/mach-ixp4xx/include/mach/prpmc1100.h b/arch/arm/mach-ixp4xx/include/mach/prpmc1100.h deleted file mode 100644 index 17274a2e3dec..000000000000 --- a/arch/arm/mach-ixp4xx/include/mach/prpmc1100.h +++ /dev/null | |||
| @@ -1,33 +0,0 @@ | |||
| 1 | /* | ||
| 2 | * arch/arm/mach-ixp4xx/include/mach/prpmc1100.h | ||
| 3 | * | ||
| 4 | * Motorolla PrPMC1100 platform specific definitions | ||
| 5 | * | ||
| 6 | * Author: Deepak Saxena <dsaxena@plexity.net> | ||
| 7 | * | ||
| 8 | * Copyright 2004 (c) MontaVista, Software, Inc. | ||
| 9 | * | ||
| 10 | * This file is licensed under the terms of the GNU General Public | ||
| 11 | * License version 2. This program is licensed "as is" without any | ||
| 12 | * warranty of any kind, whether express or implied. | ||
| 13 | */ | ||
| 14 | |||
| 15 | #ifndef __ASM_ARCH_HARDWARE_H__ | ||
| 16 | #error "Do not include this directly, instead #include <mach/hardware.h>" | ||
| 17 | #endif | ||
| 18 | |||
| 19 | #define PRPMC1100_FLASH_BASE IXP4XX_EXP_BUS_CS0_BASE_PHYS | ||
| 20 | #define PRPMC1100_FLASH_SIZE IXP4XX_EXP_BUS_CSX_REGION_SIZE | ||
| 21 | |||
| 22 | #define PRPMC1100_PCI_MIN_DEVID 10 | ||
| 23 | #define PRPMC1100_PCI_MAX_DEVID 16 | ||
| 24 | #define PRPMC1100_PCI_IRQ_LINES 4 | ||
| 25 | |||
| 26 | |||
| 27 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 28 | #define PRPMC1100_PCI_INTA_PIN 11 | ||
| 29 | #define PRPMC1100_PCI_INTB_PIN 10 | ||
| 30 | #define PRPMC1100_PCI_INTC_PIN 9 | ||
| 31 | #define PRPMC1100_PCI_INTD_PIN 8 | ||
| 32 | |||
| 33 | |||
diff --git a/arch/arm/mach-ixp4xx/include/mach/timex.h b/arch/arm/mach-ixp4xx/include/mach/timex.h index 89ce3ee84698..2c3f93c3eb79 100644 --- a/arch/arm/mach-ixp4xx/include/mach/timex.h +++ b/arch/arm/mach-ixp4xx/include/mach/timex.h | |||
| @@ -10,6 +10,6 @@ | |||
| 10 | * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the | 10 | * 66.66... MHz. We do a convulted calculation of CLOCK_TICK_RATE b/c the |
| 11 | * timer register ignores the bottom 2 bits of the LATCH value. | 11 | * timer register ignores the bottom 2 bits of the LATCH value. |
| 12 | */ | 12 | */ |
| 13 | #define FREQ 66666666 | 13 | #define FREQ 66666000 |
| 14 | #define CLOCK_TICK_RATE (((FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ) | 14 | #define CLOCK_TICK_RATE (((FREQ / HZ & ~IXP4XX_OST_RELOAD_MASK) + 1) * HZ) |
| 15 | 15 | ||
diff --git a/arch/arm/mach-ixp4xx/ixdp425-pci.c b/arch/arm/mach-ixp4xx/ixdp425-pci.c index 64c29aacaac9..1ba165a6edac 100644 --- a/arch/arm/mach-ixp4xx/ixdp425-pci.c +++ b/arch/arm/mach-ixp4xx/ixdp425-pci.c | |||
| @@ -1,5 +1,5 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * arch/arm/mach-ixp4xx/ixdp425-pci.c | 2 | * arch/arm/mach-ixp4xx/ixdp425-pci.c |
| 3 | * | 3 | * |
| 4 | * IXDP425 board-level PCI initialization | 4 | * IXDP425 board-level PCI initialization |
| 5 | * | 5 | * |
| @@ -19,39 +19,43 @@ | |||
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
| 21 | #include <linux/delay.h> | 21 | #include <linux/delay.h> |
| 22 | |||
| 23 | #include <asm/mach/pci.h> | 22 | #include <asm/mach/pci.h> |
| 24 | #include <asm/irq.h> | 23 | #include <asm/irq.h> |
| 25 | #include <mach/hardware.h> | 24 | #include <mach/hardware.h> |
| 26 | #include <asm/mach-types.h> | 25 | #include <asm/mach-types.h> |
| 27 | 26 | ||
| 27 | #define MAX_DEV 4 | ||
| 28 | #define IRQ_LINES 4 | ||
| 29 | |||
| 30 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 31 | #define INTA 11 | ||
| 32 | #define INTB 10 | ||
| 33 | #define INTC 9 | ||
| 34 | #define INTD 8 | ||
| 35 | |||
| 36 | |||
| 28 | void __init ixdp425_pci_preinit(void) | 37 | void __init ixdp425_pci_preinit(void) |
| 29 | { | 38 | { |
| 30 | set_irq_type(IRQ_IXDP425_PCI_INTA, IRQ_TYPE_LEVEL_LOW); | 39 | set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); |
| 31 | set_irq_type(IRQ_IXDP425_PCI_INTB, IRQ_TYPE_LEVEL_LOW); | 40 | set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); |
| 32 | set_irq_type(IRQ_IXDP425_PCI_INTC, IRQ_TYPE_LEVEL_LOW); | 41 | set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); |
| 33 | set_irq_type(IRQ_IXDP425_PCI_INTD, IRQ_TYPE_LEVEL_LOW); | 42 | set_irq_type(IXP4XX_GPIO_IRQ(INTD), IRQ_TYPE_LEVEL_LOW); |
| 34 | |||
| 35 | ixp4xx_pci_preinit(); | 43 | ixp4xx_pci_preinit(); |
| 36 | } | 44 | } |
| 37 | 45 | ||
| 38 | static int __init ixdp425_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 46 | static int __init ixdp425_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 39 | { | 47 | { |
| 40 | static int pci_irq_table[IXDP425_PCI_IRQ_LINES] = { | 48 | static int pci_irq_table[IRQ_LINES] = { |
| 41 | IRQ_IXDP425_PCI_INTA, | 49 | IXP4XX_GPIO_IRQ(INTA), |
| 42 | IRQ_IXDP425_PCI_INTB, | 50 | IXP4XX_GPIO_IRQ(INTB), |
| 43 | IRQ_IXDP425_PCI_INTC, | 51 | IXP4XX_GPIO_IRQ(INTC), |
| 44 | IRQ_IXDP425_PCI_INTD | 52 | IXP4XX_GPIO_IRQ(INTD) |
| 45 | }; | 53 | }; |
| 46 | 54 | ||
| 47 | int irq = -1; | 55 | if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) |
| 48 | 56 | return pci_irq_table[(slot + pin - 2) % 4]; | |
| 49 | if (slot >= 1 && slot <= IXDP425_PCI_MAX_DEV && | ||
| 50 | pin >= 1 && pin <= IXDP425_PCI_IRQ_LINES) { | ||
| 51 | irq = pci_irq_table[(slot + pin - 2) % 4]; | ||
| 52 | } | ||
| 53 | 57 | ||
| 54 | return irq; | 58 | return -1; |
| 55 | } | 59 | } |
| 56 | 60 | ||
| 57 | struct hw_pci ixdp425_pci __initdata = { | 61 | struct hw_pci ixdp425_pci __initdata = { |
| @@ -72,4 +76,3 @@ int __init ixdp425_pci_init(void) | |||
| 72 | } | 76 | } |
| 73 | 77 | ||
| 74 | subsys_initcall(ixdp425_pci_init); | 78 | subsys_initcall(ixdp425_pci_init); |
| 75 | |||
diff --git a/arch/arm/mach-ixp4xx/ixdp425-setup.c b/arch/arm/mach-ixp4xx/ixdp425-setup.c index f4a0c1bc1331..bbb768988845 100644 --- a/arch/arm/mach-ixp4xx/ixdp425-setup.c +++ b/arch/arm/mach-ixp4xx/ixdp425-setup.c | |||
| @@ -1,7 +1,7 @@ | |||
| 1 | /* | 1 | /* |
| 2 | * arch/arm/mach-ixp4xx/ixdp425-setup.c | 2 | * arch/arm/mach-ixp4xx/ixdp425-setup.c |
| 3 | * | 3 | * |
| 4 | * IXDP425/IXCDP1100 board-setup | 4 | * IXDP425/IXCDP1100 board-setup |
| 5 | * | 5 | * |
| 6 | * Copyright (C) 2003-2005 MontaVista Software, Inc. | 6 | * Copyright (C) 2003-2005 MontaVista Software, Inc. |
| 7 | * | 7 | * |
| @@ -21,7 +21,6 @@ | |||
| 21 | #include <linux/mtd/nand.h> | 21 | #include <linux/mtd/nand.h> |
| 22 | #include <linux/mtd/partitions.h> | 22 | #include <linux/mtd/partitions.h> |
| 23 | #include <linux/delay.h> | 23 | #include <linux/delay.h> |
| 24 | |||
| 25 | #include <asm/types.h> | 24 | #include <asm/types.h> |
| 26 | #include <asm/setup.h> | 25 | #include <asm/setup.h> |
| 27 | #include <asm/memory.h> | 26 | #include <asm/memory.h> |
| @@ -31,6 +30,15 @@ | |||
| 31 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 32 | #include <asm/mach/flash.h> | 31 | #include <asm/mach/flash.h> |
| 33 | 32 | ||
| 33 | #define IXDP425_SDA_PIN 7 | ||
| 34 | #define IXDP425_SCL_PIN 6 | ||
| 35 | |||
| 36 | /* NAND Flash pins */ | ||
| 37 | #define IXDP425_NAND_NCE_PIN 12 | ||
| 38 | |||
| 39 | #define IXDP425_NAND_CMD_BYTE 0x01 | ||
| 40 | #define IXDP425_NAND_ADDR_BYTE 0x02 | ||
| 41 | |||
| 34 | static struct flash_platform_data ixdp425_flash_data = { | 42 | static struct flash_platform_data ixdp425_flash_data = { |
| 35 | .map_name = "cfi_probe", | 43 | .map_name = "cfi_probe", |
| 36 | .width = 2, | 44 | .width = 2, |
diff --git a/arch/arm/mach-ixp4xx/ixp4xx_npe.c b/arch/arm/mach-ixp4xx/ixp4xx_npe.c index 47ac69c7ec78..e8bb25778166 100644 --- a/arch/arm/mach-ixp4xx/ixp4xx_npe.c +++ b/arch/arm/mach-ixp4xx/ixp4xx_npe.c | |||
| @@ -665,7 +665,7 @@ err: | |||
| 665 | } | 665 | } |
| 666 | 666 | ||
| 667 | 667 | ||
| 668 | struct npe *npe_request(int id) | 668 | struct npe *npe_request(unsigned id) |
| 669 | { | 669 | { |
| 670 | if (id < NPE_COUNT) | 670 | if (id < NPE_COUNT) |
| 671 | if (npe_tab[id].valid) | 671 | if (npe_tab[id].valid) |
diff --git a/arch/arm/mach-ixp4xx/nas100d-pci.c b/arch/arm/mach-ixp4xx/nas100d-pci.c index 1088426fdcee..d0cea34cf61e 100644 --- a/arch/arm/mach-ixp4xx/nas100d-pci.c +++ b/arch/arm/mach-ixp4xx/nas100d-pci.c | |||
| @@ -18,37 +18,42 @@ | |||
| 18 | #include <linux/pci.h> | 18 | #include <linux/pci.h> |
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
| 21 | |||
| 22 | #include <asm/mach/pci.h> | 21 | #include <asm/mach/pci.h> |
| 23 | #include <asm/mach-types.h> | 22 | #include <asm/mach-types.h> |
| 24 | 23 | ||
| 24 | #define MAX_DEV 3 | ||
| 25 | #define IRQ_LINES 3 | ||
| 26 | |||
| 27 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 28 | #define INTA 11 | ||
| 29 | #define INTB 10 | ||
| 30 | #define INTC 9 | ||
| 31 | #define INTD 8 | ||
| 32 | #define INTE 7 | ||
| 33 | |||
| 25 | void __init nas100d_pci_preinit(void) | 34 | void __init nas100d_pci_preinit(void) |
| 26 | { | 35 | { |
| 27 | set_irq_type(IRQ_NAS100D_PCI_INTA, IRQ_TYPE_LEVEL_LOW); | 36 | set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); |
| 28 | set_irq_type(IRQ_NAS100D_PCI_INTB, IRQ_TYPE_LEVEL_LOW); | 37 | set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); |
| 29 | set_irq_type(IRQ_NAS100D_PCI_INTC, IRQ_TYPE_LEVEL_LOW); | 38 | set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); |
| 30 | set_irq_type(IRQ_NAS100D_PCI_INTD, IRQ_TYPE_LEVEL_LOW); | 39 | set_irq_type(IXP4XX_GPIO_IRQ(INTD), IRQ_TYPE_LEVEL_LOW); |
| 31 | set_irq_type(IRQ_NAS100D_PCI_INTE, IRQ_TYPE_LEVEL_LOW); | 40 | set_irq_type(IXP4XX_GPIO_IRQ(INTE), IRQ_TYPE_LEVEL_LOW); |
| 32 | |||
| 33 | ixp4xx_pci_preinit(); | 41 | ixp4xx_pci_preinit(); |
| 34 | } | 42 | } |
| 35 | 43 | ||
| 36 | static int __init nas100d_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 44 | static int __init nas100d_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 37 | { | 45 | { |
| 38 | static int pci_irq_table[NAS100D_PCI_MAX_DEV][NAS100D_PCI_IRQ_LINES] = | 46 | static int pci_irq_table[MAX_DEV][IRQ_LINES] = { |
| 39 | { | 47 | { IXP4XX_GPIO_IRQ(INTA), -1, -1 }, |
| 40 | { IRQ_NAS100D_PCI_INTA, -1, -1 }, | 48 | { IXP4XX_GPIO_IRQ(INTB), -1, -1 }, |
| 41 | { IRQ_NAS100D_PCI_INTB, -1, -1 }, | 49 | { IXP4XX_GPIO_IRQ(INTC), IXP4XX_GPIO_IRQ(INTD), |
| 42 | { IRQ_NAS100D_PCI_INTC, IRQ_NAS100D_PCI_INTD, IRQ_NAS100D_PCI_INTE }, | 50 | IXP4XX_GPIO_IRQ(INTE) }, |
| 43 | }; | 51 | }; |
| 44 | 52 | ||
| 45 | int irq = -1; | 53 | if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) |
| 46 | 54 | return pci_irq_table[slot - 1][pin - 1]; | |
| 47 | if (slot >= 1 && slot <= NAS100D_PCI_MAX_DEV && | ||
| 48 | pin >= 1 && pin <= NAS100D_PCI_IRQ_LINES) | ||
| 49 | irq = pci_irq_table[slot-1][pin-1]; | ||
| 50 | 55 | ||
| 51 | return irq; | 56 | return -1; |
| 52 | } | 57 | } |
| 53 | 58 | ||
| 54 | struct hw_pci __initdata nas100d_pci = { | 59 | struct hw_pci __initdata nas100d_pci = { |
diff --git a/arch/arm/mach-ixp4xx/nas100d-setup.c b/arch/arm/mach-ixp4xx/nas100d-setup.c index 921c947b5b6b..e3ee880aa1e6 100644 --- a/arch/arm/mach-ixp4xx/nas100d-setup.c +++ b/arch/arm/mach-ixp4xx/nas100d-setup.c | |||
| @@ -29,12 +29,26 @@ | |||
| 29 | #include <linux/i2c.h> | 29 | #include <linux/i2c.h> |
| 30 | #include <linux/i2c-gpio.h> | 30 | #include <linux/i2c-gpio.h> |
| 31 | #include <linux/io.h> | 31 | #include <linux/io.h> |
| 32 | |||
| 33 | #include <asm/mach-types.h> | 32 | #include <asm/mach-types.h> |
| 34 | #include <asm/mach/arch.h> | 33 | #include <asm/mach/arch.h> |
| 35 | #include <asm/mach/flash.h> | 34 | #include <asm/mach/flash.h> |
| 36 | #include <asm/gpio.h> | 35 | #include <asm/gpio.h> |
| 37 | 36 | ||
| 37 | #define NAS100D_SDA_PIN 5 | ||
| 38 | #define NAS100D_SCL_PIN 6 | ||
| 39 | |||
| 40 | /* Buttons */ | ||
| 41 | #define NAS100D_PB_GPIO 14 /* power button */ | ||
| 42 | #define NAS100D_RB_GPIO 4 /* reset button */ | ||
| 43 | |||
| 44 | /* Power control */ | ||
| 45 | #define NAS100D_PO_GPIO 12 /* power off */ | ||
| 46 | |||
| 47 | /* LEDs */ | ||
| 48 | #define NAS100D_LED_WLAN_GPIO 0 | ||
| 49 | #define NAS100D_LED_DISK_GPIO 3 | ||
| 50 | #define NAS100D_LED_PWR_GPIO 15 | ||
| 51 | |||
| 38 | static struct flash_platform_data nas100d_flash_data = { | 52 | static struct flash_platform_data nas100d_flash_data = { |
| 39 | .map_name = "cfi_probe", | 53 | .map_name = "cfi_probe", |
| 40 | .width = 2, | 54 | .width = 2, |
diff --git a/arch/arm/mach-ixp4xx/nslu2-pci.c b/arch/arm/mach-ixp4xx/nslu2-pci.c index 4429b8448b61..1eb5a90470bc 100644 --- a/arch/arm/mach-ixp4xx/nslu2-pci.c +++ b/arch/arm/mach-ixp4xx/nslu2-pci.c | |||
| @@ -18,35 +18,38 @@ | |||
| 18 | #include <linux/pci.h> | 18 | #include <linux/pci.h> |
| 19 | #include <linux/init.h> | 19 | #include <linux/init.h> |
| 20 | #include <linux/irq.h> | 20 | #include <linux/irq.h> |
| 21 | |||
| 22 | #include <asm/mach/pci.h> | 21 | #include <asm/mach/pci.h> |
| 23 | #include <asm/mach-types.h> | 22 | #include <asm/mach-types.h> |
| 24 | 23 | ||
| 24 | #define MAX_DEV 3 | ||
| 25 | #define IRQ_LINES 3 | ||
| 26 | |||
| 27 | /* PCI controller GPIO to IRQ pin mappings */ | ||
| 28 | #define INTA 11 | ||
| 29 | #define INTB 10 | ||
| 30 | #define INTC 9 | ||
| 31 | #define INTD 8 | ||
| 32 | |||
| 25 | void __init nslu2_pci_preinit(void) | 33 | void __init nslu2_pci_preinit(void) |
| 26 | { | 34 | { |
| 27 | set_irq_type(IRQ_NSLU2_PCI_INTA, IRQ_TYPE_LEVEL_LOW); | 35 | set_irq_type(IXP4XX_GPIO_IRQ(INTA), IRQ_TYPE_LEVEL_LOW); |
| 28 | set_irq_type(IRQ_NSLU2_PCI_INTB, IRQ_TYPE_LEVEL_LOW); | 36 | set_irq_type(IXP4XX_GPIO_IRQ(INTB), IRQ_TYPE_LEVEL_LOW); |
| 29 | set_irq_type(IRQ_NSLU2_PCI_INTC, IRQ_TYPE_LEVEL_LOW); | 37 | set_irq_type(IXP4XX_GPIO_IRQ(INTC), IRQ_TYPE_LEVEL_LOW); |
| 30 | |||
| 31 | ixp4xx_pci_preinit(); | 38 | ixp4xx_pci_preinit(); |
| 32 | } | 39 | } |
| 33 | 40 | ||
| 34 | static int __init nslu2_map_irq(struct pci_dev *dev, u8 slot, u8 pin) | 41 | static int __init nslu2_map_irq(struct pci_dev *dev, u8 slot, u8 pin) |
| 35 | { | 42 | { |
| 36 | static int pci_irq_table[NSLU2_PCI_IRQ_LINES] = { | 43 | static int pci_irq_table[IRQ_LINES] = { |
| 37 | IRQ_NSLU2_PCI_INTA, | 44 | IXP4XX_GPIO_IRQ(INTA), |
| 38 | IRQ_NSLU2_PCI_INTB, | 45 | IXP4XX_GPIO_IRQ(INTB), |
| 39 | IRQ_NSLU2_PCI_INTC, | 46 | IXP4XX_GPIO_IRQ(INTC), |
| 40 | }; | 47 | }; |
| 41 | 48 | ||
| 42 | int irq = -1; | 49 | if (slot >= 1 && slot <= MAX_DEV && pin >= 1 && pin <= IRQ_LINES) |
| 43 | 50 | return pci_irq_table[(slot + pin - 2) % IRQ_LINES]; | |
| 44 | if (slot >= 1 && slot <= NSLU2_PCI_MAX_DEV && | ||
| 45 | pin >= 1 && pin <= NSLU2_PCI_IRQ_LINES) { | ||
| 46 | irq = pci_irq_table[(slot + pin - 2) % NSLU2_PCI_IRQ_LINES]; | ||
| 47 | } | ||
| 48 | 51 | ||
| 49 | return irq; | 52 | return -1; |
| 50 | } | 53 | } |
| 51 | 54 | ||
| 52 | struct hw_pci __initdata nslu2_pci = { | 55 | struct hw_pci __initdata nslu2_pci = { |
diff --git a/arch/arm/mach-ixp4xx/nslu2-setup.c b/arch/arm/mach-ixp4xx/nslu2-setup.c index ff6a08d02cc4..c14e0034be4b 100644 --- a/arch/arm/mach-ixp4xx/nslu2-setup.c +++ b/arch/arm/mach-ixp4xx/nslu2-setup.c | |||
| @@ -26,13 +26,32 @@ | |||
| 26 | #include <linux/i2c.h> | 26 | #include <linux/i2c.h> |
| 27 | #include <linux/i2c-gpio.h> | 27 | #include <linux/i2c-gpio.h> |
| 28 | #include <linux/io.h> | 28 | #include <linux/io.h> |
| 29 | |||
| 30 | #include <asm/mach-types.h> | 29 | #include <asm/mach-types.h> |
| 31 | #include <asm/mach/arch.h> | 30 | #include <asm/mach/arch.h> |
| 32 | #include <asm/mach/flash.h> | 31 | #include <asm/mach/flash.h> |
| 33 | #include <asm/mach/time.h> | 32 | #include <asm/mach/time.h> |
| 34 | #include <asm/gpio.h> | 33 | #include <asm/gpio.h> |
| 35 | 34 | ||
| 35 | #define NSLU2_SDA_PIN 7 | ||
| 36 | #define NSLU2_SCL_PIN 6 | ||
| 37 | |||
| 38 | /* NSLU2 Timer */ | ||
| 39 | #define NSLU2_FREQ 66000000 | ||
| 40 | |||
| 41 | /* Buttons */ | ||
| 42 | #define NSLU2_PB_GPIO 5 /* power button */ | ||
| 43 | #define NSLU2_PO_GPIO 8 /* power off */ | ||
| 44 | #define NSLU2_RB_GPIO 12 /* reset button */ | ||
| 45 | |||
| 46 | /* Buzzer */ | ||
| 47 | #define NSLU2_GPIO_BUZZ 4 | ||
| 48 | |||
| 49 | /* LEDs */ | ||
| 50 | #define NSLU2_LED_RED_GPIO 0 | ||
| 51 | #define NSLU2_LED_GRN_GPIO 1 | ||
| 52 | #define NSLU2_LED_DISK1_GPIO 3 | ||
| 53 | #define NSLU2_LED_DISK2_GPIO 2 | ||
| 54 | |||
| 36 | static struct flash_platform_data nslu2_flash_data = { | 55 | static struct flash_platform_data nslu2_flash_data = { |
| 37 | .map_name = "cfi_probe", | 56 | .map_name = "cfi_probe", |
| 38 | .width = 2, | 57 | .width = 2, |
diff --git a/drivers/leds/leds-fsg.c b/drivers/leds/leds-fsg.c index 5f7c9c5c09b1..d11d05be0dee 100644 --- a/drivers/leds/leds-fsg.c +++ b/drivers/leds/leds-fsg.c | |||
| @@ -22,6 +22,13 @@ | |||
| 22 | #include <mach/hardware.h> | 22 | #include <mach/hardware.h> |
| 23 | #include <asm/io.h> | 23 | #include <asm/io.h> |
| 24 | 24 | ||
| 25 | #define FSG_LED_WLAN_BIT 0 | ||
| 26 | #define FSG_LED_WAN_BIT 1 | ||
| 27 | #define FSG_LED_SATA_BIT 2 | ||
| 28 | #define FSG_LED_USB_BIT 4 | ||
| 29 | #define FSG_LED_RING_BIT 5 | ||
| 30 | #define FSG_LED_SYNC_BIT 7 | ||
| 31 | |||
| 25 | static short __iomem *latch_address; | 32 | static short __iomem *latch_address; |
| 26 | static unsigned short latch_value; | 33 | static unsigned short latch_value; |
| 27 | 34 | ||
diff --git a/drivers/net/arm/ixp4xx_eth.c b/drivers/net/arm/ixp4xx_eth.c index 691b81eb0f46..c3dfbdd2cdcf 100644 --- a/drivers/net/arm/ixp4xx_eth.c +++ b/drivers/net/arm/ixp4xx_eth.c | |||
| @@ -322,7 +322,7 @@ static int ixp4xx_mdio_write(struct mii_bus *bus, int phy_id, int location, | |||
| 322 | ret = ixp4xx_mdio_cmd(bus, phy_id, location, 1, val); | 322 | ret = ixp4xx_mdio_cmd(bus, phy_id, location, 1, val); |
| 323 | spin_unlock_irqrestore(&mdio_lock, flags); | 323 | spin_unlock_irqrestore(&mdio_lock, flags); |
| 324 | #if DEBUG_MDIO | 324 | #if DEBUG_MDIO |
| 325 | printk(KERN_DEBUG "%s #%i: MII read [%i] <- 0x%X, err = %i\n", | 325 | printk(KERN_DEBUG "%s #%i: MII write [%i] <- 0x%X, err = %i\n", |
| 326 | bus->name, phy_id, location, val, ret); | 326 | bus->name, phy_id, location, val, ret); |
| 327 | #endif | 327 | #endif |
| 328 | return ret; | 328 | return ret; |
