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