Skip to content

Commit

Permalink
flash_ops: fix spi_flash_read with source buffer not from internal me…
Browse files Browse the repository at this point in the history
…mory and size < 16

Closes #4010
  • Loading branch information
ajita02 authored and mahavirj committed Oct 19, 2019
1 parent 57a13b0 commit 32b8b60
Show file tree
Hide file tree
Showing 6 changed files with 57 additions and 3 deletions.
10 changes: 10 additions & 0 deletions components/spi_flash/flash_ops.c
Original file line number Diff line number Diff line change
Expand Up @@ -513,7 +513,17 @@ esp_err_t IRAM_ATTR spi_flash_read(size_t src, void *dstv, size_t size)
goto out;
}
COUNTER_ADD_BYTES(read, read_size);
#ifdef ESP_PLATFORM
if (esp_ptr_external_ram(dstv)) {
spi_flash_guard_end();
memcpy(dstv, ((uint8_t *) t) + left_off, size);
spi_flash_guard_start();
} else {
memcpy(dstv, ((uint8_t *) t) + left_off, size);
}
#else
memcpy(dstv, ((uint8_t *) t) + left_off, size);
#endif
goto out;
}
uint8_t *dstc = (uint8_t *) dstv;
Expand Down
6 changes: 5 additions & 1 deletion components/spi_flash/test/CMakeLists.txt
Original file line number Diff line number Diff line change
@@ -1,3 +1,7 @@
idf_component_register(SRC_DIRS "."
INCLUDE_DIRS "."
REQUIRES unity test_utils spi_flash bootloader_support app_update)
REQUIRES unity test_utils spi_flash bootloader_support app_update)

if(CONFIG_SPI_FLASH_USE_LEGACY_IMPL)
set(COMPONENT_SRCEXCLUDE "test_esp_flash.c" "test_partition_ext.c")
endif()
4 changes: 4 additions & 0 deletions components/spi_flash/test/component.mk
Original file line number Diff line number Diff line change
Expand Up @@ -3,3 +3,7 @@
#

COMPONENT_ADD_LDFLAGS = -Wl,--whole-archive -l$(COMPONENT_NAME) -Wl,--no-whole-archive

ifdef CONFIG_SPI_FLASH_USE_LEGACY_IMPL
COMPONENT_OBJEXCLUDE += test_esp_flash.o test_partition_ext.o
endif
33 changes: 33 additions & 0 deletions components/spi_flash/test/test_read_write.c
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@
#include "soc/timer_periph.h"
#include "esp_heap_caps.h"

#define MIN_BLOCK_SIZE 12
/* Base offset in flash for tests. */
static size_t start;

Expand Down Expand Up @@ -266,4 +267,36 @@ TEST_CASE("spi_flash_write can write from external RAM buffer", "[spi_flash]")
free(buf_int);
}

TEST_CASE("spi_flash_read less than 16 bytes into buffer in external RAM", "[spi_flash]")
{
uint8_t *buf_ext_8 = (uint8_t *) heap_caps_malloc(MIN_BLOCK_SIZE, MALLOC_CAP_SPIRAM | MALLOC_CAP_8BIT);
TEST_ASSERT_NOT_NULL(buf_ext_8);

uint8_t *buf_int_8 = (uint8_t *) heap_caps_malloc(MIN_BLOCK_SIZE, MALLOC_CAP_INTERNAL | MALLOC_CAP_8BIT);
TEST_ASSERT_NOT_NULL(buf_int_8);

uint8_t data_8[MIN_BLOCK_SIZE];
for (int i = 0; i < MIN_BLOCK_SIZE; i++) {
data_8[i] = i;
}

const esp_partition_t *part = get_test_data_partition();
TEST_ESP_OK(spi_flash_erase_range(part->address, SPI_FLASH_SEC_SIZE));
TEST_ESP_OK(spi_flash_write(part->address, data_8, MIN_BLOCK_SIZE));
TEST_ESP_OK(spi_flash_read(part->address, buf_ext_8, MIN_BLOCK_SIZE));
TEST_ESP_OK(spi_flash_read(part->address, buf_int_8, MIN_BLOCK_SIZE));

TEST_ASSERT_EQUAL(0, memcmp(buf_ext_8, data_8, MIN_BLOCK_SIZE));
TEST_ASSERT_EQUAL(0, memcmp(buf_int_8, data_8, MIN_BLOCK_SIZE));

if (buf_ext_8) {
free(buf_ext_8);
buf_ext_8 = NULL;
}
if (buf_int_8) {
free(buf_int_8);
buf_int_8 = NULL;
}
}

#endif // CONFIG_ESP32_SPIRAM_SUPPORT
4 changes: 2 additions & 2 deletions tools/ci/config/target-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -214,7 +214,7 @@ UT_001:

UT_002:
extends: .unit_test_template
parallel: 18
parallel: 30
tags:
- ESP32_IDF
- UT_T1_1
Expand Down Expand Up @@ -413,7 +413,7 @@ UT_029:
# Gitlab parallel max value is 50. We need to create another UT job if parallel is larger than 50.
UT_030:
extends: .unit_test_template
parallel: 6
parallel: 10
tags:
- ESP32_IDF
- UT_T1_1
Expand Down
3 changes: 3 additions & 0 deletions tools/unit-test-app/configs/spi_flash_legacy
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
TEST_COMPONENTS=spi_flash
CONFIG_ESP32_SPIRAM_SUPPORT=y
CONFIG_SPI_FLASH_USE_LEGACY_IMPL=y

0 comments on commit 32b8b60

Please sign in to comment.