Files
ArduinoCore-mbed/patches/0054-RP2040-FLASH-fix-multipage-write.patch
Martino Facchin b20c4e0bcf Update patchset
2023-03-01 09:19:18 +01:00

42 lines
1.4 KiB
Diff

From 93b4cfb7d73dd467be1a6688e400135a0b007421 Mon Sep 17 00:00:00 2001
From: Martino Facchin <m.facchin@arduino.cc>
Date: Tue, 13 Apr 2021 12:20:06 +0200
Subject: [PATCH 054/204] RP2040: FLASH: fix multipage write
---
.../TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c | 16 ++++++----------
1 file changed, 6 insertions(+), 10 deletions(-)
diff --git a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c
index fb1a28dd7f..2ebfc40a04 100644
--- a/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c
+++ b/targets/TARGET_RASPBERRYPI/TARGET_RP2040/flash_api.c
@@ -71,18 +71,14 @@ int32_t flash_program_page(flash_t *obj, uint32_t address, const uint8_t *data,
return -1;
}
- uint8_t buf[FLASH_PAGE_SIZE];
-
- for (int j = 0; j < size/FLASH_PAGE_SIZE; j++) {
- for (int i = 0; i < FLASH_PAGE_SIZE; i++) {
- buf[i] = data[j*FLASH_PAGE_SIZE + i];
- }
- address = address + j*FLASH_PAGE_SIZE;
- core_util_critical_section_enter();
- flash_range_program(address, buf, FLASH_PAGE_SIZE);
- core_util_critical_section_exit();
+ size_t pages = size/FLASH_PAGE_SIZE;
+ if (size%FLASH_PAGE_SIZE != 0) {
+ pages += 1;
}
+ core_util_critical_section_enter();
+ flash_range_program(address, data, FLASH_PAGE_SIZE * pages);
+ core_util_critical_section_exit();
return 0;
--
2.39.1