diff options
Diffstat (limited to 'platforms/chibios/bootloaders')
-rw-r--r-- | platforms/chibios/bootloaders/custom.c | 22 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/gd32v_dfu.c | 47 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/halfkay.c | 27 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/kiibohd.c | 33 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/rp2040.c | 57 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/stm32_dfu.c | 147 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/stm32duino.c | 28 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/tinyuf2.c | 38 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/uf2boot.c | 23 | ||||
-rw-r--r-- | platforms/chibios/bootloaders/wb32_dfu.c | 53 |
10 files changed, 0 insertions, 475 deletions
diff --git a/platforms/chibios/bootloaders/custom.c b/platforms/chibios/bootloaders/custom.c deleted file mode 100644 index 6c5a433953..0000000000 --- a/platforms/chibios/bootloaders/custom.c +++ /dev/null @@ -1,22 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "bootloader.h" - -__attribute__((weak)) void bootloader_jump(void) {} -__attribute__((weak)) void mcu_reset(void) {} - -__attribute__((weak)) void enter_bootloader_mode_if_requested(void) {} diff --git a/platforms/chibios/bootloaders/gd32v_dfu.c b/platforms/chibios/bootloaders/gd32v_dfu.c deleted file mode 100644 index 100fc472f8..0000000000 --- a/platforms/chibios/bootloaders/gd32v_dfu.c +++ /dev/null @@ -1,47 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "bootloader.h" - -#include <ch.h> -#include <hal.h> - -#define DBGMCU_KEY_UNLOCK 0x4B5A6978 -#define DBGMCU_CMD_RESET 0x1 - -__IO uint32_t *DBGMCU_KEY = (uint32_t *)DBGMCU_BASE + 0x0CU; -__IO uint32_t *DBGMCU_CMD = (uint32_t *)DBGMCU_BASE + 0x08U; - -__attribute__((weak)) void bootloader_jump(void) { - /* The MTIMER unit of the GD32VF103 doesn't have the MSFRST - * register to generate a software reset request. - * BUT instead two undocumented registers in the debug peripheral - * that allow issueing a software reset. WHO would need the MSFRST - * register anyway? Source: - * https://github.com/esmil/gd32vf103inator/blob/master/include/gd32vf103/dbg.h */ - *DBGMCU_KEY = DBGMCU_KEY_UNLOCK; - *DBGMCU_CMD = DBGMCU_CMD_RESET; -} - -__attribute__((weak)) void mcu_reset(void) { - // Confirmed by karlk90, there is no actual reset to bootloader. - // This just resets the controller. - *DBGMCU_KEY = DBGMCU_KEY_UNLOCK; - *DBGMCU_CMD = DBGMCU_CMD_RESET; -} - -/* Jumping to bootloader is not possible from user code. */ -void enter_bootloader_mode_if_requested(void) {} diff --git a/platforms/chibios/bootloaders/halfkay.c b/platforms/chibios/bootloaders/halfkay.c deleted file mode 100644 index aa11e6c5f4..0000000000 --- a/platforms/chibios/bootloaders/halfkay.c +++ /dev/null @@ -1,27 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "bootloader.h" - -#include <ch.h> -#include "wait.h" - -__attribute__((weak)) void bootloader_jump(void) { - wait_ms(100); - __BKPT(0); -} - -__attribute__((weak)) void mcu_reset(void) {} diff --git a/platforms/chibios/bootloaders/kiibohd.c b/platforms/chibios/bootloaders/kiibohd.c deleted file mode 100644 index 09a4d49b78..0000000000 --- a/platforms/chibios/bootloaders/kiibohd.c +++ /dev/null @@ -1,33 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "bootloader.h" - -#include <ch.h> - -/* Kiibohd Bootloader (MCHCK and Infinity KB) */ -#define SCB_AIRCR_VECTKEY_WRITEMAGIC 0x05FA0000 - -const uint8_t sys_reset_to_loader_magic[] = "\xff\x00\x7fRESET TO LOADER\x7f\x00\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00"; - -__attribute__((weak)) void bootloader_jump(void) { - void *volatile vbat = (void *)VBAT; - __builtin_memcpy(vbat, (const void *)sys_reset_to_loader_magic, sizeof(sys_reset_to_loader_magic)); - - // request reset - SCB->AIRCR = SCB_AIRCR_VECTKEY_WRITEMAGIC | SCB_AIRCR_SYSRESETREQ_Msk; -} -__attribute__((weak)) void mcu_reset(void) {} diff --git a/platforms/chibios/bootloaders/rp2040.c b/platforms/chibios/bootloaders/rp2040.c deleted file mode 100644 index 524d13e636..0000000000 --- a/platforms/chibios/bootloaders/rp2040.c +++ /dev/null @@ -1,57 +0,0 @@ -// Copyright 2022 Stefan Kerkmann -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "hal.h" -#include "bootloader.h" -#include "gpio.h" -#include "wait.h" -#include "pico/bootrom.h" - -#if !defined(RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED) -# define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED_MASK 0U -#else -# define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED_MASK (1U << RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED) -#endif - -__attribute__((weak)) void mcu_reset(void) { - NVIC_SystemReset(); -} -void bootloader_jump(void) { - reset_usb_boot(RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED_MASK, 0U); -} - -void enter_bootloader_mode_if_requested(void) {} - -#if defined(RP2040_BOOTLOADER_DOUBLE_TAP_RESET) -# if !defined(RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT) -# define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT 200U -# endif - -// Needs to be located in a RAM section that is never initialized on boot to -// preserve its value on reset -static volatile uint32_t __attribute__((section(".ram0.bootloader_magic"))) magic_location; -const uint32_t magic_token = 0xCAFEB0BA; - -// We can not use the __early_init / enter_bootloader_mode_if_requested hook as -// we depend on an already initialized system with usable memory regions and -// populated function pointer tables to the optimized math functions in the -// bootrom. This function is called just prior to main. -void __late_init(void) { - // All clocks have to be enabled before jumping to the bootloader function, - // otherwise the bootrom will be stuck infinitely. - clocks_init(); - - if (magic_location != magic_token) { - magic_location = magic_token; - // ChibiOS is not initialized at this point, so sleeping is only - // possible via busy waiting. - wait_us(RP2040_BOOTLOADER_DOUBLE_TAP_RESET_TIMEOUT * 1000U); - magic_location = 0; - return; - } - - magic_location = 0; - reset_usb_boot(RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED_MASK, 0U); -} - -#endif diff --git a/platforms/chibios/bootloaders/stm32_dfu.c b/platforms/chibios/bootloaders/stm32_dfu.c deleted file mode 100644 index fba3086e7a..0000000000 --- a/platforms/chibios/bootloaders/stm32_dfu.c +++ /dev/null @@ -1,147 +0,0 @@ -/* Copyright 2021-2023 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "bootloader.h" -#include "util.h" - -#include <ch.h> -#include <hal.h> -#include "wait.h" - -#ifndef STM32_BOOTLOADER_RAM_SYMBOL -# define STM32_BOOTLOADER_RAM_SYMBOL __ram0_end__ -#endif - -extern uint32_t STM32_BOOTLOADER_RAM_SYMBOL; - -#ifndef STM32_BOOTLOADER_DUAL_BANK -# define STM32_BOOTLOADER_DUAL_BANK FALSE -#endif - -#if STM32_BOOTLOADER_DUAL_BANK -# include "gpio.h" - -# ifndef STM32_BOOTLOADER_DUAL_BANK_GPIO -# error "No STM32_BOOTLOADER_DUAL_BANK_GPIO defined, don't know which pin to toggle" -# endif - -# ifndef STM32_BOOTLOADER_DUAL_BANK_POLARITY -# define STM32_BOOTLOADER_DUAL_BANK_POLARITY 0 -# endif - -# ifndef STM32_BOOTLOADER_DUAL_BANK_DELAY -# define STM32_BOOTLOADER_DUAL_BANK_DELAY 100 -# endif - -__attribute__((weak)) void bootloader_jump(void) { - // For STM32 MCUs with dual-bank flash, and we're incapable of jumping to the bootloader. The first valid flash - // bank is executed unconditionally after a reset, so it doesn't enter DFU unless BOOT0 is high. Instead, we do - // it with hardware...in this case, we pull a GPIO high/low depending on the configuration, connects 3.3V to - // BOOT0's RC charging circuit, lets it charge the capacitor, and issue a system reset. See the QMK discord - // #hardware channel pins for an example circuit. - palSetPadMode(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_MODE_OUTPUT_PUSHPULL); -# if STM32_BOOTLOADER_DUAL_BANK_POLARITY - palSetPad(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO)); -# else - palClearPad(PAL_PORT(STM32_BOOTLOADER_DUAL_BANK_GPIO), PAL_PAD(STM32_BOOTLOADER_DUAL_BANK_GPIO)); -# endif - - // Wait for a while for the capacitor to charge - wait_ms(STM32_BOOTLOADER_DUAL_BANK_DELAY); - - // Issue a system reset to get the ROM bootloader to execute, with BOOT0 high - NVIC_SystemReset(); -} - -__attribute__((weak)) void mcu_reset(void) { - NVIC_SystemReset(); -} -// not needed at all, but if anybody attempts to invoke it.... -void enter_bootloader_mode_if_requested(void) {} - -#else - -/* This code should be checked whether it runs correctly on platforms */ -# define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0)) -# define BOOTLOADER_MAGIC 0xDEADBEEF -# define MAGIC_ADDR (unsigned long *)(SYMVAL(STM32_BOOTLOADER_RAM_SYMBOL) - 4) - -__attribute__((weak)) void bootloader_marker_enable(void) { - uint32_t *marker = (uint32_t *)MAGIC_ADDR; - *marker = BOOTLOADER_MAGIC; // set magic flag => reset handler will jump into boot loader -} - -__attribute__((weak)) bool bootloader_marker_active(void) { - const uint32_t *marker = (const uint32_t *)MAGIC_ADDR; - return (*marker == BOOTLOADER_MAGIC) ? true : false; -} - -__attribute__((weak)) void bootloader_marker_disable(void) { - uint32_t *marker = (uint32_t *)MAGIC_ADDR; - *marker = 0; -} - -__attribute__((weak)) void bootloader_jump(void) { - bootloader_marker_enable(); - NVIC_SystemReset(); -} - -__attribute__((weak)) void mcu_reset(void) { - NVIC_SystemReset(); -} - -void enter_bootloader_mode_if_requested(void) { - if (bootloader_marker_active()) { - bootloader_marker_disable(); - - struct system_memory_vector_t { - uint32_t stack_top; - void (*entrypoint)(void); - }; - const struct system_memory_vector_t *bootloader = (const struct system_memory_vector_t *)(STM32_BOOTLOADER_ADDRESS); - - __disable_irq(); - -# if defined(QMK_MCU_ARCH_CORTEX_M7) - SCB_DisableDCache(); - SCB_DisableICache(); -# endif - -# if defined(__MPU_PRESENT) && (__MPU_PRESENT == 1U) - ARM_MPU_Disable(); -# endif - - SysTick->CTRL = 0; - SysTick->VAL = 0; - SysTick->LOAD = 0; - - // Clear interrupt enable and interrupt pending registers - for (int i = 0; i < ARRAY_SIZE(NVIC->ICER); i++) { - NVIC->ICER[i] = 0xFFFFFFFF; - NVIC->ICPR[i] = 0xFFFFFFFF; - } - - __set_CONTROL(0); - __set_MSP(bootloader->stack_top); - __enable_irq(); - - // Jump to bootloader - bootloader->entrypoint(); - while (true) { - } - } -} -#endif diff --git a/platforms/chibios/bootloaders/stm32duino.c b/platforms/chibios/bootloaders/stm32duino.c deleted file mode 100644 index e2db7fa16c..0000000000 --- a/platforms/chibios/bootloaders/stm32duino.c +++ /dev/null @@ -1,28 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "bootloader.h" - -#include <ch.h> - -__attribute__((weak)) void bootloader_jump(void) { - NVIC_SystemReset(); -} - -__attribute__((weak)) void mcu_reset(void) { - BKP->DR10 = RTC_BOOTLOADER_JUST_UPLOADED; - NVIC_SystemReset(); -}
\ No newline at end of file diff --git a/platforms/chibios/bootloaders/tinyuf2.c b/platforms/chibios/bootloaders/tinyuf2.c deleted file mode 100644 index e08855b6c4..0000000000 --- a/platforms/chibios/bootloaders/tinyuf2.c +++ /dev/null @@ -1,38 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "bootloader.h" - -#include <ch.h> - -// From tinyuf2's board_api.h -#define DBL_TAP_MAGIC 0xF01669EF - -// defined by linker script -extern uint32_t _board_dfu_dbl_tap[]; -#define DBL_TAP_REG _board_dfu_dbl_tap[0] - -__attribute__((weak)) void mcu_reset(void) { - NVIC_SystemReset(); -} - -__attribute__((weak)) void bootloader_jump(void) { - DBL_TAP_REG = DBL_TAP_MAGIC; - NVIC_SystemReset(); -} - -/* not needed, no two-stage reset */ -void enter_bootloader_mode_if_requested(void) {} diff --git a/platforms/chibios/bootloaders/uf2boot.c b/platforms/chibios/bootloaders/uf2boot.c deleted file mode 100644 index f5b1a64334..0000000000 --- a/platforms/chibios/bootloaders/uf2boot.c +++ /dev/null @@ -1,23 +0,0 @@ -// Copyright 2023 QMK -// SPDX-License-Identifier: GPL-2.0-or-later - -#include "bootloader.h" - -// From mmoskal/uf2-stm32f103's backup.c -#define MAGIC_BOOT 0x544F4F42UL - -// defined by linker script -extern uint32_t _board_magic_reg[]; -#define MAGIC_REG _board_magic_reg[0] - -void bootloader_jump(void) { - MAGIC_REG = MAGIC_BOOT; - NVIC_SystemReset(); -} - -void mcu_reset(void) { - NVIC_SystemReset(); -} - -/* not needed, no two-stage reset */ -void enter_bootloader_mode_if_requested(void) {} diff --git a/platforms/chibios/bootloaders/wb32_dfu.c b/platforms/chibios/bootloaders/wb32_dfu.c deleted file mode 100644 index d021b0863b..0000000000 --- a/platforms/chibios/bootloaders/wb32_dfu.c +++ /dev/null @@ -1,53 +0,0 @@ -/* Copyright 2021 QMK - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see <http://www.gnu.org/licenses/>. - */ - -#include "bootloader.h" - -#include <ch.h> -#include <hal.h> -#include "wait.h" - -extern uint32_t __ram0_end__; - -/* This code should be checked whether it runs correctly on platforms */ -#define SYMVAL(sym) (uint32_t)(((uint8_t *)&(sym)) - ((uint8_t *)0)) -#define BOOTLOADER_MAGIC 0xDEADBEEF -#define MAGIC_ADDR (unsigned long *)(SYMVAL(__ram0_end__) - 4) - -__attribute__((weak)) void bootloader_jump(void) { - *MAGIC_ADDR = BOOTLOADER_MAGIC; // set magic flag => reset handler will jump into boot loader - NVIC_SystemReset(); -} - -void enter_bootloader_mode_if_requested(void) { - unsigned long *check = MAGIC_ADDR; - if (*check == BOOTLOADER_MAGIC) { - *check = 0; - __set_CONTROL(0); - __set_MSP(*(__IO uint32_t *)WB32_BOOTLOADER_ADDRESS); - __enable_irq(); - - typedef void (*BootJump_t)(void); - BootJump_t boot_jump = *(BootJump_t *)(WB32_BOOTLOADER_ADDRESS + 4); - boot_jump(); - while (1) - ; - } -} - -__attribute__((weak)) void mcu_reset(void) { - NVIC_SystemReset(); -} |