1# SPDX-License-Identifier: Apache-2.0 2 3include(ExternalProject) 4 5if(CONFIG_HAS_RPI_PICO) 6 zephyr_library() 7 zephyr_library_compile_options(-std=gnu11) 8 9 set(rp2_common_dir ${ZEPHYR_HAL_RPI_PICO_MODULE_DIR}/src/rp2_common) 10 set(rp2xxx_dir ${ZEPHYR_HAL_RPI_PICO_MODULE_DIR}/src/${CONFIG_SOC_SERIES}) 11 set(common_dir ${ZEPHYR_HAL_RPI_PICO_MODULE_DIR}/src/common) 12 set(boot_stage_dir ${rp2xxx_dir}/boot_stage2) 13 14 # The Second Stage Bootloader is only linked to the app that resides 15 # at 0x100. Therefore, only if the app's offset is 0x100, the second 16 # stage bootloader should be compiled. 17 if(CONFIG_RP2_REQUIRES_SECOND_STAGE_BOOT) 18 foreach(flash W25Q080 GENERIC_03H IS25LP080 W25X10CL AT25SF128A) 19 if(CONFIG_RP2_FLASH_${flash}) 20 set(flash_type ${flash}) 21 break() 22 endif() 23 endforeach() 24 25 set(rp2_bootloader_prefix ${CMAKE_BINARY_DIR}/bootloader) 26 set(rp2_bootloader_asm ${rp2_bootloader_prefix}/boot_stage2.S) 27 28 ExternalProject_Add( 29 second_stage_bootloader 30 SOURCE_DIR ${CMAKE_CURRENT_LIST_DIR}/bootloader 31 BINARY_DIR ${rp2_bootloader_prefix} 32 CMAKE_ARGS 33 -DCMAKE_SYSTEM_NAME=${CMAKE_SYSTEM_NAME} 34 -DCMAKE_C_COMPILER=${CMAKE_C_COMPILER} 35 -DCMAKE_ASM_COMPILER=${CMAKE_ASM_COMPILER} 36 -DZEPHYR_HAL_RPI_PICO_MODULE_DIR=${ZEPHYR_HAL_RPI_PICO_MODULE_DIR} 37 -DZEPHYR_BASE=${ZEPHYR_BASE} 38 -DFLASH_TYPE=${flash_type} 39 -DPYTHON_EXECUTABLE=${Python3_EXECUTABLE} 40 -DRP2_BOOTLOADER_BYPRODUCT=${rp2_bootloader_asm} 41 INSTALL_COMMAND "" # No installation needed 42 BUILD_BYPRODUCTS ${rp2_bootloader_asm} 43 BUILD_ALWAYS TRUE 44 ) 45 46 zephyr_library_add_dependencies(second_stage_bootloader) 47 zephyr_library_sources(${rp2_bootloader_asm}) 48 endif() 49 50 if(CONFIG_SOC_SERIES_RP2040) 51 zephyr_compile_definitions(PICO_RP2040) 52 elseif(CONFIG_SOC_SERIES_RP2350) 53 zephyr_compile_definitions(PICO_RP2350) 54 endif() 55 56 # Pico sources and headers necessary for every build. 57 # These contain definitions and implementation used mostly for 58 # initializing the SoC, and therefore are always required. 59 60 zephyr_library_sources( 61 ${rp2_common_dir}/hardware_clocks/clocks.c 62 ${rp2_common_dir}/hardware_pll/pll.c 63 ${rp2_common_dir}/hardware_xosc/xosc.c 64 ${rp2_common_dir}/hardware_sync_spin_lock/sync_spin_lock.c 65 ${rp2_common_dir}/hardware_ticks/ticks.c 66 ${rp2_common_dir}/pico_bootrom/bootrom.c 67 ${rp2xxx_dir}/pico_platform/platform.c 68 ) 69 70 zephyr_include_directories( 71 ${common_dir}/pico_base_headers/include 72 ${rp2_common_dir}/boot_bootrom_headers/include 73 ${rp2_common_dir}/hardware_base/include 74 ${rp2_common_dir}/hardware_clocks/include 75 ${rp2_common_dir}/hardware_watchdog/include 76 ${rp2_common_dir}/hardware_xosc/include 77 ${rp2_common_dir}/hardware_pll/include 78 ${rp2_common_dir}/hardware_irq/include 79 ${rp2_common_dir}/hardware_sync/include 80 ${rp2_common_dir}/hardware_timer/include 81 ${rp2_common_dir}/hardware_resets/include 82 ${rp2_common_dir}/hardware_boot_lock/include 83 ${rp2_common_dir}/hardware_ticks/include 84 ${rp2_common_dir}/hardware_sync_spin_lock/include 85 ${rp2_common_dir}/pico_bootrom/include 86 ${rp2_common_dir}/pico_flash/include 87 ${rp2_common_dir}/pico_platform_compiler/include 88 ${rp2_common_dir}/pico_platform_sections/include 89 ${rp2_common_dir}/pico_platform_panic/include 90 ${common_dir}/boot_picoboot_headers/include 91 ${common_dir}/boot_picobin_headers/include 92 ${rp2xxx_dir}/hardware_regs/include 93 ${rp2xxx_dir}/hardware_structs/include 94 ${rp2xxx_dir}/pico_platform/include 95 ${CMAKE_CURRENT_LIST_DIR} 96 ) 97 98 zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_GPIO 99 ${rp2_common_dir}/hardware_gpio/gpio.c) 100 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_GPIO 101 ${rp2_common_dir}/hardware_gpio/include) 102 103 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_UART 104 ${rp2_common_dir}/hardware_uart/include) 105 106 zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_FLASH 107 ${rp2_common_dir}/hardware_flash/flash.c 108 ${rp2_common_dir}/hardware_xip_cache/xip_cache.c) 109 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_FLASH 110 ${rp2_common_dir}/hardware_flash/include 111 ${rp2_common_dir}/hardware_xip_cache/include) 112 113 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_PWM 114 ${rp2_common_dir}/hardware_pwm/include) 115 116 zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_ADC 117 ${rp2_common_dir}/hardware_adc/adc.c) 118 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_ADC 119 ${rp2_common_dir}/hardware_adc/include) 120 121 zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_DMA 122 ${rp2_common_dir}/hardware_dma/dma.c) 123 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_DMA 124 ${rp2_common_dir}/hardware_dma/include) 125 126 zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_TIMER 127 ${rp2_common_dir}/hardware_timer/timer.c) 128 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_TIMER 129 ${rp2_common_dir}/hardware_timer/include) 130 131 zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_RTC 132 ${rp2_common_dir}/hardware_rtc/rtc.c) 133 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_RTC 134 ${rp2_common_dir}/hardware_rtc/include) 135 136 zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_PIO 137 ${rp2_common_dir}/hardware_pio/pio.c) 138 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_PIO 139 ${rp2_common_dir}/hardware_pio/include) 140 141 # Some flash driver functions must be executed from the RAM. 142 # Originally pico-sdk places them in the RW data section, so this 143 # implementation does the same. 144 zephyr_linker_sources_ifdef(CONFIG_PICOSDK_USE_FLASH RWDATA timecritical.ld) 145 146 # A function in flash.c adds 1 to a function pointer, causing a warning 147 set_source_files_properties( 148 ${rp2_common_dir}/hardware_flash/flash.c 149 PROPERTIES 150 COMPILE_FLAGS $<TARGET_PROPERTY:compiler,warning_no_pointer_arithmetic> 151 ) 152 153 zephyr_library_sources_ifdef(CONFIG_PICOSDK_USE_CLAIM 154 ${common_dir}/hardware_claim/claim.c) 155 zephyr_include_directories_ifdef(CONFIG_PICOSDK_USE_CLAIM 156 ${common_dir}/hardware_claim/include) 157 158 zephyr_library_sources_ifdef(CONFIG_SOC_SERIES_RP2350 159 ${rp2_common_dir}/pico_runtime_init/runtime_init.c) 160 zephyr_include_directories_ifdef(CONFIG_SOC_SERIES_RP2350 161 ${rp2_common_dir}/pico_runtime/include 162 ${rp2_common_dir}/pico_runtime_init/include) 163 164endif() 165