From 120c42255baecb664ae813d58aa3010760f97795 Mon Sep 17 00:00:00 2001
From: Adrian <elagil@users.noreply.github.com>
Date: Thu, 22 Oct 2020 12:05:01 +0200
Subject: [PATCH] Added EEPROM emulation for STM32F042x6 series processors
 (#10685)

* Added STM32F042x6 support for EEPROM emulation

* Default to lower stack size on STM32F042

* Moved stack setting

* Re-moved stack definition

* Removed unnecessary check
---
 common_features.mk                     | 11 +++++++++++
 tmk_core/common/chibios/eeprom_stm32.h |  6 +++++-
 tmk_core/common/chibios/flash_stm32.c  |  3 +++
 3 files changed, 19 insertions(+), 1 deletion(-)

diff --git a/common_features.mk b/common_features.mk
index ed6908f4b8..e0ae1d74c1 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -114,6 +114,17 @@ else
         SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
         OPT_DEFS += -DEEPROM_EMU_STM32F072xB
         OPT_DEFS += -DSTM32_EEPROM_ENABLE
+      else ifeq ($(MCU_SERIES)_$(MCU_LDSCRIPT), STM32F0xx_STM32F042x6)
+
+        # Stack sizes: Since this chip has limited RAM capacity, the stack area needs to be reduced.
+        # This ensures that the EEPROM page buffer fits into RAM
+        USE_PROCESS_STACKSIZE = 0x600
+        USE_EXCEPTIONS_STACKSIZE = 0x300
+        
+        SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
+        SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
+        OPT_DEFS += -DEEPROM_EMU_STM32F042x6
+        OPT_DEFS += -DSTM32_EEPROM_ENABLE
       else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
         OPT_DEFS += -DEEPROM_DRIVER
         COMMON_VPATH += $(DRIVER_PATH)/eeprom
diff --git a/tmk_core/common/chibios/eeprom_stm32.h b/tmk_core/common/chibios/eeprom_stm32.h
index e689145954..ea0ce06400 100644
--- a/tmk_core/common/chibios/eeprom_stm32.h
+++ b/tmk_core/common/chibios/eeprom_stm32.h
@@ -36,12 +36,14 @@
 #    define MCU_STM32F103RB
 #elif defined(EEPROM_EMU_STM32F072xB)
 #    define MCU_STM32F072CB
+#elif defined(EEPROM_EMU_STM32F042x6)
+#    define MCU_STM32F042K6
 #else
 #    error "not implemented."
 #endif
 
 #ifndef EEPROM_PAGE_SIZE
-#    if defined(MCU_STM32F103RB)
+#    if defined(MCU_STM32F103RB) || defined(MCU_STM32F042K6)
 #        define FEE_PAGE_SIZE (uint16_t)0x400  // Page size = 1KByte
 #        define FEE_DENSITY_PAGES 2            // How many pages are used
 #    elif defined(MCU_STM32F103ZE) || defined(MCU_STM32F103RE) || defined(MCU_STM32F103RD) || defined(MCU_STM32F303CC) || defined(MCU_STM32F072CB)
@@ -55,6 +57,8 @@
 #ifndef EEPROM_START_ADDRESS
 #    if defined(MCU_STM32F103RB) || defined(MCU_STM32F072CB)
 #        define FEE_MCU_FLASH_SIZE 128  // Size in Kb
+#    elif defined(MCU_STM32F042K6)
+#        define FEE_MCU_FLASH_SIZE 32  // Size in Kb
 #    elif defined(MCU_STM32F103ZE) || defined(MCU_STM32F103RE)
 #        define FEE_MCU_FLASH_SIZE 512  // Size in Kb
 #    elif defined(MCU_STM32F103RD)
diff --git a/tmk_core/common/chibios/flash_stm32.c b/tmk_core/common/chibios/flash_stm32.c
index e166fc5e6e..e8b3dc4bc9 100644
--- a/tmk_core/common/chibios/flash_stm32.c
+++ b/tmk_core/common/chibios/flash_stm32.c
@@ -25,6 +25,9 @@
 #elif defined(EEPROM_EMU_STM32F072xB)
 #    define STM32F072xB
 #    include "stm32f0xx.h"
+#elif defined(EEPROM_EMU_STM32F042x6)
+#    define STM32F042x6
+#    include "stm32f0xx.h"
 #else
 #    error "not implemented."
 #endif