static int lpc43_phyread(uint16_t phydevaddr, uint16_t phyregaddr, uint16_t *value) { volatile uint32_t timeout; uint32_t regval; regval = lpc43_getreg(LPC43_ETH_MACMIIA); regval &= ETH_MACMIIA_CR_MASK; regval |= (((uint32_t)phydevaddr << ETH_MACMIIA_PA_SHIFT) & ETH_MACMIIA_PA_MASK); regval |= (((uint32_t)phyregaddr << ETH_MACMIIA_MR_SHIFT) & ETH_MACMIIA_MR_MASK); regval |= ETH_MACMIIA_GB; lpc43_putreg(regval, LPC43_ETH_MACMIIA); for (timeout = 0; timeout < PHY_READ_TIMEOUT; timeout++) { if ((lpc43_getreg(LPC43_ETH_MACMIIA) & ETH_MACMIIA_GB) == 0) { *value = (uint16_t)lpc43_getreg(LPC43_ETH_MACMIID); return OK; } } } |