From 5fe5ff36c4d88e7cc09b5b834e0bc1a7fa595619 Mon Sep 17 00:00:00 2001
From: Jeremy Drake <jeremydrake+gnuk@eacceleration.com>
Date: Wed, 2 Aug 2017 16:11:34 -0700
Subject: Allow compile-time override of detected flash size.

On the STM32F103C8, as used in the "blue pill" boards, it has been
determined that, despite these only officially having 64KiB flash, it is
possible to actually use 128KiB of flash.

This commit allows for a preprocessor define
STM32F103_OVERRIDE_FLASH_SIZE which, when set, is used as the size of
flash in KiB instead of reading it from the FLASH_SIZE_REG.
---
 mcu/sys-stm32f103.c | 8 ++++++++
 1 file changed, 8 insertions(+)

(limited to 'mcu')

diff --git a/mcu/sys-stm32f103.c b/mcu/sys-stm32f103.c
index 05e1f2f..81d8ec1 100644
--- a/mcu/sys-stm32f103.c
+++ b/mcu/sys-stm32f103.c
@@ -213,7 +213,11 @@ static int
 flash_write (uint32_t dst_addr, const uint8_t *src, size_t len)
 {
   int status;
+#if defined(STM32F103_OVERRIDE_FLASH_SIZE_KB)
+  uint32_t flash_end = FLASH_START_ADDR + STM32F103_OVERRIDE_FLASH_SIZE_KB*1024;
+#else
   uint32_t flash_end = FLASH_START_ADDR + (*FLASH_SIZE_REG)*1024;
+#endif
 
   if (dst_addr < FLASH_START || dst_addr + len > flash_end)
     return 0;
@@ -269,7 +273,11 @@ static void __attribute__((naked))
 flash_erase_all_and_exec (void (*entry)(void))
 {
   uint32_t addr = FLASH_START;
+#if defined(STM32F103_OVERRIDE_FLASH_SIZE_KB)
+  uint32_t end = FLASH_START_ADDR + STM32F103_OVERRIDE_FLASH_SIZE_KB*1024;
+#else
   uint32_t end = FLASH_START_ADDR + (*FLASH_SIZE_REG)*1024;
+#endif
   uint32_t page_size = 1024;
   int r;
 
-- 
cgit v1.2.3