[PATCH 2/2] ARM: Layerscape: Add LS1021A IOT board support
Sascha Hauer
sha at pengutronix.de
Fri Feb 17 01:36:19 PST 2023
On Thu, Feb 16, 2023 at 01:56:49PM +0000, Renaud Barbier wrote:
>
>
> > -----Original Message-----
> > From: Sascha Hauer <sha at pengutronix.de>
> > Sent: 16 February 2023 12:55
> > To: Renaud Barbier <Renaud.Barbier at ametek.com>
> > Cc: Barebox List <barebox at lists.infradead.org>
> > Subject: Re: [PATCH 2/2] ARM: Layerscape: Add LS1021A IOT board support
> >
> > ***NOTICE*** This came from an external source. Use caution when
> > replying, clicking links, or opening attachments.
> >
> > 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.
> [Barbier, Renaud]
> Indeed,
> barebox at LS1021A-IOT Board:/ miitool -v
> mdio0-phy00: 2d24000.mdio at 2d24000.of: no link
> product info: Generic PHY (vendor 00:00:00, model 0 rev 0)
> basic mode: autonegotiation enabled
> basic status: no link
> capabilities:
> advertising:
> mdio0-phy01: 2d24000.mdio at 2d24000.of: negotiated 100baseTx-FD, link ok
> product info: Generic PHY (vendor 00:13:74, model 7 rev 4)
> basic mode: autonegotiation enabled
> basic status: autonegotiation complete, link ok
> capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
> advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
> link partner: 1000baseT-FD 1000baseT-HD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
> mdio0-phy03: 2d24000.mdio at 2d24000.of: negotiated 100baseTx-FD, link ok
> product info: Generic PHY (vendor 00:13:74, model 7 rev 4)
> basic mode: autonegotiation enabled
> basic status: autonegotiation complete, link ok
> capabilities: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
> advertising: 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD
> link partner: 1000baseT-FD 1000baseT-HD 100baseTx-FD 100baseTx-HD 10baseT-FD 10baseT-HD flow-control
I have no idea what goes wrong here.
Some things to dig further:
A phy is registered in phy_register_device(). The call to register_device()
in that function will end up in mdio_bus_match(). You could add some
debugging there to see which phy ids are matched against each other.
An idea is that the at803x driver is not yet registered by the time
phy_device_connect() is called, but I don't see how this could happen.
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