aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKornel Duleba <mindal@semihalf.com>2021-07-28 09:23:23 +0000
committerMarcin Wojtas <mw@FreeBSD.org>2021-08-03 10:07:49 +0000
commit5ad6d28cbe6b3ff85e49607a7e04cb68db3ed6df (patch)
treee178727c25007b8da2c89dbc58aadf842808805b
parentbfce69ae9a0731f87574fcbe96f14e5f8e77f036 (diff)
downloadsrc-5ad6d28cbe6b3ff85e49607a7e04cb68db3ed6df.tar.gz
src-5ad6d28cbe6b3ff85e49607a7e04cb68db3ed6df.zip
enetc: Support building the driver as a loadable module.
Function level reset has to be done in attach in order to put the hardware in a known state before configuring it. The order of DRIVER_MODULEs was changed to ensure that the miibus driver is loaded when mii_attach is called. Obtained from: Semihalf Sponsored by: Alstom Group
-rw-r--r--sys/dev/enetc/if_enetc.c6
-rw-r--r--sys/modules/Makefile2
-rw-r--r--sys/modules/enetc/Makefile8
3 files changed, 15 insertions, 1 deletions
diff --git a/sys/dev/enetc/if_enetc.c b/sys/dev/enetc/if_enetc.c
index 54cdc6ea9ad4..46327eb419bf 100644
--- a/sys/dev/enetc/if_enetc.c
+++ b/sys/dev/enetc/if_enetc.c
@@ -158,8 +158,8 @@ static driver_t enetc_driver = {
};
static devclass_t enetc_devclass;
-DRIVER_MODULE(enetc, pci, enetc_driver, enetc_devclass, NULL, NULL);
DRIVER_MODULE(miibus, enetc, miibus_driver, miibus_devclass, NULL, NULL);
+DRIVER_MODULE(enetc, pci, enetc_driver, enetc_devclass, NULL, NULL);
MODULE_VERSION(enetc, 1);
IFLIB_PNP_INFO(pci, enetc, enetc_vendor_info_array);
@@ -366,6 +366,10 @@ enetc_attach_pre(if_ctx_t ctx)
sc->shared = scctx;
ifp = iflib_get_ifp(ctx);
+ pci_save_state(sc->dev);
+ pcie_flr(sc->dev, 1000, false);
+ pci_restore_state(sc->dev);
+
rid = PCIR_BAR(ENETC_BAR_REGS);
sc->regs = bus_alloc_resource_any(sc->dev, SYS_RES_MEMORY, &rid, RF_ACTIVE);
if (sc->regs == NULL) {
diff --git a/sys/modules/Makefile b/sys/modules/Makefile
index e6e683ecd65e..0ba139977968 100644
--- a/sys/modules/Makefile
+++ b/sys/modules/Makefile
@@ -111,6 +111,7 @@ SUBDIR= \
${_efirt} \
${_em} \
${_ena} \
+ ${_enetc} \
esp \
${_et} \
evdev \
@@ -612,6 +613,7 @@ _allwinner= allwinner
_armv8crypto= armv8crypto
_dwwdt= dwwdt
_em= em
+_enetc= enetc
_felix= felix
_rockchip= rockchip
.endif
diff --git a/sys/modules/enetc/Makefile b/sys/modules/enetc/Makefile
new file mode 100644
index 000000000000..694ec2043f37
--- /dev/null
+++ b/sys/modules/enetc/Makefile
@@ -0,0 +1,8 @@
+#$FreeBSD$
+
+.PATH: ${SRCTOP}/sys/dev/enetc
+
+KMOD = if_enetc
+SRCS = if_enetc.c enetc_mdio.c
+
+.include <bsd.kmod.mk>