On 10 April 2011 12:09, Peter Lebbing <[email protected]> wrote:
> So, do you have any ideas on the best way to properly handle this PHY that
> looks
> like 32 PHYs?
Take a look at ar71xx, they define a (machine dependent) phy mask for
each eth that says at which phy addresses a device may attach.
e.g. the rs pro setup code has:
ar71xx_add_device_mdio(~(UBNT_RSPRO_WAN_PHYMASK |
UBNT_RSPRO_LAN_PHYMASK));
ar71xx_init_mac(ar71xx_eth0_data.mac_addr, ar71xx_mac_base, 0);
ar71xx_eth0_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
ar71xx_eth0_data.phy_mask = UBNT_RSPRO_WAN_PHYMASK;
ubnt_init_secondary_mac(ar71xx_mac_base);
ar71xx_eth1_data.phy_if_mode = PHY_INTERFACE_MODE_RGMII;
ar71xx_eth1_data.phy_mask = UBNT_RSPRO_LAN_PHYMASK;
ar71xx_eth1_data.speed = SPEED_1000;
ar71xx_eth1_data.duplex = DUPLEX_FULL;
This results that only for one of the "allowed" phy masks a phy driver
gets attached:
static int ag71xx_phy_connect_multi(struct ag71xx *ag)
{
(...)
for (phy_addr = 0; phy_addr < PHY_MAX_ADDR; phy_addr++) {
if (!(pdata->phy_mask & (1 << phy_addr)))
continue;
if (ag->mii_bus->phy_map[phy_addr] == NULL)
continue;
if (phydev == NULL)
phydev = ag->mii_bus->phy_map[phy_addr];
}
(...)
ag->phy_dev = phy_connect(dev, dev_name(&phydev->dev),
&ag71xx_phy_link_adjust, 0,
pdata->phy_if_mode);
(...)
}
Of course this assumes you already know which device you have.
Regards
Jonas
_______________________________________________
openwrt-devel mailing list
[email protected]
https://lists.openwrt.org/mailman/listinfo/openwrt-devel