net/macb: improve big endian CPU support
The commita50dad355a
(net: macb: Add big endian CPU support) converted I/O accessors to readl_relaxed() and writel_relaxed() and consequentially broke MACB driver on AVR32 platforms such as ATNGW100. This patch improves I/O access by checking endiannes first and use the corresponding methods. Fixes:a50dad355a
(net: macb: Add big endian CPU support) Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:

committed by
David S. Miller

parent
dfbafc9953
commit
f2ce8a9e48
@@ -429,18 +429,12 @@
|
||||
| GEM_BF(name, value))
|
||||
|
||||
/* Register access macros */
|
||||
#define macb_readl(port,reg) \
|
||||
readl_relaxed((port)->regs + MACB_##reg)
|
||||
#define macb_writel(port,reg,value) \
|
||||
writel_relaxed((value), (port)->regs + MACB_##reg)
|
||||
#define gem_readl(port, reg) \
|
||||
readl_relaxed((port)->regs + GEM_##reg)
|
||||
#define gem_writel(port, reg, value) \
|
||||
writel_relaxed((value), (port)->regs + GEM_##reg)
|
||||
#define queue_readl(queue, reg) \
|
||||
readl_relaxed((queue)->bp->regs + (queue)->reg)
|
||||
#define queue_writel(queue, reg, value) \
|
||||
writel_relaxed((value), (queue)->bp->regs + (queue)->reg)
|
||||
#define macb_readl(port, reg) (port)->readl((port), MACB_##reg)
|
||||
#define macb_writel(port, reg, value) (port)->writel((port), MACB_##reg, (value))
|
||||
#define gem_readl(port, reg) (port)->readl((port), GEM_##reg)
|
||||
#define gem_writel(port, reg, value) (port)->writel((port), GEM_##reg, (value))
|
||||
#define queue_readl(queue, reg) (queue)->bp->readl((queue)->bp, (queue)->reg)
|
||||
#define queue_writel(queue, reg, value) (queue)->bp->writel((queue)->bp, (queue)->reg, (value))
|
||||
|
||||
/* Conditional GEM/MACB macros. These perform the operation to the correct
|
||||
* register dependent on whether the device is a GEM or a MACB. For registers
|
||||
@@ -785,6 +779,11 @@ struct macb_queue {
|
||||
|
||||
struct macb {
|
||||
void __iomem *regs;
|
||||
bool native_io;
|
||||
|
||||
/* hardware IO accessors */
|
||||
u32 (*readl)(struct macb *bp, int offset);
|
||||
void (*writel)(struct macb *bp, int offset, u32 value);
|
||||
|
||||
unsigned int rx_tail;
|
||||
unsigned int rx_prepared_head;
|
||||
@@ -843,9 +842,4 @@ static inline bool macb_is_gem(struct macb *bp)
|
||||
return !!(bp->caps & MACB_CAPS_MACB_IS_GEM);
|
||||
}
|
||||
|
||||
static inline bool macb_is_gem_hw(void __iomem *addr)
|
||||
{
|
||||
return !!(MACB_BFEXT(IDNUM, readl_relaxed(addr + MACB_MID)) >= 0x2);
|
||||
}
|
||||
|
||||
#endif /* _MACB_H */
|
||||
|
Reference in New Issue
Block a user