
On Thursday, June 24, 2010 05:31:47 Tor Krill wrote:
void reset_phy(void) { char *name = "egiga0";
u8 port_addr[] = CONFIG_PHY_ADDRS;
if (miiphy_set_current_dev(name)) return;
/* reset the phy */
- miiphy_reset(name, CONFIG_PHY_BASE_ADR);
- miiphy_reset(name, port_addr[0]);
}
hmm, this cant possibly be correct. how do you know which of the phys is to be reset ? but i guess that's just a bug in the ARM tree you cant do much about without fixing everyone.
--- a/drivers/net/kirkwood_egiga.c +++ b/drivers/net/kirkwood_egiga.c @@ -629,6 +629,7 @@ int kirkwood_egiga_initialize(bd_t * bis) int devnum; char *s; u8 used_ports[MAX_KWGBE_DEVS] = CONFIG_KIRKWOOD_EGIGA_PORTS;
u8 port_addr[MAX_KWGBE_DEVS] = PHY_ADDRS;
for (devnum = 0; devnum < MAX_KWGBE_DEVS; devnum++) { /*skip if port is configured not to use */
@@ -712,7 +713,7 @@ int kirkwood_egiga_initialize(bd_t * bis) miiphy_register(dev->name, smi_reg_read, smi_reg_write); /* Set phy address of the port */ miiphy_write(dev->name, KIRKWOOD_PHY_ADR_REQUEST,
KIRKWOOD_PHY_ADR_REQUEST, PHY_BASE_ADR + devnum);
KIRKWOOD_PHY_ADR_REQUEST, port_addr[devnum]);
#endif } return 0; --- a/drivers/net/kirkwood_egiga.h +++ b/drivers/net/kirkwood_egiga.h @@ -30,11 +30,11 @@
#define MAX_KWGBE_DEVS 2 /*controller has two ports */
-/* PHY_BASE_ADR is board specific and can be configured */ -#if defined (CONFIG_PHY_BASE_ADR) -#define PHY_BASE_ADR CONFIG_PHY_BASE_ADR +/* PHY addresses is board specific and can be configured */ +#if defined (CONFIG_PHY_ADDRS) +#define PHY_ADDRS CONFIG_PHY_ADDRS #else -#define PHY_BASE_ADR 0x08 /* default phy base addr */ +#define PHY_ADDRS {0x08,0x09} /* default phy base addr */ #endif
i dont know anything about the kirkwood_egiga, but cant you have more than one instance on a board ? if so, it'd make more sense to change the phy addr define stuff into an array argument that gets passed to the driver init func. -mike