[PATCH 2/2] ARM: Layerscape: Add LS1021A IOT board support

Sascha Hauer sha at pengutronix.de
Thu Feb 16 04:54:34 PST 2023


On Thu, Feb 16, 2023 at 11:54:14AM +0000, Renaud Barbier wrote:
> 
> 
> > > +
> > > +/* Currently 1000FD is not working. Below is a bit of guess work
> > > + * from reading MMD3/MMD7 of the AR8033  */ static int
> > > +phy_fixup(struct phy_device *phydev) {
> > > +     unsigned short val;
> > > +     int advertise = SUPPORTED_1000baseT_Full |
> > > +SUPPORTED_1000baseT_Half;
> > > +
> > > +     phydev->advertising &= ~advertise;
> > > +
> > > +     /* Ar8031 phy SmartEEE feature cause link status generates glitch,
> > > +      * which cause ethernet link down/up issue, so disable SmartEEE
> > > +      */
> > > +     phy_write(phydev, 0xd, 0x3);
> > > +     phy_write(phydev, 0xe, 0x805d);
> > > +     phy_write(phydev, 0xd, 0x4003);
> > > +     val = phy_read(phydev, 0xe);
> > > +     val &= ~(0x1 << 8);
> > > +     phy_write(phydev, 0xe, val);
> > > +
> > > +     /* Use XTAL */
> > > +     phy_write(phydev, 0xd, 0x7);
> > > +     phy_write(phydev, 0xe, 0x8016);
> > > +     phy_write(phydev, 0xd, 0x4007);
> > > +     val = phy_read(phydev, 0xe);
> > > +     val &= 0xffe3;
> > > +     phy_write(phydev, 0xe, val);
> > > +
> > > +     return 0;
> > > +}
> > 
> > We have a phy driver for the AR8033. Can you use it instead of putting this
> > into board code?
> 
> Hello I have enabled the at803x driver to support the AR8031. However, only the generic PHY driver config_init get called.
> phy_driver_register: 00000000
> register generic for: Generic PHY, 0xffffffff
> phy_driver_register: bbe15d54
> register specific for: Atheros 8035 ethernet, 0x4dd072
> phy_driver_register: bbe15d54
> register specific for: Atheros 8030 ethernet, 0x4dd076
> phy_driver_register: bbe15d54
> register specific for: Atheros 8031 ethernet, 0x4dd074
> 
> call phy_init_hw
> call config_init for: Generic PHY, 0xffffffff
> 
> I do not understand how to connect the AR802x phy driver to the device. Do I need to add something to the device tree?
>
> barebox at LS1021A-IOT Board:/ md -w -s /dev/mdio0-phy03

Is this the only phy or are there others? What does "devinfo mdio0-phy03" say?
miitool -v output might be interesting as well.

I had a short look at your changes to the gianfar driver. You added
this:

+       priv->phyaddr = -1;
+       np = of_parse_phandle_from(dev->device_node, NULL, "phy-handle", 0);
+       if (np) {
+               struct device_node *parent;
+               uint32_t reg = 0;
+
+               /* Get mdio parent */
+               parent = of_get_parent(np);
+               if (!parent)  {
+                       pr_err("No parent node for phy-handle\n");
+                       return PTR_ERR(parent);
+               }
+               priv->gfar_mdio = parent->dev->priv;
+               if (!of_property_read_u32(np, "reg", &reg))
+                       priv->phyaddr = reg;
+       }

This is not necessary when your phy is described in the device tree. You
neither need the mdiobus in the ethernet driver nor the phy address.
Instead, just call:

ret = phy_device_connect(edev, NULL, -1, gfar_adjust_link, 0, interface);

phy_device_connect() will parse the phy-handle property then and connect
the ethernet device to the correct phy.

I am not sure though if that's part of your problem, because correctly
open coding what phy_device_connect() does should have the same effect.

Sascha

-- 
Pengutronix e.K.                           |                             |
Steuerwalder Str. 21                       | http://www.pengutronix.de/  |
31137 Hildesheim, Germany                  | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |



More information about the barebox mailing list