Skip to content

Commit af62fbc

Browse files
danieldegrassecarlescufi
authored andcommitted
drivers: eth_mcux: move dma buffers and buffer descriptors to DTCM
Move dma buffers and buffer descriptors to DTCM, to improve hardware and software access speed during network TX/RX Performance change (as tested with iperf on RT1050) TCP RX: 40.6Mbps->44.6Mbps TCP TX: 36.8Mbps->38.1Mbps Signed-off-by: Daniel DeGrasse <[email protected]>
1 parent f595279 commit af62fbc

File tree

2 files changed

+26
-8
lines changed

2 files changed

+26
-8
lines changed

drivers/ethernet/Kconfig.mcux

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,13 @@ menuconfig ETH_MCUX
1616

1717
if ETH_MCUX
1818

19+
config ETH_MCUX_USE_DTCM_FOR_DMA_BUFFER
20+
bool "Use DTCM for hardware DMA buffers"
21+
default y
22+
help
23+
Place the hardware DMA buffers into DTCM for better networking
24+
performance
25+
1926
config ETH_MCUX_PROMISCUOUS_MODE
2027
bool "Promiscuous mode"
2128
help

drivers/ethernet/eth_mcux.c

Lines changed: 19 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1421,12 +1421,6 @@ static void eth_mcux_err_isr(const struct device *dev)
14211421
}
14221422
#endif
14231423

1424-
#if defined(CONFIG_NOCACHE_MEMORY)
1425-
#define NOCACHE __nocache
1426-
#else
1427-
#define NOCACHE
1428-
#endif
1429-
14301424
#if defined(CONFIG_SOC_SERIES_IMX_RT10XX)
14311425
#define ETH_MCUX_UNIQUE_ID (OCOTP->CFG1 ^ OCOTP->CFG2)
14321426
#elif defined(CONFIG_SOC_SERIES_IMX_RT11XX)
@@ -1562,6 +1556,19 @@ static void eth_mcux_err_isr(const struct device *dev)
15621556
#define ETH_MCUX_PINCTRL_INIT(n)
15631557
#endif
15641558

1559+
#if DT_NODE_HAS_STATUS(DT_CHOSEN(zephyr_dtcm), okay) && \
1560+
CONFIG_ETH_MCUX_USE_DTCM_FOR_DMA_BUFFER
1561+
/* Use DTCM for hardware DMA buffers */
1562+
#define _mcux_dma_desc __dtcm_bss_section
1563+
#define _mcux_dma_buffer __dtcm_noinit_section
1564+
#elif defined(CONFIG_NOCACHE_MEMORY)
1565+
#define _mcux_dma_desc __nocache
1566+
#define _mcux_dma_buffer __nocache
1567+
#else
1568+
#define _mcux_dma_desc
1569+
#define _mcux_dma_buffer
1570+
#endif
1571+
15651572
#if defined(CONFIG_ETH_MCUX_PHY_RESET)
15661573
#define ETH_MCUX_PHY_GPIOS(n) \
15671574
.int_gpio = GPIO_DT_SPEC_INST_GET(n, int_gpios), \
@@ -1604,19 +1611,23 @@ static void eth_mcux_err_isr(const struct device *dev)
16041611
ETH_MCUX_POWER(n) \
16051612
}; \
16061613
\
1607-
static NOCACHE __aligned(ENET_BUFF_ALIGNMENT) \
1614+
static __aligned(ENET_BUFF_ALIGNMENT) \
1615+
_mcux_dma_desc \
16081616
enet_rx_bd_struct_t \
16091617
eth##n##_rx_buffer_desc[CONFIG_ETH_MCUX_RX_BUFFERS]; \
16101618
\
1611-
static NOCACHE __aligned(ENET_BUFF_ALIGNMENT) \
1619+
static __aligned(ENET_BUFF_ALIGNMENT) \
1620+
_mcux_dma_desc \
16121621
enet_tx_bd_struct_t \
16131622
eth##n##_tx_buffer_desc[CONFIG_ETH_MCUX_TX_BUFFERS]; \
16141623
\
16151624
static uint8_t __aligned(ENET_BUFF_ALIGNMENT) \
1625+
_mcux_dma_buffer \
16161626
eth##n##_rx_buffer[CONFIG_ETH_MCUX_RX_BUFFERS] \
16171627
[ETH_MCUX_BUFFER_SIZE]; \
16181628
\
16191629
static uint8_t __aligned(ENET_BUFF_ALIGNMENT) \
1630+
_mcux_dma_buffer \
16201631
eth##n##_tx_buffer[CONFIG_ETH_MCUX_TX_BUFFERS] \
16211632
[ETH_MCUX_BUFFER_SIZE]; \
16221633
\

0 commit comments

Comments
 (0)