[PATCH] ppc64: Fix wrong register mapping in mpic driver
authorBenjamin Herrenschmidt <benh@kernel.crashing.org>
Wed, 26 Oct 2005 08:59:00 +0000 (01:59 -0700)
committerLinus Torvalds <torvalds@g5.osdl.org>
Wed, 26 Oct 2005 17:39:43 +0000 (10:39 -0700)
The mpic interrupt controller driver (used on G5 and early pSeries among
others) has a bug where it doesn't get the right virtual address for the
timer registers.  It causes the driver to poke at the MMIO space of
whatever has been mapped just next to it (ouch !) when initializing and
causes boot failures on some IBM machines.

Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
arch/ppc64/kernel/mpic.c

index cc262a05ddb4558499d649cf9c46d7610230f31f..5f5bc73754d9836da588fa20c04b5866b5cd2b6c 100644 (file)
@@ -506,8 +506,8 @@ struct mpic * __init mpic_alloc(unsigned long phys_addr,
        mpic->senses_count = senses_count;
 
        /* Map the global registers */
-       mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x1000);
-       mpic->tmregs = mpic->gregs + (MPIC_TIMER_BASE >> 2);
+       mpic->gregs = ioremap(phys_addr + MPIC_GREG_BASE, 0x2000);
+       mpic->tmregs = mpic->gregs + ((MPIC_TIMER_BASE - MPIC_GREG_BASE) >> 2);
        BUG_ON(mpic->gregs == NULL);
 
        /* Reset */