[PATCH rtems-libbsd 1/3] freebsd/cgem: Add phy address to read it from device tree
Will
nyphbl8d at gmail.com
Wed Mar 1 14:10:04 UTC 2023
On Tue, Feb 28, 2023 at 11:57 PM Padmarao Begari <
padmarao.begari at microchip.com> wrote:
> Read the phy address from the device tree and use it to
> find the phy device if not found then search in the
> range of 0 to 31.
> ---
> freebsd/sys/dev/cadence/if_cgem.c | 41 ++++++++++++++++++++++++++++---
> 1 file changed, 37 insertions(+), 4 deletions(-)
>
> diff --git a/freebsd/sys/dev/cadence/if_cgem.c
> b/freebsd/sys/dev/cadence/if_cgem.c
> index 689c3611..2888a085 100644
> --- a/freebsd/sys/dev/cadence/if_cgem.c
> +++ b/freebsd/sys/dev/cadence/if_cgem.c
> @@ -1217,6 +1217,27 @@ cgem_intr(void *arg)
> CGEM_UNLOCK(sc);
> }
>
> +static int
> +cgem_get_phyaddr(phandle_t node, int *phy_addr)
> +{
> + phandle_t phy_node;
> + pcell_t phy_handle, phy_reg;
> +
> + if (OF_getencprop(node, "phy-handle", (void *)&phy_handle,
> + sizeof(phy_handle)) <= 0)
> + return (ENXIO);
> +
> + phy_node = OF_node_from_xref(phy_handle);
> +
> + if (OF_getencprop(phy_node, "reg", (void *)&phy_reg,
> + sizeof(phy_reg)) <= 0)
> + return (ENXIO);
> +
> + *phy_addr = phy_reg;
> +
> + return (0);
> +}
> +
>
All changes should be gated behind #ifdef __rtems__, even if they're
backports from upstream.
> /* Reset hardware. */
> static void
> cgem_reset(struct cgem_softc *sc)
> @@ -2003,6 +2024,7 @@ cgem_attach(device_t dev)
> pcell_t cell;
> int rid, err;
> u_char eaddr[ETHER_ADDR_LEN];
> + int phy_addr;
>
Same here.
>
> sc->dev = dev;
> CGEM_LOCK_INIT(sc);
> @@ -2091,10 +2113,21 @@ cgem_attach(device_t dev)
> cgem_reset(sc);
> CGEM_UNLOCK(sc);
>
> - /* Attach phy to mii bus. */
> - err = mii_attach(dev, &sc->miibus, ifp,
> - cgem_ifmedia_upd, cgem_ifmedia_sts,
> - BMSR_DEFCAPMASK, MII_PHY_ANY, MII_OFFSET_ANY, 0);
> + err = cgem_get_phyaddr(node, &phy_addr);
> + if (err == 0) {
> + /* Attach phy to mii bus. */
> + err = mii_attach(dev, &sc->miibus, ifp,
> + cgem_ifmedia_upd, cgem_ifmedia_sts,
> + BMSR_DEFCAPMASK, phy_addr,
> MII_OFFSET_ANY, 0);
> + }
> +
> + if (err) {
> + /* Attach phy to mii bus. */
> + err = mii_attach(dev, &sc->miibus, ifp,
> + cgem_ifmedia_upd, cgem_ifmedia_sts,
> + BMSR_DEFCAPMASK, MII_PHY_ANY,
> MII_OFFSET_ANY, 0);
> + }
> +
>
Same here. Also, a simpler implementation would be to have cgem_get_phyaddr
return the PHY address or MII_PHY_ANY on error and fold that all into the
declaration. That would leave the declaration as:
#ifdef __rtems__
int phy_addr = cgem_get_phyaddr(node);
#endif
and the change here as:
/* Attach phy to mii bus. */
err = mii_attach(dev, &sc->miibus, ifp,
cgem_ifmedia_upd, cgem_ifmedia_sts,
#ifdef __rtems__
BMSR_DEFCAPMASK, phy_addr, MII_OFFSET_ANY, 0);
#else /* __rtems__ */
BMSR_DEFCAPMASK, MII_PHY_ANY, MII_OFFSET_ANY, 0);
#endif /* __rtems__ */
if (err) {
> device_printf(dev, "attaching PHYs failed\n");
> cgem_detach(dev);
> --
> 2.25.1
>
> _______________________________________________
> devel mailing list
> devel at rtems.org
> http://lists.rtems.org/mailman/listinfo/devel
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.rtems.org/pipermail/devel/attachments/20230301/47e5a319/attachment.htm>
More information about the devel
mailing list