diff options
Diffstat (limited to 'fw/fe310/eos/net.c')
-rw-r--r-- | fw/fe310/eos/net.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/fw/fe310/eos/net.c b/fw/fe310/eos/net.c index 197c2b1..d42686d 100644 --- a/fw/fe310/eos/net.c +++ b/fw/fe310/eos/net.c @@ -19,6 +19,7 @@ #include "net.h" +#define NET_SIZE_HDR 3 #define NET_STATE_FLAG_RUN 0x01 #define NET_STATE_FLAG_INIT 0x02 #define NET_STATE_FLAG_XCHG 0x04 @@ -166,20 +167,20 @@ static void net_handle_xchg(void) { net_state_len_rx |= (r3 & 0xFF); len = MAX(net_state_len_tx, net_state_len_rx); - // esp32 bug workaraund - if (len < 5) { - len = 5; - } else if ((len + 3) % 4 != 0) { - len = ((len + 3)/4 + 1) * 4 - 3; - } - - if (len > EOS_NET_SIZE_BUF) { + if (len > EOS_NET_MTU) { net_state_flags &= ~NET_STATE_FLAG_XCHG; SPI1_REG(SPI_REG_CSMODE) = SPI_CSMODE_AUTO; SPI1_REG(SPI_REG_IE) = 0x0; return; } + // esp32 dma workaraund + if (len < 8 - NET_SIZE_HDR) { + len = 8 - NET_SIZE_HDR; + } else if ((len + NET_SIZE_HDR) % 4 != 0) { + len = ((len + NET_SIZE_HDR)/4 + 1) * 4 - NET_SIZE_HDR; + } + _eos_spi_xchg_init(net_state_buf, len, 0); SPI1_REG(SPI_REG_TXCTRL) = SPI_TXWM(SPI_SIZE_WM); SPI1_REG(SPI_REG_IE) = SPI_IP_TXWM; |