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