浏览代码

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
Linus Torvalds 19 年之前
父节点
当前提交
891eca1447
共有 2 个文件被更改,包括 16 次插入4 次删除
  1. 15 3
      arch/arm/mach-ixp23xx/core.c
  2. 1 1
      include/asm-arm/arch-ixp23xx/memory.h

+ 15 - 3
arch/arm/mach-ixp23xx/core.c

@@ -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));
 }
 }
 
 

+ 1 - 1
include/asm-arm/arch-ixp23xx/memory.h

@@ -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;