diff -urp bge.orig/if_bge.c bge/if_bge.c --- bge.orig/if_bge.c 2008-07-06 14:55:37 +0800 +++ bge/if_bge.c 2008-07-06 14:58:50 +0800 @@ -1738,8 +1738,10 @@ bge_blockinit(struct bge_softc *sc) CSR_WRITE_4(sc, BGE_WDMA_MODE, val); /* Turn on read DMA state machine */ - CSR_WRITE_4(sc, BGE_RDMA_MODE, - BGE_RDMAMODE_ENABLE | BGE_RDMAMODE_ALL_ATTNS); + val = BGE_RDMAMODE_ENABLE | BGE_RDMAMODE_ALL_ATTNS; + if (sc->bge_flags & BGE_FLAG_PCIE) + val |= BGE_RDMAMODE_FIFO_LONG_BURST; + CSR_WRITE_4(sc, BGE_RDMA_MODE, val); /* Turn on RX data completion state machine */ CSR_WRITE_4(sc, BGE_RDC_MODE, BGE_RDCMODE_ENABLE); diff -urp bge.orig/if_bgereg.h bge/if_bgereg.h --- bge.orig/if_bgereg.h 2008-07-06 14:55:56 +0800 +++ bge/if_bgereg.h 2008-07-06 14:57:16 +0800 @@ -1359,6 +1359,8 @@ #define BGE_RDMAMODE_PCI_FIFOOREAD_ATTN 0x00000100 #define BGE_RDMAMODE_LOCWRITE_TOOBIG 0x00000200 #define BGE_RDMAMODE_ALL_ATTNS 0x000003FC +#define BGE_RDMAMODE_FIFO_SIZE_128 0x00020000 +#define BGE_RDMAMODE_FIFO_LONG_BURST 0x00030000 /* Read DMA status register */ #define BGE_RDMASTAT_PCI_TGT_ABRT_ATTN 0x00000004