diff -Nru a/arch/ppc/syslib/mv64x60.c b/arch/ppc/syslib/mv64x60.c --- a/arch/ppc/syslib/mv64x60.c 2005-02-02 17:15:26 -07:00 +++ b/arch/ppc/syslib/mv64x60.c 2005-02-02 17:15:26 -07:00 @@ -32,7 +32,7 @@ u8 mv64x60_pci_exclude_bridge = 1; -spinlock_t mv64x60_lock; /* Only really used by PIC code once init done */ +spinlock_t mv64x60_lock = SPIN_LOCK_UNLOCKED; static phys_addr_t mv64x60_bridge_pbase = 0; static void *mv64x60_bridge_vbase = 0; diff -Nru a/include/asm-ppc/mv64x60.h b/include/asm-ppc/mv64x60.h --- a/include/asm-ppc/mv64x60.h 2005-02-02 17:15:26 -07:00 +++ b/include/asm-ppc/mv64x60.h 2005-02-02 17:15:26 -07:00 @@ -254,10 +254,12 @@ extern inline u32 mv64x60_read(struct mv64x60_handle *bh, u32 offset) { ulong flags; + u32 reg; spin_lock_irqsave(&mv64x60_lock, flags); - return in_le32(bh->v_base + offset); + reg = in_le32(bh->v_base + offset); spin_unlock_irqrestore(&mv64x60_lock, flags); + return reg; } extern inline void @@ -267,9 +269,9 @@ ulong flags; spin_lock_irqsave(&mv64x60_lock, flags); - reg = mv64x60_read(bh, offs) & (~mask); /* zero bits we care about */ - reg |= data & mask; /* set bits from the data */ - mv64x60_write(bh, offs, reg); + reg = in_le32(bh->v_base + offs) & (~mask); + reg |= data & mask; + out_le32(bh->v_base + offs, reg); spin_unlock_irqrestore(&mv64x60_lock, flags); }