Message ID | 79dd23aab0fc1ca1284c933425453690c61052b9.1475604954.git.chunkeey@gmail.com |
---|---|
State | Changes Requested |
Headers | show |
Hi comment inline On 04/10/2016 22:55, Christian Lamparter wrote: > The commit "generic: ar8216: add sanity check to ar8216_probe" > (774da6c7a40320a320b28d71291c0e61fcf7bc8a) stated that PHY IDs > should be checked at address 0-4. However, the PHY 4 was > never check by the loop. This patch extends the check to be > similar to the Atheors SDK. It tries all 4 ports and skips > unconnected PHYs if necessary. If it cannot find any familiar > PHYs, it will prevent the phy driver from initializing. > > This patch is necessary for the C-60. It doesn't have a > PHY at port 3, so this caused the check in ar8xxx_is_possible > to fail. As a result, the ethernet ports on the C-60 didn't > work. > > Signed-off-by: Christian Lamparter <chunkeey@gmail.com> > --- > target/linux/generic/files/drivers/net/phy/ar8216.c | 11 +++++++---- > 1 file changed, 7 insertions(+), 4 deletions(-) > > diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c > index 70f4774..3f1e151 100644 > --- a/target/linux/generic/files/drivers/net/phy/ar8216.c > +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c > @@ -2113,19 +2113,22 @@ ar8xxx_phy_match(u32 phy_id) > static bool > ar8xxx_is_possible(struct mii_bus *bus) > { > - unsigned i; > + unsigned int i, found_phys = 0; > > - for (i = 0; i < 4; i++) { > + for (i = 0; i < 5; i++) { > u32 phy_id; > > phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16; > phy_id |= mdiobus_read(bus, i, MII_PHYSID2); > - if (!ar8xxx_phy_match(phy_id)) { > + if (ar8xxx_phy_match(phy_id)) { > + found_phys++; > + } else if (phy_id) { > pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n", > dev_name(&bus->dev), i, phy_id); > - return false; > } > } > + if (found_phys == 0) > + return false; > > return true; return !!found_phys; would be enough here John > } >
diff --git a/target/linux/generic/files/drivers/net/phy/ar8216.c b/target/linux/generic/files/drivers/net/phy/ar8216.c index 70f4774..3f1e151 100644 --- a/target/linux/generic/files/drivers/net/phy/ar8216.c +++ b/target/linux/generic/files/drivers/net/phy/ar8216.c @@ -2113,19 +2113,22 @@ ar8xxx_phy_match(u32 phy_id) static bool ar8xxx_is_possible(struct mii_bus *bus) { - unsigned i; + unsigned int i, found_phys = 0; - for (i = 0; i < 4; i++) { + for (i = 0; i < 5; i++) { u32 phy_id; phy_id = mdiobus_read(bus, i, MII_PHYSID1) << 16; phy_id |= mdiobus_read(bus, i, MII_PHYSID2); - if (!ar8xxx_phy_match(phy_id)) { + if (ar8xxx_phy_match(phy_id)) { + found_phys++; + } else if (phy_id) { pr_debug("ar8xxx: unknown PHY at %s:%02x id:%08x\n", dev_name(&bus->dev), i, phy_id); - return false; } } + if (found_phys == 0) + return false; return true; }
The commit "generic: ar8216: add sanity check to ar8216_probe" (774da6c7a40320a320b28d71291c0e61fcf7bc8a) stated that PHY IDs should be checked at address 0-4. However, the PHY 4 was never check by the loop. This patch extends the check to be similar to the Atheors SDK. It tries all 4 ports and skips unconnected PHYs if necessary. If it cannot find any familiar PHYs, it will prevent the phy driver from initializing. This patch is necessary for the C-60. It doesn't have a PHY at port 3, so this caused the check in ar8xxx_is_possible to fail. As a result, the ethernet ports on the C-60 didn't work. Signed-off-by: Christian Lamparter <chunkeey@gmail.com> --- target/linux/generic/files/drivers/net/phy/ar8216.c | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-)