You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

285 lines
11 KiB

  1. #
  2. # Raspberry Pi RP2040 specific drivers
  3. ##############################################################################
  4. COMMON_VPATH += $(PLATFORM_PATH)/$(PLATFORM_KEY)/$(DRIVER_DIR)/vendor/$(MCU_FAMILY)/$(MCU_SERIES)
  5. ifeq ($(strip $(WS2812_DRIVER)), vendor)
  6. OPT_DEFS += -DRP_DMA_REQUIRED=TRUE
  7. endif
  8. #
  9. # Raspberry Pi Pico SDK Support
  10. ##############################################################################
  11. ADEFS += -DCRT0_VTOR_INIT=1 \
  12. -DCRT0_EXTRA_CORES_NUMBER=0
  13. CFLAGS += -DPICO_NO_FPGA_CHECK \
  14. -DNDEBUG
  15. #
  16. # Pico SDK source and header files needed by QMK and ChibiOS
  17. ##############################################################################
  18. PICOSDKROOT := $(TOP_DIR)/lib/pico-sdk
  19. PICOSDKSRC = $(PICOSDKROOT)/src/rp2_common/hardware_clocks/clocks.c \
  20. $(PICOSDKROOT)/src/rp2_common/hardware_pll/pll.c \
  21. $(PICOSDKROOT)/src/rp2_common/hardware_pio/pio.c \
  22. $(PICOSDKROOT)/src/rp2_common/hardware_gpio/gpio.c \
  23. $(PICOSDKROOT)/src/rp2_common/hardware_claim/claim.c \
  24. $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/watchdog.c \
  25. $(PICOSDKROOT)/src/rp2_common/hardware_xosc/xosc.c \
  26. $(PICOSDKROOT)/src/rp2_common/pico_bootrom/bootrom.c
  27. PICOSDKINC = $(CHIBIOS)//os/various/pico_bindings/dumb/include \
  28. $(PICOSDKROOT)/src/common/pico_base/include \
  29. $(PICOSDKROOT)/src/rp2_common/pico_platform/include \
  30. $(PICOSDKROOT)/src/rp2_common/hardware_base/include \
  31. $(PICOSDKROOT)/src/rp2_common/hardware_clocks/include \
  32. $(PICOSDKROOT)/src/rp2_common/hardware_claim/include \
  33. $(PICOSDKROOT)/src/rp2_common/hardware_gpio/include \
  34. $(PICOSDKROOT)/src/rp2_common/hardware_irq/include \
  35. $(PICOSDKROOT)/src/rp2_common/hardware_pll/include \
  36. $(PICOSDKROOT)/src/rp2_common/hardware_pio/include \
  37. $(PICOSDKROOT)/src/rp2_common/hardware_sync/include \
  38. $(PICOSDKROOT)/src/rp2_common/hardware_resets/include \
  39. $(PICOSDKROOT)/src/rp2_common/hardware_watchdog/include \
  40. $(PICOSDKROOT)/src/rp2_common/hardware_xosc/include \
  41. $(PICOSDKROOT)/src/rp2040/hardware_regs/include \
  42. $(PICOSDKROOT)/src/rp2040/hardware_structs/include \
  43. $(PICOSDKROOT)/src/boards/include \
  44. $(PICOSDKROOT)/src/rp2_common/pico_bootrom/include
  45. PLATFORM_SRC += $(PICOSDKSRC)
  46. EXTRAINCDIRS += $(PICOSDKINC)
  47. PLATFORM_RP2040_PATH := $(PLATFORM_PATH)/$(PLATFORM_KEY)/vendors/$(MCU_FAMILY)
  48. PLATFORM_SRC += $(PLATFORM_RP2040_PATH)/stage2_bootloaders.c \
  49. $(PLATFORM_RP2040_PATH)/pico_sdk_shims.c
  50. EXTRAINCDIRS += $(PLATFORM_RP2040_PATH)
  51. #
  52. # RP2040 optimized compiler intrinsics
  53. ##############################################################################
  54. # Enables optimized Compiler intrinsics which are located in the RP2040
  55. # bootrom. This needs startup code and linker script support from ChibiOS,
  56. # which is WIP. Therefore disabled by default for now.
  57. RP2040_INTRINSICS_ENABLED ?= no
  58. ifeq ($(strip $(RP2040_INTRINSICS_ENABLED)), yes)
  59. PICOSDKINTRINSICSSRC = $(PICOSDKROOT)/src/rp2_common/pico_float/float_aeabi.S \
  60. $(PICOSDKROOT)/src/rp2_common/pico_float/float_math.c \
  61. $(PICOSDKROOT)/src/rp2_common/pico_float/float_init_rom.c \
  62. $(PICOSDKROOT)/src/rp2_common/pico_float/float_v1_rom_shim.S \
  63. $(PICOSDKROOT)/src/rp2_common/pico_double/double_aeabi.S \
  64. $(PICOSDKROOT)/src/rp2_common/pico_double/double_math.c \
  65. $(PICOSDKROOT)/src/rp2_common/pico_double/double_init_rom.c \
  66. $(PICOSDKROOT)/src/rp2_common/pico_double/double_v1_rom_shim.S \
  67. $(PICOSDKROOT)/src/rp2_common/pico_divider/divider.S \
  68. $(PICOSDKROOT)/src/rp2_common/pico_int64_ops/pico_int64_ops_aeabi.S \
  69. $(PICOSDKROOT)/src/rp2_common/pico_mem_ops/mem_ops_aeabi.S \
  70. $(PICOSDKROOT)/src/rp2_common/pico_malloc/pico_malloc.c \
  71. $(PICOSDKROOT)/src/rp2_common/pico_bit_ops/bit_ops_aeabi.S
  72. PICOSDKINTRINSICSINC = $(PICOSDKROOT)/src/common/pico_base/include \
  73. $(PICOSDKROOT)/src/rp2_common/pico_platfrom/include \
  74. $(PICOSDKROOT)/src/rp2_common/pico_bootrom/include \
  75. $(PICOSDKROOT)/src/rp2_common/hardware_divider/include \
  76. $(PICOSDKROOT)/src/rp2_common/pico_float/include \
  77. $(PICOSDKROOT)/src/rp2_common/pico_double/include \
  78. $(PICOSDKROOT)/src/rp2_common/pico_malloc/include
  79. OPT_DEFS += -DPICO_FLOAT_SUPPORT_ROM_V1=0 -DPICO_DOUBLE_SUPPORT_ROM_V1=0
  80. CFLAGS += -Wl,--defsym=__StackLimit=__heap_end__
  81. CFLAGS += -Wl,--defsym=__unhandled_user_irq=_unhandled_exception
  82. CFLAGS += -Wl,--build-id=none
  83. # single precision floating point intrinsics
  84. OPT_DEFS += -DPICO_FLOAT_IN_RAM=1
  85. OPT_DEFS += -DPICO_FLOAT_PROPAGATE_NANS=0
  86. CFLAGS += -Wl,--wrap=__aeabi_fdiv
  87. CFLAGS += -Wl,--wrap=__aeabi_fmul
  88. CFLAGS += -Wl,--wrap=__aeabi_frsub
  89. CFLAGS += -Wl,--wrap=__aeabi_fsub
  90. CFLAGS += -Wl,--wrap=__aeabi_cfcmpeq
  91. CFLAGS += -Wl,--wrap=__aeabi_cfrcmple
  92. CFLAGS += -Wl,--wrap=__aeabi_cfcmple
  93. CFLAGS += -Wl,--wrap=__aeabi_fcmpeq
  94. CFLAGS += -Wl,--wrap=__aeabi_fcmplt
  95. CFLAGS += -Wl,--wrap=__aeabi_fcmple
  96. CFLAGS += -Wl,--wrap=__aeabi_fcmpge
  97. CFLAGS += -Wl,--wrap=__aeabi_fcmpgt
  98. CFLAGS += -Wl,--wrap=__aeabi_fcmpun
  99. CFLAGS += -Wl,--wrap=__aeabi_i2f
  100. CFLAGS += -Wl,--wrap=__aeabi_l2f
  101. CFLAGS += -Wl,--wrap=__aeabi_ui2f
  102. CFLAGS += -Wl,--wrap=__aeabi_ul2f
  103. CFLAGS += -Wl,--wrap=__aeabi_i2f
  104. CFLAGS += -Wl,--wrap=__aeabi_f2iz
  105. CFLAGS += -Wl,--wrap=__aeabi_f2lz
  106. CFLAGS += -Wl,--wrap=__aeabi_f2uiz
  107. CFLAGS += -Wl,--wrap=__aeabi_f2ulz
  108. CFLAGS += -Wl,--wrap=__aeabi_f2d
  109. CFLAGS += -Wl,--wrap=sqrtf
  110. CFLAGS += -Wl,--wrap=cosf
  111. CFLAGS += -Wl,--wrap=sinf
  112. CFLAGS += -Wl,--wrap=tanf
  113. CFLAGS += -Wl,--wrap=atan2f
  114. CFLAGS += -Wl,--wrap=expf
  115. CFLAGS += -Wl,--wrap=logf
  116. CFLAGS += -Wl,--wrap=ldexpf
  117. CFLAGS += -Wl,--wrap=copysignf
  118. CFLAGS += -Wl,--wrap=truncf
  119. CFLAGS += -Wl,--wrap=floorf
  120. CFLAGS += -Wl,--wrap=ceilf
  121. CFLAGS += -Wl,--wrap=roundf
  122. CFLAGS += -Wl,--wrap=sincosf
  123. CFLAGS += -Wl,--wrap=asinf
  124. CFLAGS += -Wl,--wrap=acosf
  125. CFLAGS += -Wl,--wrap=atanf
  126. CFLAGS += -Wl,--wrap=sinhf
  127. CFLAGS += -Wl,--wrap=coshf
  128. CFLAGS += -Wl,--wrap=tanhf
  129. CFLAGS += -Wl,--wrap=asinhf
  130. CFLAGS += -Wl,--wrap=acoshf
  131. CFLAGS += -Wl,--wrap=atanhf
  132. CFLAGS += -Wl,--wrap=exp2f
  133. CFLAGS += -Wl,--wrap=log2f
  134. CFLAGS += -Wl,--wrap=exp10f
  135. CFLAGS += -Wl,--wrap=log10f
  136. CFLAGS += -Wl,--wrap=powf
  137. CFLAGS += -Wl,--wrap=powintf
  138. CFLAGS += -Wl,--wrap=hypotf
  139. CFLAGS += -Wl,--wrap=cbrtf
  140. CFLAGS += -Wl,--wrap=fmodf
  141. CFLAGS += -Wl,--wrap=dremf
  142. CFLAGS += -Wl,--wrap=remainderf
  143. CFLAGS += -Wl,--wrap=remquof
  144. CFLAGS += -Wl,--wrap=expm1f
  145. CFLAGS += -Wl,--wrap=log1pf
  146. CFLAGS += -Wl,--wrap=fmaf
  147. # double precision floating point intrinsics
  148. OPT_DEFS += -DPICO_DOUBLE_IN_RAM=1
  149. OPT_DEFS += -DPICO_DOUBLE_PROPAGATE_NANS=0
  150. CFLAGS += -Wl,--wrap=__aeabi_dadd
  151. CFLAGS += -Wl,--wrap=__aeabi_ddiv
  152. CFLAGS += -Wl,--wrap=__aeabi_dmul
  153. CFLAGS += -Wl,--wrap=__aeabi_drsub
  154. CFLAGS += -Wl,--wrap=__aeabi_dsub
  155. CFLAGS += -Wl,--wrap=__aeabi_cdcmpeq
  156. CFLAGS += -Wl,--wrap=__aeabi_cdrcmple
  157. CFLAGS += -Wl,--wrap=__aeabi_cdcmple
  158. CFLAGS += -Wl,--wrap=__aeabi_dcmpeq
  159. CFLAGS += -Wl,--wrap=__aeabi_dcmplt
  160. CFLAGS += -Wl,--wrap=__aeabi_dcmple
  161. CFLAGS += -Wl,--wrap=__aeabi_dcmpge
  162. CFLAGS += -Wl,--wrap=__aeabi_dcmpgt
  163. CFLAGS += -Wl,--wrap=__aeabi_dcmpun
  164. CFLAGS += -Wl,--wrap=__aeabi_i2d
  165. CFLAGS += -Wl,--wrap=__aeabi_l2d
  166. CFLAGS += -Wl,--wrap=__aeabi_ui2d
  167. CFLAGS += -Wl,--wrap=__aeabi_ul2d
  168. CFLAGS += -Wl,--wrap=__aeabi_d2iz
  169. CFLAGS += -Wl,--wrap=__aeabi_d2lz
  170. CFLAGS += -Wl,--wrap=__aeabi_d2uiz
  171. CFLAGS += -Wl,--wrap=__aeabi_d2ulz
  172. CFLAGS += -Wl,--wrap=__aeabi_d2f
  173. CFLAGS += -Wl,--wrap=sqrt
  174. CFLAGS += -Wl,--wrap=cos
  175. CFLAGS += -Wl,--wrap=sin
  176. CFLAGS += -Wl,--wrap=tan
  177. CFLAGS += -Wl,--wrap=atan2
  178. CFLAGS += -Wl,--wrap=exp
  179. CFLAGS += -Wl,--wrap=log
  180. CFLAGS += -Wl,--wrap=ldexp
  181. CFLAGS += -Wl,--wrap=copysign
  182. CFLAGS += -Wl,--wrap=trunc
  183. CFLAGS += -Wl,--wrap=floor
  184. CFLAGS += -Wl,--wrap=ceil
  185. CFLAGS += -Wl,--wrap=round
  186. CFLAGS += -Wl,--wrap=sincos
  187. CFLAGS += -Wl,--wrap=asin
  188. CFLAGS += -Wl,--wrap=acos
  189. CFLAGS += -Wl,--wrap=atan
  190. CFLAGS += -Wl,--wrap=sinh
  191. CFLAGS += -Wl,--wrap=cosh
  192. CFLAGS += -Wl,--wrap=tanh
  193. CFLAGS += -Wl,--wrap=asinh
  194. CFLAGS += -Wl,--wrap=acosh
  195. CFLAGS += -Wl,--wrap=atanh
  196. CFLAGS += -Wl,--wrap=exp2
  197. CFLAGS += -Wl,--wrap=log2
  198. CFLAGS += -Wl,--wrap=exp10
  199. CFLAGS += -Wl,--wrap=log10
  200. CFLAGS += -Wl,--wrap=pow
  201. CFLAGS += -Wl,--wrap=powint
  202. CFLAGS += -Wl,--wrap=hypot
  203. CFLAGS += -Wl,--wrap=cbrt
  204. CFLAGS += -Wl,--wrap=fmod
  205. CFLAGS += -Wl,--wrap=drem
  206. CFLAGS += -Wl,--wrap=remainder
  207. CFLAGS += -Wl,--wrap=remquo
  208. CFLAGS += -Wl,--wrap=expm1
  209. CFLAGS += -Wl,--wrap=log1p
  210. CFLAGS += -Wl,--wrap=fma
  211. # bit operation intrinsics
  212. OPT_DEFS += -DPICO_BITS_IN_RAM=1
  213. CFLAGS += -Wl,--wrap=__clzsi2
  214. CFLAGS += -Wl,--wrap=__clzsi2
  215. CFLAGS += -Wl,--wrap=__clzdi2
  216. CFLAGS += -Wl,--wrap=__ctzsi2
  217. CFLAGS += -Wl,--wrap=__ctzdi2
  218. CFLAGS += -Wl,--wrap=__popcountsi2
  219. CFLAGS += -Wl,--wrap=__popcountdi2
  220. CFLAGS += -Wl,--wrap=__clz
  221. CFLAGS += -Wl,--wrap=__clzl
  222. CFLAGS += -Wl,--wrap=__clzsi2
  223. CFLAGS += -Wl,--wrap=__clzll
  224. # integer division intrinsics
  225. OPT_DEFS += -DPICO_DIVIDER_IN_RAM=1
  226. OPT_DEFS += -DPICO_DIVIDER_DISABLE_INTERRUPTS=1
  227. CFLAGS += -Wl,--wrap=__aeabi_idiv
  228. CFLAGS += -Wl,--wrap=__aeabi_idivmod
  229. CFLAGS += -Wl,--wrap=__aeabi_ldivmod
  230. CFLAGS += -Wl,--wrap=__aeabi_uidiv
  231. CFLAGS += -Wl,--wrap=__aeabi_uidivmod
  232. CFLAGS += -Wl,--wrap=__aeabi_uldivmod
  233. # 64bit integer intrinsics
  234. OPT_DEFS += -DPICO_INT64_OPS_IN_RAM=1
  235. CFLAGS += -Wl,--wrap=__aeabi_lmul
  236. # malloc and friends functions
  237. OPT_DEFS += -DPICO_USE_MALLOC_MUTEX=0
  238. OPT_DEFS += -DPICO_DEBUG_MALLOC=0
  239. OPT_DEFS ?= -DPICO_MALLOC_PANIC=0
  240. CFLAGS += -Wl,--wrap=malloc
  241. CFLAGS += -Wl,--wrap=calloc
  242. CFLAGS += -Wl,--wrap=free
  243. # memory operation intrinsics
  244. OPT_DEFS += -DPICO_MEM_IN_RAM=1
  245. CFLAGS += -Wl,--wrap=memcpy
  246. CFLAGS += -Wl,--wrap=memset
  247. CFLAGS += -Wl,--wrap=__aeabi_memcpy
  248. CFLAGS += -Wl,--wrap=__aeabi_memset
  249. CFLAGS += -Wl,--wrap=__aeabi_memcpy4
  250. CFLAGS += -Wl,--wrap=__aeabi_memset4
  251. CFLAGS += -Wl,--wrap=__aeabi_memcpy8
  252. CFLAGS += -Wl,--wrap=__aeabi_memset8
  253. PLATFORM_SRC += $(PICOSDKINTRINSICSSRC)
  254. EXTRAINCDIRS += $(PICOSDKINTRINSICSINC)
  255. endif