Merge master.kernel.org:/home/rmk/linux-2.6-arm

* master.kernel.org:/home/rmk/linux-2.6-arm:
  [ARM] 3540/1: ixp23xx: deal with gap in interrupt bitmasks
  [ARM] 3539/1: ixp23xx: fix __arch_ixp23xx_is_coherent() for A1 stepping
This commit is contained in:
Linus Torvalds 2006-06-02 16:02:41 -07:00
commit 891eca1447
2 changed files with 16 additions and 4 deletions

View file

@ -178,8 +178,12 @@ static int ixp23xx_irq_set_type(unsigned int irq, unsigned int type)
static void ixp23xx_irq_mask(unsigned int irq) static void ixp23xx_irq_mask(unsigned int irq)
{ {
volatile unsigned long *intr_reg = IXP23XX_INTR_EN1 + (irq / 32); volatile unsigned long *intr_reg;
if (irq >= 56)
irq += 8;
intr_reg = IXP23XX_INTR_EN1 + (irq / 32);
*intr_reg &= ~(1 << (irq % 32)); *intr_reg &= ~(1 << (irq % 32));
} }
@ -199,17 +203,25 @@ static void ixp23xx_irq_ack(unsigned int irq)
*/ */
static void ixp23xx_irq_level_unmask(unsigned int irq) static void ixp23xx_irq_level_unmask(unsigned int irq)
{ {
volatile unsigned long *intr_reg = IXP23XX_INTR_EN1 + (irq / 32); volatile unsigned long *intr_reg;
ixp23xx_irq_ack(irq); ixp23xx_irq_ack(irq);
if (irq >= 56)
irq += 8;
intr_reg = IXP23XX_INTR_EN1 + (irq / 32);
*intr_reg |= (1 << (irq % 32)); *intr_reg |= (1 << (irq % 32));
} }
static void ixp23xx_irq_edge_unmask(unsigned int irq) static void ixp23xx_irq_edge_unmask(unsigned int irq)
{ {
volatile unsigned long *intr_reg = IXP23XX_INTR_EN1 + (irq / 32); volatile unsigned long *intr_reg;
if (irq >= 56)
irq += 8;
intr_reg = IXP23XX_INTR_EN1 + (irq / 32);
*intr_reg |= (1 << (irq % 32)); *intr_reg |= (1 << (irq % 32));
} }

View file

@ -49,7 +49,7 @@ static inline int __ixp23xx_arch_is_coherent(void)
{ {
extern unsigned int processor_id; extern unsigned int processor_id;
if (((processor_id & 15) >= 2) || machine_is_roadrunner()) if (((processor_id & 15) >= 4) || machine_is_roadrunner())
return 1; return 1;
return 0; return 0;