|
|
|
@ -271,6 +271,47 @@ static inline void OUTL (struct eth_device *dev, int command, u_long addr) |
|
|
|
|
*(volatile u32 *) ((addr + dev->iobase)) = cpu_to_le32 (command); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
#if defined (CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII) |
|
|
|
|
static inline int INL (struct eth_device *dev, u_long addr) |
|
|
|
|
{ |
|
|
|
|
return le32_to_cpu (*(volatile u32 *) (addr + dev->iobase)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int miiphy_read (unsigned char addr, |
|
|
|
|
unsigned char reg, |
|
|
|
|
unsigned short *value) |
|
|
|
|
{ |
|
|
|
|
int cmd = (2 << 26) | ((addr & 0x1f) << 21) | ((reg & 0x1f) << 16); |
|
|
|
|
|
|
|
|
|
struct eth_device *dev = eth_get_dev (); |
|
|
|
|
|
|
|
|
|
OUTL (dev, cmd, SCBCtrlMDI); |
|
|
|
|
|
|
|
|
|
do { |
|
|
|
|
cmd = INL (dev, SCBCtrlMDI); |
|
|
|
|
} while (!(cmd & (1 << 28))); |
|
|
|
|
|
|
|
|
|
*value = (unsigned short) (cmd & 0xffff); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
int miiphy_write (unsigned char addr, |
|
|
|
|
unsigned char reg, |
|
|
|
|
unsigned short value) |
|
|
|
|
{ |
|
|
|
|
int cmd = (1 << 26) | ((addr & 0x1f) << 21) | ((reg & 0x1f) << 16); |
|
|
|
|
|
|
|
|
|
struct eth_device *dev = eth_get_dev (); |
|
|
|
|
|
|
|
|
|
OUTL (dev, cmd | value, SCBCtrlMDI); |
|
|
|
|
|
|
|
|
|
while (!(INL (dev, SCBCtrlMDI) & (1 << 28))); |
|
|
|
|
|
|
|
|
|
return 0; |
|
|
|
|
} |
|
|
|
|
#endif /* (CONFIG_MII) || (CONFIG_COMMANDS & CFG_CMD_MII) */ |
|
|
|
|
|
|
|
|
|
/* Wait for the chip get the command.
|
|
|
|
|
*/ |
|
|
|
|
static int wait_for_eepro100 (struct eth_device *dev) |
|
|
|
|