It seems that enabling Tx and Rx before setting descriptor DMA
addresses shall access invalid descriptor DMA addresses on PCIe hardwares and then panicked the system. To fix it set descriptor DMA addresses before enabling Tx and Rx such that hardware can see valid descriptor DMA addresses. Also set RL_EARLY_TX_THRESH before starting Tx and Rx. Reported by: steve.tell AT crashmail DOT de Tested by: steve.tell AT crashmail DOT de Obtained from: NetBSD MFC after: 1 week
This commit is contained in:
parent
f9734398e3
commit
d01fac16ac
@ -2318,6 +2318,20 @@ re_init_locked(sc)
|
||||
re_rx_list_init(sc);
|
||||
re_tx_list_init(sc);
|
||||
|
||||
/*
|
||||
* Load the addresses of the RX and TX lists into the chip.
|
||||
*/
|
||||
|
||||
CSR_WRITE_4(sc, RL_RXLIST_ADDR_HI,
|
||||
RL_ADDR_HI(sc->rl_ldata.rl_rx_list_addr));
|
||||
CSR_WRITE_4(sc, RL_RXLIST_ADDR_LO,
|
||||
RL_ADDR_LO(sc->rl_ldata.rl_rx_list_addr));
|
||||
|
||||
CSR_WRITE_4(sc, RL_TXLIST_ADDR_HI,
|
||||
RL_ADDR_HI(sc->rl_ldata.rl_tx_list_addr));
|
||||
CSR_WRITE_4(sc, RL_TXLIST_ADDR_LO,
|
||||
RL_ADDR_LO(sc->rl_ldata.rl_tx_list_addr));
|
||||
|
||||
/*
|
||||
* Enable transmit and receive.
|
||||
*/
|
||||
@ -2335,6 +2349,9 @@ re_init_locked(sc)
|
||||
RL_TXCFG_CONFIG|RL_LOOPTEST_ON_CPLUS);
|
||||
} else
|
||||
CSR_WRITE_4(sc, RL_TXCFG, RL_TXCFG_CONFIG);
|
||||
|
||||
CSR_WRITE_1(sc, RL_EARLY_TX_THRESH, 16);
|
||||
|
||||
CSR_WRITE_4(sc, RL_RXCFG, RL_RXCFG_CONFIG);
|
||||
|
||||
/* Set the individual bit to receive frames for this host only. */
|
||||
@ -2389,21 +2406,6 @@ re_init_locked(sc)
|
||||
/* Enable receiver and transmitter. */
|
||||
CSR_WRITE_1(sc, RL_COMMAND, RL_CMD_TX_ENB|RL_CMD_RX_ENB);
|
||||
#endif
|
||||
/*
|
||||
* Load the addresses of the RX and TX lists into the chip.
|
||||
*/
|
||||
|
||||
CSR_WRITE_4(sc, RL_RXLIST_ADDR_HI,
|
||||
RL_ADDR_HI(sc->rl_ldata.rl_rx_list_addr));
|
||||
CSR_WRITE_4(sc, RL_RXLIST_ADDR_LO,
|
||||
RL_ADDR_LO(sc->rl_ldata.rl_rx_list_addr));
|
||||
|
||||
CSR_WRITE_4(sc, RL_TXLIST_ADDR_HI,
|
||||
RL_ADDR_HI(sc->rl_ldata.rl_tx_list_addr));
|
||||
CSR_WRITE_4(sc, RL_TXLIST_ADDR_LO,
|
||||
RL_ADDR_LO(sc->rl_ldata.rl_tx_list_addr));
|
||||
|
||||
CSR_WRITE_1(sc, RL_EARLY_TX_THRESH, 16);
|
||||
|
||||
#ifdef RE_TX_MODERATION
|
||||
/*
|
||||
|
Loading…
Reference in New Issue
Block a user