diff --git a/components/esp_partition/host_test/partition_bdl_test/main/partition_bdl_test.c b/components/esp_partition/host_test/partition_bdl_test/main/partition_bdl_test.c index ddf17d54f9d..9a16aeeeeb2 100644 --- a/components/esp_partition/host_test/partition_bdl_test/main/partition_bdl_test.c +++ b/components/esp_partition/host_test/partition_bdl_test/main/partition_bdl_test.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 * @@ -163,15 +163,19 @@ TEST(partition_bdl, test_partition_bdl_limits) TEST(partition_bdl, test_bdl_partition_readonly) { //storage3 is readonly partition + const esp_partition_t *partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "storage3"); + TEST_ASSERT_NOT_NULL(partition); + esp_blockdev_handle_t part_blockdev = NULL; TEST_ESP_OK(esp_partition_get_blockdev(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "storage3", &part_blockdev)); //test flags TEST_ASSERT_EQUAL(1, part_blockdev->device_flags.read_only); - TEST_ASSERT_EQUAL(0, part_blockdev->geometry.write_size); - TEST_ASSERT_EQUAL(0, part_blockdev->geometry.erase_size); - TEST_ASSERT_EQUAL(0, part_blockdev->geometry.recommended_write_size); - TEST_ASSERT_EQUAL(0, part_blockdev->geometry.recommended_erase_size); + const size_t expected_write_size = partition->encrypted ? 16 : 1; + TEST_ASSERT_EQUAL(expected_write_size, part_blockdev->geometry.write_size); + TEST_ASSERT_EQUAL(partition->erase_size, part_blockdev->geometry.erase_size); + TEST_ASSERT_EQUAL(expected_write_size, part_blockdev->geometry.recommended_write_size); + TEST_ASSERT_EQUAL(partition->erase_size, part_blockdev->geometry.recommended_erase_size); uint8_t dummy_test_buff[1024]; diff --git a/components/esp_partition/partition.c b/components/esp_partition/partition.c index e2ed33d2a3a..e58d56dc283 100644 --- a/components/esp_partition/partition.c +++ b/components/esp_partition/partition.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2015-2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2015-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -727,29 +727,26 @@ esp_err_t esp_partition_ptr_get_blockdev(const esp_partition_t* partition, esp_b ESP_BLOCKDEV_FLAGS_INST_CONFIG_DEFAULT(out->device_flags); - if(partition->readonly) { - out->device_flags.read_only = 1; - out->geometry.write_size = 0; - out->geometry.erase_size = 0; - out->geometry.recommended_write_size = 0; - out->geometry.recommended_erase_size = 0; - } - else { - if (partition->encrypted) { - out->geometry.write_size = 16; - out->geometry.recommended_write_size = 16; - } else { - out->geometry.write_size = 1; - out->geometry.recommended_write_size = 1; - } - out->geometry.erase_size = partition->erase_size; - out->geometry.recommended_erase_size = partition->erase_size; + out->device_flags.read_only = partition->readonly ? 1 : 0; + + if (partition->encrypted) { + out->geometry.write_size = 16; + out->geometry.recommended_write_size = 16; + } else { + out->geometry.write_size = 1; + out->geometry.recommended_write_size = 1; } + + out->geometry.erase_size = partition->erase_size; + out->geometry.recommended_erase_size = partition->erase_size; + out->geometry.read_size = 1; out->geometry.recommended_read_size = 1; + out->geometry.disk_size = partition->size; out->ops = &s_bdl_ops; + *out_bdl_handle_ptr = out; return ESP_OK; diff --git a/components/esp_partition/test_apps/main/test_part_app.c b/components/esp_partition/test_apps/main/test_part_app.c index 17f9392fae3..1db3692adc4 100644 --- a/components/esp_partition/test_apps/main/test_part_app.c +++ b/components/esp_partition/test_apps/main/test_part_app.c @@ -1,5 +1,5 @@ /* - * SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD + * SPDX-FileCopyrightText: 2025-2026 Espressif Systems (Shanghai) CO LTD * * SPDX-License-Identifier: Apache-2.0 */ @@ -188,15 +188,19 @@ TEST(esp_partition, test_bdl_interface_readonly) { //storage3 is readonly partition - esp_blockdev_handle_t part_blockdev = NULL; - TEST_ESP_OK(esp_partition_get_blockdev(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "storage3", &part_blockdev)); + const esp_partition_t *partition = esp_partition_find_first(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "storage3"); + TEST_ASSERT_NOT_NULL(partition); + + esp_blockdev_handle_t part_blockdev = NULL; + TEST_ESP_OK(esp_partition_get_blockdev(ESP_PARTITION_TYPE_DATA, ESP_PARTITION_SUBTYPE_ANY, "storage3", &part_blockdev)); //test flags TEST_ASSERT_EQUAL(1, part_blockdev->device_flags.read_only); - TEST_ASSERT_EQUAL(0, part_blockdev->geometry.write_size); - TEST_ASSERT_EQUAL(0, part_blockdev->geometry.erase_size); - TEST_ASSERT_EQUAL(0, part_blockdev->geometry.recommended_write_size); - TEST_ASSERT_EQUAL(0, part_blockdev->geometry.recommended_erase_size); + const size_t expected_write_size = partition->encrypted ? 16 : 1; + TEST_ASSERT_EQUAL(expected_write_size, part_blockdev->geometry.write_size); + TEST_ASSERT_EQUAL(partition->erase_size, part_blockdev->geometry.erase_size); + TEST_ASSERT_EQUAL(expected_write_size, part_blockdev->geometry.recommended_write_size); + TEST_ASSERT_EQUAL(partition->erase_size, part_blockdev->geometry.recommended_erase_size); uint8_t dummy_test_buff[1024];