lkml.org 
[lkml]   [2006]   [Mar]   [23]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[patch 07/13] powerpc: work around a cell interrupt HW bug
    Apparently we have found a bug in the CPU that causes
    external interrupts to sometimes get disabled indefinitely.
    This adds a workaround for the problem.

    Signed-off-by: Arnd Bergmann <arnd.bergmann@de.ibm.com>

    Index: linux-2.6.15.4/arch/powerpc/platforms/cell/interrupt.c
    ===================================================================
    --- linux-2.6.15.4.orig/arch/powerpc/platforms/cell/interrupt.c
    +++ linux-2.6.15.4/arch/powerpc/platforms/cell/interrupt.c
    @@ -63,7 +63,24 @@ static DEFINE_PER_CPU(struct iic, iic);

    void iic_local_enable(void)
    {
    - out_be64(&__get_cpu_var(iic).regs->prio, 0xff);
    + struct iic *iic = &__get_cpu_var(iic);
    + u64 tmp;
    +
    + /*
    + * There seems to be a bug that is present in DD2.x CPUs
    + * and still only partially fixed in DD3.1.
    + * This bug causes a value written to the priority register
    + * not to make it there, resulting in a system hang unless we
    + * write it again.
    + * Masking with 0xf0 is done because the Cell BE does not
    + * implement the lower four bits of the interrupt priority,
    + * they always read back as zeroes, although future CPUs
    + * might implement different bits.
    + */
    + do {
    + out_be64(&iic->regs->prio, 0xff);
    + tmp = in_be64(&iic->regs->prio);
    + } while ((tmp & 0xf0) != 0xf0);
    }

    void iic_local_disable(void)
    --

    -
    To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
    the body of a message to majordomo@vger.kernel.org
    More majordomo info at http://vger.kernel.org/majordomo-info.html
    Please read the FAQ at http://www.tux.org/lkml/

    \
     
     \ /
      Last update: 2006-03-23 21:43    [W:0.021 / U:1.372 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site