aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Challis <git@zvecr.com>2021-09-15 09:21:36 +0100
committerGitHub <noreply@github.com>2021-09-15 01:21:36 -0700
commitfa141a5a8fc3b3f439385db990ec34ad3bbbcb16 (patch)
tree6b8f1107ab2f3b896ebef97ef30156a2e9eae3e1
parentb63453a75bc3e49802c7df1d2ff5b2ea95a5354f (diff)
downloadqmk_firmware-fa141a5a8fc3b3f439385db990ec34ad3bbbcb16.tar.gz
qmk_firmware-fa141a5a8fc3b3f439385db990ec34ad3bbbcb16.zip
Migrate STM32_EEPROM_ENABLE to use EEPROM_DRIVER (#14433)
-rw-r--r--common_features.mk16
-rw-r--r--keyboards/mxss/rgblight.c4
-rw-r--r--quantum/eeconfig.c11
-rw-r--r--quantum/keyboard.c6
-rw-r--r--tmk_core/common/chibios/eeprom_stm32.c57
-rw-r--r--tmk_core/common/test/rules.mk1
6 files changed, 22 insertions, 73 deletions
diff --git a/common_features.mk b/common_features.mk
index 98e47d3dd..ddb7112fd 100644
--- a/common_features.mk
+++ b/common_features.mk
@@ -157,20 +157,26 @@ else
157 # Automatically provided by avr-libc, nothing required 157 # Automatically provided by avr-libc, nothing required
158 else ifeq ($(PLATFORM),CHIBIOS) 158 else ifeq ($(PLATFORM),CHIBIOS)
159 ifeq ($(MCU_SERIES), STM32F3xx) 159 ifeq ($(MCU_SERIES), STM32F3xx)
160 OPT_DEFS += -DEEPROM_DRIVER
161 COMMON_VPATH += $(DRIVER_PATH)/eeprom
162 SRC += eeprom_driver.c
160 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c 163 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
161 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c 164 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
162 OPT_DEFS += -DEEPROM_EMU_STM32F303xC 165 OPT_DEFS += -DEEPROM_EMU_STM32F303xC
163 OPT_DEFS += -DSTM32_EEPROM_ENABLE
164 else ifeq ($(MCU_SERIES), STM32F1xx) 166 else ifeq ($(MCU_SERIES), STM32F1xx)
167 OPT_DEFS += -DEEPROM_DRIVER
168 COMMON_VPATH += $(DRIVER_PATH)/eeprom
169 SRC += eeprom_driver.c
165 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c 170 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
166 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c 171 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
167 OPT_DEFS += -DEEPROM_EMU_STM32F103xB 172 OPT_DEFS += -DEEPROM_EMU_STM32F103xB
168 OPT_DEFS += -DSTM32_EEPROM_ENABLE
169 else ifeq ($(MCU_SERIES)_$(MCU_LDSCRIPT), STM32F0xx_STM32F072xB) 173 else ifeq ($(MCU_SERIES)_$(MCU_LDSCRIPT), STM32F0xx_STM32F072xB)
174 OPT_DEFS += -DEEPROM_DRIVER
175 COMMON_VPATH += $(DRIVER_PATH)/eeprom
176 SRC += eeprom_driver.c
170 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c 177 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
171 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c 178 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
172 OPT_DEFS += -DEEPROM_EMU_STM32F072xB 179 OPT_DEFS += -DEEPROM_EMU_STM32F072xB
173 OPT_DEFS += -DSTM32_EEPROM_ENABLE
174 else ifeq ($(MCU_SERIES)_$(MCU_LDSCRIPT), STM32F0xx_STM32F042x6) 180 else ifeq ($(MCU_SERIES)_$(MCU_LDSCRIPT), STM32F0xx_STM32F042x6)
175 181
176 # Stack sizes: Since this chip has limited RAM capacity, the stack area needs to be reduced. 182 # Stack sizes: Since this chip has limited RAM capacity, the stack area needs to be reduced.
@@ -178,10 +184,12 @@ else
178 USE_PROCESS_STACKSIZE = 0x600 184 USE_PROCESS_STACKSIZE = 0x600
179 USE_EXCEPTIONS_STACKSIZE = 0x300 185 USE_EXCEPTIONS_STACKSIZE = 0x300
180 186
187 OPT_DEFS += -DEEPROM_DRIVER
188 COMMON_VPATH += $(DRIVER_PATH)/eeprom
189 SRC += eeprom_driver.c
181 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c 190 SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c
182 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c 191 SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c
183 OPT_DEFS += -DEEPROM_EMU_STM32F042x6 192 OPT_DEFS += -DEEPROM_EMU_STM32F042x6
184 OPT_DEFS += -DSTM32_EEPROM_ENABLE
185 else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),) 193 else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),)
186 OPT_DEFS += -DEEPROM_DRIVER 194 OPT_DEFS += -DEEPROM_DRIVER
187 COMMON_VPATH += $(DRIVER_PATH)/eeprom 195 COMMON_VPATH += $(DRIVER_PATH)/eeprom
diff --git a/keyboards/mxss/rgblight.c b/keyboards/mxss/rgblight.c
index d2d79815c..b2df351c5 100644
--- a/keyboards/mxss/rgblight.c
+++ b/keyboards/mxss/rgblight.c
@@ -23,10 +23,6 @@
23#ifdef EEPROM_ENABLE 23#ifdef EEPROM_ENABLE
24# include "eeprom.h" 24# include "eeprom.h"
25#endif 25#endif
26#ifdef STM32_EEPROM_ENABLE
27# include <hal.h>
28# include "eeprom_stm32.h"
29#endif
30#include "wait.h" 26#include "wait.h"
31#include "progmem.h" 27#include "progmem.h"
32#include "timer.h" 28#include "timer.h"
diff --git a/quantum/eeconfig.c b/quantum/eeconfig.c
index 92f0ac443..4c2ad2490 100644
--- a/quantum/eeconfig.c
+++ b/quantum/eeconfig.c
@@ -4,11 +4,6 @@
4#include "eeconfig.h" 4#include "eeconfig.h"
5#include "action_layer.h" 5#include "action_layer.h"
6 6
7#ifdef STM32_EEPROM_ENABLE
8# include <hal.h>
9# include "eeprom_stm32.h"
10#endif
11
12#if defined(EEPROM_DRIVER) 7#if defined(EEPROM_DRIVER)
13# include "eeprom_driver.h" 8# include "eeprom_driver.h"
14#endif 9#endif
@@ -43,9 +38,6 @@ __attribute__((weak)) void eeconfig_init_kb(void) {
43 * FIXME: needs doc 38 * FIXME: needs doc
44 */ 39 */
45void eeconfig_init_quantum(void) { 40void eeconfig_init_quantum(void) {
46#ifdef STM32_EEPROM_ENABLE
47 EEPROM_Erase();
48#endif
49#if defined(EEPROM_DRIVER) 41#if defined(EEPROM_DRIVER)
50 eeprom_driver_erase(); 42 eeprom_driver_erase();
51#endif 43#endif
@@ -111,9 +103,6 @@ void eeconfig_enable(void) { eeprom_update_word(EECONFIG_MAGIC, EECONFIG_MAGIC_N
111 * FIXME: needs doc 103 * FIXME: needs doc
112 */ 104 */
113void eeconfig_disable(void) { 105void eeconfig_disable(void) {
114#ifdef STM32_EEPROM_ENABLE
115 EEPROM_Erase();
116#endif
117#if defined(EEPROM_DRIVER) 106#if defined(EEPROM_DRIVER)
118 eeprom_driver_erase(); 107 eeprom_driver_erase();
119#endif 108#endif
diff --git a/quantum/keyboard.c b/quantum/keyboard.c
index b98fc64e4..5846507b3 100644
--- a/quantum/keyboard.c
+++ b/quantum/keyboard.c
@@ -97,9 +97,6 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
97#ifdef DIP_SWITCH_ENABLE 97#ifdef DIP_SWITCH_ENABLE
98# include "dip_switch.h" 98# include "dip_switch.h"
99#endif 99#endif
100#ifdef STM32_EEPROM_ENABLE
101# include "eeprom_stm32.h"
102#endif
103#ifdef EEPROM_DRIVER 100#ifdef EEPROM_DRIVER
104# include "eeprom_driver.h" 101# include "eeprom_driver.h"
105#endif 102#endif
@@ -246,9 +243,6 @@ void keyboard_setup(void) {
246 disable_jtag(); 243 disable_jtag();
247#endif 244#endif
248 print_set_sendchar(sendchar); 245 print_set_sendchar(sendchar);
249#ifdef STM32_EEPROM_ENABLE
250 EEPROM_Init();
251#endif
252#ifdef EEPROM_DRIVER 246#ifdef EEPROM_DRIVER
253 eeprom_driver_init(); 247 eeprom_driver_init();
254#endif 248#endif
diff --git a/tmk_core/common/chibios/eeprom_stm32.c b/tmk_core/common/chibios/eeprom_stm32.c
index 1fdf8c1e2..acc6a4851 100644
--- a/tmk_core/common/chibios/eeprom_stm32.c
+++ b/tmk_core/common/chibios/eeprom_stm32.c
@@ -620,48 +620,11 @@ uint16_t EEPROM_ReadDataWord(uint16_t Address) {
620} 620}
621 621
622/***************************************************************************** 622/*****************************************************************************
623 * Wrap library in AVR style functions. 623 * Bind to eeprom_driver.c
624 *******************************************************************************/ 624 *******************************************************************************/
625uint8_t eeprom_read_byte(const uint8_t *Address) { return EEPROM_ReadDataByte((const uintptr_t)Address); } 625void eeprom_driver_init(void) { EEPROM_Init(); }
626 626
627void eeprom_write_byte(uint8_t *Address, uint8_t Value) { EEPROM_WriteDataByte((uintptr_t)Address, Value); } 627void eeprom_driver_erase(void) { EEPROM_Erase(); }
628
629void eeprom_update_byte(uint8_t *Address, uint8_t Value) { EEPROM_WriteDataByte((uintptr_t)Address, Value); }
630
631uint16_t eeprom_read_word(const uint16_t *Address) { return EEPROM_ReadDataWord((const uintptr_t)Address); }
632
633void eeprom_write_word(uint16_t *Address, uint16_t Value) { EEPROM_WriteDataWord((uintptr_t)Address, Value); }
634
635void eeprom_update_word(uint16_t *Address, uint16_t Value) { EEPROM_WriteDataWord((uintptr_t)Address, Value); }
636
637uint32_t eeprom_read_dword(const uint32_t *Address) {
638 const uint16_t p = (const uintptr_t)Address;
639 /* Check word alignment */
640 if (p % 2) {
641 /* Not aligned */
642 return (uint32_t)EEPROM_ReadDataByte(p) | (uint32_t)(EEPROM_ReadDataWord(p + 1) << 8) | (uint32_t)(EEPROM_ReadDataByte(p + 3) << 24);
643 } else {
644 /* Aligned */
645 return EEPROM_ReadDataWord(p) | (EEPROM_ReadDataWord(p + 2) << 16);
646 }
647}
648
649void eeprom_write_dword(uint32_t *Address, uint32_t Value) {
650 uint16_t p = (const uintptr_t)Address;
651 /* Check word alignment */
652 if (p % 2) {
653 /* Not aligned */
654 EEPROM_WriteDataByte(p, (uint8_t)Value);
655 EEPROM_WriteDataWord(p + 1, (uint16_t)(Value >> 8));
656 EEPROM_WriteDataByte(p + 3, (uint8_t)(Value >> 24));
657 } else {
658 /* Aligned */
659 EEPROM_WriteDataWord(p, (uint16_t)Value);
660 EEPROM_WriteDataWord(p + 2, (uint16_t)(Value >> 16));
661 }
662}
663
664void eeprom_update_dword(uint32_t *Address, uint32_t Value) { eeprom_write_dword(Address, Value); }
665 628
666void eeprom_read_block(void *buf, const void *addr, size_t len) { 629void eeprom_read_block(void *buf, const void *addr, size_t len) {
667 const uint8_t *src = (const uint8_t *)addr; 630 const uint8_t *src = (const uint8_t *)addr;
@@ -670,14 +633,14 @@ void eeprom_read_block(void *buf, const void *addr, size_t len) {
670 /* Check word alignment */ 633 /* Check word alignment */
671 if (len && (uintptr_t)src % 2) { 634 if (len && (uintptr_t)src % 2) {
672 /* Read the unaligned first byte */ 635 /* Read the unaligned first byte */
673 *dest++ = eeprom_read_byte(src++); 636 *dest++ = EEPROM_ReadDataByte((const uintptr_t)src++);
674 --len; 637 --len;
675 } 638 }
676 639
677 uint16_t value; 640 uint16_t value;
678 bool aligned = ((uintptr_t)dest % 2 == 0); 641 bool aligned = ((uintptr_t)dest % 2 == 0);
679 while (len > 1) { 642 while (len > 1) {
680 value = eeprom_read_word((uint16_t *)src); 643 value = EEPROM_ReadDataWord((const uintptr_t)((uint16_t *)src));
681 if (aligned) { 644 if (aligned) {
682 *(uint16_t *)dest = value; 645 *(uint16_t *)dest = value;
683 dest += 2; 646 dest += 2;
@@ -689,7 +652,7 @@ void eeprom_read_block(void *buf, const void *addr, size_t len) {
689 len -= 2; 652 len -= 2;
690 } 653 }
691 if (len) { 654 if (len) {
692 *dest = eeprom_read_byte(src); 655 *dest = EEPROM_ReadDataByte((const uintptr_t)src);
693 } 656 }
694} 657}
695 658
@@ -700,7 +663,7 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
700 /* Check word alignment */ 663 /* Check word alignment */
701 if (len && (uintptr_t)dest % 2) { 664 if (len && (uintptr_t)dest % 2) {
702 /* Write the unaligned first byte */ 665 /* Write the unaligned first byte */
703 eeprom_write_byte(dest++, *src++); 666 EEPROM_WriteDataByte((uintptr_t)dest++, *src++);
704 --len; 667 --len;
705 } 668 }
706 669
@@ -712,15 +675,13 @@ void eeprom_write_block(const void *buf, void *addr, size_t len) {
712 } else { 675 } else {
713 value = *(uint8_t *)src | (*(uint8_t *)(src + 1) << 8); 676 value = *(uint8_t *)src | (*(uint8_t *)(src + 1) << 8);
714 } 677 }
715 eeprom_write_word((uint16_t *)dest, value); 678 EEPROM_WriteDataWord((uintptr_t)((uint16_t *)dest), value);
716 dest += 2; 679 dest += 2;
717 src += 2; 680 src += 2;
718 len -= 2; 681 len -= 2;
719 } 682 }
720 683
721 if (len) { 684 if (len) {
722 eeprom_write_byte(dest, *src); 685 EEPROM_WriteDataByte((uintptr_t)dest, *src);
723 } 686 }
724} 687}
725
726void eeprom_update_block(const void *buf, void *addr, size_t len) { eeprom_write_block(buf, addr, len); }
diff --git a/tmk_core/common/test/rules.mk b/tmk_core/common/test/rules.mk
index 48632a095..73d2302da 100644
--- a/tmk_core/common/test/rules.mk
+++ b/tmk_core/common/test/rules.mk
@@ -16,6 +16,7 @@ eeprom_stm32_tiny_INC := $(eeprom_stm32_INC)
16eeprom_stm32_large_INC := $(eeprom_stm32_INC) 16eeprom_stm32_large_INC := $(eeprom_stm32_INC)
17 17
18eeprom_stm32_SRC := \ 18eeprom_stm32_SRC := \
19 $(TOP_DIR)/drivers/eeprom/eeprom_driver.c \
19 $(TMK_PATH)/common/test/eeprom_stm32_tests.cpp \ 20 $(TMK_PATH)/common/test/eeprom_stm32_tests.cpp \
20 $(TMK_PATH)/common/test/flash_stm32_mock.c \ 21 $(TMK_PATH)/common/test/flash_stm32_mock.c \
21 $(TMK_PATH)/common/chibios/eeprom_stm32.c 22 $(TMK_PATH)/common/chibios/eeprom_stm32.c