Skip to content

Commit ac6dc19

Browse files
Old-DingRbb666
authored andcommitted
bsp: hpmicro: clear full ENET buffers
rt_hw_eth_init() clears ENET descriptor tables using element size times count, but the RX/TX data buffers used sizeof(size), which only covers the width of the size field. Use the configured buffer count and size so the whole RX/TX buffer areas are initialized before handing them to the ENET descriptor configuration. Make the Cppcheck intent explicit for the HPM placement macros and the LPI_CSR register read so the touched file passes static analysis. Signed-off-by: Old-Ding <35417409+Old-Ding@users.noreply.github.com>
1 parent c7f21bd commit ac6dc19

1 file changed

Lines changed: 9 additions & 3 deletions

File tree

bsp/hpmicro/libraries/drivers/drv_enet.c

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919

2020
#ifdef BSP_USING_ETH0
2121

22+
/* cppcheck-suppress-begin unknownMacro */
2223
ATTR_PLACE_AT_NONCACHEABLE_WITH_ALIGNMENT(ENET_SOC_DESC_ADDR_ALIGNMENT)
2324
__RW enet_rx_desc_t enet0_dma_rx_desc_tab[ENET0_RX_BUFF_COUNT]; /* Ethernet0 Rx DMA Descriptor */
2425

@@ -30,6 +31,7 @@ __RW uint8_t enet0_rx_buff[ENET0_RX_BUFF_COUNT][ENET0_RX_BUFF_SIZE]; /* Ethernet
3031

3132
ATTR_PLACE_AT_WITH_ALIGNMENT(".fast_ram", ENET_SOC_BUFF_ADDR_ALIGNMENT)
3233
__RW uint8_t enet0_tx_buff[ENET0_TX_BUFF_COUNT][ENET0_TX_BUFF_SIZE]; /* Ethernet0 Transmit Buffer */
34+
/* cppcheck-suppress-end unknownMacro */
3335

3436
LWIP_MEMPOOL_DECLARE(enet0_rx_pool, ENET0_RX_BUFF_COUNT, sizeof(my_custom_pbuf_t), "Custom RX PBUF pool");
3537
static enet_frame_t enet0_frame[ENET0_RX_BUFF_COUNT] = {0};
@@ -88,6 +90,7 @@ mac_init_t mac_init[] = {
8890

8991
#ifdef BSP_USING_ETH1
9092

93+
/* cppcheck-suppress-begin unknownMacro */
9194
ATTR_PLACE_AT_NONCACHEABLE_WITH_ALIGNMENT(ENET_SOC_DESC_ADDR_ALIGNMENT)
9295
__RW enet_rx_desc_t enet1_dma_rx_desc_tab[ENET1_RX_BUFF_COUNT]; /* Ethernet1 Rx DMA Descriptor */
9396

@@ -99,6 +102,7 @@ __RW uint8_t enet1_rx_buff[ENET1_RX_BUFF_COUNT][ENET1_RX_BUFF_SIZE]; /* Ethernet
99102

100103
ATTR_PLACE_AT_WITH_ALIGNMENT(".fast_ram", ENET_SOC_BUFF_ADDR_ALIGNMENT)
101104
__RW uint8_t enet1_tx_buff[ENET1_TX_BUFF_COUNT][ENET1_TX_BUFF_SIZE]; /* Ethernet1 Transmit Buffer */
105+
/* cppcheck-suppress-end unknownMacro */
102106

103107
LWIP_MEMPOOL_DECLARE(enet1_rx_pool, ENET1_RX_BUFF_COUNT, sizeof(my_custom_pbuf_t), "Custom RX PBUF pool");
104108
static enet_frame_t enet1_frame[ENET1_RX_BUFF_COUNT] = {0};
@@ -544,7 +548,7 @@ void isr_enet(hpm_enet_t *obj)
544548
status = obj->base->DMA_STATUS;
545549

546550
if (ENET_DMA_STATUS_GLPII_GET(status)) {
547-
obj->base->LPI_CSR;
551+
(void)obj->base->LPI_CSR;
548552
}
549553

550554
if (ENET_DMA_STATUS_RI_GET(status)) {
@@ -587,8 +591,10 @@ int rt_hw_eth_init(void)
587591
memset((uint8_t *)s_geths[i]->dma_rx_desc_tab, 0x00, sizeof(enet_rx_desc_t) * s_geths[i]->rx_buff_cfg->count);
588592
memset((uint8_t *)s_geths[i]->dma_tx_desc_tab, 0x00, sizeof(enet_tx_desc_t) * s_geths[i]->tx_buff_cfg->count);
589593

590-
memset((uint8_t *)s_geths[i]->rx_buff_cfg->buffer, 0x00, sizeof(s_geths[i]->rx_buff_cfg->size));
591-
memset((uint8_t *)s_geths[i]->tx_buff_cfg->buffer, 0x00, sizeof(s_geths[i]->tx_buff_cfg->size));
594+
memset((uint8_t *)s_geths[i]->rx_buff_cfg->buffer, 0x00,
595+
s_geths[i]->rx_buff_cfg->count * s_geths[i]->rx_buff_cfg->size);
596+
memset((uint8_t *)s_geths[i]->tx_buff_cfg->buffer, 0x00,
597+
s_geths[i]->tx_buff_cfg->count * s_geths[i]->tx_buff_cfg->size);
592598

593599
/* Set list heads */
594600
s_geths[i]->enet_dev->desc.tx_desc_list_head = (enet_tx_desc_t *)core_local_mem_to_sys_address(BOARD_RUNNING_CORE, (uint32_t)s_geths[i]->dma_tx_desc_tab);

0 commit comments

Comments
 (0)