diff options
| author | Nick Brassel <nick@tzarc.org> | 2022-02-02 15:04:37 +1100 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-02-02 15:04:37 +1100 |
| commit | e22efc037a7e4da17f1051d5053768e40683da68 (patch) | |
| tree | d58924ef9de401b4e97ba46113ee42874a1593be | |
| parent | da5cb5fd6f91c2f7aebbcebbf211252c51d9b4a5 (diff) | |
Don't make EEPROM size assumptions with dynamic keymaps. (#16054)
* Don't make EEPROM size assumptions with dynamic keymaps.
* Add support for checking against emulated flash, error out if someone attempts to build a board without specifying EEPROM size.
* Reorder defines so that MCU is considered last.
* Refactor EEPROM definitions for simplicity.
* Fix max sizing of kabedon/kabedon980.
* Fix max sizing of mechlovin/olly/jf.
* Fix unit tests.
* Review comments, add messages with values during build failures.
| -rw-r--r-- | common_features.mk | 9 | ||||
| -rw-r--r-- | keyboards/kabedon/kabedon980/config.h | 10 | ||||
| -rw-r--r-- | keyboards/kabedon/kabedon980/keymaps/via/keymap.c | 20 | ||||
| -rw-r--r-- | keyboards/mechlovin/olly/jf/keymaps/via/config.h | 4 | ||||
| -rw-r--r-- | keyboards/mechlovin/olly/jf/keymaps/via/keymap.c | 25 | ||||
| -rw-r--r-- | platforms/arm_atsam/eeprom_samd.c (renamed from platforms/arm_atsam/eeprom.c) | 6 | ||||
| -rwxr-xr-x | platforms/arm_atsam/eeprom_samd.h | 8 | ||||
| -rw-r--r-- | platforms/chibios/eeprom_stm32.c | 66 | ||||
| -rw-r--r-- | platforms/chibios/eeprom_stm32_defs.h | 62 | ||||
| -rw-r--r-- | platforms/chibios/eeprom_teensy.c | 15 | ||||
| -rwxr-xr-x | platforms/chibios/eeprom_teensy.h | 22 | ||||
| -rw-r--r-- | platforms/eeprom.h | 49 | ||||
| -rw-r--r-- | platforms/test/eeprom.c | 4 | ||||
| -rw-r--r-- | platforms/test/eeprom_stm32_tests.cpp | 3 | ||||
| -rw-r--r-- | platforms/test/eeprom_stm32_tests.h | 8 | ||||
| -rw-r--r-- | platforms/test/rules.mk | 2 | ||||
| -rw-r--r-- | quantum/dynamic_keymap.c | 25 |
17 files changed, 185 insertions, 153 deletions
diff --git a/common_features.mk b/common_features.mk index d3da487e69..5c5e6a9a25 100644 --- a/common_features.mk +++ b/common_features.mk | |||
| @@ -186,20 +186,21 @@ else | |||
| 186 | else ifeq ($(PLATFORM),CHIBIOS) | 186 | else ifeq ($(PLATFORM),CHIBIOS) |
| 187 | ifneq ($(filter STM32F3xx_% STM32F1xx_% %_STM32F401xC %_STM32F401xE %_STM32F405xG %_STM32F411xE %_STM32F072xB %_STM32F042x6 %_GD32VF103xB %_GD32VF103x8, $(MCU_SERIES)_$(MCU_LDSCRIPT)),) | 187 | ifneq ($(filter STM32F3xx_% STM32F1xx_% %_STM32F401xC %_STM32F401xE %_STM32F405xG %_STM32F411xE %_STM32F072xB %_STM32F042x6 %_GD32VF103xB %_GD32VF103x8, $(MCU_SERIES)_$(MCU_LDSCRIPT)),) |
| 188 | # Emulated EEPROM | 188 | # Emulated EEPROM |
| 189 | OPT_DEFS += -DEEPROM_DRIVER | 189 | OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_FLASH_EMULATED |
| 190 | COMMON_VPATH += $(DRIVER_PATH)/eeprom | 190 | COMMON_VPATH += $(DRIVER_PATH)/eeprom |
| 191 | SRC += eeprom_driver.c | 191 | SRC += eeprom_driver.c |
| 192 | SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c | 192 | SRC += $(PLATFORM_COMMON_DIR)/eeprom_stm32.c |
| 193 | SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c | 193 | SRC += $(PLATFORM_COMMON_DIR)/flash_stm32.c |
| 194 | else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),) | 194 | else ifneq ($(filter $(MCU_SERIES),STM32L0xx STM32L1xx),) |
| 195 | # True EEPROM on STM32L0xx, L1xx | 195 | # True EEPROM on STM32L0xx, L1xx |
| 196 | OPT_DEFS += -DEEPROM_DRIVER | 196 | OPT_DEFS += -DEEPROM_DRIVER -DEEPROM_STM32_L0_L1 |
| 197 | COMMON_VPATH += $(DRIVER_PATH)/eeprom | 197 | COMMON_VPATH += $(DRIVER_PATH)/eeprom |
| 198 | COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom | 198 | COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/eeprom |
| 199 | SRC += eeprom_driver.c | 199 | SRC += eeprom_driver.c |
| 200 | SRC += eeprom_stm32_L0_L1.c | 200 | SRC += eeprom_stm32_L0_L1.c |
| 201 | else ifneq ($(filter $(MCU_SERIES),KL2x K20x),) | 201 | else ifneq ($(filter $(MCU_SERIES),KL2x K20x),) |
| 202 | # Teensy EEPROM implementations | 202 | # Teensy EEPROM implementations |
| 203 | OPT_DEFS += -DEEPROM_TEENSY | ||
| 203 | SRC += eeprom_teensy.c | 204 | SRC += eeprom_teensy.c |
| 204 | else | 205 | else |
| 205 | # Fall back to transient, i.e. non-persistent | 206 | # Fall back to transient, i.e. non-persistent |
| @@ -209,9 +210,11 @@ else | |||
| 209 | endif | 210 | endif |
| 210 | else ifeq ($(PLATFORM),ARM_ATSAM) | 211 | else ifeq ($(PLATFORM),ARM_ATSAM) |
| 211 | # arm_atsam EEPROM | 212 | # arm_atsam EEPROM |
| 212 | SRC += $(PLATFORM_COMMON_DIR)/eeprom.c | 213 | OPT_DEFS += -DEEPROM_SAMD |
| 214 | SRC += $(PLATFORM_COMMON_DIR)/eeprom_samd.c | ||
| 213 | else ifeq ($(PLATFORM),TEST) | 215 | else ifeq ($(PLATFORM),TEST) |
| 214 | # Test harness "EEPROM" | 216 | # Test harness "EEPROM" |
| 217 | OPT_DEFS += -DEEPROM_TEST_HARNESS | ||
| 215 | SRC += $(PLATFORM_COMMON_DIR)/eeprom.c | 218 | SRC += $(PLATFORM_COMMON_DIR)/eeprom.c |
| 216 | endif | 219 | endif |
| 217 | endif | 220 | endif |
diff --git a/keyboards/kabedon/kabedon980/config.h b/keyboards/kabedon/kabedon980/config.h index 5dc70dfebf..db93dfcf85 100644 --- a/keyboards/kabedon/kabedon980/config.h +++ b/keyboards/kabedon/kabedon980/config.h | |||
| @@ -32,21 +32,21 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 32 | #define MATRIX_COLS 13 | 32 | #define MATRIX_COLS 13 |
| 33 | 33 | ||
| 34 | /* Keyboard Matrix Assignments */ | 34 | /* Keyboard Matrix Assignments */ |
| 35 | #define MATRIX_ROW_PINS {D0,D2,F7,B1,B0,D6,C7,D7,B5,B2} | 35 | #define MATRIX_ROW_PINS {D0,D2,F7,B1,B0,D6,C7,D7,B5,B2} |
| 36 | #define MATRIX_COL_PINS {F5,F4,F6,C6,B6,B4,D3,D1,D4,F1,B3,D5,F0} | 36 | #define MATRIX_COL_PINS {F5,F4,F6,C6,B6,B4,D3,D1,D4,F1,B3,D5,F0} |
| 37 | #define UNUSED_PINS | 37 | #define UNUSED_PINS |
| 38 | #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 | 38 | #define DYNAMIC_KEYMAP_LAYER_COUNT 3 |
| 39 | /* COL2ROW, ROW2COL*/ | 39 | /* COL2ROW, ROW2COL*/ |
| 40 | #define DIODE_DIRECTION ROW2COL | 40 | #define DIODE_DIRECTION ROW2COL |
| 41 | 41 | ||
| 42 | #define RGB_DI_PIN B7 | 42 | #define RGB_DI_PIN B7 |
| 43 | #ifdef RGB_DI_PIN | 43 | #ifdef RGB_DI_PIN |
| 44 | #define RGBLED_NUM 20 | 44 | #define RGBLED_NUM 20 |
| 45 | #define RGBLIGHT_HUE_STEP 8 | 45 | #define RGBLIGHT_HUE_STEP 8 |
| 46 | #define RGBLIGHT_SAT_STEP 8 | 46 | #define RGBLIGHT_SAT_STEP 8 |
| 47 | #define RGBLIGHT_VAL_STEP 8 | 47 | #define RGBLIGHT_VAL_STEP 8 |
| 48 | #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ | 48 | #define RGBLIGHT_LIMIT_VAL 255 /* The maximum brightness level */ |
| 49 | #define RGBLIGHT_ANIMATIONS | 49 | #define RGBLIGHT_ANIMATIONS |
| 50 | #endif | 50 | #endif |
| 51 | 51 | ||
| 52 | /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ | 52 | /* Debounce reduces chatter (unintended double-presses) - set 0 if debouncing is not needed */ |
diff --git a/keyboards/kabedon/kabedon980/keymaps/via/keymap.c b/keyboards/kabedon/kabedon980/keymaps/via/keymap.c index 44574452bf..76eaa3968a 100644 --- a/keyboards/kabedon/kabedon980/keymaps/via/keymap.c +++ b/keyboards/kabedon/kabedon980/keymaps/via/keymap.c | |||
| @@ -6,32 +6,24 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 6 | KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_HOME, KC_PGUP, KC_PGDN, | 6 | KC_ESC, KC_F1, KC_F2, KC_F3, KC_F4, KC_F5, KC_F6, KC_F7, KC_F8, KC_F9, KC_F10, KC_F11, KC_F12, KC_DEL, KC_HOME, KC_PGUP, KC_PGDN, |
| 7 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, | 7 | KC_GRV, KC_1, KC_2, KC_3, KC_4, KC_5, KC_6, KC_7, KC_8, KC_9, KC_0, KC_MINS, KC_EQL, KC_BSPC, KC_NLCK, KC_PSLS, KC_PAST, KC_PMNS, |
| 8 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, | 8 | KC_TAB, KC_Q, KC_W, KC_E, KC_R, KC_T, KC_Y, KC_U, KC_I, KC_O, KC_P, KC_LBRC, KC_RBRC, KC_BSLS, KC_P7, KC_P8, KC_P9, KC_PPLS, |
| 9 | KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, | 9 | KC_CAPS, KC_A, KC_S, KC_D, KC_F, KC_G, KC_H, KC_J, KC_K, KC_L, KC_SCLN, KC_QUOT, KC_ENT, KC_P4, KC_P5, KC_P6, |
| 10 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, | 10 | KC_LSFT, KC_Z, KC_X, KC_C, KC_V, KC_B, KC_N, KC_M, KC_COMM, KC_DOT, KC_SLSH, KC_RSFT, KC_UP, KC_P1, KC_P2, KC_P3, KC_PENT, |
| 11 | KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ), | 11 | KC_LCTL, KC_LGUI, KC_LALT, KC_SPC, KC_RALT, MO(1), KC_RCTL, KC_LEFT, KC_DOWN, KC_RGHT, KC_P0, KC_PDOT ), |
| 12 | 12 | ||
| 13 | [1] = LAYOUT( | 13 | [1] = LAYOUT( |
| 14 | RGB_MOD, RGB_TOG, RGB_SAI, RGB_SAD, RGB_HUI, RGB_HUD, RGB_SPI, RGB_SPD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 14 | RGB_MOD, RGB_TOG, RGB_SAI, RGB_SAD, RGB_HUI, RGB_HUD, RGB_SPI, RGB_SPD, RGB_VAI, RGB_VAD, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 15 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 15 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 16 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 16 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 17 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 17 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 18 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 18 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 19 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), | 19 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), |
| 20 | 20 | ||
| 21 | [2] = LAYOUT( | 21 | [2] = LAYOUT( |
| 22 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 22 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 23 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 23 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 24 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 24 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 25 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 25 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 26 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 26 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 27 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), | 27 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ), |
| 28 | |||
| 29 | [3] = LAYOUT( | ||
| 30 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 31 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 32 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 33 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 34 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 35 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS ) | ||
| 36 | }; | 28 | }; |
| 37 | 29 | ||
diff --git a/keyboards/mechlovin/olly/jf/keymaps/via/config.h b/keyboards/mechlovin/olly/jf/keymaps/via/config.h index f330025a00..82c2e51eb9 100644 --- a/keyboards/mechlovin/olly/jf/keymaps/via/config.h +++ b/keyboards/mechlovin/olly/jf/keymaps/via/config.h | |||
| @@ -17,6 +17,4 @@ along with this program. If not, see <http://www.gnu.org/licenses/>. | |||
| 17 | 17 | ||
| 18 | #pragma once | 18 | #pragma once |
| 19 | 19 | ||
| 20 | #define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1607 | 20 | #define DYNAMIC_KEYMAP_LAYER_COUNT 3 |
| 21 | #define DYNAMIC_KEYMAP_LAYER_COUNT 6 | ||
| 22 | |||
diff --git a/keyboards/mechlovin/olly/jf/keymaps/via/keymap.c b/keyboards/mechlovin/olly/jf/keymaps/via/keymap.c index c90eeb1830..18ac685abc 100644 --- a/keyboards/mechlovin/olly/jf/keymaps/via/keymap.c +++ b/keyboards/mechlovin/olly/jf/keymaps/via/keymap.c | |||
| @@ -40,29 +40,4 @@ const uint16_t PROGMEM keymaps[][MATRIX_ROWS][MATRIX_COLS] = { | |||
| 40 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | 40 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, |
| 41 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS | 41 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS |
| 42 | ), | 42 | ), |
| 43 | [3] = LAYOUT_all( | ||
| 44 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 45 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 46 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 47 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 48 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 49 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS | ||
| 50 | ), | ||
| 51 | [4] = LAYOUT_all( | ||
| 52 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 53 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 54 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 55 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 56 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 57 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS | ||
| 58 | ), | ||
| 59 | [5] = LAYOUT_all( | ||
| 60 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 61 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 62 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 63 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 64 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, | ||
| 65 | KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS, KC_TRNS | ||
| 66 | ), | ||
| 67 | |||
| 68 | }; \ No newline at end of file | 43 | }; \ No newline at end of file |
diff --git a/platforms/arm_atsam/eeprom.c b/platforms/arm_atsam/eeprom_samd.c index ff1a692623..beaffeec30 100644 --- a/platforms/arm_atsam/eeprom.c +++ b/platforms/arm_atsam/eeprom_samd.c | |||
| @@ -18,11 +18,7 @@ | |||
| 18 | #include "samd51j18a.h" | 18 | #include "samd51j18a.h" |
| 19 | #include "core_cm4.h" | 19 | #include "core_cm4.h" |
| 20 | #include "component/nvmctrl.h" | 20 | #include "component/nvmctrl.h" |
| 21 | 21 | #include "eeprom_samd.h" | |
| 22 | #ifndef EEPROM_SIZE | ||
| 23 | # include "eeconfig.h" | ||
| 24 | # define EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO | ||
| 25 | #endif | ||
| 26 | 22 | ||
| 27 | #ifndef MAX | 23 | #ifndef MAX |
| 28 | # define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) | 24 | # define MAX(X, Y) ((X) > (Y) ? (X) : (Y)) |
diff --git a/platforms/arm_atsam/eeprom_samd.h b/platforms/arm_atsam/eeprom_samd.h new file mode 100755 index 0000000000..7dbff9bfa1 --- /dev/null +++ b/platforms/arm_atsam/eeprom_samd.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | // Copyright 2022 Nick Brassel (@tzarc) | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | #pragma once | ||
| 4 | |||
| 5 | #ifndef EEPROM_SIZE | ||
| 6 | # include "eeconfig.h" | ||
| 7 | # define EEPROM_SIZE (((EECONFIG_SIZE + 3) / 4) * 4) // based off eeconfig's current usage, aligned to 4-byte sizes, to deal with LTO | ||
| 8 | #endif | ||
diff --git a/platforms/chibios/eeprom_stm32.c b/platforms/chibios/eeprom_stm32.c index acc6a48516..8bf0b19c3d 100644 --- a/platforms/chibios/eeprom_stm32.c +++ b/platforms/chibios/eeprom_stm32.c | |||
| @@ -133,10 +133,6 @@ | |||
| 133 | */ | 133 | */ |
| 134 | 134 | ||
| 135 | #include "eeprom_stm32_defs.h" | 135 | #include "eeprom_stm32_defs.h" |
| 136 | #if !defined(FEE_PAGE_SIZE) || !defined(FEE_PAGE_COUNT) || !defined(FEE_MCU_FLASH_SIZE) || !defined(FEE_PAGE_BASE_ADDRESS) | ||
| 137 | # error "not implemented." | ||
| 138 | #endif | ||
| 139 | |||
| 140 | /* These bits are used for optimizing encoding of bytes, 0 and 1 */ | 136 | /* These bits are used for optimizing encoding of bytes, 0 and 1 */ |
| 141 | #define FEE_WORD_ENCODING 0x8000 | 137 | #define FEE_WORD_ENCODING 0x8000 |
| 142 | #define FEE_VALUE_NEXT 0x6000 | 138 | #define FEE_VALUE_NEXT 0x6000 |
| @@ -144,69 +140,11 @@ | |||
| 144 | #define FEE_VALUE_ENCODED 0x2000 | 140 | #define FEE_VALUE_ENCODED 0x2000 |
| 145 | #define FEE_BYTE_RANGE 0x80 | 141 | #define FEE_BYTE_RANGE 0x80 |
| 146 | 142 | ||
| 147 | /* Addressable range 16KByte: 0 <-> (0x1FFF << 1) */ | ||
| 148 | #define FEE_ADDRESS_MAX_SIZE 0x4000 | ||
| 149 | |||
| 150 | /* Flash word value after erase */ | 143 | /* Flash word value after erase */ |
| 151 | #define FEE_EMPTY_WORD ((uint16_t)0xFFFF) | 144 | #define FEE_EMPTY_WORD ((uint16_t)0xFFFF) |
| 152 | 145 | ||
| 153 | /* Size of combined compacted eeprom and write log pages */ | 146 | #if !defined(FEE_PAGE_SIZE) || !defined(FEE_PAGE_COUNT) || !defined(FEE_MCU_FLASH_SIZE) || !defined(FEE_PAGE_BASE_ADDRESS) |
| 154 | #define FEE_DENSITY_MAX_SIZE (FEE_PAGE_COUNT * FEE_PAGE_SIZE) | 147 | # error "not implemented." |
| 155 | |||
| 156 | #ifndef FEE_MCU_FLASH_SIZE_IGNORE_CHECK /* *TODO: Get rid of this check */ | ||
| 157 | # if FEE_DENSITY_MAX_SIZE > (FEE_MCU_FLASH_SIZE * 1024) | ||
| 158 | # pragma message STR(FEE_DENSITY_MAX_SIZE) " > " STR(FEE_MCU_FLASH_SIZE * 1024) | ||
| 159 | # error emulated eeprom: FEE_DENSITY_MAX_SIZE is greater than available flash size | ||
| 160 | # endif | ||
| 161 | #endif | ||
| 162 | |||
| 163 | /* Size of emulated eeprom */ | ||
| 164 | #ifdef FEE_DENSITY_BYTES | ||
| 165 | # if (FEE_DENSITY_BYTES > FEE_DENSITY_MAX_SIZE) | ||
| 166 | # pragma message STR(FEE_DENSITY_BYTES) " > " STR(FEE_DENSITY_MAX_SIZE) | ||
| 167 | # error emulated eeprom: FEE_DENSITY_BYTES exceeds FEE_DENSITY_MAX_SIZE | ||
| 168 | # endif | ||
| 169 | # if (FEE_DENSITY_BYTES == FEE_DENSITY_MAX_SIZE) | ||
| 170 | # pragma message STR(FEE_DENSITY_BYTES) " == " STR(FEE_DENSITY_MAX_SIZE) | ||
| 171 | # warning emulated eeprom: FEE_DENSITY_BYTES leaves no room for a write log. This will greatly increase the flash wear rate! | ||
| 172 | # endif | ||
| 173 | # if FEE_DENSITY_BYTES > FEE_ADDRESS_MAX_SIZE | ||
| 174 | # pragma message STR(FEE_DENSITY_BYTES) " > " STR(FEE_ADDRESS_MAX_SIZE) | ||
| 175 | # error emulated eeprom: FEE_DENSITY_BYTES is greater than FEE_ADDRESS_MAX_SIZE allows | ||
| 176 | # endif | ||
| 177 | # if ((FEE_DENSITY_BYTES) % 2) == 1 | ||
| 178 | # error emulated eeprom: FEE_DENSITY_BYTES must be even | ||
| 179 | # endif | ||
| 180 | #else | ||
| 181 | /* Default to half of allocated space used for emulated eeprom, half for write log */ | ||
| 182 | # define FEE_DENSITY_BYTES (FEE_PAGE_COUNT * FEE_PAGE_SIZE / 2) | ||
| 183 | #endif | ||
| 184 | |||
| 185 | /* Size of write log */ | ||
| 186 | #ifdef FEE_WRITE_LOG_BYTES | ||
| 187 | # if ((FEE_DENSITY_BYTES + FEE_WRITE_LOG_BYTES) > FEE_DENSITY_MAX_SIZE) | ||
| 188 | # pragma message STR(FEE_DENSITY_BYTES) " + " STR(FEE_WRITE_LOG_BYTES) " > " STR(FEE_DENSITY_MAX_SIZE) | ||
| 189 | # error emulated eeprom: FEE_WRITE_LOG_BYTES exceeds remaining FEE_DENSITY_MAX_SIZE | ||
| 190 | # endif | ||
| 191 | # if ((FEE_WRITE_LOG_BYTES) % 2) == 1 | ||
| 192 | # error emulated eeprom: FEE_WRITE_LOG_BYTES must be even | ||
| 193 | # endif | ||
| 194 | #else | ||
| 195 | /* Default to use all remaining space */ | ||
| 196 | # define FEE_WRITE_LOG_BYTES (FEE_PAGE_COUNT * FEE_PAGE_SIZE - FEE_DENSITY_BYTES) | ||
| 197 | #endif | ||
| 198 | |||
| 199 | /* Start of the emulated eeprom compacted flash area */ | ||
| 200 | #define FEE_COMPACTED_BASE_ADDRESS FEE_PAGE_BASE_ADDRESS | ||
| 201 | /* End of the emulated eeprom compacted flash area */ | ||
| 202 | #define FEE_COMPACTED_LAST_ADDRESS (FEE_COMPACTED_BASE_ADDRESS + FEE_DENSITY_BYTES) | ||
| 203 | /* Start of the emulated eeprom write log */ | ||
| 204 | #define FEE_WRITE_LOG_BASE_ADDRESS FEE_COMPACTED_LAST_ADDRESS | ||
| 205 | /* End of the emulated eeprom write log */ | ||
| 206 | #define FEE_WRITE_LOG_LAST_ADDRESS (FEE_WRITE_LOG_BASE_ADDRESS + FEE_WRITE_LOG_BYTES) | ||
| 207 | |||
| 208 | #if defined(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) && (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR >= FEE_DENSITY_BYTES) | ||
| 209 | # error emulated eeprom: DYNAMIC_KEYMAP_EEPROM_MAX_ADDR is greater than the FEE_DENSITY_BYTES available | ||
| 210 | #endif | 148 | #endif |
| 211 | 149 | ||
| 212 | /* In-memory contents of emulated eeprom for faster access */ | 150 | /* In-memory contents of emulated eeprom for faster access */ |
diff --git a/platforms/chibios/eeprom_stm32_defs.h b/platforms/chibios/eeprom_stm32_defs.h index 66904f247f..581434eb5e 100644 --- a/platforms/chibios/eeprom_stm32_defs.h +++ b/platforms/chibios/eeprom_stm32_defs.h | |||
| @@ -72,3 +72,65 @@ | |||
| 72 | # define FEE_PAGE_BASE_ADDRESS ((uintptr_t)(FEE_FLASH_BASE) + FEE_MCU_FLASH_SIZE * 1024 - (FEE_PAGE_COUNT * FEE_PAGE_SIZE)) | 72 | # define FEE_PAGE_BASE_ADDRESS ((uintptr_t)(FEE_FLASH_BASE) + FEE_MCU_FLASH_SIZE * 1024 - (FEE_PAGE_COUNT * FEE_PAGE_SIZE)) |
| 73 | # endif | 73 | # endif |
| 74 | #endif | 74 | #endif |
| 75 | |||
| 76 | /* Addressable range 16KByte: 0 <-> (0x1FFF << 1) */ | ||
| 77 | #define FEE_ADDRESS_MAX_SIZE 0x4000 | ||
| 78 | |||
| 79 | /* Size of combined compacted eeprom and write log pages */ | ||
| 80 | #define FEE_DENSITY_MAX_SIZE (FEE_PAGE_COUNT * FEE_PAGE_SIZE) | ||
| 81 | |||
| 82 | #ifndef FEE_MCU_FLASH_SIZE_IGNORE_CHECK /* *TODO: Get rid of this check */ | ||
| 83 | # if FEE_DENSITY_MAX_SIZE > (FEE_MCU_FLASH_SIZE * 1024) | ||
| 84 | # pragma message STR(FEE_DENSITY_MAX_SIZE) " > " STR(FEE_MCU_FLASH_SIZE * 1024) | ||
| 85 | # error emulated eeprom: FEE_DENSITY_MAX_SIZE is greater than available flash size | ||
| 86 | # endif | ||
| 87 | #endif | ||
| 88 | |||
| 89 | /* Size of emulated eeprom */ | ||
| 90 | #ifdef FEE_DENSITY_BYTES | ||
| 91 | # if (FEE_DENSITY_BYTES > FEE_DENSITY_MAX_SIZE) | ||
| 92 | # pragma message STR(FEE_DENSITY_BYTES) " > " STR(FEE_DENSITY_MAX_SIZE) | ||
| 93 | # error emulated eeprom: FEE_DENSITY_BYTES exceeds FEE_DENSITY_MAX_SIZE | ||
| 94 | # endif | ||
| 95 | # if (FEE_DENSITY_BYTES == FEE_DENSITY_MAX_SIZE) | ||
| 96 | # pragma message STR(FEE_DENSITY_BYTES) " == " STR(FEE_DENSITY_MAX_SIZE) | ||
| 97 | # warning emulated eeprom: FEE_DENSITY_BYTES leaves no room for a write log. This will greatly increase the flash wear rate! | ||
| 98 | # endif | ||
| 99 | # if FEE_DENSITY_BYTES > FEE_ADDRESS_MAX_SIZE | ||
| 100 | # pragma message STR(FEE_DENSITY_BYTES) " > " STR(FEE_ADDRESS_MAX_SIZE) | ||
| 101 | # error emulated eeprom: FEE_DENSITY_BYTES is greater than FEE_ADDRESS_MAX_SIZE allows | ||
| 102 | # endif | ||
| 103 | # if ((FEE_DENSITY_BYTES) % 2) == 1 | ||
| 104 | # error emulated eeprom: FEE_DENSITY_BYTES must be even | ||
| 105 | # endif | ||
| 106 | #else | ||
| 107 | /* Default to half of allocated space used for emulated eeprom, half for write log */ | ||
| 108 | # define FEE_DENSITY_BYTES (FEE_PAGE_COUNT * FEE_PAGE_SIZE / 2) | ||
| 109 | #endif | ||
| 110 | |||
| 111 | /* Size of write log */ | ||
| 112 | #ifdef FEE_WRITE_LOG_BYTES | ||
| 113 | # if ((FEE_DENSITY_BYTES + FEE_WRITE_LOG_BYTES) > FEE_DENSITY_MAX_SIZE) | ||
| 114 | # pragma message STR(FEE_DENSITY_BYTES) " + " STR(FEE_WRITE_LOG_BYTES) " > " STR(FEE_DENSITY_MAX_SIZE) | ||
| 115 | # error emulated eeprom: FEE_WRITE_LOG_BYTES exceeds remaining FEE_DENSITY_MAX_SIZE | ||
| 116 | # endif | ||
| 117 | # if ((FEE_WRITE_LOG_BYTES) % 2) == 1 | ||
| 118 | # error emulated eeprom: FEE_WRITE_LOG_BYTES must be even | ||
| 119 | # endif | ||
| 120 | #else | ||
| 121 | /* Default to use all remaining space */ | ||
| 122 | # define FEE_WRITE_LOG_BYTES (FEE_PAGE_COUNT * FEE_PAGE_SIZE - FEE_DENSITY_BYTES) | ||
| 123 | #endif | ||
| 124 | |||
| 125 | /* Start of the emulated eeprom compacted flash area */ | ||
| 126 | #define FEE_COMPACTED_BASE_ADDRESS FEE_PAGE_BASE_ADDRESS | ||
| 127 | /* End of the emulated eeprom compacted flash area */ | ||
| 128 | #define FEE_COMPACTED_LAST_ADDRESS (FEE_COMPACTED_BASE_ADDRESS + FEE_DENSITY_BYTES) | ||
| 129 | /* Start of the emulated eeprom write log */ | ||
| 130 | #define FEE_WRITE_LOG_BASE_ADDRESS FEE_COMPACTED_LAST_ADDRESS | ||
| 131 | /* End of the emulated eeprom write log */ | ||
| 132 | #define FEE_WRITE_LOG_LAST_ADDRESS (FEE_WRITE_LOG_BASE_ADDRESS + FEE_WRITE_LOG_BYTES) | ||
| 133 | |||
| 134 | #if defined(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) && (DYNAMIC_KEYMAP_EEPROM_MAX_ADDR >= FEE_DENSITY_BYTES) | ||
| 135 | # error emulated eeprom: DYNAMIC_KEYMAP_EEPROM_MAX_ADDR is greater than the FEE_DENSITY_BYTES available | ||
| 136 | #endif | ||
diff --git a/platforms/chibios/eeprom_teensy.c b/platforms/chibios/eeprom_teensy.c index 2093f9b4b2..575f51526e 100644 --- a/platforms/chibios/eeprom_teensy.c +++ b/platforms/chibios/eeprom_teensy.c | |||
| @@ -1,6 +1,7 @@ | |||
| 1 | #include <ch.h> | 1 | #include <ch.h> |
| 2 | #include <hal.h> | 2 | #include <hal.h> |
| 3 | 3 | ||
| 4 | #include "eeprom_teensy.h" | ||
| 4 | #include "eeconfig.h" | 5 | #include "eeconfig.h" |
| 5 | 6 | ||
| 6 | /*************************************/ | 7 | /*************************************/ |
| @@ -42,18 +43,6 @@ | |||
| 42 | #if defined(K20x) /* chip selection */ | 43 | #if defined(K20x) /* chip selection */ |
| 43 | /* Teensy 3.0, 3.1, 3.2; mchck; infinity keyboard */ | 44 | /* Teensy 3.0, 3.1, 3.2; mchck; infinity keyboard */ |
| 44 | 45 | ||
| 45 | // The EEPROM is really RAM with a hardware-based backup system to | ||
| 46 | // flash memory. Selecting a smaller size EEPROM allows more wear | ||
| 47 | // leveling, for higher write endurance. If you edit this file, | ||
| 48 | // set this to the smallest size your application can use. Also, | ||
| 49 | // due to Freescale's implementation, writing 16 or 32 bit words | ||
| 50 | // (aligned to 2 or 4 byte boundaries) has twice the endurance | ||
| 51 | // compared to writing 8 bit bytes. | ||
| 52 | // | ||
| 53 | # ifndef EEPROM_SIZE | ||
| 54 | # define EEPROM_SIZE 32 | ||
| 55 | # endif | ||
| 56 | |||
| 57 | /* | 46 | /* |
| 58 | ^^^ Here be dragons: | 47 | ^^^ Here be dragons: |
| 59 | NXP AppNote AN4282 section 3.1 states that partitioning must only be done once. | 48 | NXP AppNote AN4282 section 3.1 states that partitioning must only be done once. |
| @@ -350,8 +339,6 @@ void do_flash_cmd(volatile uint8_t *fstat) | |||
| 350 | extern uint32_t __eeprom_workarea_start__; | 339 | extern uint32_t __eeprom_workarea_start__; |
| 351 | extern uint32_t __eeprom_workarea_end__; | 340 | extern uint32_t __eeprom_workarea_end__; |
| 352 | 341 | ||
| 353 | # define EEPROM_SIZE 128 | ||
| 354 | |||
| 355 | static uint32_t flashend = 0; | 342 | static uint32_t flashend = 0; |
| 356 | 343 | ||
| 357 | void eeprom_initialize(void) { | 344 | void eeprom_initialize(void) { |
diff --git a/platforms/chibios/eeprom_teensy.h b/platforms/chibios/eeprom_teensy.h new file mode 100755 index 0000000000..ead5998b29 --- /dev/null +++ b/platforms/chibios/eeprom_teensy.h | |||
| @@ -0,0 +1,22 @@ | |||
| 1 | // Copyright 2022 Nick Brassel (@tzarc) | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | #pragma once | ||
| 4 | |||
| 5 | #if defined(K20x) | ||
| 6 | /* Teensy 3.0, 3.1, 3.2; mchck; infinity keyboard */ | ||
| 7 | // The EEPROM is really RAM with a hardware-based backup system to | ||
| 8 | // flash memory. Selecting a smaller size EEPROM allows more wear | ||
| 9 | // leveling, for higher write endurance. If you edit this file, | ||
| 10 | // set this to the smallest size your application can use. Also, | ||
| 11 | // due to Freescale's implementation, writing 16 or 32 bit words | ||
| 12 | // (aligned to 2 or 4 byte boundaries) has twice the endurance | ||
| 13 | // compared to writing 8 bit bytes. | ||
| 14 | // | ||
| 15 | # ifndef EEPROM_SIZE | ||
| 16 | # define EEPROM_SIZE 32 | ||
| 17 | # endif | ||
| 18 | #elif defined(KL2x) /* Teensy LC (emulated) */ | ||
| 19 | # define EEPROM_SIZE 128 | ||
| 20 | #else | ||
| 21 | # error Unsupported Teensy EEPROM. | ||
| 22 | #endif | ||
diff --git a/platforms/eeprom.h b/platforms/eeprom.h index f5b3f0ad53..091e6e4400 100644 --- a/platforms/eeprom.h +++ b/platforms/eeprom.h | |||
| @@ -1,3 +1,5 @@ | |||
| 1 | // Copyright 2018-2022 QMK | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 1 | #pragma once | 3 | #pragma once |
| 2 | 4 | ||
| 3 | #if defined(__AVR__) && !defined(EEPROM_DRIVER) | 5 | #if defined(__AVR__) && !defined(EEPROM_DRIVER) |
| @@ -19,3 +21,50 @@ void eeprom_update_word(uint16_t *__p, uint16_t __value); | |||
| 19 | void eeprom_update_dword(uint32_t *__p, uint32_t __value); | 21 | void eeprom_update_dword(uint32_t *__p, uint32_t __value); |
| 20 | void eeprom_update_block(const void *__src, void *__dst, size_t __n); | 22 | void eeprom_update_block(const void *__src, void *__dst, size_t __n); |
| 21 | #endif | 23 | #endif |
| 24 | |||
| 25 | #if defined(EEPROM_CUSTOM) | ||
| 26 | # ifndef EEPROM_SIZE | ||
| 27 | # error EEPROM_SIZE has not been defined for custom driver. | ||
| 28 | # endif | ||
| 29 | # define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE) | ||
| 30 | #elif defined(EEPROM_TRANSIENT) | ||
| 31 | # include "eeprom_transient.h" | ||
| 32 | # define TOTAL_EEPROM_BYTE_COUNT (TRANSIENT_EEPROM_SIZE) | ||
| 33 | #elif defined(EEPROM_I2C) | ||
| 34 | # include "eeprom_i2c.h" | ||
| 35 | # define TOTAL_EEPROM_BYTE_COUNT (EXTERNAL_EEPROM_BYTE_COUNT) | ||
| 36 | #elif defined(EEPROM_SPI) | ||
| 37 | # include "eeprom_spi.h" | ||
| 38 | # define TOTAL_EEPROM_BYTE_COUNT (EXTERNAL_EEPROM_BYTE_COUNT) | ||
| 39 | #elif defined(EEPROM_STM32_L0_L1) | ||
| 40 | # include "eeprom_stm32_L0_L1.h" | ||
| 41 | # define TOTAL_EEPROM_BYTE_COUNT (STM32_ONBOARD_EEPROM_SIZE) | ||
| 42 | #elif defined(EEPROM_TEENSY) | ||
| 43 | # include "eeprom_teensy.h" | ||
| 44 | # define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE) | ||
| 45 | #elif defined(EEPROM_STM32_FLASH_EMULATED) | ||
| 46 | # include "eeprom_stm32_defs.h" | ||
| 47 | # define TOTAL_EEPROM_BYTE_COUNT (FEE_DENSITY_BYTES) | ||
| 48 | #elif defined(EEPROM_SAMD) | ||
| 49 | # include "eeprom_samd.h" | ||
| 50 | # define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE) | ||
| 51 | #elif defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATtiny85__) | ||
| 52 | # define TOTAL_EEPROM_BYTE_COUNT 512 | ||
| 53 | #elif defined(__AVR_ATmega32U2__) || defined(__AVR_ATmega32U4__) || defined(__AVR_ATmega328P__) || defined(__AVR_ATmega32A__) | ||
| 54 | # define TOTAL_EEPROM_BYTE_COUNT 1024 | ||
| 55 | #elif defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) | ||
| 56 | # define TOTAL_EEPROM_BYTE_COUNT 2048 | ||
| 57 | #elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) | ||
| 58 | # define TOTAL_EEPROM_BYTE_COUNT 4096 | ||
| 59 | #elif defined(EEPROM_TEST_HARNESS) | ||
| 60 | # ifndef FLASH_STM32_MOCKED | ||
| 61 | // Normal tests | ||
| 62 | # define TOTAL_EEPROM_BYTE_COUNT 32 | ||
| 63 | # else | ||
| 64 | // Flash wear-leveling testing | ||
| 65 | # include "eeprom_stm32_tests.h" | ||
| 66 | # define TOTAL_EEPROM_BYTE_COUNT (EEPROM_SIZE) | ||
| 67 | # endif | ||
| 68 | #else | ||
| 69 | # error Unknown EEPROM driver. | ||
| 70 | #endif | ||
diff --git a/platforms/test/eeprom.c b/platforms/test/eeprom.c index 5c8e69dae3..e292faa644 100644 --- a/platforms/test/eeprom.c +++ b/platforms/test/eeprom.c | |||
| @@ -16,9 +16,7 @@ | |||
| 16 | 16 | ||
| 17 | #include "eeprom.h" | 17 | #include "eeprom.h" |
| 18 | 18 | ||
| 19 | #define EEPROM_SIZE 32 | 19 | static uint8_t buffer[TOTAL_EEPROM_BYTE_COUNT]; |
| 20 | |||
| 21 | static uint8_t buffer[EEPROM_SIZE]; | ||
| 22 | 20 | ||
| 23 | uint8_t eeprom_read_byte(const uint8_t *addr) { | 21 | uint8_t eeprom_read_byte(const uint8_t *addr) { |
| 24 | uintptr_t offset = (uintptr_t)addr; | 22 | uintptr_t offset = (uintptr_t)addr; |
diff --git a/platforms/test/eeprom_stm32_tests.cpp b/platforms/test/eeprom_stm32_tests.cpp index 5bc8d87900..57f31d634f 100644 --- a/platforms/test/eeprom_stm32_tests.cpp +++ b/platforms/test/eeprom_stm32_tests.cpp | |||
| @@ -17,8 +17,6 @@ | |||
| 17 | #include "gtest/gtest.h" | 17 | #include "gtest/gtest.h" |
| 18 | 18 | ||
| 19 | extern "C" { | 19 | extern "C" { |
| 20 | #include "flash_stm32.h" | ||
| 21 | #include "eeprom_stm32.h" | ||
| 22 | #include "eeprom.h" | 20 | #include "eeprom.h" |
| 23 | } | 21 | } |
| 24 | 22 | ||
| @@ -46,7 +44,6 @@ extern "C" { | |||
| 46 | * | 44 | * |
| 47 | */ | 45 | */ |
| 48 | 46 | ||
| 49 | #define EEPROM_SIZE (FEE_PAGE_SIZE * FEE_PAGE_COUNT / 2) | ||
| 50 | #define LOG_SIZE EEPROM_SIZE | 47 | #define LOG_SIZE EEPROM_SIZE |
| 51 | #define LOG_BASE (MOCK_FLASH_SIZE - LOG_SIZE) | 48 | #define LOG_BASE (MOCK_FLASH_SIZE - LOG_SIZE) |
| 52 | #define EEPROM_BASE (LOG_BASE - EEPROM_SIZE) | 49 | #define EEPROM_BASE (LOG_BASE - EEPROM_SIZE) |
diff --git a/platforms/test/eeprom_stm32_tests.h b/platforms/test/eeprom_stm32_tests.h new file mode 100644 index 0000000000..35ed885e52 --- /dev/null +++ b/platforms/test/eeprom_stm32_tests.h | |||
| @@ -0,0 +1,8 @@ | |||
| 1 | // Copyright 2018-2022 Nick Brassel (@tzarc) | ||
| 2 | // SPDX-License-Identifier: GPL-2.0-or-later | ||
| 3 | #pragma once | ||
| 4 | |||
| 5 | #include "flash_stm32.h" | ||
| 6 | #include "eeprom_stm32.h" | ||
| 7 | |||
| 8 | #define EEPROM_SIZE (FEE_PAGE_SIZE * FEE_PAGE_COUNT / 2) | ||
diff --git a/platforms/test/rules.mk b/platforms/test/rules.mk index 66b853d8ee..55512c7392 100644 --- a/platforms/test/rules.mk +++ b/platforms/test/rules.mk | |||
| @@ -1,4 +1,4 @@ | |||
| 1 | eeprom_stm32_DEFS := -DFLASH_STM32_MOCKED -DNO_PRINT -DFEE_FLASH_BASE=FlashBuf | 1 | eeprom_stm32_DEFS := -DEEPROM_TEST_HARNESS -DFLASH_STM32_MOCKED -DNO_PRINT -DFEE_FLASH_BASE=FlashBuf |
| 2 | eeprom_stm32_tiny_DEFS := $(eeprom_stm32_DEFS) \ | 2 | eeprom_stm32_tiny_DEFS := $(eeprom_stm32_DEFS) \ |
| 3 | -DFEE_MCU_FLASH_SIZE=1 \ | 3 | -DFEE_MCU_FLASH_SIZE=1 \ |
| 4 | -DMOCK_FLASH_SIZE=1024 \ | 4 | -DMOCK_FLASH_SIZE=1024 \ |
diff --git a/quantum/dynamic_keymap.c b/quantum/dynamic_keymap.c index 19a6bea59a..8f1f39bc0f 100644 --- a/quantum/dynamic_keymap.c +++ b/quantum/dynamic_keymap.c | |||
| @@ -29,24 +29,22 @@ | |||
| 29 | # define DYNAMIC_KEYMAP_MACRO_COUNT 16 | 29 | # define DYNAMIC_KEYMAP_MACRO_COUNT 16 |
| 30 | #endif | 30 | #endif |
| 31 | 31 | ||
| 32 | // This is the default EEPROM max address to use for dynamic keymaps. | 32 | #ifndef TOTAL_EEPROM_BYTE_COUNT |
| 33 | // The default is the ATmega32u4 EEPROM max address. | 33 | # error Unknown total EEPROM size. Cannot derive maximum for dynamic keymaps. |
| 34 | // Explicitly override it if the keyboard uses a microcontroller with | 34 | #endif |
| 35 | // more EEPROM *and* it makes sense to increase it. | 35 | |
| 36 | #ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR | 36 | #ifndef DYNAMIC_KEYMAP_EEPROM_MAX_ADDR |
| 37 | # if defined(__AVR_AT90USB646__) || defined(__AVR_AT90USB647__) | 37 | # define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR (TOTAL_EEPROM_BYTE_COUNT - 1) |
| 38 | # define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 2047 | 38 | #endif |
| 39 | # elif defined(__AVR_AT90USB1286__) || defined(__AVR_AT90USB1287__) | 39 | |
| 40 | # define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 4095 | 40 | #if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > (TOTAL_EEPROM_BYTE_COUNT - 1) |
| 41 | # elif defined(__AVR_ATmega16U2__) || defined(__AVR_ATmega16U4__) || defined(__AVR_AT90USB162__) || defined(__AVR_ATtiny85__) | 41 | # pragma message STR(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) " > " STR((TOTAL_EEPROM_BYTE_COUNT - 1)) |
| 42 | # define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 511 | 42 | # error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR is configured to use more space than what is available for the selected EEPROM driver |
| 43 | # else | ||
| 44 | # define DYNAMIC_KEYMAP_EEPROM_MAX_ADDR 1023 | ||
| 45 | # endif | ||
| 46 | #endif | 43 | #endif |
| 47 | 44 | ||
| 48 | // Due to usage of uint16_t check for max 65535 | 45 | // Due to usage of uint16_t check for max 65535 |
| 49 | #if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > 65535 | 46 | #if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR > 65535 |
| 47 | # pragma message STR(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR) " > 65535" | ||
| 50 | # error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR must be less than 65536 | 48 | # error DYNAMIC_KEYMAP_EEPROM_MAX_ADDR must be less than 65536 |
| 51 | #endif | 49 | #endif |
| 52 | 50 | ||
| @@ -71,6 +69,7 @@ | |||
| 71 | // or DYNAMIC_KEYMAP_EEPROM_MAX_ADDR to increase it, *only if* the microcontroller has | 69 | // or DYNAMIC_KEYMAP_EEPROM_MAX_ADDR to increase it, *only if* the microcontroller has |
| 72 | // more than the default. | 70 | // more than the default. |
| 73 | #if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR < 100 | 71 | #if DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR < 100 |
| 72 | # pragma message STR(DYNAMIC_KEYMAP_EEPROM_MAX_ADDR - DYNAMIC_KEYMAP_MACRO_EEPROM_ADDR) " < 100" | ||
| 74 | # error Dynamic keymaps are configured to use more EEPROM than is available. | 73 | # error Dynamic keymaps are configured to use more EEPROM than is available. |
| 75 | #endif | 74 | #endif |
| 76 | 75 | ||
