From 41bfb5a2ee40bff9d910c86089d9b1d0ba915157 Mon Sep 17 00:00:00 2001 From: Stefan Kerkmann Date: Fri, 30 Aug 2024 10:02:48 +0200 Subject: [PATCH 1/5] onekey: rp2040: fix compilation errors --- keyboards/handwired/onekey/rp2040/config.h | 3 --- keyboards/handwired/onekey/rp2040/keyboard.json | 1 + 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/keyboards/handwired/onekey/rp2040/config.h b/keyboards/handwired/onekey/rp2040/config.h index 0563ebfa5f1..0030e97b0fe 100644 --- a/keyboards/handwired/onekey/rp2040/config.h +++ b/keyboards/handwired/onekey/rp2040/config.h @@ -3,9 +3,6 @@ #pragma once - -#define DEBUG_MATRIX_SCAN_RATE - #define QMK_WAITING_TEST_BUSY_PIN GP8 #define QMK_WAITING_TEST_YIELD_PIN GP9 diff --git a/keyboards/handwired/onekey/rp2040/keyboard.json b/keyboards/handwired/onekey/rp2040/keyboard.json index 40eb8962322..6f1fdbb86b3 100644 --- a/keyboards/handwired/onekey/rp2040/keyboard.json +++ b/keyboards/handwired/onekey/rp2040/keyboard.json @@ -10,6 +10,7 @@ "pin": "GP25" }, "ws2812": { + "driver": "vendor", "pin": "GP25" } } From 24042a0cf18f407f044297527735eb57bea226bb Mon Sep 17 00:00:00 2001 From: Stefan Kerkmann Date: Fri, 30 Aug 2024 10:03:22 +0200 Subject: [PATCH 2/5] bootloaders: rp2040: update for pico sdk 2.0 --- platforms/chibios/bootloaders/rp2040.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/platforms/chibios/bootloaders/rp2040.c b/platforms/chibios/bootloaders/rp2040.c index 524d13e636f..eefaf377557 100644 --- a/platforms/chibios/bootloaders/rp2040.c +++ b/platforms/chibios/bootloaders/rp2040.c @@ -6,6 +6,7 @@ #include "gpio.h" #include "wait.h" #include "pico/bootrom.h" +#include "pico/runtime_init.h" #if !defined(RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED) # define RP2040_BOOTLOADER_DOUBLE_TAP_RESET_LED_MASK 0U @@ -39,7 +40,7 @@ const uint32_t magic_token = 0xCAFEB0BA; 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(); + runtime_init_clocks(); if (magic_location != magic_token) { magic_location = magic_token; From 10fe06e228e97ff546cc111c99beb3a53c77e2e7 Mon Sep 17 00:00:00 2001 From: Stefan Kerkmann Date: Fri, 30 Aug 2024 10:04:08 +0200 Subject: [PATCH 3/5] platforms: rp: update for pico sdk 2.0 Signed-off-by: Stefan Kerkmann --- platforms/chibios/vendors/RP/RP2040.mk | 104 ++++++++++++++----------- 1 file changed, 58 insertions(+), 46 deletions(-) diff --git a/platforms/chibios/vendors/RP/RP2040.mk b/platforms/chibios/vendors/RP/RP2040.mk index 94f023d72b7..de26ecc9007 100644 --- a/platforms/chibios/vendors/RP/RP2040.mk +++ b/platforms/chibios/vendors/RP/RP2040.mk @@ -14,55 +14,67 @@ ADEFS += -DCRT0_VTOR_INIT=1 \ -DCRT0_EXTRA_CORES_NUMBER=0 \ -DCRT0_INIT_VECTORS=1 -CFLAGS += -DPICO_NO_FPGA_CHECK \ - -DNDEBUG +CFLAGS += -DNDEBUG \ + -DPICO_RP2040=1 # # Pico SDK source and header files needed by QMK and ChibiOS ############################################################################## -PICOSDKROOT := $(TOP_DIR)/lib/pico-sdk +PICOSDKROOT := $(TOP_DIR)/lib/pico-sdk -PICOSDKSRC = $(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \ - $(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \ - $(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \ - $(PICOSDKROOT)/src/rp2_common/hardware_timer/timer.c \ - $(PICOSDKROOT)/src/rp2_common/hardware_flash/flash.c \ - $(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \ - $(PICOSDKROOT)/src/rp2_common/hardware_claim/claim.c \ - $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/watchdog.c \ - $(PICOSDKROOT)/src/rp2_common/hardware_xosc/xosc.c \ - $(PICOSDKROOT)/src/rp2_common/pico_bootrom/bootrom.c +PICOSDKSRC = $(PICOSDKROOT)/src/common/hardware_claim/claim.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_flash/flash.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_ticks/ticks.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_timer/timer.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/watchdog.c \ + $(PICOSDKROOT)/src/rp2_common/hardware_xosc/xosc.c \ + $(PICOSDKROOT)/src/rp2_common/pico_bootrom/bootrom.c \ + $(PICOSDKROOT)/src/rp2_common/pico_runtime_init/runtime_init_clocks.c \ + $(PICOSDKROOT)/src/rp2_common/pico_runtime_init/runtime_init.c -PICOSDKINC = $(CHIBIOS)//os/various/pico_bindings/dumb/include \ - $(PICOSDKROOT)/src/common/pico_base/include \ - $(PICOSDKROOT)/src/rp2_common/pico_platform/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_base/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_clocks/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_claim/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_flash/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_gpio/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_irq/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_pll/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_pio/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_sync/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_timer/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_resets/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \ - $(PICOSDKROOT)/src/rp2040/hardware_regs/include \ - $(PICOSDKROOT)/src/rp2040/hardware_structs/include \ - $(PICOSDKROOT)/src/boards/include \ - $(PICOSDKROOT)/src/rp2_common/pico_bootrom/include - -PLATFORM_SRC += $(PICOSDKSRC) -EXTRAINCDIRS += $(PICOSDKINC) +PICOSDKINC = $(CHIBIOS)/os/various/pico_bindings/dumb/include \ + $(PICOSDKROOT)/src/boards/include \ + $(PICOSDKROOT)/src/common/boot_picobin_headers/include \ + $(PICOSDKROOT)/src/common/boot_picoboot_headers/include \ + $(PICOSDKROOT)/src/common/hardware_claim/include \ + $(PICOSDKROOT)/src/common/pico_base_headers/include \ + $(PICOSDKROOT)/src/rp2_common/boot_bootrom_headers/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_base/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_boot_lock/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_clocks/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_flash/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_gpio/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_irq/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_pio/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_pll/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_resets/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_sync_spin_lock/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_sync/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_ticks/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_timer/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \ + $(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \ + $(PICOSDKROOT)/src/rp2_common/pico_bootrom/include \ + $(PICOSDKROOT)/src/rp2_common/pico_flash/include \ + $(PICOSDKROOT)/src/rp2_common/pico_platform_compiler/include \ + $(PICOSDKROOT)/src/rp2_common/pico_platform_panic/include \ + $(PICOSDKROOT)/src/rp2_common/pico_platform_sections/include \ + $(PICOSDKROOT)/src/rp2_common/pico_runtime_init/include \ + $(PICOSDKROOT)/src/rp2_common/pico_runtime/include \ + $(PICOSDKROOT)/src/rp2040/hardware_regs/include \ + $(PICOSDKROOT)/src/rp2040/hardware_structs/include \ + $(PICOSDKROOT)/src/rp2040/pico_platform/include PLATFORM_RP2040_PATH := $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY) -PLATFORM_SRC += $(PLATFORM_RP2040_PATH)/stage2_bootloaders.c \ - $(PLATFORM_RP2040_PATH)/pico_sdk_shims.c +PICOSDKSRC += $(PLATFORM_RP2040_PATH)/stage2_bootloaders.c \ + $(PLATFORM_RP2040_PATH)/pico_sdk_shims.c -EXTRAINCDIRS += $(PLATFORM_RP2040_PATH) +PICOSDKINC += $(PLATFORM_RP2040_PATH) # # RP2040 optimized compiler intrinsics @@ -74,12 +86,12 @@ EXTRAINCDIRS += $(PLATFORM_RP2040_PATH) # bootup. This mechanism needs startup code and linker script support from # ChibiOS, which is currently not implemented thus these functions are disabled # ATM. -PICOSDKINTRINSICSSRC = $(PICOSDKROOT)/src/rp2_common/pico_divider/divider.S \ - $(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S +PICOSDKSRC += $(PICOSDKROOT)/src/rp2_common/hardware_divider/divider.S \ + $(PICOSDKROOT)/src/rp2_common/pico_divider/divider_hardware.S \ + $(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S -PICOSDKINTRINSICSINC = $(PICOSDKROOT)/src/common/pico_base/include \ - $(PICOSDKROOT)/src/rp2_common/pico_platfrom/include \ - $(PICOSDKROOT)/src/rp2_common/hardware_divider/include +PICOSDKINC += $(PICOSDKROOT)/src/rp2_common/hardware_divider/include \ + $(PICOSDKROOT)/src/common/pico_divider_headers/include # integer division intrinsics utilizing the RP2040 hardware divider OPT_DEFS += -DPICO_DIVIDER_IN_RAM=1 @@ -97,5 +109,5 @@ OPT_DEFS += -DPICO_INT64_OPS_IN_RAM=1 CFLAGS += -Wl,--wrap=__aeabi_lmul -PLATFORM_SRC += $(PICOSDKINTRINSICSSRC) -EXTRAINCDIRS += $(PICOSDKINTRINSICSINC) +PLATFORM_SRC += $(PICOSDKSRC) +EXTRAINCDIRS += $(PICOSDKINC) From 42c2e8d1f7cb5845a583f26e03acde2cdf883f48 Mon Sep 17 00:00:00 2001 From: Stefan Kerkmann Date: Fri, 30 Aug 2024 21:29:08 +0200 Subject: [PATCH 4/5] platforms: rp: split into common and rp2040 part Signed-off-by: Stefan Kerkmann --- platforms/chibios/platform.mk | 7 ++- platforms/chibios/vendors/RP/RP2040/RP2040.mk | 52 ++++++++++++++++++ .../vendors/RP/{ => RP2040}/_pin_defs.h | 0 .../RP/{ => RP2040}/stage2_bootloaders.c | 0 .../vendors/RP/{RP2040.mk => rp_common.mk} | 53 +++---------------- 5 files changed, 63 insertions(+), 49 deletions(-) create mode 100644 platforms/chibios/vendors/RP/RP2040/RP2040.mk rename platforms/chibios/vendors/RP/{ => RP2040}/_pin_defs.h (100%) rename platforms/chibios/vendors/RP/{ => RP2040}/stage2_bootloaders.c (100%) rename platforms/chibios/vendors/RP/{RP2040.mk => rp_common.mk} (65%) diff --git a/platforms/chibios/platform.mk b/platforms/chibios/platform.mk index 169707966ff..88ed5384ccb 100644 --- a/platforms/chibios/platform.mk +++ b/platforms/chibios/platform.mk @@ -298,11 +298,14 @@ EXTRAINCDIRS += $(CHIBIOS)/os/license \ # QMK specific MCU family support selection. ############################################################################## ifneq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES).mk)","") - # Either by MCU series e.g. STM32/STM32F1xx.mk or... + # MCU series e.g. STM32/STM32F1xx.mk include $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES).mk else ifneq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_FAMILY).mk)","") - # By MCU family e.g. STM32/STM32.mk + # MCU family e.g. STM32/STM32.mk include $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_FAMILY).mk +else ifneq ("$(wildcard $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES)/$(MCU_SERIES).mk)","") + # MCU series in subfolders e.g. RP/RP2040/RP2040.mk + include $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)/$(MCU_SERIES)/$(MCU_SERIES).mk endif # diff --git a/platforms/chibios/vendors/RP/RP2040/RP2040.mk b/platforms/chibios/vendors/RP/RP2040/RP2040.mk new file mode 100644 index 00000000000..e332d1551c9 --- /dev/null +++ b/platforms/chibios/vendors/RP/RP2040/RP2040.mk @@ -0,0 +1,52 @@ +PLATFORM_RP_PATH := $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY) +PLATFORM_RP2040_PATH := $(PLATFORM_RP_PATH)/$(MCU_SERIES) + +include $(PLATFORM_RP_PATH)/rp_common.mk + +# +# RP2040 specific source and header files needed by QMK and ChibiOS +############################################################################## +RP2040_INC = $(PICOSDKROOT)/src/rp2040/hardware_regs/include \ + $(PICOSDKROOT)/src/rp2040/hardware_structs/include \ + $(PICOSDKROOT)/src/rp2040/pico_platform/include \ + $(PLATFORM_RP2040_PATH) + +RP2040_SRC = $(PLATFORM_RP2040_PATH)/stage2_bootloaders.c + +CFLAGS += -DPICO_RP2040=1 + +# +# RP2040 optimized compiler intrinsics +############################################################################## + +# The RP2040 sdk provides optimized compiler intrinsics which override the GCC +# built-ins. Some of these functions are located in the bootrom of the RP2040. +# Execution of these functions is realized via a vtable that is populated on +# bootup. This mechanism needs startup code and linker script support from +# ChibiOS, which is currently not implemented thus these functions are disabled +# ATM. +RP2040_SRC += $(PICOSDKROOT)/src/rp2_common/hardware_divider/divider.S \ + $(PICOSDKROOT)/src/rp2_common/pico_divider/divider_hardware.S \ + $(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S + +RP2040_INC += $(PICOSDKROOT)/src/rp2_common/hardware_divider/include \ + $(PICOSDKROOT)/src/common/pico_divider_headers/include + +# integer division intrinsics utilizing the RP2040 hardware divider +OPT_DEFS += -DPICO_DIVIDER_IN_RAM=1 +OPT_DEFS += -DPICO_DIVIDER_DISABLE_INTERRUPTS=1 + +CFLAGS += -Wl,--wrap=__aeabi_idiv +CFLAGS += -Wl,--wrap=__aeabi_idivmod +CFLAGS += -Wl,--wrap=__aeabi_ldivmod +CFLAGS += -Wl,--wrap=__aeabi_uidiv +CFLAGS += -Wl,--wrap=__aeabi_uidivmod +CFLAGS += -Wl,--wrap=__aeabi_uldivmod + +# 64bit integer intrinsics +OPT_DEFS += -DPICO_INT64_OPS_IN_RAM=1 + +CFLAGS += -Wl,--wrap=__aeabi_lmul + +PLATFORM_SRC += $(RP2040_SRC) +EXTRAINCDIRS += $(RP2040_INC) diff --git a/platforms/chibios/vendors/RP/_pin_defs.h b/platforms/chibios/vendors/RP/RP2040/_pin_defs.h similarity index 100% rename from platforms/chibios/vendors/RP/_pin_defs.h rename to platforms/chibios/vendors/RP/RP2040/_pin_defs.h diff --git a/platforms/chibios/vendors/RP/stage2_bootloaders.c b/platforms/chibios/vendors/RP/RP2040/stage2_bootloaders.c similarity index 100% rename from platforms/chibios/vendors/RP/stage2_bootloaders.c rename to platforms/chibios/vendors/RP/RP2040/stage2_bootloaders.c diff --git a/platforms/chibios/vendors/RP/RP2040.mk b/platforms/chibios/vendors/RP/rp_common.mk similarity index 65% rename from platforms/chibios/vendors/RP/RP2040.mk rename to platforms/chibios/vendors/RP/rp_common.mk index de26ecc9007..1d71411578b 100644 --- a/platforms/chibios/vendors/RP/RP2040.mk +++ b/platforms/chibios/vendors/RP/rp_common.mk @@ -1,7 +1,7 @@ # -# Raspberry Pi RP2040 specific drivers +# Raspberry Pi specific drivers, same for all RP2xxx based boards ############################################################################## -COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/vendor/$(MCU_FAMILY)/$(MCU_SERIES) +COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/vendor/$(MCU_FAMILY)/rp2040 ifeq ($(strip $(WS2812_DRIVER)), vendor) OPT_DEFS += -DRP_DMA_REQUIRED=TRUE @@ -14,8 +14,7 @@ ADEFS += -DCRT0_VTOR_INIT=1 \ -DCRT0_EXTRA_CORES_NUMBER=0 \ -DCRT0_INIT_VECTORS=1 -CFLAGS += -DNDEBUG \ - -DPICO_RP2040=1 +CFLAGS += -DNDEBUG # # Pico SDK source and header files needed by QMK and ChibiOS @@ -64,50 +63,10 @@ PICOSDKINC = $(CHIBIOS)/os/various/pico_bindings/dumb/include \ $(PICOSDKROOT)/src/rp2_common/pico_platform_panic/include \ $(PICOSDKROOT)/src/rp2_common/pico_platform_sections/include \ $(PICOSDKROOT)/src/rp2_common/pico_runtime_init/include \ - $(PICOSDKROOT)/src/rp2_common/pico_runtime/include \ - $(PICOSDKROOT)/src/rp2040/hardware_regs/include \ - $(PICOSDKROOT)/src/rp2040/hardware_structs/include \ - $(PICOSDKROOT)/src/rp2040/pico_platform/include + $(PICOSDKROOT)/src/rp2_common/pico_runtime/include -PLATFORM_RP2040_PATH := $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY) - -PICOSDKSRC += $(PLATFORM_RP2040_PATH)/stage2_bootloaders.c \ - $(PLATFORM_RP2040_PATH)/pico_sdk_shims.c - -PICOSDKINC += $(PLATFORM_RP2040_PATH) - -# -# RP2040 optimized compiler intrinsics -############################################################################## - -# The RP2040 sdk provides optimized compiler intrinsics which override the GCC -# built-ins. Some of these functions are located in the bootrom of the RP2040. -# Execution of these functions is realized via a vtable that is populated on -# bootup. This mechanism needs startup code and linker script support from -# ChibiOS, which is currently not implemented thus these functions are disabled -# ATM. -PICOSDKSRC += $(PICOSDKROOT)/src/rp2_common/hardware_divider/divider.S \ - $(PICOSDKROOT)/src/rp2_common/pico_divider/divider_hardware.S \ - $(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S - -PICOSDKINC += $(PICOSDKROOT)/src/rp2_common/hardware_divider/include \ - $(PICOSDKROOT)/src/common/pico_divider_headers/include - -# integer division intrinsics utilizing the RP2040 hardware divider -OPT_DEFS += -DPICO_DIVIDER_IN_RAM=1 -OPT_DEFS += -DPICO_DIVIDER_DISABLE_INTERRUPTS=1 - -CFLAGS += -Wl,--wrap=__aeabi_idiv -CFLAGS += -Wl,--wrap=__aeabi_idivmod -CFLAGS += -Wl,--wrap=__aeabi_ldivmod -CFLAGS += -Wl,--wrap=__aeabi_uidiv -CFLAGS += -Wl,--wrap=__aeabi_uidivmod -CFLAGS += -Wl,--wrap=__aeabi_uldivmod - -# 64bit integer intrinsics -OPT_DEFS += -DPICO_INT64_OPS_IN_RAM=1 - -CFLAGS += -Wl,--wrap=__aeabi_lmul +PICOSDKSRC += $(PLATFORM_RP_PATH)/pico_sdk_shims.c +PICOSDKINC += $(PLATFORM_RP_PATH) PLATFORM_SRC += $(PICOSDKSRC) EXTRAINCDIRS += $(PICOSDKINC) From 0056a1f0d0dfb10e951534db044b28429ce4e784 Mon Sep 17 00:00:00 2001 From: Stefan Kerkmann Date: Sat, 31 Aug 2024 12:42:02 +0200 Subject: [PATCH 5/5] platforms: rp: link ram functions to ramtext section With the 2.0.0 pico-sdk release it is possible to re-define the custom pico-sdk linker sections, allowing us to drop the custom linker script which introduced the `.time_critical` section in ram. This section is for functions we do not want to execute from flash e.g. everything that must be fast or available if the XIP flash is deactivated e.g. when programming the flash itself. --- .../boards/common/ld/RP2040_FLASH_TIMECRIT.ld | 117 ------------------ .../ld/RP2040_rules_data_with_timecrit.ld | 46 ------- platforms/chibios/mcu_selection.mk | 2 +- platforms/chibios/vendors/RP/pico_sdk_shims.h | 12 ++ platforms/chibios/vendors/RP/rp_common.mk | 6 +- 5 files changed, 17 insertions(+), 166 deletions(-) delete mode 100644 platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld delete mode 100644 platforms/chibios/boards/common/ld/RP2040_rules_data_with_timecrit.ld create mode 100644 platforms/chibios/vendors/RP/pico_sdk_shims.h diff --git a/platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld b/platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld deleted file mode 100644 index 66ed4ce086a..00000000000 --- a/platforms/chibios/boards/common/ld/RP2040_FLASH_TIMECRIT.ld +++ /dev/null @@ -1,117 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2021 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -/* - * RP2040 memory setup. - */ -MEMORY -{ - flash0 (rx) : org = 0x00000000, len = 16k /* ROM */ - flash1 (rx) : org = 0x10000000, len = DEFINED(FLASH_LEN) ? FLASH_LEN : 2048k /* XIP */ - flash2 (rx) : org = 0x00000000, len = 0 - flash3 (rx) : org = 0x00000000, len = 0 - flash4 (rx) : org = 0x00000000, len = 0 - flash5 (rx) : org = 0x00000000, len = 0 - flash6 (rx) : org = 0x00000000, len = 0 - flash7 (rx) : org = 0x00000000, len = 0 - ram0 (wx) : org = 0x20000000, len = 256k /* SRAM0 striped */ - ram1 (wx) : org = 0x00000000, len = 256k /* SRAM0 non striped */ - ram2 (wx) : org = 0x00000000, len = 0 - ram3 (wx) : org = 0x00000000, len = 0 - ram4 (wx) : org = 0x20040000, len = 4k /* SRAM4 */ - ram5 (wx) : org = 0x20041000, len = 4k /* SRAM5 */ - ram6 (wx) : org = 0x00000000, len = 0 - ram7 (wx) : org = 0x20041f00, len = 256 /* SRAM5 boot */ -} - -/* For each data/text section two region are defined, a virtual region - and a load region (_LMA suffix).*/ - -/* Flash region to be used for exception vectors.*/ -REGION_ALIAS("VECTORS_FLASH", flash1); -REGION_ALIAS("VECTORS_FLASH_LMA", flash1); - -/* Flash region to be used for constructors and destructors.*/ -REGION_ALIAS("XTORS_FLASH", flash1); -REGION_ALIAS("XTORS_FLASH_LMA", flash1); - -/* Flash region to be used for code text.*/ -REGION_ALIAS("TEXT_FLASH", flash1); -REGION_ALIAS("TEXT_FLASH_LMA", flash1); - -/* Flash region to be used for read only data.*/ -REGION_ALIAS("RODATA_FLASH", flash1); -REGION_ALIAS("RODATA_FLASH_LMA", flash1); - -/* Flash region to be used for various.*/ -REGION_ALIAS("VARIOUS_FLASH", flash1); -REGION_ALIAS("VARIOUS_FLASH_LMA", flash1); - -/* Flash region to be used for RAM(n) initialization data.*/ -REGION_ALIAS("RAM_INIT_FLASH_LMA", flash1); - -/* RAM region to be used for Main stack. This stack accommodates the processing - of all exceptions and interrupts.*/ -REGION_ALIAS("MAIN_STACK_RAM", ram4); - -/* RAM region to be used for the process stack. This is the stack used by - the main() function.*/ -REGION_ALIAS("PROCESS_STACK_RAM", ram4); - -/* RAM region to be used for Main stack. This stack accommodates the processing - of all exceptions and interrupts.*/ -REGION_ALIAS("C1_MAIN_STACK_RAM", ram5); - -/* RAM region to be used for the process stack. This is the stack used by - the main() function.*/ -REGION_ALIAS("C1_PROCESS_STACK_RAM", ram5); - -/* RAM region to be used for data segment.*/ -REGION_ALIAS("DATA_RAM", ram0); -REGION_ALIAS("DATA_RAM_LMA", flash1); - -/* RAM region to be used for BSS segment.*/ -REGION_ALIAS("BSS_RAM", ram0); - -/* RAM region to be used for the default heap.*/ -REGION_ALIAS("HEAP_RAM", ram0); - -SECTIONS -{ - .flash_begin : { - __flash_binary_start = .; - } > flash1 - - .boot2 : { - __boot2_start__ = .; - KEEP (*(.boot2)) - __boot2_end__ = .; - } > flash1 -} - -/* Generic rules inclusion.*/ -INCLUDE rules_stacks.ld -INCLUDE rules_stacks_c1.ld -INCLUDE RP2040_rules_code_with_boot2.ld -INCLUDE RP2040_rules_data_with_timecrit.ld -INCLUDE rules_memory.ld - -SECTIONS -{ - .flash_end : { - __flash_binary_end = .; - } > flash1 -} diff --git a/platforms/chibios/boards/common/ld/RP2040_rules_data_with_timecrit.ld b/platforms/chibios/boards/common/ld/RP2040_rules_data_with_timecrit.ld deleted file mode 100644 index a9a47be983f..00000000000 --- a/platforms/chibios/boards/common/ld/RP2040_rules_data_with_timecrit.ld +++ /dev/null @@ -1,46 +0,0 @@ -/* - ChibiOS - Copyright (C) 2006..2018 Giovanni Di Sirio - - Licensed under the Apache License, Version 2.0 (the "License"); - you may not use this file except in compliance with the License. - You may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 - - Unless required by applicable law or agreed to in writing, software - distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the License for the specific language governing permissions and - limitations under the License. -*/ - -SECTIONS -{ - .data : ALIGN(4) - { - PROVIDE(_textdata = LOADADDR(.data)); - PROVIDE(_data = .); - __textdata_base__ = LOADADDR(.data); - __data_base__ = .; - *(vtable) - *(.time_critical*) - . = ALIGN(4); - *(.data) - *(.data.*) - *(.ramtext) - . = ALIGN(4); - PROVIDE(_edata = .); - __data_end__ = .; - } > DATA_RAM AT > DATA_RAM_LMA - - .bss (NOLOAD) : ALIGN(4) - { - __bss_base__ = .; - *(.bss) - *(.bss.*) - *(COMMON) - . = ALIGN(4); - __bss_end__ = .; - PROVIDE(end = .); - } > BSS_RAM -} diff --git a/platforms/chibios/mcu_selection.mk b/platforms/chibios/mcu_selection.mk index a1597fa1e91..5cd2492e911 100644 --- a/platforms/chibios/mcu_selection.mk +++ b/platforms/chibios/mcu_selection.mk @@ -159,8 +159,8 @@ ifneq ($(findstring RP2040, $(MCU)),) # Linker script to use # - it should exist either in /os/common/ports/ARMCMx/compilers/GCC/ld/ # or /ld/ + MCU_LDSCRIPT ?= RP2040_FLASH STARTUPLD_CONTRIB = $(CHIBIOS_CONTRIB)/os/common/startup/ARMCMx/compilers/GCC/ld - MCU_LDSCRIPT ?= RP2040_FLASH_TIMECRIT LDFLAGS += -L $(STARTUPLD_CONTRIB) # Startup code to use diff --git a/platforms/chibios/vendors/RP/pico_sdk_shims.h b/platforms/chibios/vendors/RP/pico_sdk_shims.h new file mode 100644 index 00000000000..d9bbd94750c --- /dev/null +++ b/platforms/chibios/vendors/RP/pico_sdk_shims.h @@ -0,0 +1,12 @@ +// Copyright 2024 Stefan Kerkmann +// SPDX-License-Identifier: GPL-2.0-or-later + +#ifndef __ASSEMBLER__ + +#define __not_in_flash(group) __attribute__((section(".ramtext." group))) + +#else + +#define RAM_SECTION_NAME(x) .ramtext.##x + +#endif diff --git a/platforms/chibios/vendors/RP/rp_common.mk b/platforms/chibios/vendors/RP/rp_common.mk index 1d71411578b..fdbb3329815 100644 --- a/platforms/chibios/vendors/RP/rp_common.mk +++ b/platforms/chibios/vendors/RP/rp_common.mk @@ -12,9 +12,11 @@ endif ############################################################################## ADEFS += -DCRT0_VTOR_INIT=1 \ -DCRT0_EXTRA_CORES_NUMBER=0 \ - -DCRT0_INIT_VECTORS=1 + -DCRT0_INIT_VECTORS=1 \ + -DPICO_CONFIG_RTOS_ADAPTER_HEADER=$(PLATFORM_RP_PATH)/pico_sdk_shims.h -CFLAGS += -DNDEBUG +CFLAGS += -DNDEBUG \ + -DPICO_CONFIG_RTOS_ADAPTER_HEADER=$(PLATFORM_RP_PATH)/pico_sdk_shims.h # # Pico SDK source and header files needed by QMK and ChibiOS