diff options
| -rw-r--r-- | arch/ppc/syslib/mv64x60.c | 2 | ||||
| -rw-r--r-- | include/asm-ppc/mv64x60.h | 10 |
2 files changed, 7 insertions, 5 deletions
diff --git a/arch/ppc/syslib/mv64x60.c b/arch/ppc/syslib/mv64x60.c index 1d12c3165ec9..b06c8c762bb7 100644 --- a/arch/ppc/syslib/mv64x60.c +++ b/arch/ppc/syslib/mv64x60.c @@ -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 --git a/include/asm-ppc/mv64x60.h b/include/asm-ppc/mv64x60.h index 24423b5b74ef..cc25b921ad4f 100644 --- a/include/asm-ppc/mv64x60.h +++ b/include/asm-ppc/mv64x60.h @@ -254,10 +254,12 @@ mv64x60_write(struct mv64x60_handle *bh, u32 offset, u32 val) { 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 @@ mv64x60_modify(struct mv64x60_handle *bh, u32 offs, u32 data, u32 mask) 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); } |
