From: Sepherosa Ziehau Date: Mon, 2 Jul 2012 08:20:05 +0000 (+0800) Subject: bge: Workaround mbox write reordering for PCI-X devices X-Git-Tag: v3.2.0~705 X-Git-Url: https://gitweb.dragonflybsd.org/dragonfly.git/commitdiff_plain/e8b8fe834af9a19b1be50e90a51cc49735a699b3 bge: Workaround mbox write reordering for PCI-X devices Add per device tunable hw.bgeX.mbox_reorder to control this; it is off by default. Based-on: FreeBSD 232848 --- diff --git a/sys/dev/netif/bge/if_bge.c b/sys/dev/netif/bge/if_bge.c index 56cc5895aa..c99ffef433 100644 --- a/sys/dev/netif/bge/if_bge.c +++ b/sys/dev/netif/bge/if_bge.c @@ -497,6 +497,8 @@ bge_writembx(struct bge_softc *sc, int off, int val) off += BGE_LPMBX_IRQ0_HI - BGE_MBX_IRQ0_HI; CSR_WRITE_4(sc, off, val); + if (sc->bge_mbox_reorder) + CSR_READ_4(sc, off); } static uint8_t @@ -2155,6 +2157,8 @@ bge_attach(device_t dev) BGE_PCISTATE_PCI_BUSMODE) == 0) { sc->bge_flags |= BGE_FLAG_PCIX; sc->bge_pcixcap = pci_get_pcixcap_ptr(sc->bge_dev); + sc->bge_mbox_reorder = device_getenv_int(sc->bge_dev, + "mbox_reorder", 0); } } diff --git a/sys/dev/netif/bge/if_bgereg.h b/sys/dev/netif/bge/if_bgereg.h index 43fc2a910c..4d585f8624 100644 --- a/sys/dev/netif/bge/if_bgereg.h +++ b/sys/dev/netif/bge/if_bgereg.h @@ -2553,6 +2553,7 @@ struct bge_softc { uint32_t bge_tx_buf_ratio; uint32_t bge_mi_mode; int bge_force_defrag; + int bge_mbox_reorder; int bge_if_flags; int bge_txcnt; int bge_link;