summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/net/smc911x.h10
1 files changed, 10 insertions, 0 deletions
diff --git a/drivers/net/smc911x.h b/drivers/net/smc911x.h
index 05e007c6d..3e0701031 100644
--- a/drivers/net/smc911x.h
+++ b/drivers/net/smc911x.h
@@ -53,14 +53,24 @@ void smc911x_reg_write(struct eth_device *dev, u32 offset, u32 val)
#elif defined (CONFIG_SMC911X_16_BIT)
static inline u32 smc911x_reg_read(struct eth_device *dev, u32 offset)
{
+#ifdef CONFIG_SNOWBALL
+ volatile u16 *addr_16 = (u16 *)(dev->iobase + 2 * offset);
+ return ((*addr_16 & 0x0000ffff) | (*(addr_16 + 2) << 16));
+#else
volatile u16 *addr_16 = (u16 *)(dev->iobase + offset);
return ((*addr_16 & 0x0000ffff) | (*(addr_16 + 1) << 16));
+#endif
}
static inline void smc911x_reg_write(struct eth_device *dev,
u32 offset, u32 val)
{
+#ifdef CONFIG_SNOWBALL
+ *(volatile u16 *)(dev->iobase + 2 * offset) = (u16)val;
+ *(volatile u16 *)(dev->iobase + 2 * offset + 4) = (u16)(val >> 16);
+#else
*(volatile u16 *)(dev->iobase + offset) = (u16)val;
*(volatile u16 *)(dev->iobase + offset + 2) = (u16)(val >> 16);
+#endif
}
#else
#error "SMC911X: undefined bus width"