mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-26 06:30:39 +00:00
net: phy: aquantia: autodetect if firmware needs to be loaded
If the phy reports a valid firmware version and doesn't indicate a fault, skip loading the firmware. This allows the same image to be used on boards that have firmware storage and those that do not. Signed-off-by: Jeremy Gebben <jgebben@sweptlaser.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
4506423ad2
commit
30a2c8cca8
1 changed files with 22 additions and 6 deletions
|
@ -236,18 +236,34 @@ done:
|
|||
#else
|
||||
static int aquantia_upload_firmware(struct phy_device *phydev)
|
||||
{
|
||||
return 0;
|
||||
printf("ERROR %s firmware loading disabled.\n", phydev->dev->name);
|
||||
return -1;
|
||||
}
|
||||
#endif
|
||||
|
||||
int aquantia_config(struct phy_device *phydev)
|
||||
{
|
||||
u32 val;
|
||||
int ret;
|
||||
u32 val, id, rstatus, fault;
|
||||
|
||||
ret = aquantia_upload_firmware(phydev);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
id = phy_read(phydev, MDIO_MMD_VEND1, GLOBAL_FIRMWARE_ID);
|
||||
rstatus = phy_read(phydev, MDIO_MMD_VEND1, GLOBAL_RSTATUS_1);
|
||||
fault = phy_read(phydev, MDIO_MMD_VEND1, GLOBAL_FAULT);
|
||||
|
||||
if (id != 0)
|
||||
printf("%s running firmware version %X.%X.%X\n",
|
||||
phydev->dev->name, (id >> 8), id & 0xff,
|
||||
(rstatus >> 4) & 0xf);
|
||||
|
||||
if (fault != 0)
|
||||
printf("%s fault 0x%04x detected\n", phydev->dev->name, fault);
|
||||
|
||||
if (id == 0 || fault != 0) {
|
||||
int ret;
|
||||
|
||||
ret = aquantia_upload_firmware(phydev);
|
||||
if (ret != 0)
|
||||
return ret;
|
||||
}
|
||||
|
||||
val = phy_read(phydev, MDIO_MMD_PMAPMD, MII_BMCR);
|
||||
|
||||
|
|
Loading…
Reference in a new issue