From 10eedb9fa67e928600fc4f73a20ff3e0ff3df270 Mon Sep 17 00:00:00 2001 From: Sebastian Huber Date: Wed, 5 Oct 2016 14:04:07 +0200 Subject: bsp/atsam: Fix PHY detection --- c/src/lib/libbsp/arm/atsam/network/if_atsam.c | 27 +++++++++++---------------- 1 file changed, 11 insertions(+), 16 deletions(-) diff --git a/c/src/lib/libbsp/arm/atsam/network/if_atsam.c b/c/src/lib/libbsp/arm/atsam/network/if_atsam.c index db3f729c1e..61c0b9bcc8 100644 --- a/c/src/lib/libbsp/arm/atsam/network/if_atsam.c +++ b/c/src/lib/libbsp/arm/atsam/network/if_atsam.c @@ -248,38 +248,33 @@ if_atsam_read_phy(Gmac *pHw, static void atsamv7_find_valid_phy(if_atsam_gmac *gmac_inst) { Gmac *pHw = gmac_inst->gGmacd.pHw; - - uint32_t retry_max; uint32_t value = 0; - uint8_t rc; uint8_t phy_address; + int i; - phy_address = gmac_inst->phy_address; - retry_max = gmac_inst->retries; - - if (phy_address != 0xFF) { + if (gmac_inst->phy_address != 0xFF) { return; } /* Find another one */ - rc = 0xFF; + phy_address = 0xFF; - for (phy_address = 0; phy_address < 32; ++phy_address) { + for (i = 31; i >= 0; --i) { int rv; - rv = if_atsam_read_phy(pHw, phy_address, MII_PHYIDR1, - &value, retry_max); - if (rv == 0 && value != 0 && value >= 0xffff) { - rc = phy_address; + rv = if_atsam_read_phy(pHw, (uint8_t)i, MII_PHYIDR1, + &value, gmac_inst->retries); + if (rv == 0 && value != 0 && value < 0xffff) { + phy_address = (uint8_t)i; break; } } - if (rc != 0xFF) { + if (phy_address != 0xFF) { if_atsam_read_phy(pHw, phy_address, MII_PHYIDR1, &value, - retry_max); + gmac_inst->retries); if_atsam_read_phy(pHw, phy_address, MII_PHYIDR2, &value, - retry_max); + gmac_inst->retries); gmac_inst->phy_address = phy_address; } } -- cgit v1.2.3