Commit 557b377d authored by Jens Gehrlein's avatar Jens Gehrlein Committed by Ben Warren
Browse files

smc911x: add 16 bit support

Signed-off-by: default avatarJens Gehrlein <>
Signed-off-by: default avatarBen Warren <>
parent 2c8d4196
......@@ -786,6 +786,21 @@ The following options need to be configured:
Define this to use i/o functions instead of macros
(some hardware wont work with macros)
Support for SMSC's LAN911x and LAN921x chips
Define this to hold the physical address
of the device (I/O space)
Define this if data bus is 32 bits
Define this if data bus is 16 bits. If your processor
automatically converts one 32 bit word to two 16 bit
words you may also try CONFIG_DRIVER_SMC911X_32_BIT.
- USB Support:
At the moment only the UHCI host controller is
supported (PIP405, MIP405, MPC5200); define
......@@ -30,6 +30,12 @@
#include <net.h>
#include <miiphy.h>
#if defined (CONFIG_DRIVER_SMC911X_32_BIT) && \
defined (CONFIG_DRIVER_SMC911X_16_BIT)
#error "SMC911X: Only one of CONFIG_DRIVER_SMC911X_32_BIT and \
CONFIG_DRIVER_SMC911X_16_BIT shall be set"
static inline u32 reg_read(u32 addr)
......@@ -39,9 +45,20 @@ static inline void reg_write(u32 addr, u32 val)
*(volatile u32*)addr = val;
static inline u32 reg_read(u32 addr)
volatile u16 *addr_16 = (u16 *)addr;
return ((*addr_16 & 0x0000ffff) | (*(addr_16 + 1) << 16));
static inline void reg_write(u32 addr, u32 val)
*(volatile u16*)addr = (u16)val;
*(volatile u16*)(addr + 2) = (u16)(val >> 16);
#error "SMC911X: Only 32-bit bus is supported"
#error "SMC911X: undefined bus width"
#endif /* CONFIG_DRIVER_SMC911X_16_BIT */
#define mdelay(n) udelay((n)*1000)
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment