I'm currently using an i.MX8MP running the Zephyr OS and want to utilize enet qos under this system. The externally connected PHY is a DP83630 using the RMII bus. The DP83630 acts as the master providing a 50MHz clock. The enet qos clock configuration is as follows:
CLOCK_DisableClock(kCLOCK_Enet_Qos);
CLOCK_SetRootMux(kCLOCK_RootEnetAxi, kCLOCK_EnetAxiRootmuxSysPll1Div3);
CLOCK_SetRootDivider(kCLOCK_RootEnetAxi, 1U, 1U);
CLOCK_SetRootMux(kCLOCK_RootEnetQos, kCLOCK_EnetQosRootmuxSysPll2Div20);
CLOCK_SetRootDivider(kCLOCK_RootEnetQos, 1U, 1U);
CLOCK_SetRootMux(kCLOCK_RootEnetQosTimer, kCLOCK_EnetQosTimerRootmuxSysPll2Div10);
CLOCK_SetRootDivider(kCLOCK_RootEnetQosTimer, 1U, 1U);
CLOCK_EnableClock(kCLOCK_Enet_Qos);
When initializing MDIO, the system hangs after calling the ENET_QOS_SetSMI(ENET_QOS_Type *base, uint32_t csrClock_Hz) function. Specifically, it hangs at the line:
base->MAC_MDIO_ADDRESS = ENET_QOS_MAC_MDIO_ADDRESS_CR(crDiv);
It appears that accessing the enet qos registers causes the system to hang. Could this issue be related to an error in the clock configuration?
Hi,
Thank you for your interest in NXP Semiconductor products,
In your setup, the best idea would be to probe the MDIO bus, confirm that you have the pull-up in MDIO line, probe that the timing of MDIO and MDC complies with MDIO specification, the PHY address is correct and that the PHY returns a message.
Regards