Re: [U-Boot] [PATCH 3/3] net: phy: aquantia: autodetect if firmware needs to be loaded

2018-10-22 Thread Joe Hershberger
On Tue, Sep 18, 2018 at 4:53 PM Jeremy Gebben  wrote:
>
> 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 

Acked-by: Joe Hershberger 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH 3/3] net: phy: aquantia: autodetect if firmware needs to be loaded

2018-09-18 Thread Jeremy Gebben
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 
---
 drivers/net/phy/aquantia.c | 28 ++--
 1 file changed, 22 insertions(+), 6 deletions(-)

diff --git a/drivers/net/phy/aquantia.c b/drivers/net/phy/aquantia.c
index cbd70120d1..37749e0185 100644
--- a/drivers/net/phy/aquantia.c
+++ b/drivers/net/phy/aquantia.c
@@ -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);
 
-- 
2.17.1

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot