summaryrefslogtreecommitdiff
path: root/fw/fe310
diff options
context:
space:
mode:
Diffstat (limited to 'fw/fe310')
-rw-r--r--fw/fe310/eos/net.c17
-rw-r--r--fw/fe310/eos/net.h3
2 files changed, 11 insertions, 9 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;
diff --git a/fw/fe310/eos/net.h b/fw/fe310/eos/net.h
index ecefbec..574d179 100644
--- a/fw/fe310/eos/net.h
+++ b/fw/fe310/eos/net.h
@@ -2,7 +2,8 @@
#include "event.h"
/* common */
-#define EOS_NET_SIZE_BUF 1500
+#define EOS_NET_MTU 1500
+#define EOS_NET_SIZE_BUF (EOS_NET_MTU + 4)
#define EOS_NET_MTYPE_SOCK 1
#define EOS_NET_MTYPE_POWER 4