From ad7d3fbed0d369e44e8d6cd5efa445a4216b2d1e Mon Sep 17 00:00:00 2001 From: Peter Harper Date: Wed, 1 Mar 2023 15:52:40 +0000 Subject: [PATCH] Add PICO_FLASH_BANK_FIXED_OFFSET Defaults to true. Can be set to false if the flash bank offset is dynamically generated, e.g. to be inside the binary itself. Fixes #1278 --- src/rp2_common/pico_btstack/btstack_flash_bank.c | 5 +++-- .../pico_btstack/include/pico/btstack_flash_bank.h | 5 +++++ 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/src/rp2_common/pico_btstack/btstack_flash_bank.c b/src/rp2_common/pico_btstack/btstack_flash_bank.c index 670b5c02f..04383939b 100644 --- a/src/rp2_common/pico_btstack/btstack_flash_bank.c +++ b/src/rp2_common/pico_btstack/btstack_flash_bank.c @@ -9,10 +9,12 @@ #include "hardware/sync.h" #include +#if PICO_FLASH_BANK_FIXED_OFFSET // Check sizes static_assert(PICO_FLASH_BANK_TOTAL_SIZE % (FLASH_SECTOR_SIZE * 2) == 0, "PICO_FLASH_BANK_TOTAL_SIZE invalid"); static_assert(PICO_FLASH_BANK_TOTAL_SIZE <= PICO_FLASH_SIZE_BYTES, "PICO_FLASH_BANK_TOTAL_SIZE too big"); static_assert(PICO_FLASH_BANK_STORAGE_OFFSET + PICO_FLASH_BANK_TOTAL_SIZE <= PICO_FLASH_SIZE_BYTES, "PICO_FLASH_BANK_TOTAL_SIZE too big"); +#endif // Size of one bank #define PICO_FLASH_BANK_SIZE (PICO_FLASH_BANK_TOTAL_SIZE / 2) @@ -133,8 +135,7 @@ static const hal_flash_bank_t pico_flash_bank_instance_obj = { }; const hal_flash_bank_t *pico_flash_bank_instance(void) { - -#ifndef NDEBUG +#if !defined NDEBUG && PICO_FLASH_BANK_FIXED_OFFSET // Check we're not overlapping the binary in flash extern char __flash_binary_end; assert((uintptr_t)&__flash_binary_end - XIP_BASE <= PICO_FLASH_BANK_STORAGE_OFFSET); diff --git a/src/rp2_common/pico_btstack/include/pico/btstack_flash_bank.h b/src/rp2_common/pico_btstack/include/pico/btstack_flash_bank.h index d275221a0..2c5d62fc7 100644 --- a/src/rp2_common/pico_btstack/include/pico/btstack_flash_bank.h +++ b/src/rp2_common/pico_btstack/include/pico/btstack_flash_bank.h @@ -24,6 +24,11 @@ extern "C" { #define PICO_FLASH_BANK_STORAGE_OFFSET (PICO_FLASH_SIZE_BYTES - PICO_FLASH_BANK_TOTAL_SIZE) #endif +// PICO_CONFIG: PICO_FLASH_BANK_FIXED_OFFSET, Indicates if the flash bank is at a fixed address, or else it's dynamically generated e.g. to be inside the binary itself, type=bool, default=1, group=pico_btstack +#ifndef PICO_FLASH_BANK_FIXED_OFFSET +#define PICO_FLASH_BANK_FIXED_OFFSET 1 +#endif + /** * \brief Return the singleton BTstack HAL flash instance, used for non-volatile storage * \ingroup pico_btstack