// Copyright 2022 Nick Brassel (@tzarc) // SPDX-License-Identifier: GPL-2.0-or-later #pragma once // Work out the page size to use #ifndef WEAR_LEVELING_LEGACY_EMULATION_PAGE_SIZE # if defined(QMK_MCU_STM32F042) # define WEAR_LEVELING_LEGACY_EMULATION_PAGE_SIZE 1024 # elif defined(QMK_MCU_STM32F070) || defined(QMK_MCU_STM32F072) # define WEAR_LEVELING_LEGACY_EMULATION_PAGE_SIZE 2048 # elif defined(QMK_MCU_STM32F401) || defined(QMK_MCU_STM32F411) # define WEAR_LEVELING_LEGACY_EMULATION_PAGE_SIZE 16384 # endif #endif // Work out how much flash space we have #ifndef WEAR_LEVELING_LEGACY_EMULATION_FLASH_SIZE # define WEAR_LEVELING_LEGACY_EMULATION_FLASH_SIZE ((*(uint32_t *)FLASHSIZE_BASE) & 0xFFFFU) // in kB #endif // The base location of program memory #ifndef WEAR_LEVELING_LEGACY_EMULATION_FLASH_BASE # define WEAR_LEVELING_LEGACY_EMULATION_FLASH_BASE 0x08000000 #endif // The number of pages to use #ifndef WEAR_LEVELING_LEGACY_EMULATION_PAGE_COUNT # if defined(QMK_MCU_STM32F042) # define WEAR_LEVELING_LEGACY_EMULATION_PAGE_COUNT 2 # elif defined(QMK_MCU_STM32F070) || defined(QMK_MCU_STM32F072) # define WEAR_LEVELING_LEGACY_EMULATION_PAGE_COUNT 1 # elif defined(QMK_MCU_STM32F401) || defined(QMK_MCU_STM32F411) # define WEAR_LEVELING_LEGACY_EMULATION_PAGE_COUNT 1 # endif #endif // The origin of the emulated eeprom #ifndef WEAR_LEVELING_LEGACY_EMULATION_BASE_PAGE_ADDRESS # if defined(QMK_MCU_STM32F042) || defined(QMK_MCU_STM32F070) || defined(QMK_MCU_STM32F072) # define WEAR_LEVELING_LEGACY_EMULATION_BASE_PAGE_ADDRESS ((uintptr_t)(WEAR_LEVELING_LEGACY_EMULATION_FLASH_BASE) + WEAR_LEVELING_LEGACY_EMULATION_FLASH_SIZE * 1024 - (WEAR_LEVELING_LEGACY_EMULATION_PAGE_COUNT * WEAR_LEVELING_LEGACY_EMULATION_PAGE_SIZE)) # elif defined(QMK_MCU_STM32F401) || defined(QMK_MCU_STM32F411) # if defined(BOOTLOADER_STM32_DFU) # define WEAR_LEVELING_LEGACY_EMULATION_BASE_PAGE_ADDRESS (WEAR_LEVELING_LEGACY_EMULATION_FLASH_BASE + (1 * (WEAR_LEVELING_LEGACY_EMULATION_PAGE_SIZE))) // +16k # elif defined(BOOTLOADER_TINYUF2) # define WEAR_LEVELING_LEGACY_EMULATION_BASE_PAGE_ADDRESS (WEAR_LEVELING_LEGACY_EMULATION_FLASH_BASE + (3 * (WEAR_LEVELING_LEGACY_EMULATION_PAGE_SIZE))) // +48k # endif # endif #endif // 2-byte writes #ifndef BACKING_STORE_WRITE_SIZE # define BACKING_STORE_WRITE_SIZE 2 #endif // The amount of space to use for the entire set of emulation #ifndef WEAR_LEVELING_BACKING_SIZE # if defined(QMK_MCU_STM32F042) || defined(QMK_MCU_STM32F070) || defined(QMK_MCU_STM32F072) # define WEAR_LEVELING_BACKING_SIZE 2048 # elif defined(QMK_MCU_STM32F401) || defined(QMK_MCU_STM32F411) # define WEAR_LEVELING_BACKING_SIZE 16384 # endif #endif // The logical amount of eeprom available #ifndef WEAR_LEVELING_LOGICAL_SIZE # define WEAR_LEVELING_LOGICAL_SIZE 1024 #endif