From d5e89a25c6da162dd71f25598cba9f59190c0209 Mon Sep 17 00:00:00 2001 From: Bence Kaposzta Date: Mon, 11 Nov 2019 14:39:08 +0100 Subject: [PATCH 1/3] Fix ethernet memory handling issues on CM3DS Signed-off-by: Bence Kaposzta --- .../COMPONENT_SMSC9220/smsc9220_emac.cpp | 26 +++-- .../COMPONENT_SMSC9220/smsc9220_emac_config.h | 5 +- .../device/drivers/smsc9220_eth_drv.c | 27 +++--- .../device/drivers/smsc9220_eth_drv.h | 94 +++++++++---------- 4 files changed, 81 insertions(+), 71 deletions(-) diff --git a/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp b/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp index caf80bfdd41..bd90625d5b7 100644 --- a/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp +++ b/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Arm Limited + * Copyright (c) 2019 Arm Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -76,6 +76,7 @@ emac_mem_buf_t *SMSC9220_EMAC::low_level_input() { emac_mem_buf_t *p = NULL; uint32_t message_length = 0; + uint32_t received_bytes = 0; message_length = smsc9220_peek_next_packet_size(dev); if (message_length == 0) { @@ -87,12 +88,19 @@ emac_mem_buf_t *SMSC9220_EMAC::low_level_input() message_length -= CRC_LENGTH_BYTES; } - p = _memory_manager->alloc_heap(message_length, SMSC9220_BUFF_ALIGNMENT); + p = _memory_manager->alloc_heap(SMSC9220_ETH_MAX_FRAME_SIZE, + SMSC9220_BUFF_ALIGNMENT); if (p != NULL) { _RXLockMutex.lock(); - smsc9220_receive_by_chunks(dev, (char*)_memory_manager->get_ptr(p), - _memory_manager->get_len(p)); + received_bytes = smsc9220_receive_by_chunks(dev, + (char*)_memory_manager->get_ptr(p), + _memory_manager->get_len(p)); + if(received_bytes == 0){ + _memory_manager->free(p); + } else { + _memory_manager->set_len(p, received_bytes); + } _RXLockMutex.unlock(); } @@ -169,12 +177,12 @@ bool SMSC9220_EMAC::link_out(emac_mem_buf_t *buf) (const char*)_memory_manager->get_ptr(buf), _memory_manager->get_len(buf)); _memory_manager->free(buf); - if (error != SMSC9220_ERROR_NONE) { - _TXLockMutex.unlock(); + _TXLockMutex.unlock(); + if (error == SMSC9220_ERROR_NONE) { + return true; + } else { return false; } - _TXLockMutex.unlock(); - return true; } } @@ -190,7 +198,7 @@ void SMSC9220_EMAC::link_status_task() current_link_status_up = (bool)(phy_basic_status_reg_value & (1ul << (PHY_REG_BSTATUS_LINK_STATUS_INDEX))); - /* Compare with previous state */ + /* Compare with the previous state */ if (current_link_status_up != _prev_link_status_up) { _emac_link_state_cb(current_link_status_up); _prev_link_status_up = current_link_status_up; diff --git a/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac_config.h b/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac_config.h index f8299a84b6e..93d73f47db4 100644 --- a/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac_config.h +++ b/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac_config.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2018 Arm Limited + * Copyright (c) 2019 Arm Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -29,11 +29,12 @@ */ #define SMSC9220_ETH_MTU_SIZE 1500U #define SMSC9220_ETH_IF_NAME "smsc9220" +#define SMSC9220_ETH_MAX_FRAME_SIZE 1522U /** \brief Defines for receiver thread */ #define FLAG_RX 1U #define LINK_STATUS_THREAD_PRIORITY (osPriorityNormal) -#define LINK_STATUS_THREAD_STACKSIZE 2048U +#define LINK_STATUS_THREAD_STACKSIZE 512U #define LINK_STATUS_TASK_PERIOD_MS 200U #define PHY_STATE_LINK_DOWN false #define PHY_STATE_LINK_UP true diff --git a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/device/drivers/smsc9220_eth_drv.c b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/device/drivers/smsc9220_eth_drv.c index b9b6b57fcce..5c929a740c2 100644 --- a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/device/drivers/smsc9220_eth_drv.c +++ b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/device/drivers/smsc9220_eth_drv.c @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2018 ARM Limited + * Copyright (c) 2016-2019 Arm Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -166,7 +166,6 @@ enum phy_reg_bctrl_reg_bits_t{ * \brief TX Command A bit definitions * */ - #define TX_CMD_DATA_START_OFFSET_BYTES_POS 16U #define TX_CMD_DATA_START_OFFSET_BYTES_MASK 0x1FU @@ -186,7 +185,19 @@ enum tx_command_a_bits_t{ * */ enum rx_fifo_status_bits_t{ - RX_FIFO_STATUS_ERROR_INDEX = 15U + RX_FIFO_STATUS_CRC_ERROR_INDEX = 1U, + RX_FIFO_STATUS_DRIBBLING_BIT_INDEX = 2U, + RX_FIFO_STATUS_MII_ERROR_INDEX = 3U, + RX_FIFO_STATUS_REC_WD_TIMEOUT_INDEX = 4U, + RX_FIFO_STATUS_FRAME_TYPE_INDEX = 5U, + RX_FIFO_STATUS_COLLISION_SEEN_INDEX = 6U, + RX_FIFO_STATUS_FRAME_TOO_LONG_INDEX = 7U, + RX_FIFO_STATUS_MULTICAST_INDEX = 10U, + RX_FIFO_STATUS_RUNT_FRAME_INDEX = 11U, + RX_FIFO_STATUS_LENGTH_ERROR_INDEX = 12U, + RX_FIFO_STATUS_BROADCAST_FRAME_INDEX = 13U, + RX_FIFO_STATUS_ERROR_INDEX = 15U, + RX_FIFO_STATUS_FILTERING_FAIL_INDEX = 30U, }; #define RX_FIFO_STATUS_PKT_LENGTH_POS 16U #define RX_FIFO_STATUS_PKT_LENGTH_MASK 0x3FFFU @@ -299,7 +310,7 @@ static void fill_tx_fifo(const struct smsc9220_eth_dev_t* dev, data += remainder_bytes; while (size_bytes > 0) { - /* Keep the same endianness in data than in the temp variable */ + /* Keep the same endianness in data as in the temp variable */ tx_data_port_tmp_ptr[0] = data[0]; tx_data_port_tmp_ptr[1] = data[1]; tx_data_port_tmp_ptr[2] = data[2]; @@ -323,7 +334,7 @@ static void empty_rx_fifo(const struct smsc9220_eth_dev_t* dev, size_bytes -= remainder_bytes; while (size_bytes > 0) { - /* Keep the same endianness in data than in the temp variable */ + /* Keep the same endianness in data as in the temp variable */ rx_data_port_tmp = register_map->rx_data_port; data[0] = rx_data_port_tmp_ptr[0]; data[1] = rx_data_port_tmp_ptr[1]; @@ -740,7 +751,6 @@ int smsc9220_check_id(const struct smsc9220_eth_dev_t* dev) return ((GET_BIT_FIELD(id, CHIP_ID_MASK, CHIP_ID_POS) == CHIP_ID) ? 0 : 1); } - void smsc9220_enable_interrupt(const struct smsc9220_eth_dev_t* dev, enum smsc9220_interrupt_source source) { @@ -817,7 +827,6 @@ enum smsc9220_error_t smsc9220_read_mac_address( return SMSC9220_ERROR_PARAM; } - /* Read current mac address. */ if (smsc9220_mac_regread(dev, SMSC9220_MAC_REG_OFFSET_ADDRH, &mac_high)) { return SMSC9220_ERROR_INTERNAL; } @@ -947,10 +956,7 @@ enum smsc9220_error_t smsc9220_send_by_chunks( { struct smsc9220_eth_reg_map_t* register_map = (struct smsc9220_eth_reg_map_t*)dev->cfg->base; - - /* signing this is the first segment of the packet to be sent */ bool is_first_segment = false; - /* signing this is the last segment of the packet to be sent */ bool is_last_segment = false; uint32_t txcmd_a, txcmd_b = 0; uint32_t tx_buffer_free_space = 0; @@ -1029,7 +1035,6 @@ uint32_t smsc9220_get_rxfifo_data_used_space(const struct uint32_t smsc9220_receive_by_chunks(const struct smsc9220_eth_dev_t* dev, char *data, uint32_t dlen) { - uint32_t rxfifo_inf = 0; uint32_t rxfifo_stat = 0; uint32_t packet_length_byte = 0; diff --git a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/device/drivers/smsc9220_eth_drv.h b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/device/drivers/smsc9220_eth_drv.h index cd1ac6e342f..3c60f45bbb4 100644 --- a/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/device/drivers/smsc9220_eth_drv.h +++ b/targets/TARGET_ARM_SSG/TARGET_CM3DS_MPS2/device/drivers/smsc9220_eth_drv.h @@ -1,5 +1,5 @@ /* - * Copyright (c) 2016-2018 ARM Limited + * Copyright (c) 2016-2019 Arm Limited * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -22,8 +22,8 @@ #ifndef __SMSC9220_ETH_H__ #define __SMSC9220_ETH_H__ -#include "stdbool.h" -#include "stdint.h" +#include +#include #ifdef __cplusplus extern "C" { @@ -198,7 +198,7 @@ enum smsc9220_error_t smsc9220_init(const struct smsc9220_eth_dev_t* dev, void(* wait_ms_function)(int)); /** - * \brief Read MAC register. + * \brief Reads the MAC register. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] regoffset Register offset @@ -212,7 +212,7 @@ enum smsc9220_error_t smsc9220_mac_regread( uint32_t *data); /** - * \brief Write MAC register. + * \brief Writes the MAC register. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] regoffset Register offset @@ -226,7 +226,7 @@ enum smsc9220_error_t smsc9220_mac_regwrite( uint32_t data); /** - * \brief Read PHY register. + * \brief Reads the PHY register. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] regoffset Register offset @@ -240,7 +240,7 @@ enum smsc9220_error_t smsc9220_phy_regread( uint32_t *data); /** - * \brief Write PHY register. + * \brief Writes the PHY register. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] regoffset Register offset @@ -254,7 +254,7 @@ enum smsc9220_error_t smsc9220_phy_regwrite( uint32_t data); /** - * \brief Read SMSC9220 ID. + * \brief Reads the Ethernet Controller's ID. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * @@ -273,9 +273,9 @@ enum smsc9220_error_t smsc9220_soft_reset( const struct smsc9220_eth_dev_t* dev); /** - * \brief Set maximum transition unit by Tx fifo size. + * \brief Sets the Maximum Transmission Unit by Tx fifo size. * Note: The MTU will be smaller by 512 bytes, - * because the status uses this fixed space. + * whis is used by the status. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] val Size of the fifo in kbytes @@ -286,7 +286,7 @@ void smsc9220_set_txfifo(const struct smsc9220_eth_dev_t* dev, uint32_t val); /** - * \brief Set FIFO level interrupt for a given source + * \brief Sets the FIFO level interrupt for a given source. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] irq_level_pos Bit position of the FIFO to set @@ -302,7 +302,7 @@ enum smsc9220_error_t smsc9220_set_fifo_level_irq( uint32_t level); /** - * \brief Wait for EEPROM to be ready to use. + * \brief Waits for EEPROM to be ready to use. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * @@ -312,7 +312,7 @@ enum smsc9220_error_t smsc9220_wait_eeprom( const struct smsc9220_eth_dev_t* dev); /** - * \brief Initialise irqs by clearing and disabling all interrupt sources + * \brief Initializes irqs by clearing and disabling all interrupt sources * and enable interrupts. Since all interrupt sources are disabled, * interrupt won't be triggered, until interrupt sources won't be * enabled by \ref smsc9220_enable_interrupt @@ -322,7 +322,7 @@ enum smsc9220_error_t smsc9220_wait_eeprom( void smsc9220_init_irqs(const struct smsc9220_eth_dev_t* dev); /** - * \brief Check PHY ID registers. + * \brief Checks PHY ID registers. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * @@ -331,7 +331,7 @@ void smsc9220_init_irqs(const struct smsc9220_eth_dev_t* dev); enum smsc9220_error_t smsc9220_check_phy(const struct smsc9220_eth_dev_t* dev); /** - * \brief Reset PHY + * \brief Resets PHY. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * @@ -340,56 +340,56 @@ enum smsc9220_error_t smsc9220_check_phy(const struct smsc9220_eth_dev_t* dev); enum smsc9220_error_t smsc9220_reset_phy(const struct smsc9220_eth_dev_t* dev); /** - * \brief Advertise all speeds and pause capabilities + * \brief Advertises all speeds and pauses capabilities. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_advertise_cap(const struct smsc9220_eth_dev_t* dev); /** - * \brief Enable transmission + * \brief Enables transmission. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_enable_xmit(const struct smsc9220_eth_dev_t* dev); /** - * \brief Disable transmission + * \brief Disables transmission. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_disable_xmit(const struct smsc9220_eth_dev_t* dev); /** - * \brief Enable MAC transmitter + * \brief Enables MAC Transmitter. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_enable_mac_xmit(const struct smsc9220_eth_dev_t* dev); /** - * \brief Disable MAC transmitter + * \brief Disables MAC Transmitter. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_disable_mac_xmit(const struct smsc9220_eth_dev_t* dev); /** - * \brief Enable receive + * \brief Enables receiving. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_enable_mac_recv(const struct smsc9220_eth_dev_t* dev); /** - * \brief Disable receive + * \brief Disables receiving. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_disable_mac_recv(const struct smsc9220_eth_dev_t* dev); /** - * \brief Enable the given interrupt source. + * \brief Enables the given interrupt source. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] source Enum of the interrupt source. @@ -398,7 +398,7 @@ void smsc9220_enable_interrupt(const struct smsc9220_eth_dev_t* dev, enum smsc9220_interrupt_source source); /** - * \brief Disable the given interrupt source. + * \brief Disables the given interrupt source. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] source Enum of the interrupt source. @@ -407,14 +407,14 @@ void smsc9220_disable_interrupt(const struct smsc9220_eth_dev_t* dev, enum smsc9220_interrupt_source source); /** - * \brief Disable all of the interrupt sources. + * \brief Disables all interrupt sources. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_disable_all_interrupts(const struct smsc9220_eth_dev_t* dev); /** - * \brief Clear the given interrupt source. + * \brief Clears the given interrupt source. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] source Enum of the interrupt source. @@ -423,14 +423,14 @@ void smsc9220_clear_interrupt(const struct smsc9220_eth_dev_t* dev, enum smsc9220_interrupt_source source); /** - * \brief Clear all of the interrupt sources. + * \brief Clears all interrupt sources. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_clear_all_interrupts(const struct smsc9220_eth_dev_t* dev); /** - * \brief Get the status of the given interrupt source. + * \brief Gets the status of the given interrupt source. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] source Enum of the interrupt source. @@ -441,14 +441,14 @@ int smsc9220_get_interrupt(const struct smsc9220_eth_dev_t* dev, enum smsc9220_interrupt_source source); /** - * \brief Establish link + * \brief Establishes link * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t */ void smsc9220_establish_link(const struct smsc9220_eth_dev_t* dev); /** - * \brief Read MAC address from EEPROM. + * \brief Reads the Ethernet Controller's MAC address from its EEPROM. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in,out] mac array will include the read MAC address in @@ -468,7 +468,7 @@ enum smsc9220_error_t smsc9220_read_mac_address( int smsc9220_check_id(const struct smsc9220_eth_dev_t* dev); /** - * \brief Get the data size of the Tx buffer, aka Maximum Transition Unit + * \brief Gets the data size of the Tx buffer, aka Maximum Trasmission Unit * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * @@ -478,16 +478,16 @@ uint32_t smsc9220_get_tx_data_fifo_size(const struct smsc9220_eth_dev_t* dev); /** - * \brief Send Ethernet packet from buffer chain. - * The full packet length should be known in the beginning - * of a new packet. + * \brief Sends data from the given buffer as an Ethernet packet. + * The full packet length must be specified at the beginning + * of a new packet transmission. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * \param[in] total_payload_length Length of the ethernet payload. * Should be equal to the sum of passed buffers within a packet. * \param[in] is_new_packet Should be set to true if the input buffer has to * be sent as the start of a new packet or as a full packet. - * \param[in] data Pointer to the data should be sent. + * \param[in] data Pointer to the data buffer to be sent. * \param[in] current_size Size of the data in bytes. * * \return error code /ref smsc9220_error_t @@ -499,20 +499,17 @@ enum smsc9220_error_t smsc9220_send_by_chunks( const char *data, uint32_t current_size); /** - * \brief Receive Ethernet packet from Rx FIFO to the passed buffer. + * \brief Reads an incoming Ethernet packet into the given buffer. * Stops reading at packet border. - * If the passed buffer is larger than the current packet, - * the whole packet will be read into the buffer. - * If the current packet is larger than the passed buffer, - * the buffer will be filled with data and the next call - * will continue the read from that point. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t - * \param[in,out] data Pointer where the data will be read to. - * The caller is responsible to allocate it. + * \param[in,out] data Pointer to a pre-allocated input buffer. + * Allocating sufficient memory space is the caller's + * responsibility, which is typically done by calling + * \ref smsc9220_peek_next_packet_size. * \param[in] dlen Length of the allocated data in bytes. * - * \return Remaining bytes left in the fifo of the current packet. + * \return Number of bytes read from the Rx FIFO into the given buffer. */ uint32_t smsc9220_receive_by_chunks(const struct smsc9220_eth_dev_t* dev, char *data, uint32_t dlen); @@ -528,15 +525,14 @@ uint32_t smsc9220_get_rxfifo_data_used_space(const struct smsc9220_eth_dev_t* dev); /** - * \brief Get the size of next unread packet in Rx buffer, using the peak + * \brief Gets the size of next unread packet in Rx buffer, using the peak * register, which is not destructive so can be read asynchronously. - * Warning: In case of heavy receiving load, it's possible this register - * is not perfectly in sync. + * Warning: In case of heavy receiving loads, this register may not + * be in perfect sync. * * \param[in] dev Ethernet device structure \ref smsc9220_eth_dev_t * - * \return Size in bytes of the next packet can be read from Rx fifo, according - * to the peek register. + * \return Size of the next packet in bytes, read from the Rx Peek register. */ uint32_t smsc9220_peek_next_packet_size(const struct smsc9220_eth_dev_t* dev); From 647216299fa4217475291595252dbcf2af302e6a Mon Sep 17 00:00:00 2001 From: Bence Kaposzta Date: Mon, 11 Nov 2019 14:39:08 +0100 Subject: [PATCH 2/3] Fix ethernet memory handling issues on CM3DS Signed-off-by: Bence Kaposzta --- .../TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp b/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp index bd90625d5b7..6bfc89089f5 100644 --- a/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp +++ b/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp @@ -98,6 +98,7 @@ emac_mem_buf_t *SMSC9220_EMAC::low_level_input() _memory_manager->get_len(p)); if(received_bytes == 0){ _memory_manager->free(p); + p = nullptr; } else { _memory_manager->set_len(p, received_bytes); } @@ -178,11 +179,7 @@ bool SMSC9220_EMAC::link_out(emac_mem_buf_t *buf) _memory_manager->get_len(buf)); _memory_manager->free(buf); _TXLockMutex.unlock(); - if (error == SMSC9220_ERROR_NONE) { - return true; - } else { - return false; - } + return (error == SMSC9220_ERROR_NONE) } } From 4dd7712ac7f0020d89bf511e5976ebc505c69f13 Mon Sep 17 00:00:00 2001 From: Bence Kaposzta Date: Mon, 11 Nov 2019 14:39:08 +0100 Subject: [PATCH 3/3] Fix ethernet memory handling issues on CM3DS Signed-off-by: Bence Kaposzta --- .../TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp b/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp index 6bfc89089f5..a4b2a8d4796 100644 --- a/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp +++ b/features/netsocket/emac-drivers/TARGET_ARM_SSG/COMPONENT_SMSC9220/smsc9220_emac.cpp @@ -179,7 +179,7 @@ bool SMSC9220_EMAC::link_out(emac_mem_buf_t *buf) _memory_manager->get_len(buf)); _memory_manager->free(buf); _TXLockMutex.unlock(); - return (error == SMSC9220_ERROR_NONE) + return (error == SMSC9220_ERROR_NONE); } }