Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

blackfin: bf60x: twi: work around temporary anomaly 0501001

Disable IRQ when reading MMR rcv_data8 and rcv_data16.

Signed-off-by: Sonic Zhang <sonic.zhang@analog.com>
Signed-off-by: Bob Liu <lliubbo@gmail.com>

authored by

Sonic Zhang and committed by
Bob Liu
c41704f5 1e92bf6d

+27
+27
arch/blackfin/include/asm/bfin_twi.h
··· 83 83 DEFINE_TWI_REG(FIFO_STAT, fifo_stat) 84 84 DEFINE_TWI_REG(XMT_DATA8, xmt_data8) 85 85 DEFINE_TWI_REG(XMT_DATA16, xmt_data16) 86 + #if !ANOMALY_05001001 86 87 DEFINE_TWI_REG(RCV_DATA8, rcv_data8) 87 88 DEFINE_TWI_REG(RCV_DATA16, rcv_data16) 89 + #else 90 + static inline u16 read_RCV_DATA8(struct bfin_twi_iface *iface) 91 + { 92 + u16 ret; 93 + unsigned long flags; 94 + 95 + flags = hard_local_irq_save(); 96 + ret = iface->regs_base->rcv_data8; 97 + hard_local_irq_restore(flags); 98 + 99 + return ret; 100 + } 101 + 102 + static inline u16 read_RCV_DATA16(struct bfin_twi_iface *iface) 103 + { 104 + u16 ret; 105 + unsigned long flags; 106 + 107 + flags = hard_local_irq_save(); 108 + ret = iface->regs_base->rcv_data16; 109 + hard_local_irq_restore(flags); 110 + 111 + return ret; 112 + } 113 + #endif 114 + 88 115 89 116 /* ******************** TWO-WIRE INTERFACE (TWI) MASKS ***********************/ 90 117 /* TWI_CLKDIV Macros (Use: *pTWI_CLKDIV = CLKLOW(x)|CLKHI(y); ) */