mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-09-25 07:41:40 +02:00
net: phy: aquantia: wait for phy init sequence to finish
Aquantia quad-phys may take longer to initialize. This commit adds a polling mechanism for a global alarm bit that tells if phy init sequence is completed. Signed-off-by: Florin Chiculita <florinlaurentiu.chiculita@nxp.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
7c56408be6
commit
bf58916373
@ -37,6 +37,9 @@
|
|||||||
#define GLOBAL_FAULT 0xc850
|
#define GLOBAL_FAULT 0xc850
|
||||||
#define GLOBAL_RSTATUS_1 0xc885
|
#define GLOBAL_RSTATUS_1 0xc885
|
||||||
|
|
||||||
|
#define GLOBAL_ALARM_1 0xcc00
|
||||||
|
#define SYSTEM_READY_BIT 0x40
|
||||||
|
|
||||||
#define GLOBAL_STANDARD_CONTROL 0x0
|
#define GLOBAL_STANDARD_CONTROL 0x0
|
||||||
#define SOFT_RESET BIT(15)
|
#define SOFT_RESET BIT(15)
|
||||||
#define LOW_POWER BIT(11)
|
#define LOW_POWER BIT(11)
|
||||||
@ -258,6 +261,18 @@ int aquantia_config(struct phy_device *phydev)
|
|||||||
{
|
{
|
||||||
u32 val, id, rstatus, fault;
|
u32 val, id, rstatus, fault;
|
||||||
u32 reg_val1 = 0;
|
u32 reg_val1 = 0;
|
||||||
|
int num_retries = 5;
|
||||||
|
|
||||||
|
/*
|
||||||
|
* check if the system is out of reset and init sequence completed.
|
||||||
|
* chip-wide reset for gen1 quad phys takes longer
|
||||||
|
*/
|
||||||
|
while (--num_retries) {
|
||||||
|
rstatus = phy_read(phydev, MDIO_MMD_VEND1, GLOBAL_ALARM_1);
|
||||||
|
if (rstatus & SYSTEM_READY_BIT)
|
||||||
|
break;
|
||||||
|
mdelay(10);
|
||||||
|
}
|
||||||
|
|
||||||
id = phy_read(phydev, MDIO_MMD_VEND1, GLOBAL_FIRMWARE_ID);
|
id = phy_read(phydev, MDIO_MMD_VEND1, GLOBAL_FIRMWARE_ID);
|
||||||
rstatus = phy_read(phydev, MDIO_MMD_VEND1, GLOBAL_RSTATUS_1);
|
rstatus = phy_read(phydev, MDIO_MMD_VEND1, GLOBAL_RSTATUS_1);
|
||||||
|
Loading…
x
Reference in New Issue
Block a user