aboutsummaryrefslogtreecommitdiff
path: root/sys/pci/if_sis.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/pci/if_sis.c')
-rw-r--r--sys/pci/if_sis.c12
1 files changed, 10 insertions, 2 deletions
diff --git a/sys/pci/if_sis.c b/sys/pci/if_sis.c
index 33352b46a0d3..b8fc13053300 100644
--- a/sys/pci/if_sis.c
+++ b/sys/pci/if_sis.c
@@ -1806,8 +1806,16 @@ sis_init(xsc)
CSR_WRITE_4(sc, SIS_RX_LISTPTR, sc->sis_cdata.sis_rx_paddr);
CSR_WRITE_4(sc, SIS_TX_LISTPTR, sc->sis_cdata.sis_tx_paddr);
- /* Set RX configuration */
- CSR_WRITE_4(sc, SIS_RX_CFG, SIS_RXCFG);
+ /* SIS_CFG_EDB_MASTER_EN indicates the EDB bus is used instead of
+ * the PCI bus. When this bit is set, the Max DMA Burst Size
+ * for TX/RX DMA should be no larger than 16 double words.
+ */
+ if (CSR_READ_4(sc, SIS_CFG) & SIS_CFG_EDB_MASTER_EN) {
+ CSR_WRITE_4(sc, SIS_RX_CFG, SIS_RXCFG64);
+ } else {
+ CSR_WRITE_4(sc, SIS_RX_CFG, SIS_RXCFG256);
+ }
+
/* Accept Long Packets for VLAN support */
SIS_SETBIT(sc, SIS_RX_CFG, SIS_RXCFG_RX_JABBER);