diff options
author | 2018-09-10 04:59:32 +0000 | |
---|---|---|
committer | 2018-09-10 04:59:32 +0000 | |
commit | c6900e6b7560369c60b98052be41740d5d3e5ea4 (patch) | |
tree | e245a6b6a4050a70c736ca87d7d65b177760798f | |
parent | if the adapter can't determine the phy type on a port, pretend it's baseCR (diff) | |
download | wireguard-openbsd-c6900e6b7560369c60b98052be41740d5d3e5ea4.tar.xz wireguard-openbsd-c6900e6b7560369c60b98052be41740d5d3e5ea4.zip |
put the port into autonegotiate mode on attach, since that's the default
media setting.
tested by and ok ccardenas@
-rw-r--r-- | sys/dev/pci/if_bnxt.c | 22 |
1 files changed, 21 insertions, 1 deletions
diff --git a/sys/dev/pci/if_bnxt.c b/sys/dev/pci/if_bnxt.c index 34b9b97ddd1..dace2f60d9e 100644 --- a/sys/dev/pci/if_bnxt.c +++ b/sys/dev/pci/if_bnxt.c @@ -1,4 +1,4 @@ -/* $OpenBSD: if_bnxt.c,v 1.14 2018/09/10 04:56:13 jmatthew Exp $ */ +/* $OpenBSD: if_bnxt.c,v 1.15 2018/09/10 04:59:32 jmatthew Exp $ */ /*- * Broadcom NetXtreme-C/E network driver. * @@ -276,6 +276,7 @@ int bnxt_intr(void *); void bnxt_watchdog(struct ifnet *); void bnxt_media_status(struct ifnet *, struct ifmediareq *); int bnxt_media_change(struct ifnet *); +int bnxt_media_autonegotiate(struct bnxt_softc *); struct cmpl_base *bnxt_cpr_next_cmpl(struct bnxt_softc *, struct bnxt_cp_ring *); void bnxt_cpr_commit(struct bnxt_softc *, struct bnxt_cp_ring *); @@ -607,6 +608,7 @@ bnxt_attach(struct device *parent, struct device *self, void *aux) timeout_set(&sc->sc_rx_refill, bnxt_refill, sc); + bnxt_media_autonegotiate(sc); bnxt_hwrm_port_phy_qcfg(sc, NULL); return; @@ -1708,6 +1710,24 @@ bnxt_media_change(struct ifnet *ifp) return hwrm_send_message(sc, &req, sizeof(req)); } +int +bnxt_media_autonegotiate(struct bnxt_softc *sc) +{ + struct hwrm_port_phy_cfg_input req = {0}; + + if (sc->sc_flags & BNXT_FLAG_NPAR) + return ENODEV; + + bnxt_hwrm_cmd_hdr_init(sc, &req, HWRM_PORT_PHY_CFG); + req.auto_mode |= HWRM_PORT_PHY_CFG_INPUT_AUTO_MODE_ALL_SPEEDS; + req.enables |= htole32(HWRM_PORT_PHY_CFG_INPUT_ENABLES_AUTO_MODE); + req.flags |= htole32(HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESTART_AUTONEG); + req.flags |= htole32(HWRM_PORT_PHY_CFG_INPUT_FLAGS_RESET_PHY); + + return hwrm_send_message(sc, &req, sizeof(req)); +} + + void bnxt_mark_cpr_invalid(struct bnxt_cp_ring *cpr) { |