From 6e5c9ff4a7128a69063f692f7d5909e776f8dbcf Mon Sep 17 00:00:00 2001 From: William Vinnicombe Date: Fri, 22 May 2026 15:00:36 +0100 Subject: [PATCH 1/4] Update pre-compiled ELFs using latest develop picoboot_flash_id needs new function names, as flash_do_cmd is not inline in the header xip_ram_perms can use new xip_ram binary type, which fixes sleep_ms --- enc_bootloader/enc_bootloader.elf | Bin 19768 -> 20040 bytes enc_bootloader/enc_bootloader_mbedtls.elf | Bin 28352 -> 28464 bytes main.cpp | 4 +++- xip_ram_perms/CMakeLists.txt | 11 +++-------- xip_ram_perms/set_perms.c | 4 ---- xip_ram_perms/xip_ram_perms.elf | Bin 31628 -> 34584 bytes 6 files changed, 6 insertions(+), 13 deletions(-) diff --git a/enc_bootloader/enc_bootloader.elf b/enc_bootloader/enc_bootloader.elf index 2e84072a8d1c1f7b2e7f21b5b022307ca4365b08..ab2744bf7d254175bc1520134874db044ef4aff3 100644 GIT binary patch delta 3754 zcmZ9O4NP0t6@bt44>n-p2SkB{F-)w41j37-9WZ2Vu;Zj)oBY67meC|OU@|k%d5GOj}o}-CDZVPLqOKYVRD| z4`1Fxk9)s+&OP_sbI!fbmtPS6d|G(AvgqR~vuz6i>Zvx{M(~YH*NO+NLiw~(GhuG^eEDK*YhY_oy!6Jx6Jl4m)n6F(-mUj` z^|}4#u;|=NquFnW*7~}_P5x)XQz?hZ?bor^4ep+I26{){H7(wHZ+M;mc*3L8 zCEnNlW#IPkL_*N(6MFrPfr?=7$kV8?=kB<3O=K$NH1!T&xRDRZ&YoH#cG2zF-GoZo&`^_eZ-H><-^2y7F|b=T2JZ{WRvDO0}7MpT_DO*T%>` zlzHf#zvT6M17-JK8r{AatMDAUV-?Ne@~CeyW|~Sho1D9xyBng8C^THYZgn~Qa_5Xt zRVwTN2FY=cJt_s@-f0mM*A}d`u4n_fVL~^=#@&yG3+5)^?FGZkmGHg=yKN%6{Synj zvC(cZ)m8=8M`st#I5tPwR~xt06m^_wpZr2R0XF^b6W1tJ84n*X_r$P2&bsR7g!AnF zhRv(L^R@6=YJT>c^!&}#uP_}}r1PoN{4qA!aHZtEZ>CaBrV4*yI6eOh7Tk1y=|P+y z{~x^n8oqJrv*$N;D`fTJx6HO;EFgMl#W#^HS%h)qcackxRUOL7O>Pe5=5HL6#~&br z6+3C{e2%XV`!0O#_`H*IP zJ`@FN^-w?!#~JrHHf!XC8ZIK9J}XrVHT$qf0iq=ZT&N#g3Q&&O8=GsD7>-epRGkv! z$m*;!6bv%gxhBs)N2bK6`X`YoaVnoirbJPaXw4~XDdu8^_3$#bl!qLzhgWfclCv_W zFpDiEMxF3iWEVT>s8arpJ&I#?DMQA!{m3|sj{!cy|HQnUTqP->E3}mZOKgCEWDWcnD6{==HJF5)fn6mltkm`I}x3-(zJ zpV9D38eUhJv7MPu_AjCwY^wbtm?;2d>F|nRhMS}ystOkPfHSxj9Y}Ia4t=d*Bi;wR z!&YQ|+tnI*oe95P{DdeufR4~Z9?NvWRH_c?pp7^e5fL5Or!g4T@Q*Y+hD@J(vQmZx z__(4`cv8c03Ce!DTYw-s1D$W`1o#jci_?~s3-E=8 z%^0Elg2{9(@l3irtDj6y;0={`*a9siSJzXp$hvTVk3cVSK7<8u7Z zt}*Z=#}v}%kOka8WiCZ8BdZ~%Q}8OMPZ9j1%D8@Jhd0!L9N*ILzmQjQIlZHiFCyn7 zr~@7djCk-o9M(2=pe(Xmip zBr+<=4jB50gezmSsuKnZ;RTPM)sw$i`Ls{d+^*-d&;2ox9t6Izl^kKH&XcXV3KacRnao ze%IIS?eTSleh}Kz?Qi$*R;BEf2M$$*LPrKh`^E;Mp+`f5KaPY#Fmz-zG&K5<%gyTB z4{(#0n`V>kQip1Jzs54C?kryr^7_k-OCWq6 zN$k<*dxWhH+Kp5~apvWE6>L0c5#sErU|r^a6?;2q$?5$&_)BBF5nw%=?6eD4*}2X- jV*+`c-RiU##MXV= z$TX>DF>copqgys+7B@cg3< z#lU;>P>H1Rz-}q`-?Dm-5 zKF?SbZ0p{K7I#ecRTXv&#;crd+lvD4UWpa29lc{Rme;mT4i;`t`q5}dfA)E~YEqy8 zk`71a>rogO*u8sT;PugeV67(UYh_8-@P@wmx`s9$#S?HhX~X-&?x20V-%&qZ3etFg zM%XaIt<$Ai{YA*1DbX*_*w$a_@eju9ob{J_mTISy@5s{u^7N_Ub%AwFc~{=(-EggE zp}zUDM|K(c;reSm&cS$%v$jQR_6Ewjj)Y`ddS1wxruk>Mj>g<0rQ|IGHu?8Nblkxb} z(`?`JQ#oV*4aTdT3j|u0&ctxxuB(!=9n5 z12yM34kLfVaX0dDj(dSBqFtyGw-EifAklamA3 zfYeqnfWh3GVhT$_?!=MOBPZCNuy0NUNA^7^C${WOWJ)D(eMm@1*|28t!h_~O&*^i)}*s}i|nd+Ig#}K!04qu@GvE}d+G8KOTjuIAtGGvtp zusj!2oV0hqRb=W$i!&sEFvq#b)Qy(@rkhYe?Pv)!WNJrhMG0S!c;V0i@1Ighn5)z> z>_(nzkY61-<_p<#-@}h4I^&fr=m@*cUu^!sNgJ@OwxoKHtnNfE<@f<)g=30gv%tK6 zH`;e|dJ}ms$LQZJ3c%U~)YkL@S~L!LB^OP7mcW#r`iN(06P~FJQp`NHOISm#A{DXD z+G5FI&(;>_T2+%F1AfH-qih(ZR=3Oe78mX=gZ)x#nm>4wbIC9dcA+#E&mfvR4@=S~ z@N)t)fe#^rV$GKgCy=cTDT52%C%tUx-Eb}w_k{IAJOSW4VZxsU{zKqtWPVwh_>r*Y zqXozU7t%+hzzVzU^H0p| zM=n|9QuL%fyo%g+y%o^J%n4-P|6OGIRekql-_ zk^`6LIOO2k`4VM;8<|@W6e05gEkVwh4cHBS-!KKi9y-jprW+L|IE$RlSSFlD?!*#ZLpLlbd@I;r5cm>u zITwKG$Vz8`YIHqv`UNgf=5RKYBd0Tv19hA~HE}@Ty9M4dmrZzRt^j%jejGWy3v%EY zLH~llFAIEB;J44A#S&Z~R$K~6WypaTGT%dgb4(e{#E+zee zM)(3}K>C-n*@JZ*zEJ4Fu24^;*NZ=-ygo=EJ+DeWCNy5v>$NmqwVLhFZ`|PXSF5X& zLVDC@&3*nF)o&?k)RZI6J5?h-bkpuqoY^#YS7UhX%Fq}dZJUU zg|1!d&}+KaF*JT#o5UX2xV5NjXK$#hcZZKA-?^=~J+dtvdOXzmXh$f-zS+2i1sf}e zK5iVgvB!dIrQ>WkSnQxv?>PH5SmvM)L?e@$%N%qv8LR@Is9sUl$~`S)FE+cSC_B`= zH1WTPjWxSdb`#Bq9nnhseZmg3lt~}3Q!Ps!lgPk+X(`K`Tn8|i&F0@;T5uo$@Fw+9 K>cS35T>k^JG7GT) diff --git a/enc_bootloader/enc_bootloader_mbedtls.elf b/enc_bootloader/enc_bootloader_mbedtls.elf index 88993b6c38b3ac3dc0761db3826cac21e4bf7270..4264996b52ccff78ee1114dbe4ffd183c2df59ed 100644 GIT binary patch delta 9210 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 delta 9316 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 diff --git a/main.cpp b/main.cpp index e16ccf97..c9f6549c 100644 --- a/main.cpp +++ b/main.cpp @@ -8334,8 +8334,10 @@ bool otp_permissions_command::execute(device_map &devices) { for (auto it = perms_json.begin(); it != perms_json.end(); ++it) { settings.otp.lock0 = 0; settings.otp.lock1 = 0; + int page; + if (!get_int(it.key(), page)) continue; std::stringstream ss; - ss << "page" << it.key(); + ss << "page" << page; settings.config.key = ss.str(); std::cout << ss.str() << std::endl; auto perms = it.value(); diff --git a/xip_ram_perms/CMakeLists.txt b/xip_ram_perms/CMakeLists.txt index df963876..fd8f56ba 100644 --- a/xip_ram_perms/CMakeLists.txt +++ b/xip_ram_perms/CMakeLists.txt @@ -20,8 +20,8 @@ if (NOT USE_PRECOMPILED) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) - if (PICO_SDK_VERSION_STRING VERSION_LESS "2.0.0") - message(FATAL_ERROR "Raspberry Pi Pico SDK version 2.0.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}") + if (PICO_SDK_VERSION_STRING VERSION_LESS "2.2.1") + message(FATAL_ERROR "Raspberry Pi Pico SDK version 2.2.1 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}") endif() # Initialize the SDK @@ -36,12 +36,7 @@ if (NOT USE_PRECOMPILED) pico_stdlib ) - pico_set_binary_type(xip_ram_perms no_flash) - # create linker script to run from 0x20070000 - file(READ ${PICO_LINKER_SCRIPT_PATH}/memmap_no_flash.ld LINKER_SCRIPT) - string(REPLACE "RAM(rwx) : ORIGIN = 0x20000000, LENGTH = 512k" "RAM(rwx) : ORIGIN = 0x13ffc000, LENGTH = 16k" LINKER_SCRIPT "${LINKER_SCRIPT}") - file(WRITE ${CMAKE_CURRENT_BINARY_DIR}/memmap_xip_ram.ld "${LINKER_SCRIPT}") - pico_set_linker_script(xip_ram_perms ${CMAKE_CURRENT_BINARY_DIR}/memmap_xip_ram.ld) + pico_set_binary_type(xip_ram_perms xip_ram) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/xip_ram_perms.elf DESTINATION ${CMAKE_CURRENT_LIST_DIR}) else() diff --git a/xip_ram_perms/set_perms.c b/xip_ram_perms/set_perms.c index 62139b54..ffaa4ae1 100644 --- a/xip_ram_perms/set_perms.c +++ b/xip_ram_perms/set_perms.c @@ -12,10 +12,6 @@ #include "pico/binary_info.h" -// Very rough - seems to be broken in xip_sram -#define sleep_ms(x) for(int i=0; iyFswD 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 Date: Fri, 29 May 2026 17:59:06 +0100 Subject: [PATCH 2/4] Use new include linker scripts for enc_bootloader --- enc_bootloader/CMakeLists.txt | 8 + enc_bootloader/enc_bootloader.elf | Bin 20040 -> 20028 bytes enc_bootloader/enc_bootloader_mbedtls.elf | Bin 28464 -> 29456 bytes .../memory_aliases_no_flash.incl | 6 + .../memmap_common/memory_psram.incl | 1 + .../memmap_common/memory_xip_ram.incl | 1 + .../memmap_common/section_xip_ram.incl | 1 + .../memmap_common/sections_psram.incl | 1 + enc_bootloader/memmap_enc_bootloader.ld | 268 +---------------- .../memmap_enc_bootloader/memory_ram.incl | 8 + .../memmap_enc_bootloader/memory_scratch.incl | 1 + .../section_no_flash_text.incl | 48 ++++ .../sections_no_flash_data.incl | 79 +++++ enc_bootloader/memmap_mbedtls.ld | 269 +----------------- xip_ram_perms/xip_ram_perms.elf | Bin 34584 -> 33948 bytes 15 files changed, 170 insertions(+), 521 deletions(-) create mode 100644 enc_bootloader/memmap_common/memory_aliases_no_flash.incl create mode 100644 enc_bootloader/memmap_common/memory_psram.incl create mode 100644 enc_bootloader/memmap_common/memory_xip_ram.incl create mode 100644 enc_bootloader/memmap_common/section_xip_ram.incl create mode 100644 enc_bootloader/memmap_common/sections_psram.incl create mode 100644 enc_bootloader/memmap_enc_bootloader/memory_ram.incl create mode 100644 enc_bootloader/memmap_enc_bootloader/memory_scratch.incl create mode 100644 enc_bootloader/memmap_enc_bootloader/section_no_flash_text.incl create mode 100644 enc_bootloader/memmap_enc_bootloader/sections_no_flash_data.incl diff --git a/enc_bootloader/CMakeLists.txt b/enc_bootloader/CMakeLists.txt index 30c903c5..b6422ede 100644 --- a/enc_bootloader/CMakeLists.txt +++ b/enc_bootloader/CMakeLists.txt @@ -64,6 +64,9 @@ if (NOT USE_PRECOMPILED) # AES Code & workspace from 0x20080044 -> 0x20081604, so 0x20080200 -> 0x20081200 is inside that ROM_CHAIN_WORKSPACE=0x20080200) + pico_add_linker_script_override_path(enc_bootloader ${CMAKE_CURRENT_LIST_DIR}/memmap_enc_bootloader + FILES memory_ram.incl memory_scratch.incl section_no_flash_text.incl sections_no_flash_data.incl + ) pico_set_linker_script(enc_bootloader ${CMAKE_CURRENT_LIST_DIR}/memmap_enc_bootloader.ld) target_compile_definitions(enc_bootloader PRIVATE @@ -110,8 +113,13 @@ if (NOT USE_PRECOMPILED) pico_minimize_runtime(enc_bootloader) + pico_add_linker_script_override_path(enc_bootloader ${CMAKE_CURRENT_LIST_DIR}/memmap_common + FILES memory_aliases_no_flash.incl memory_psram.incl memory_xip_ram.incl section_xip_ram.incl sections_psram.incl + ) + pico_set_binary_type(enc_bootloader no_flash) pico_add_dis_output(enc_bootloader) + pico_add_map_output(enc_bootloader) if (USE_MBEDTLS) install(FILES ${CMAKE_CURRENT_BINARY_DIR}/enc_bootloader.elf DESTINATION ${CMAKE_CURRENT_LIST_DIR} RENAME enc_bootloader_mbedtls.elf) diff --git a/enc_bootloader/enc_bootloader.elf b/enc_bootloader/enc_bootloader.elf index ab2744bf7d254175bc1520134874db044ef4aff3..1ace10d1e28c7448ab9b6c169cfa18ca0a172566 100644 GIT binary patch delta 3402 zcmZ9OeP~s67{{M;w|jT)u5)LbGsQ{AHFETa=1W1PyNb&0Uh@r^vb@gRa^N=erP6|< zSTIFn>nAZw%0daT7h;JJM$129ntupIf`*x7SXg-lAt}6lpY!_M--Z3|KF{;~p4Z>` zojZQiID6C>va1fa5K)Zc^U0=Ss;3IFKA*Q@R?AW{ZD^>7lKe$v1zhT)Jvrc%%fV7a z6M}!;?;V!0dsTQ%bHA-z9;Di-;Z<+-49BR(c^=zXohpMcf5m zE;xq$lKY_FAoM#WJ8<|K1UrPm8{k2~li={6;C;{!2|fruEcjjUh~W3ZV}egGPx1821Itr&B z1Hl*smY)C{TmerN3Gqo2 zocEbK@-TRHQRHAQxKr>#@FAbso&#+2I}`-mA(#so^ceB6Ap-|v!eBi(8IM}L1-v2= z@osRZKcXPOMZp~4j^H<8FL?y~PLlm`d?auRf*Y>D<8d&RMipNHTY~R_KNeh4OjMJK z>}P1aK;w1bTDEuNBY~G77!nSKHU0!_O^5=V0bde)9(-5uRq(m8$o>zFAAox%nsy`C z%N;0><4{20BG?AkmPgDpJ)rTyh)45Jo-mx?3biPg{|yedO!pjExOo2oSCGe*WKb-D zLlx?aXd*bW&*dkBrM(Rf9xDs`pV0K_1ez%~G-(E_G=2_@E7#_g6Ygi85^#)OWnP3o zd|3Y$_$R+&3mrNRmhnDKV3<;HMl<+Eq9EBV>afuUH%Y-HNN2h5ej@5t&rS`f!9PdaA%aMU7xN(p4tn%MNVh4P*H# ztZu*;!NDtwXTA>{B*;(EA#gOpV){VSp90H-$29!~hYiHYe$WiAX?%-AqZyiX6&w|iqPxPLNA#b@30$R7g0%*f7YGcR z%6F}(NLdYb`9c*eii$R^5lOBz?YP?(H*TK=Fm821HRFy#=G25oiQj1db zMJY9lG7S1kIOH~602@enir@EZLeFivC0UiFA1Wv(!Bbzv!8lwlUk#olhEflf<7Cv`Sgu=?W!d!7q4ED$*#>lyRxaVshzUfjlKO{+jeDp z`+Ekm-Tj+X*RmcfFzfKmM!#Kl&zRWJv^=|VahoqwUp5YhhHJB}%i0@PXH;`$kNPpQ zRMj;t4V4{%@`a|;YG!kN=*ZvG-h8BLw1-Jn`!i_Iaqh7wOIG6y;u*ZlWor=k5v$rqg}_5#2Rm2VVKNy_*`5zczU0whH delta 3346 zcmZA3Yitx%6bJA#+ip9%+ojVMDoBxOg%ph`V2x1(N}>d4cePCjCInfwX)7zG7-&r_ z#zjdZD3IbMp#gkE#i)Qpioqa>l}{zU@B?3{5hM_!QNp4oCLrto?9B9@-X=`>-E;2i z+!Vi&4#WaVisPePMwuTM+X4ozwR74T}McUDVpP(QfE0~zZTIX!{zFShO||q=FgpB#fP7oyD5|{qrxQqkVIv)w}@z-aMB{$QRz*= z@l~*0rJaUbg+u5sy%F(sBHkyR#egrNp;sgfz&nH|W58X)+YuiW-UaUyJ_rv9zXOj5 zA7)SXHjw2V9Y@2c-@yKyJw@;EEBL(ddBbDyWf8vuUlqO%{~>$}zTtTmP6$U38gD4L z1}^qb6>*hnY|6%HHCl6)x2zDwXdN6b)$W0>+1mZ^&SLGIaBwdX`t#i){WjvQ{=LTW zVR(JuEE-18;P?yRgp2Sru^_&a7K%7ekPyCs{G`ag1Me1&;GnBR-hz329`B5A9F(`> zQISxA4(EJxMP|Y)i}U~w!fS*V!MlBPK2NaOuTU^yuP|?5hiA->4$CpXh)7rqN5Zco=0Jd>K$K%9pQiAqr#=d zL^Uy;Uu$@w;ni>*=NIP30$xDFpcr7U;bX8GEz2@X>(;1eTZcBC-28%%H#adLwNL}>(;75kp!{ujf+>+Fgc zuMQQ+33EknWsQb#>BI$iB{wSy{n-i0d=Y@$BjFm1$Jg}|Ec(l^ zjSA@rbNO2KNWRL;&*it{W26^cMvrh@OxOm?3S?KKL6@+Ey5LTnxs9(opZNx(L!aT7 z;W=W#`$e43_#;@4Z_|khj%MjJ8uX6h^rIMnAG0yT*9>1b{IB5iZb-EUEAeW2Y;iyI^rSbxn9B5YZAx|abWkeQ+r1^#p5D@_UR&BVd}rz3ma>))s`r*>V~BO6 zd()h!+!aepIg|h2zG9g=z2amP@%AlV)5hle)Zyl#S%nVN(ASgc$@FH@-I@N*jua0< z4V+62xTw~aZuMo$cO@tt6&0(W6V>X0gl#peV~P6cS~T)Qhrpi1JywSrNYq;ybph8+ z>OWlj)$C-wHK3BXzNz|fJ*eJFJ{H+l!6hO3Q2mme9)7-ws8Lx@-Wz_undpeBO;r64 DsNz!8 diff --git a/enc_bootloader/enc_bootloader_mbedtls.elf b/enc_bootloader/enc_bootloader_mbedtls.elf index 4264996b52ccff78ee1114dbe4ffd183c2df59ed..2215e84f3cfb987a3c897b678c7845dc64e20851 100644 GIT binary patch delta 5894 zcmZvg4RBP|702&O0<46?f0NTV*pdi@cqbLD12?U#h@(kI9e1qA=F$LXr zYHT|q1Kw$iN~uoi6pIcZQni(tq+$o81*gCi28wn{DU3|ZQs}gZv;F_?dw1W>wQpwM z%kQ3Z&pqedbMJjGd(S&tE;?Ic6Q_3yA@an4DI$i)1Q8Wq5)PU~7{A`^aQ;dr3sJVO zdT`X4vA;grK56onV-VoVM;Bh(Gn(@iAIfoo;*x9fTJ_hQn5i;$ez~2*vnEzH%9Vgf$nl+29CC9$$E04gb(rzPMfgsh;_w#Ns*PVca z)Zc07AA>&G)ZgXFkXVyefik!H- z_jMSKY*Vf5+iSGGToWzz%Qk3LA%*?j0wKz?HBqd(&uXGoo^JS1&aN7##9)qaE9YH- zTvQvKNUmU0>gvdwNbx#>kTbhX*QT+Z#0$%jfEt$lY~JB%SLu1}7gjn9f`ZSbkQgQ}E>P zg7j}iMz>!DqexghKLn>xOcT(X{Bz3BLXPSnzea{!^Bd$p1-y@ZB4B#;Z9N{>uX5`M z6x8L21MF}m=yTIZVV7qwr3y6-JJF#cm%L8{}lerU{%$;2E5`T4YYc>_QHJi+h(Bw*sd2af0 z`P{OolP7mCi&puQ!gZjoJn=Y!DfUm|aY)t10ocp2#qEMTBCwe)V@h5!w9qQ{fc3E+ z7MW}>_&ccnjd)W2XFT=ZAI916PwM*@^>2c8`om(N7=YQ3E<0+^R%P>ba3EMCOaE!4!98fh@XZq^j$-q zrhyitft1YTH-XfqVdIol5I!7CKsVd>C5u=-+PAmGE=pfCTU z#pf)(2!0eb!SR*Be_0BjTRadcHRpT`_#oc#bkUZ9xp6R#VyyG4gAlP%)YYm#ZP4LN z_F-~KC>_%c=dlX*W6o%RQxJ!Oo)Sjf0UmBF=5EX23M8)w{rSDX{ymiYUnd-J2iUBE zUxJH!)81~u4lyjd78qbe~%{#QA>u5pe~41NJwe z9vM(R?3bkdeL9Skh0*X6?DPC0qQXRQEGG|%sg^@uC+8w877v5Xj6DVpiZWlMEcw&m zGzZ|)D#o$#BQyjCGuhqXAZ3~CuPp6B8K2?#B^|! z#W9N~g6Rw|+MCv2o))vwV5YdPzk*m{ah&?GPz-l;i-@(ByxZdMTKs%J#@pmyQKffa z3g{(M^y7XCj(8Q^jX50$Ij87tOWp?#iYhElk#iYy#04eShf_p+88z0Yr<~`1#xi)* zU^+AwQ*Z+Y5Bm-bf`MQTLm~nWrm#rd4L)cDG#PA8*(`(A`G3FBzzAzCUJf=_MGM)# zIHw!HBaDbQTm83zuN(56V15xH<7stRoInG=xpdXu0+%8JeYlLo*33^VEuRH8BbpE9 zx2l%!LI0nkKVJx#!S$AYI>-BewemoIc{)MS)uEuRwa`j|06z{4E+QLfwA)$x_dN|tI`<*r@5 zI+;kx)-|1l%445Tt(jV`3^aJ1MN6{FZRvV^%2$ORsKNCHlEa(dFLBo;x{@u)RH8HG zdYNFTt}9PASH^U(reh7JXL&7?967yp!brLxD!kOKYivr03N*--t+&tp|H-L9i1(mF zd$LMYST2Z)`1+2HZg*W*!fj48u9Hu-ekd2TjTpJb`_HDTUlt6nQu$(AxieAr;XX}X z#(kD7ZZCJ{$wu6( zAGdMp@n5pkGd>$~dYd5E*2`$U=!Gw|{Ok)Y`_V${dH9vdgY9FScjXy)d`LPS<<4DPbc;qo5zCT3%yK`L0g?1s9FbMzBfBp}G-C2bI delta 4985 zcmZ9Qe{fXQ701up&BEr#%7!1#g4kU$ln7QJ7{?hYR@9D4KmrY7F_tP32$3HN8H*F9 zi;mV292@6qe^5kbDkC~D0>M!WIHATih>AZ86hv_xhfMgx1#D@tjo+ zu7>RW6Q(p$fGZ9YUY+k*j{Cf+V7bKSo`N}h+x1??)Xd1{MUpwT#--dBO4@RT!>NG7 zXIw6Ec!I z?}h@|&JIVs1&kN266uDVtmOERO!*@YZ+3XMV%kg8tDlDpHkKPvj8v#_6wX_PQ2w>U$w=QEpTk66 zoWn$NaNVkNa<5|cbvj~GH`k_M&EKN*KZT5L`WlQPVevczZbva)0c-MB%8x^i>L9;J zhTQTF@{x#lkw1!e~bE`ff1m;erd2qDbRos2L{1z>PP4|gv^LEGh)rmkY)y;nFAIXi#v44h_nJT z5U?q4uFG+?UEr3g77r3JS{! z2`TmE!=nQ8nexDEsX5fZg6nU{<`Ys2TdjMm!*_w*;v0^nqF_U(yvN~p!O;{J2EG9A#}O@WtFj*rT=)#666>^aFd|k}n;rx~COGUf z!k19hU6>;3bBcZdxlVC4c$ivyTjB3f=#L8Zucp6rGM~fCPuWc6fOB{T9W=v$17rsa z0)t2&+0KQ#9BZb9@?s68WZn1lQ}QJE8~A$y-w!pDAM6%sM7$df&tjX+zzY=) zfujye) zI882a6q>;2iwZGW1?KtP7SVHH{y?zY3m$_3+MVkXHEHVGa-Nvhwy6_xBT!WE-GiH>= __scratch_y_end__, "stack collision in scratch_y") +ASSERT(chaff==0x20081000, "Chaff array must be located at 0x20081000") -SECTIONS -{ - .start : { - __logical_binary_start = .; - /* Vectors require 512-byte alignment on v8-M when >48 IRQs are used, - so we would waste RAM if the vector table were not at the - start. */ - KEEP (*(.vectors)) - KEEP (*(.binary_info_header)) - __binary_info_header_end = .; - KEEP (*(.embedded_block)) - __embedded_block_end = .; - } > RAM_START - - .text : { - __text_start = .; - __reset_start = .; - KEEP (*(.reset)) - __reset_end = .; - *(.time_critical*) - *(.text*) - . = ALIGN(4); - *(.init) - *(.fini) - /* Pull all c'tors into .text */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - /* Followed by destructors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.eh_frame*) - } > RAM - - .rodata : { - . = ALIGN(4); - *(.rodata*) - *(.srodata*) - . = ALIGN(4); - *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*))) - . = ALIGN(4); - } > RAM - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > RAM - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > RAM - __exidx_end = .; - - /* Machine inspectable binary information */ - . = ALIGN(4); - __binary_info_start = .; - .binary_info : - { - KEEP(*(.binary_info.keep.*)) - *(.binary_info.*) - } > RAM - __binary_info_end = .; - . = ALIGN(4); - - .data : { - __data_start__ = .; - *(vtable) - *(.data*) - *(.sdata*) - - . = ALIGN(4); - *(.after_data.*) - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__mutex_array_start = .); - KEEP(*(SORT(.mutex_array.*))) - KEEP(*(.mutex_array)) - PROVIDE_HIDDEN (__mutex_array_end = .); - - /* We skip all the initializers as we need very little runtime, and preinit_array items - * are __used, so would never be garbage collected even if referenced - */ - . = ALIGN(4); - /* preinit data */ -/* PROVIDE_HIDDEN (__preinit_array_start = .); */ -/* KEEP(*(SORT(.preinit_array.*)))*/ -/* KEEP(*(.preinit_array))*/ -/* PROVIDE_HIDDEN (__preinit_array_end = .);*/ - - . = ALIGN(4); - /* init data */ -/* PROVIDE_HIDDEN (__init_array_start = .);*/ -/* KEEP(*(SORT(.init_array.*)))*/ -/* KEEP(*(.init_array))*/ -/* PROVIDE_HIDDEN (__init_array_end = .);*/ - - . = ALIGN(4); - /* finit data */ -/* PROVIDE_HIDDEN (__fini_array_start = .);*/ -/* *(SORT(.fini_array.*))*/ -/* *(.fini_array)*/ -/* PROVIDE_HIDDEN (__fini_array_end = .);*/ - - *(.jcr) - . = ALIGN(4); - } > RAM - - .tdata : { - . = ALIGN(4); - *(.tdata .tdata.* .gnu.linkonce.td.*) - /* All data end */ - __tdata_end = .; - } > RAM - PROVIDE(__data_end__ = .); - - .uninitialized_data (NOLOAD): { - . = ALIGN(4); - *(.uninitialized_data*) - } > RAM - /* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */ - __etext = LOADADDR(.data); - - .tbss (NOLOAD) : { - . = ALIGN(4); - __bss_start__ = .; - __tls_base = .; - *(.tbss .tbss.* .gnu.linkonce.tb.*) - *(.tcommon) - - __tls_end = .; - } > RAM - - .bss (NOLOAD) : { - . = ALIGN(4); - __tbss_end = .; - - *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) - *(COMMON) - PROVIDE(__global_pointer$ = . + 2K); - *(.sbss*) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (NOLOAD): - { - __end__ = .; - end = __end__; - KEEP(*(.heap*)) - } > RAM - /* historically on GCC sbrk was growing past __HeapLimit to __StackLimit, however - to be more compatible, we now set __HeapLimit explicitly to where the end of the heap is */ - __HeapLimit = ORIGIN(RAM) + LENGTH(RAM); - - /* Start and end symbols must be word-aligned */ - .scratch_x : { - __scratch_x_start__ = .; - *(.scratch_x.*) - . = ALIGN(4); - __scratch_x_end__ = .; - } > SCRATCH_X - __scratch_x_source__ = LOADADDR(.scratch_x); - - .scratch_y : { - __scratch_y_start__ = .; - *(.scratch_y.*) - . = ALIGN(4); - __scratch_y_end__ = .; - } > SCRATCH_Y - __scratch_y_source__ = LOADADDR(.scratch_y); - - /* .stack*_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later - * - * stack1 section may be empty/missing if platform_launch_core1 is not used */ - - /* by default we put core 0 stack at the end of scratch Y, so that if core 1 - * stack is not used then all of SCRATCH_X is free. - */ - .stack1_dummy (NOLOAD): - { - *(.stack1*) - } > SCRATCH_X - .stack_dummy (NOLOAD): - { - KEEP(*(.stack*)) - } > SCRATCH_Y - - /* stack limit is poorly named, but historically is maximum heap ptr */ - __StackLimit = ORIGIN(RAM) + LENGTH(RAM); - __StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X); - __StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y); - __StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy); - __StackBottom = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - ASSERT(__StackBottom >= __scratch_y_end__, "stack collision in scratch_y") - - /* picolibc and LLVM */ - PROVIDE (__heap_start = __end__); - PROVIDE (__heap_end = __HeapLimit); - PROVIDE( __tls_align = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)) ); - PROVIDE( __tls_size_align = (__tls_size + __tls_align - 1) & ~(__tls_align - 1)); - PROVIDE( __arm32_tls_tcb_offset = MAX(8, __tls_align) ); - - /* llvm-libc */ - PROVIDE (_end = __end__); - PROVIDE (__llvm_libc_heap_limit = __HeapLimit); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed") - - ASSERT( __binary_info_header_end - __logical_binary_start <= 1024, "Binary info must be in first 1024 bytes of the binary") - ASSERT( __embedded_block_end - __logical_binary_start <= 4096, "Embedded block must be in first 4096 bytes of the binary") - - /* todo assert on extra code */ - ASSERT(chaff==0x20081000, "Chaff array must be located at 0x20081000") - - /* Provide symbols for picotool */ - __enc_bootloader_start = ORIGIN(RAM_START); - __enc_bootloader_end = ORIGIN(RAM) + LENGTH(RAM); -} +/* Provide symbols for picotool */ +__enc_bootloader_start = ORIGIN(RAM_START); +__enc_bootloader_end = ORIGIN(RAM) + LENGTH(RAM); diff --git a/enc_bootloader/memmap_enc_bootloader/memory_ram.incl b/enc_bootloader/memmap_enc_bootloader/memory_ram.incl new file mode 100644 index 00000000..dd8f291e --- /dev/null +++ b/enc_bootloader/memmap_enc_bootloader/memory_ram.incl @@ -0,0 +1,8 @@ +/* Entirely custom memory regions - scratch and ram together for ease */ +MEMORY +{ + RAM_START(rwx) : ORIGIN = 0x20080000, LENGTH = 0x44 + SCRATCH_X(rwx) : ORIGIN = 0x20080044, LENGTH = 0xfbc + SCRATCH_Y(rwx) : ORIGIN = 0x20081000, LENGTH = 0x800 + RAM(rwx) : ORIGIN = 0x20081800, LENGTH = 0x800 +} \ No newline at end of file diff --git a/enc_bootloader/memmap_enc_bootloader/memory_scratch.incl b/enc_bootloader/memmap_enc_bootloader/memory_scratch.incl new file mode 100644 index 00000000..0856ac80 --- /dev/null +++ b/enc_bootloader/memmap_enc_bootloader/memory_scratch.incl @@ -0,0 +1 @@ +/* Empty - see memory_ram.incl */ \ No newline at end of file diff --git a/enc_bootloader/memmap_enc_bootloader/section_no_flash_text.incl b/enc_bootloader/memmap_enc_bootloader/section_no_flash_text.incl new file mode 100644 index 00000000..a9777676 --- /dev/null +++ b/enc_bootloader/memmap_enc_bootloader/section_no_flash_text.incl @@ -0,0 +1,48 @@ +/* Custom text section, as .start and .text are split up + Defines the following symbols for use by code: + __logical_binary_start + __binary_info_header_end + __embedded_block_end + __text_start + __reset_start, __reset_end +*/ + +SECTIONS +{ + .start : { + __logical_binary_start = .; + /* Vectors require 512-byte alignment on v8-M when >48 IRQs are used, + so we would waste RAM if the vector table were not at the + start. */ + KEEP (*(.vectors)) + KEEP (*(.binary_info_header)) + __binary_info_header_end = .; + KEEP (*(.embedded_block)) + __embedded_block_end = .; + } > RAM_START + + .text : { + __text_start = .; + __reset_start = .; + KEEP (*(.reset)) + __reset_end = .; + *(.text*) + . = ALIGN(4); + *(.init) + *(.fini) + /* Pull all c'tors into .text */ + *crtbegin.o(.ctors) + *crtbegin?.o(.ctors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) + *(SORT(.ctors.*)) + *(.ctors) + /* Followed by destructors */ + *crtbegin.o(.dtors) + *crtbegin?.o(.dtors) + *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) + *(SORT(.dtors.*)) + *(.dtors) + + *(.eh_frame*) + } > RAM +} diff --git a/enc_bootloader/memmap_enc_bootloader/sections_no_flash_data.incl b/enc_bootloader/memmap_enc_bootloader/sections_no_flash_data.incl new file mode 100644 index 00000000..0b9daec0 --- /dev/null +++ b/enc_bootloader/memmap_enc_bootloader/sections_no_flash_data.incl @@ -0,0 +1,79 @@ +/* Custom data section - contains contents of section_no_flash_data.incl, with commented out preinit array, and no tdata/tbss + + This skips the other sections normally in sections_no_flash_data.incl, as they are not used +*/ + +SECTIONS +{ + .data : { + __data_start__ = .; + *(vtable) + + *(.time_critical*) + + *(.data*) + *(.sdata*) + + . = ALIGN(4); + PROVIDE_HIDDEN (__emutls_array_start = .); + *(.*.__emutls_v.*) + PROVIDE_HIDDEN (__emutls_array_end = .); + + . = ALIGN(4); + *(.after_data.*) + . = ALIGN(4); + /* preinit data */ + PROVIDE_HIDDEN (__mutex_array_start = .); + KEEP(*(SORT(.mutex_array.*))) + KEEP(*(.mutex_array)) + PROVIDE_HIDDEN (__mutex_array_end = .); + + /* We skip all the initializers as we need very little runtime, and preinit_array items + * are __used, so would never be garbage collected even if referenced + */ + . = ALIGN(4); + /* preinit data */ +/* PROVIDE_HIDDEN (__bothinit_array_start = .); */ +/* PROVIDE_HIDDEN (__preinit_array_start = .); */ +/* KEEP(*(SORT(.preinit_array.*)))*/ +/* KEEP(*(.preinit_array))*/ +/* PROVIDE_HIDDEN (__preinit_array_end = .);*/ + + . = ALIGN(4); + /* init data */ +/* PROVIDE_HIDDEN (__init_array_start = .);*/ +/* KEEP(*(SORT(.init_array.*)))*/ +/* KEEP(*(.init_array))*/ +/* PROVIDE_HIDDEN (__init_array_end = .);*/ +/* PROVIDE_HIDDEN (__bothinit_array_end = .); */ + + . = ALIGN(4); + /* finit data */ +/* PROVIDE_HIDDEN (__fini_array_start = .);*/ +/* *(SORT(.fini_array.*))*/ +/* *(.fini_array)*/ +/* PROVIDE_HIDDEN (__fini_array_end = .);*/ + + *(.jcr) + . = ALIGN(4); + } > RAM + + PROVIDE(__data_end__ = .); + + /* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */ + __etext = LOADADDR(.data); + + . = ALIGN(4); + + .bss (NOLOAD) : { + __bss_start__ = .; + . = ALIGN(4); + + *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) + *(COMMON) + PROVIDE(__global_pointer$ = . + 2K); + *(.sbss*) + . = ALIGN(4); + __bss_end__ = .; + } > RAM +} diff --git a/enc_bootloader/memmap_mbedtls.ld b/enc_bootloader/memmap_mbedtls.ld index 912666fb..ee14c3c7 100644 --- a/enc_bootloader/memmap_mbedtls.ld +++ b/enc_bootloader/memmap_mbedtls.ld @@ -1,263 +1,10 @@ -/* Based on GCC ARM embedded samples. - Defines the following symbols for use by code: - __exidx_start - __exidx_end - __etext - __data_start__ - __preinit_array_start - __preinit_array_end - __init_array_start - __init_array_end - __fini_array_start - __fini_array_end - __data_end__ - __bss_start__ - __bss_end__ - __end__ - end - __HeapLimit - __StackLimit - __StackTop - __stack (== StackTop) -*/ +/* Use XIP_CACHE as RAM, but still put stack in scratch x/y */ +RAM_ORIGIN = XIP_RAM_ORIGIN_DEFAULT; +RAM_LENGTH = XIP_RAM_LENGTH_DEFAULT; -MEMORY -{ - RAM(rwx) : ORIGIN = 0x13ffc000, LENGTH = 16k - SCRATCH_X(rwx) : ORIGIN = 0x20080000, LENGTH = 4k - SCRATCH_Y(rwx) : ORIGIN = 0x20081000, LENGTH = 4k -} - -ENTRY(_entry_point) - -SECTIONS -{ - /* Note unlike RP2040, we start the image with a vector table even for - NO_FLASH builds. On Arm, the bootrom expects a VT at the start of the - image by default; on RISC-V, the default is to enter the image at its - lowest address, so an IMAGE_DEF item is required to specify the - nondefault entry point. */ - - .start_text : { - __logical_binary_start = .; - /* Vectors require 512-byte alignment on v8-M when >48 IRQs are used, - so we would waste RAM if the vector table were not at the - start. */ - KEEP (*(.vectors)) - KEEP (*(.binary_info_header)) - __binary_info_header_end = .; - KEEP (*(.embedded_block)) - __embedded_block_end = .; - } > RAM - - .text : { - __reset_start = .; - KEEP (*(.reset)) - __reset_end = .; - *(.time_critical*) - *(.text*) - . = ALIGN(4); - *(.init) - *(.fini) - /* Pull all c'tors into .text */ - *crtbegin.o(.ctors) - *crtbegin?.o(.ctors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .ctors) - *(SORT(.ctors.*)) - *(.ctors) - /* Followed by destructors */ - *crtbegin.o(.dtors) - *crtbegin?.o(.dtors) - *(EXCLUDE_FILE(*crtend?.o *crtend.o) .dtors) - *(SORT(.dtors.*)) - *(.dtors) - - *(.eh_frame*) - } > RAM - - .rodata : { - . = ALIGN(4); - *(.rodata*) - *(.srodata*) - . = ALIGN(4); - *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.flashdata*))) - . = ALIGN(4); - } > RAM - - .ARM.extab : - { - *(.ARM.extab* .gnu.linkonce.armextab.*) - } > RAM - - __exidx_start = .; - .ARM.exidx : - { - *(.ARM.exidx* .gnu.linkonce.armexidx.*) - } > RAM - __exidx_end = .; - - /* Machine inspectable binary information */ - . = ALIGN(4); - __binary_info_start = .; - .binary_info : - { - KEEP(*(.binary_info.keep.*)) - *(.binary_info.*) - } > RAM - __binary_info_end = .; - . = ALIGN(4); - - .data : { - __data_start__ = .; - *(vtable) - *(.data*) - *(.sdata*) - - . = ALIGN(4); - *(.after_data.*) - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__mutex_array_start = .); - KEEP(*(SORT(.mutex_array.*))) - KEEP(*(.mutex_array)) - PROVIDE_HIDDEN (__mutex_array_end = .); - - . = ALIGN(4); - /* preinit data */ - PROVIDE_HIDDEN (__preinit_array_start = .); - KEEP(*(SORT(.preinit_array.*))) - KEEP(*(.preinit_array)) - PROVIDE_HIDDEN (__preinit_array_end = .); - - . = ALIGN(4); - /* init data */ - PROVIDE_HIDDEN (__init_array_start = .); - KEEP(*(SORT(.init_array.*))) - KEEP(*(.init_array)) - PROVIDE_HIDDEN (__init_array_end = .); - - . = ALIGN(4); - /* finit data */ - PROVIDE_HIDDEN (__fini_array_start = .); - *(SORT(.fini_array.*)) - *(.fini_array) - PROVIDE_HIDDEN (__fini_array_end = .); - - *(.jcr) - . = ALIGN(4); - } > RAM - - .tdata : { - . = ALIGN(4); - *(.tdata .tdata.* .gnu.linkonce.td.*) - /* All data end */ - __tdata_end = .; - } > RAM - PROVIDE(__data_end__ = .); - - .uninitialized_data (NOLOAD): { - . = ALIGN(4); - *(.uninitialized_data*) - } > RAM - /* __etext is (for backwards compatibility) the name of the .data init source pointer (...) */ - __etext = LOADADDR(.data); - - .tbss (NOLOAD) : { - . = ALIGN(4); - __bss_start__ = .; - __tls_base = .; - *(.tbss .tbss.* .gnu.linkonce.tb.*) - *(.tcommon) - - __tls_end = .; - } > RAM - - .bss (NOLOAD) : { - . = ALIGN(4); - __tbss_end = .; - - *(SORT_BY_ALIGNMENT(SORT_BY_NAME(.bss*))) - *(COMMON) - PROVIDE(__global_pointer$ = . + 2K); - *(.sbss*) - . = ALIGN(4); - __bss_end__ = .; - } > RAM - - .heap (NOLOAD): - { - __end__ = .; - end = __end__; - KEEP(*(.heap*)) - } > RAM - /* historically on GCC sbrk was growing past __HeapLimit to __StackLimit, however - to be more compatible, we now set __HeapLimit explicitly to where the end of the heap is */ - __HeapLimit = ORIGIN(RAM) + LENGTH(RAM); - - /* Start and end symbols must be word-aligned */ - .scratch_x : { - __scratch_x_start__ = .; - *(.scratch_x.*) - . = ALIGN(4); - __scratch_x_end__ = .; - } > SCRATCH_X - __scratch_x_source__ = LOADADDR(.scratch_x); - - .scratch_y : { - __scratch_y_start__ = .; - *(.scratch_y.*) - . = ALIGN(4); - __scratch_y_end__ = .; - } > SCRATCH_Y - __scratch_y_source__ = LOADADDR(.scratch_y); - - /* .stack*_dummy section doesn't contains any symbols. It is only - * used for linker to calculate size of stack sections, and assign - * values to stack symbols later - * - * stack1 section may be empty/missing if platform_launch_core1 is not used */ - - /* by default we put core 0 stack at the end of scratch Y, so that if core 1 - * stack is not used then all of SCRATCH_X is free. - */ - .stack1_dummy (NOLOAD): - { - *(.stack1*) - } > SCRATCH_X - .stack_dummy (NOLOAD): - { - KEEP(*(.stack*)) - } > SCRATCH_Y - - /* stack limit is poorly named, but historically is maximum heap ptr */ - __StackLimit = ORIGIN(RAM) + LENGTH(RAM); - __StackOneTop = ORIGIN(SCRATCH_X) + LENGTH(SCRATCH_X); - __StackTop = ORIGIN(SCRATCH_Y) + LENGTH(SCRATCH_Y); - __StackOneBottom = __StackOneTop - SIZEOF(.stack1_dummy); - __StackBottom = __StackTop - SIZEOF(.stack_dummy); - PROVIDE(__stack = __StackTop); - - /* picolibc and LLVM */ - PROVIDE (__heap_start = __end__); - PROVIDE (__heap_end = __HeapLimit); - PROVIDE( __tls_align = MAX(ALIGNOF(.tdata), ALIGNOF(.tbss)) ); - PROVIDE( __tls_size_align = (__tls_size + __tls_align - 1) & ~(__tls_align - 1)); - PROVIDE( __arm32_tls_tcb_offset = MAX(8, __tls_align) ); - - /* llvm-libc */ - PROVIDE (_end = __end__); - PROVIDE (__llvm_libc_heap_limit = __HeapLimit); - - /* Check if data + heap + stack exceeds RAM limit */ - ASSERT(__StackLimit >= __HeapLimit, "region RAM overflowed") - - ASSERT( __binary_info_header_end - __logical_binary_start <= 1024, "Binary info must be in first 1024 bytes of the binary") - ASSERT( __embedded_block_end - __logical_binary_start <= 4096, "Embedded block must be in first 4096 bytes of the binary") - - /* todo assert on extra code */ - - /* Provide symbols for picotool */ - __enc_bootloader_start = ORIGIN(RAM); - __enc_bootloader_end = ORIGIN(RAM) + LENGTH(RAM); -} +/* Other than that, normal no_flash binary */ +INCLUDE "memmap_no_flash.incl" +/* Provide symbols for picotool */ +__enc_bootloader_start = ORIGIN(RAM); +__enc_bootloader_end = ORIGIN(RAM) + LENGTH(RAM); diff --git a/xip_ram_perms/xip_ram_perms.elf b/xip_ram_perms/xip_ram_perms.elf index 6f0d99edd41cc6c869aaba2d737f184e9c8d067e..a4ac9a43435b1cac36d1ba6e9ef61544487b09f5 100644 GIT binary patch delta 12516 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 From 8ba9d00aa776506bbf6e1390260ec0c0697281c1 Mon Sep 17 00:00:00 2001 From: William Vinnicombe Date: Tue, 2 Jun 2026 12:45:57 +0100 Subject: [PATCH 3/4] Update enc_bootloader SDK version requirement --- enc_bootloader/CMakeLists.txt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/enc_bootloader/CMakeLists.txt b/enc_bootloader/CMakeLists.txt index b6422ede..bec6ce84 100644 --- a/enc_bootloader/CMakeLists.txt +++ b/enc_bootloader/CMakeLists.txt @@ -23,8 +23,8 @@ if (NOT USE_PRECOMPILED) set(CMAKE_C_STANDARD 11) set(CMAKE_CXX_STANDARD 17) - if (PICO_SDK_VERSION_STRING VERSION_LESS "2.2.0") - message(FATAL_ERROR "Raspberry Pi Pico SDK version 2.2.0 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}") + if (PICO_SDK_VERSION_STRING VERSION_LESS "2.2.1") + message(FATAL_ERROR "Raspberry Pi Pico SDK version 2.2.1 (or later) required. Your version is ${PICO_SDK_VERSION_STRING}") endif() # Initialize the SDK From 3024f183881ac60fb982807b0b520daad602b710 Mon Sep 17 00:00:00 2001 From: William Vinnicombe Date: Wed, 10 Jun 2026 11:47:24 +0100 Subject: [PATCH 4/4] Update precompiled ELFs from latest develop --- enc_bootloader/enc_bootloader.elf | Bin 20028 -> 20104 bytes enc_bootloader/enc_bootloader_mbedtls.elf | Bin 29456 -> 29484 bytes xip_ram_perms/xip_ram_perms.elf | Bin 33948 -> 34004 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/enc_bootloader/enc_bootloader.elf b/enc_bootloader/enc_bootloader.elf index 1ace10d1e28c7448ab9b6c169cfa18ca0a172566..28208ac9e9ee5bb8c5fae3ebbf21e02cd005ee09 100644 GIT binary patch delta 2812 zcmZ9Oe`p*<6vyA*-PX%pnrw2ZM&g;h#5Rf8T%t%Qw&bMMD7gsjA0}$FrtJko+azkE zEd(~H5nBJS)+usm8>*;K`~mS23>rg~{vkp^jY^?aT7;+tg(Cqi3g`Fj?%Yjg!esU{ z@4cD#V|MlyP8-M07_ZsJ)su;r%&bY2ojEsBY4*j#_Gm6{U9K&gz$2ZlNR11lrPnwt z9&1^t8pYgUo}Y}R4q=?iJ$YwG;En-2p8AunE}&=e%zff!sMbGRZk+C?O0@7nIL z&HQa)J4#;T^}Ys|`#c4{1g-*09rojU#bz9QSz-2P8B8%e1kqOjT^Kvio6u?ECSKl- zlXzkC$2)m{<{a*u`$d&I? zpy z3}_y6id^)WQ=~Gd*kdm`_k6e$o;|0`le_G=?kf{iLsG$@cW^+ed~QJ1J^?q?dGcyF z{Fx%JhWr9prq@Dxmo)kBV6r@Wi}HmVrlT5!D2fv(H{=C3faUSE5OD%r+8|$O(e&>D z@9-VAVE>RN-=%T?Q`*F!#-m^=E|@P&GS|uo0`w|#3LT9jdJlZ1Qp(H3i7g4|8_cOe z{h;wknQLy#HGbhWZMjC6u7l+}YT+IIhvmgAMyMRGsa&6{RHrbK=+MTs6O`0=3s}u^ zmnPq-@$2jWh54Tw^b?S)Nf}};Ce1P2`$>ApWqn0k@RY{W;6Ide_JJm!(|8eFDto@L z1Ww! z{gOH`2+^#jun1N?Uee@0v%FYCgMQQGd5!;NeZB_WAz!HBL+x^}=kZ2Ns2(Q4$c*h7 z7_?2}UEq=f`NDo?B?FD(+SYpKD9h&45cG8+4voIolT_xYgANe^M6YB>oCE5J9b9 zl)n`@A6^5$j8yxm#v3%Q=U-AObToduTiY-pzhnFvxL-5qW`kl11Jo;??Tp3u`JY+~ zMHzx_Us-SK9qTGaA0qyb#LzW2PQ-2?!lqqq1^Pt@qk$9-fGN? z8{PFLf6C`YJl$BvZ(`qOY$?9$j*0$sxyc`~QE@QcXk^97bd$+vDl5K#uKNUCa&`Yp wAA`orJx#`<_^798{VF8i;wMxk6y6utdg{yzokT~4@kpcjU^mg5B9V^$5B{e+;s5{u delta 2791 zcmZ9Oe`r-@7{{M;ckevAtLUv@AFi z`@@LH^5jDpBmV2K2Yf>GD{qk(Yxe$TJ_-uJzn^S+Z6j`x-MN?Y28vYIkn5*1dzF%r+FJl(qUr>wtP` z^*>FMkR71>P)lJy`svbG_xhAOhGFqfxpf6skz=Zs!OTq+y6lF6`tpeZkM?tIwp%Y@ z<67Tz~bj&10}589k5@Pfwl<#(_&V&G%&7p?(}pT?ELCDTi|yxT77V9)vO z+@D;7AKM5`&}t;jPUsW+8bLqW!88_#iM9(msfNSI&dWIJB7hs0FG}2#1&roCi_h5z} zb5_Jl0u@QiFEC)>p#y1wf$RjMLrcqT+{wB=PK>}o+K+1X|3<9a@6z-sYgmMW*r34@ zVUaWsWsf%DQRvCBJvZE|=~qF&w=~iFY^_ICTvV2c%;cd%3z^9aFk&W8XC^=7Ft*^_ z1cGorlNstmrt1-_foGb$4{=tSB$Ta02~U7KmxtUeDLJj_o1wn|j`QgtpYw+PXRtWo zd`HUu?JE1U{8w%7NeYKEKFJP(Yyej_DErI6v4eEL1wR)#?10x9`hJ7A8a!OZFIzGO zfg}r-{nyB?aRe!On_R$!#)v)w|JoSq>*N$zckp~QE487+8?6hbyYU*|aZNW~!qdx$zoO(wKZ8K8&9ylXS2a=)$GYC2=pwktu~O2277csY~F&Pw?MBaWd}J) znkBCq^WUsu&yqt`0!!Wp-__39F+=~k!DqphvX}jNaK~e|TYwupr{98uw>FqnTF~cv zNZBn2S|X2`!h7IKipzcm!Nw`2emo4`g;lU%3ppuC+3&3?nJte~pOmy-HfZ*qgO9>y z2=p2cgY^vT=7f2_1@~aX*THFihXT&ZVQ}mqAA}FUm6E3Aq@h0xjvV%a1?LTeYc$Ym zc-_$7H24nf`PvJ*vTyNFYupUh9c%+T!TRetu%tT?gxt>s5(mouPO_GPtjhGQ@b*!v zZF2;yZ!-ga1t-DAinpW5)cNq= mJtDLClhg<|PpO`5%QHv&MJCkHwp{Dt^CF)x(5NAYLHi$5KqMCc diff --git a/enc_bootloader/enc_bootloader_mbedtls.elf b/enc_bootloader/enc_bootloader_mbedtls.elf index 2215e84f3cfb987a3c897b678c7845dc64e20851..45462c411d92d57c8576c793f19ae1b3ded7a41d 100644 GIT binary patch delta 4267 zcmZvf4RBP|702&QvSFbKyk!G~Nz#{17^5Rj*Z@|h%#frr(1c(<8Ug_-$<*nH#e6WP zQ%B-99b3cHsfl;B+NvXtjzOTBuCY))nysj@Q!Q!gw5YAgm;!B~&1xKw(%Jt1@9oXr zzUiCXm-{>S-1E*k_j3o%%OmIIK(TBd43+w<3Ly%IYfda$+dG;J22(|x7N@gCQ^Vm{ z+t(_7mkhGrT=Lx08&Ut{AN}3YL^601Wk{{FO1Bo(e6hBEHlwttu54rG4L$btxF{~D z@wa7<^?mB^w>H(!G*pVa{KKO7(+f*$meq=4F)8DN)z`XcQwB=5Vql>$CZjLv(-e_2dgpCp6%Dq+1m|F_T)&n~PSQ-=a&@{Ae}{4~IR zXDIIrR*vHT*;w!5Ur66YRCCn2yodZTc+TiE20m;sgLzG@v`a#@Jsrj2RmBynDsB}VjER|^>ax_p zoJg*JtuoeW-%=9#7@a3jUPoDm=6NVrP;bKjJmm2Xb*ifTrm1(5!L?_S!FH6(kOuJo zFv=2?AEWf5#9vPakE$ir_sL21Nc979GPdw5g_(exH@*+Z-t@f;z=4`CMHn<=%oG_; zsGJ)vXFAM8xSZuM$IxY;hqFCA&%=I)^XK}{CpU?-V1c8sd``j5bKxAjW0B@uM?cLA zT~>p&|B}6`Z*#dEQp20;+q;k?r%6b0Cn^sb`~dh-gC7PD82l6P;|9~mA%hFSXH|RM zhQRL)DYgEfhU@IABdPQ;!4r^@nMeu#3;uIx8J9%*+3OWU|2$a*w%DOp4e95QlC_mA zDa0KrQCHy0LG768-cla97`P*PFFD@-9vc&yht^mv74DkanSB2(5Fjq=ms{JW2 zSBY+aQAUK|($NA&pr)Mo{dp{T zM}Q>K!((cy-VTj=q<`|TUxgZMYz0*fc6ip?hK)p9Xnz+DD{cRc3@ps(M-ZeUWQQ(8fgKpJ z+rixsod_L4iW!l~jM!vm$Ychfc?Bwt$67#UL?$cQY=@&Bw}uQphq$NbR<=7Srd4CJ z-FU>%Nb+IgvQTtSMdZ>e}QSLal-9nl9br{Nm( zHFdx0;hkXbwABYay`gPxvF^8A<`!!*w^)OloITnVxXy9UH58mJ*JN&XCiB8$a+4b0 zYD*klTkU`|E1bsED63G59r`!6ydg*zBSC!#DUdqW$Ug+1RP8P0f%`C}_k$??vm-s& zV&hsDZ?PNWSZ^y+781Bmynro^vyQqgICptZDh8K;3$d>BF<~J|H-e|o&U1$Pw}DT_ z!rK+im%o8sEMF_m4p9BcTzTi~4gba6jUhz={Z93}YOa7TIgGQRmRK1WwF(O1t03$`rq zW0+g{DOYa-=PS8$1AMC5Y0G@oj<==yAemM1ox5e03hmk~?^O5fT3wa4d zY0m|ZBZ?y_%ZtG?MigQ2%W7&@efYW|Jp-v8EavDvaQZ9R;v;aOYXAD~$Z9u8qAIrWhH!2Bgc5d)4yJqDfu>)R_8UZMf)ih9+Y179^}S_W3has;4PSpk>_ zxYn-*>kKiV&0v4pUWpiiLH=rD&Y8mdJsrLu+tRjfLDo0-bnJ;ec=!96s;whW_N$%_ z+s7TXUp?7T>f^Q%RdLjKPdusqh8pv3sX%8b*4^69vJ|&>>Xrkj@wbnqhUaSMP~-0( zOUbTMA4iH7mZ{3FoD?Q zY6|bgYW}`5S)sysUr?=h-=+HYmE97p!DVHs5JgDHZ%~*?-dQoVa5qjr_qGY~BlX_C Q()^5j@H+-OlYVsdzg%kEI{*Lx delta 4135 zcmZ9P4NzQH702&mS+XEBZ&{Kq3FIv-GnBCz0*$dmY8E=ikQ8@8Lc>Q48Dk7;`I_Jq z8@oYULuRVN96vg`sfiQEQpq%Qp|R5>fHteXzH0 zXYaoEyXTyH&pG#Vhu%^8@%1V959Ils-clh7hO1s){h8xqagWC=;-a{iB5Fgwi?)1u z>tEv@ey_{_^@%Ux{pO9n&d6fiGl4QfWvYL_Z^yo+K!wt>={@zMrdshYi zAbdwZNb6g-V_lW2C1tYr16QB=#o$6HAP%X+!3801zPqMs%}(JH)5`cjUa13M@$R&=fcx_Gw$)xoces~8<2~WcLgrfDR-gr3dP*N zbhFJXT;J;nOyYSp+MRh$aW3FBi%PPNxm=_1kNz7Mg2u86oLOkg8=cEKrZ^)DanIps z_u6kd+>!aXCo+vPi!y@}UCid{H}Q%jME;I)1%)2T{hTsSgSq!9Ub>e1UITa7|61Jh zDPerrnUmmjldpo$g56+Chl6-dvbhY7O3cArqyjBJuX=xvue8ipx~X)F;6b^v&|O(< z4$#Z-@)vhRzpib}&$|KRH&OnAqCvbGC64z-JhPC)gEU%ETr~G;-1ERh+|!EkA!@Vn zjH2YC{0iksl-Q-XXOuE3dz4u^R{6Lx8%=pI#{uwf{|DfI+rO6t=&kx}n1kjR9U@5& zmFI}T4xKp>1}E#xV`#9`#wj*lWn-7lz7_ja=30@cNYfSaRuqgp7p$-`775PK^%H!T z!E}7*`^s_Z*;TBJ(BQ7%{v$||E)t43fR}!W9|xb5_$lx+68{2xT4MHbMB*IqTh#E- zHurU@mbIp7@F6X4#7rM2_zK&CIgtwZI-ZSGRlVN%4&HuGsnuG=c}f2kYMCwlWJQRB zmL&Pn12U|tm#4}f{4 zWSQ~^m{*A<|E;14!Ar-g;0UZ~&ExO_IfGis7|c$txZ%*VX-#$kH`wYldsP6P|JKmN*Rwq(j|H>xWPSym8^S! z+^|byG!@kHCT+FTHdZM+q+x}Zg|zHtyA1n--Xe{M?xxvLI{hS+RheVeqMt!5P2Np- zM@Ry*J3dLyer&dJ@=f}8XhXQ%R$V7CH*-j0Zsv%@EPukr&)E0{iP>J5yMsAm`Qqc1 z-upEaE=9A8Y%#d4rh8c&F#ly@vpe%-0VR2OIkYk>WK|%j0Vw4SV z=vf9YF;6G>0y7RnOFqs#lVA>eS!$2lKY#w76y$IEW6P77NHCC|*wu$6Up z*tiMI_Z+z`>tJSYxNY7N4Y|R*CCbcOqQtfOo@!JW&hZ{8Dd=0I%)E`s%oh}y8)<5{ zrW~YOyEV5yBXprT!c7d}gDW2hEzZMj3ShEF@M z!?7scYGA9fMs~fSalO+A_gbl^u~;df!N%f}57FmS=#E`+z}6ae6>X{D6PQ9?)72ud zk5Zeq!KbPwP4Q7He!X-YHOmxh+NY#bQS&b4E7aY5UqzxNr%1t$%=f-$&6YC2Q;1^7 zAd*Sa+p+A#`tqmWZNC-4jY{Y<%qeH&Pa)XPu25(Eu4&@?`d;y;{ z^;f|@k!P341Y5ULRb+^J!55@}O2ep-Gf-~h?KTeCxDhM@DEROYwlbR^=EuPNzk#bb z;vd=U!%w5ax+}86X|M}>nl+8Cfcb>Acp03B2&~1k28&@yns()2IiN3qRmuK&*z;c$ zPB}7|DY|V2;po>|%F?2zzj4(;-)UQ`^wU6_=H#ugpGMpKPTmM2bgj*w%2&0C3L)y~ zpKTt>X-{`@>b&m-SWh+&86)NvjH-0L4R?C}53fSzjsO4v diff --git a/xip_ram_perms/xip_ram_perms.elf b/xip_ram_perms/xip_ram_perms.elf index a4ac9a43435b1cac36d1ba6e9ef61544487b09f5..b93d628203ecbafff2131d03f67ec965830afa9c 100644 GIT binary patch delta 8706 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