From 30e68f3201017262748aa45077ac754ddfc01771 Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Wed, 6 Jun 2018 13:13:19 +0300 Subject: [PATCH 1/2] Kinetis EMAC: Make number of buffers configurable 16 RX buffers and 8 TX buffers is probably excessive. Nanostack version of driver successfully used 4+4, and data pump should be broadly equivalent. This means that switching K64F devices from Nanostack to EMAC increases base heap usage by 18K - observed in Nanostack border router builds. Add a config option to make it possible to lower the number of buffers. Defer consideration of lowering the default to later. --- .../TARGET_Freescale_EMAC/kinetis_emac_config.h | 4 ++-- .../emac-drivers/TARGET_Freescale_EMAC/mbed_lib.json | 7 +++++++ 2 files changed, 9 insertions(+), 2 deletions(-) create mode 100644 features/netsocket/emac-drivers/TARGET_Freescale_EMAC/mbed_lib.json diff --git a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/kinetis_emac_config.h b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/kinetis_emac_config.h index 570e5f6c5b..a56fe41942 100644 --- a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/kinetis_emac_config.h +++ b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/kinetis_emac_config.h @@ -32,8 +32,8 @@ #include "fsl_enet.h" -#define ENET_RX_RING_LEN (16) -#define ENET_TX_RING_LEN (8) +#define ENET_RX_RING_LEN MBED_CONF_KINETIS_EMAC_RX_RING_LEN +#define ENET_TX_RING_LEN MBED_CONF_KINETIS_EMAC_TX_RING_LEN #define ENET_ETH_MAX_FLEN (1522) // recommended size for a VLAN frame diff --git a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/mbed_lib.json b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/mbed_lib.json new file mode 100644 index 0000000000..2e1ef2e320 --- /dev/null +++ b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/mbed_lib.json @@ -0,0 +1,7 @@ +{ + "name": "kinetis-emac", + "config": { + "rx-ring-len": 16, + "tx-ring-len": 8 + } +} From a8e8775aa9ba7a763632ad0a2f1780ea48bdc95a Mon Sep 17 00:00:00 2001 From: Kevin Bracey Date: Wed, 6 Jun 2018 13:16:10 +0300 Subject: [PATCH 2/2] Kinetis EMAC: Correct TX ring pointer array size TX pointer array was using RX ring length in its declaration. Wasted memory if RX ring > TX ring, as is the default, but would be broken if RX ring < TX ring. --- .../emac-drivers/TARGET_Freescale_EMAC/kinetis_emac.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/kinetis_emac.cpp b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/kinetis_emac.cpp index 46bb3a2f3a..c091e0b8e9 100644 --- a/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/kinetis_emac.cpp +++ b/features/netsocket/emac-drivers/TARGET_Freescale_EMAC/kinetis_emac.cpp @@ -55,7 +55,7 @@ uint8_t *rx_desc_start_addr; // RX packet buffer pointers emac_mem_buf_t *rx_buff[ENET_RX_RING_LEN]; // TX packet buffer pointers -emac_mem_buf_t *tx_buff[ENET_RX_RING_LEN]; +emac_mem_buf_t *tx_buff[ENET_TX_RING_LEN]; // RX packet payload pointers uint32_t *rx_ptr[ENET_RX_RING_LEN];