Commit 368e75c6 authored by Linus Torvalds's avatar Linus Torvalds

Merge bk://bk.arm.linux.org.uk/linux-2.6-rmk

into ppc970.osdl.org:/home/torvalds/v2.6/linux
parents 96b61dfd 64359c87
...@@ -36,6 +36,14 @@ config MACH_IXDPG425 ...@@ -36,6 +36,14 @@ config MACH_IXDPG425
IXDPG425 Development Platform (Also known as Montajade). IXDPG425 Development Platform (Also known as Montajade).
For more information on this platform, see Documentation/arm/IXP4xx. For more information on this platform, see Documentation/arm/IXP4xx.
config MACH_IXDP465
bool "IXDP465"
help
Say 'Y' here if you want your kernel to support Intel's
IXDP465 Development Platform (Also known as BMP).
For more information on this platform, see Documentation/arm/IXP4xx.
# #
# IXCDP1100 is the exact same HW as IXDP425, but with a different machine # IXCDP1100 is the exact same HW as IXDP425, but with a different machine
# number from the bootloader due to marketing monkeys, so we just enable it # number from the bootloader due to marketing monkeys, so we just enable it
...@@ -58,7 +66,15 @@ config ARCH_PRPMC1100 ...@@ -58,7 +66,15 @@ config ARCH_PRPMC1100
# #
config ARCH_IXDP4XX config ARCH_IXDP4XX
bool bool
depends on ARCH_IXDP425 || ARCH_AVILA depends on ARCH_IXDP425 || ARCH_AVILA || MACH_IXDP465
default y
#
# Certain registers and IRQs are only enabled if supporting IXP465 CPUs
#
config CPU_IXP46X
bool
depends on MACH_IXDP465
default y default y
comment "IXP4xx Options" comment "IXP4xx Options"
......
...@@ -348,10 +348,11 @@ void __init ixp4xx_pci_preinit(void) ...@@ -348,10 +348,11 @@ void __init ixp4xx_pci_preinit(void)
asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :); asm("mrc p15, 0, %0, cr0, cr0, 0;" : "=r"(processor_id) :);
/* /*
* Determine which PCI read method to use * Determine which PCI read method to use.
* Rev 0 IXP425 requires workaround.
*/ */
if (!(processor_id & 0xf)) { if (!(processor_id & 0xf) && !cpu_is_ixp46x()) {
printk("PCI: IXP4xx A0 silicon detected - " printk("PCI: IXP42x A0 silicon detected - "
"PCI Non-Prefetch Workaround Enabled\n"); "PCI Non-Prefetch Workaround Enabled\n");
ixp4xx_pci_read = ixp4xx_pci_read_errata; ixp4xx_pci_read = ixp4xx_pci_read_errata;
} else } else
......
...@@ -145,7 +145,10 @@ void __init ixp4xx_map_io(void) ...@@ -145,7 +145,10 @@ void __init ixp4xx_map_io(void)
**************************************************************************/ **************************************************************************/
static void ixp4xx_irq_mask(unsigned int irq) static void ixp4xx_irq_mask(unsigned int irq)
{ {
*IXP4XX_ICMR &= ~(1 << irq); if (cpu_is_ixp46x() && irq >= 32)
*IXP4XX_ICMR2 &= ~(1 << (irq - 32));
else
*IXP4XX_ICMR &= ~(1 << irq);
} }
static void ixp4xx_irq_mask_ack(unsigned int irq) static void ixp4xx_irq_mask_ack(unsigned int irq)
...@@ -155,13 +158,13 @@ static void ixp4xx_irq_mask_ack(unsigned int irq) ...@@ -155,13 +158,13 @@ static void ixp4xx_irq_mask_ack(unsigned int irq)
static void ixp4xx_irq_unmask(unsigned int irq) static void ixp4xx_irq_unmask(unsigned int irq)
{ {
static int irq2gpio[NR_IRQS] = { static int irq2gpio[32] = {
-1, -1, -1, -1, -1, -1, 0, 1, -1, -1, -1, -1, -1, -1, 0, 1,
-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
-1, -1, -1, 2, 3, 4, 5, 6, -1, -1, -1, 2, 3, 4, 5, 6,
7, 8, 9, 10, 11, 12, -1, -1, 7, 8, 9, 10, 11, 12, -1, -1,
}; };
int line = irq2gpio[irq]; int line = (irq < 32) ? irq2gpio[irq] : -1;
/* /*
* This only works for LEVEL gpio IRQs as per the IXP4xx developer's * This only works for LEVEL gpio IRQs as per the IXP4xx developer's
...@@ -171,7 +174,10 @@ static void ixp4xx_irq_unmask(unsigned int irq) ...@@ -171,7 +174,10 @@ static void ixp4xx_irq_unmask(unsigned int irq)
if (line >= 0) if (line >= 0)
gpio_line_isr_clear(line); gpio_line_isr_clear(line);
*IXP4XX_ICMR |= (1 << irq); if (cpu_is_ixp46x() && irq >= 32)
*IXP4XX_ICMR2 |= (1 << (irq - 32));
else
*IXP4XX_ICMR |= (1 << irq);
} }
static struct irqchip ixp4xx_irq_chip = { static struct irqchip ixp4xx_irq_chip = {
...@@ -190,6 +196,14 @@ void __init ixp4xx_init_irq(void) ...@@ -190,6 +196,14 @@ void __init ixp4xx_init_irq(void)
/* Disable all interrupt */ /* Disable all interrupt */
*IXP4XX_ICMR = 0x0; *IXP4XX_ICMR = 0x0;
if (cpu_is_ixp46x()) {
/* Route upper 32 sources to IRQ instead of FIQ */
*IXP4XX_ICLR2 = 0x00;
/* Disable upper 32 interrupts */
*IXP4XX_ICMR2 = 0x00;
}
for(i = 0; i < NR_IRQS; i++) for(i = 0; i < NR_IRQS; i++)
{ {
set_irq_chip(i, &ixp4xx_irq_chip); set_irq_chip(i, &ixp4xx_irq_chip);
......
...@@ -73,9 +73,8 @@ struct hw_pci ixdp425_pci __initdata = { ...@@ -73,9 +73,8 @@ struct hw_pci ixdp425_pci __initdata = {
int __init ixdp425_pci_init(void) int __init ixdp425_pci_init(void)
{ {
if (machine_is_ixdp425() || if (machine_is_ixdp425() || machine_is_ixcdp1100() ||
machine_is_ixcdp1100() || machine_is_avila() || machine_is_ixdp465())
machine_is_avila())
pci_common_init(&ixdp425_pci); pci_common_init(&ixdp425_pci);
return 0; return 0;
} }
......
...@@ -108,6 +108,13 @@ static struct platform_device *ixdp425_devices[] __initdata = { ...@@ -108,6 +108,13 @@ static struct platform_device *ixdp425_devices[] __initdata = {
static void __init ixdp425_init(void) static void __init ixdp425_init(void)
{ {
/*
* IXP465 has 32MB window
*/
if (machine_is_ixdp465()) {
ixdp425_flash_resource.end += IXDP425_FLASH_SIZE;
}
platform_add_devices(&ixdp425_devices, ARRAY_SIZE(ixdp425_devices)); platform_add_devices(&ixdp425_devices, ARRAY_SIZE(ixdp425_devices));
} }
...@@ -122,6 +129,17 @@ MACHINE_START(IXDP425, "Intel IXDP425 Development Platform") ...@@ -122,6 +129,17 @@ MACHINE_START(IXDP425, "Intel IXDP425 Development Platform")
INIT_MACHINE(ixdp425_init) INIT_MACHINE(ixdp425_init)
MACHINE_END MACHINE_END
MACHINE_START(IXDP465, "Intel IXDP465 Development Platform")
MAINTAINER("MontaVista Software, Inc.")
BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
IXP4XX_PERIPHERAL_BASE_VIRT)
MAPIO(ixdp425_map_io)
INITIRQ(ixp4xx_init_irq)
.timer = &ixp4xx_timer,
BOOT_PARAMS(0x0100)
INIT_MACHINE(ixdp425_init)
MACHINE_END
MACHINE_START(IXCDP1100, "Intel IXCDP1100 Development Platform") MACHINE_START(IXCDP1100, "Intel IXCDP1100 Development Platform")
MAINTAINER("MontaVista Software, Inc.") MAINTAINER("MontaVista Software, Inc.")
BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS, BOOT_MEM(PHYS_OFFSET, IXP4XX_PERIPHERAL_BASE_PHYS,
......
...@@ -6,6 +6,7 @@ ...@@ -6,6 +6,7 @@
* This file is licensed under the terms of the GNU General Public * This file is licensed under the terms of the GNU General Public
* License version 2. This program is licensed "as is" without any * License version 2. This program is licensed "as is" without any
* warranty of any kind, whether express or implied. * warranty of any kind, whether express or implied.
*/
.macro disable_fiq .macro disable_fiq
.endm .endm
......
...@@ -19,11 +19,6 @@ ...@@ -19,11 +19,6 @@
orr \base, \base, #0x0000a000 orr \base, \base, #0x0000a000
orr \base, \base, #0x08 orr \base, \base, #0x08
ldr \irqstat, [\base] @ get interrupts ldr \irqstat, [\base] @ get interrupts
mov \tmp, #IXP2000_VALID_IRQ_MASK & 0xff000000
orr \tmp, \tmp, #IXP2000_VALID_IRQ_MASK & 0x00ff0000
orr \tmp, \tmp, #IXP2000_VALID_IRQ_MASK & 0x0000ff00
orr \tmp, \tmp, #IXP2000_VALID_IRQ_MASK & 0x000000ff
and \irqstat, \irqstat, \tmp
cmp \irqstat, #0 cmp \irqstat, #0
beq 1001f beq 1001f
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment