Module Name: src Committed By: lloyd Date: Tue Oct 15 00:58:15 UTC 2024
Modified Files: src/sys/arch/arm/xilinx: zynq_cemac.c src/sys/dev/cadence: if_cemac.c if_cemacvar.h Log Message: Allow non-Realtek PHYs to be used with Zynq SoCs. The cemac driver used to skip the first PHY found in order to work around a bug where Realtek PHYs attached to a cemac Ethernet would report at PHY numbers 0 and 1. Unfortunately if you don't have this bug, then your only PHY would get skipped. The Zynq FDT always has a working PHY number recorded in it, so we now simply use that number (if present) instead of searching for all available PHYs. To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/xilinx/zynq_cemac.c cvs rdiff -u -r1.44 -r1.45 src/sys/dev/cadence/if_cemac.c cvs rdiff -u -r1.6 -r1.7 src/sys/dev/cadence/if_cemacvar.h Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/xilinx/zynq_cemac.c diff -u src/sys/arch/arm/xilinx/zynq_cemac.c:1.9 src/sys/arch/arm/xilinx/zynq_cemac.c:1.10 --- src/sys/arch/arm/xilinx/zynq_cemac.c:1.9 Sun Aug 25 07:25:00 2024 +++ src/sys/arch/arm/xilinx/zynq_cemac.c Tue Oct 15 00:58:15 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: zynq_cemac.c,v 1.9 2024/08/25 07:25:00 skrll Exp $ */ +/* $NetBSD: zynq_cemac.c,v 1.10 2024/10/15 00:58:15 lloyd Exp $ */ /*- * Copyright (c) 2015 Genetec Corporation. All rights reserved. * Written by Hashimoto Kenichi for Genetec Corporation. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: zynq_cemac.c,v 1.9 2024/08/25 07:25:00 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: zynq_cemac.c,v 1.10 2024/10/15 00:58:15 lloyd Exp $"); #include <sys/param.h> @@ -38,16 +38,39 @@ __KERNEL_RCSID(0, "$NetBSD: zynq_cemac.c #include <dev/cadence/if_cemacvar.h> +#include <net/if.h> +#include <net/if_media.h> #include <net/if_ether.h> #include <dev/fdt/fdtvar.h> +#include <dev/mii/mii.h> +#include <dev/mii/miivar.h> + static const struct device_compatible_entry compat_data[] = { { .compat = "cdns,zynq-gem" }, DEVICE_COMPAT_EOL }; static int +cemac_get_phyid(const int phandle) +{ + bus_addr_t addr; + int phy_phandle; + + phy_phandle = fdtbus_get_phandle(phandle, "phy"); + if (phy_phandle == -1) + phy_phandle = fdtbus_get_phandle(phandle, "phy-handle"); + if (phy_phandle == -1) + return MII_PHY_ANY; + + if (fdtbus_get_reg(phy_phandle, 0, &addr, NULL) != 0) + return MII_PHY_ANY; + + return (int)addr; +} + +static int cemac_match(device_t parent, cfdata_t cfdata, void *aux) { struct fdt_attach_args * const faa = aux; @@ -100,6 +123,7 @@ cemac_attach(device_t parent, device_t s sc->sc_dev = self; sc->sc_iot = faa->faa_bst; sc->sc_dmat = faa->faa_dmat; + sc->sc_phyno = cemac_get_phyid(phandle); sc->cemac_flags = CEMAC_FLAG_GEM; cemac_attach_common(sc); Index: src/sys/dev/cadence/if_cemac.c diff -u src/sys/dev/cadence/if_cemac.c:1.44 src/sys/dev/cadence/if_cemac.c:1.45 --- src/sys/dev/cadence/if_cemac.c:1.44 Sun Oct 6 19:18:20 2024 +++ src/sys/dev/cadence/if_cemac.c Tue Oct 15 00:58:15 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cemac.c,v 1.44 2024/10/06 19:18:20 skrll Exp $ */ +/* $NetBSD: if_cemac.c,v 1.45 2024/10/15 00:58:15 lloyd Exp $ */ /* * Copyright (c) 2015 Genetec Corporation. All rights reserved. @@ -48,7 +48,7 @@ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_cemac.c,v 1.44 2024/10/06 19:18:20 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_cemac.c,v 1.45 2024/10/15 00:58:15 lloyd Exp $"); #include <sys/param.h> #include <sys/types.h> @@ -624,7 +624,7 @@ cemac_init(struct cemac_softc *sc) mii->mii_statchg = cemac_statchg; ifmedia_init(&mii->mii_media, IFM_IMASK, cemac_mediachange, cemac_mediastatus); - mii_attach(sc->sc_dev, mii, 0xffffffff, MII_PHY_ANY, 1, 0); + mii_attach(sc->sc_dev, mii, 0xffffffff, sc->sc_phyno, MII_OFFSET_ANY, 0); ifmedia_set(&mii->mii_media, IFM_ETHER | IFM_AUTO); #if 0 Index: src/sys/dev/cadence/if_cemacvar.h diff -u src/sys/dev/cadence/if_cemacvar.h:1.6 src/sys/dev/cadence/if_cemacvar.h:1.7 --- src/sys/dev/cadence/if_cemacvar.h:1.6 Sat Oct 5 07:37:22 2024 +++ src/sys/dev/cadence/if_cemacvar.h Tue Oct 15 00:58:15 2024 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cemacvar.h,v 1.6 2024/10/05 07:37:22 skrll Exp $ */ +/* $NetBSD: if_cemacvar.h,v 1.7 2024/10/15 00:58:15 lloyd Exp $ */ /*- * Copyright (c) 2015 Genetec Corporation. All rights reserved. * Written by Hashimoto Kenichi for Genetec Corporation. @@ -51,6 +51,7 @@ struct cemac_softc { uint8_t sc_enaddr[ETHER_ADDR_LEN]; struct ethercom sc_ethercom; mii_data_t sc_mii; + int sc_phyno; void *rbqpage; unsigned rbqlen;