From 08f128d82f8e86dac5ca277d4fe4cc3fd7fef204 Mon Sep 17 00:00:00 2001 From: b0hemia <50309975+b0hemia@users.noreply.github.com> Date: Mon, 24 Aug 2026 22:51:34 +1000 Subject: [PATCH 1/8] baseline: burner_x2000 SPL that loads+executes on device (-fcommon + mask-ROM return shim) --- arch/mips/cpu/xburst2/x2000/start.S | 23 +++++++++++++++++++++++ config.mk | 2 +- tools/ingenic-tools/mmc_params | Bin 0 -> 14472 bytes 3 files changed, 24 insertions(+), 1 deletion(-) create mode 100755 tools/ingenic-tools/mmc_params diff --git a/arch/mips/cpu/xburst2/x2000/start.S b/arch/mips/cpu/xburst2/x2000/start.S index caab455..2dcc1e2 100755 --- a/arch/mips/cpu/xburst2/x2000/start.S +++ b/arch/mips/cpu/xburst2/x2000/start.S @@ -167,6 +167,29 @@ cache_alloc_a_line: li sp, 0x80001000 #endif +#ifdef CONFIG_BURNER + /* + * DDR-only USB stage-1 (burner mode): board_init_f() brings up clocks and + * SDRAM and then RETURNS (see arch/mips/cpu/xburst2/x2000/soc.c, the + * CONFIG_BURNER branch). For usbboot to keep driving the USB session we + * must hand control back to the mask ROM afterwards. Preserve the mask-ROM + * return address (and sp) in a fixed TCSM scratch slot across the call -- + * board_init_f repoints/uses the stack internally, so a stack-relative save + * is not reliable for the outer return. 0xb24017f0 lies in the param/pad + * region below the code (offset 0x800) and is untouched by DDR init. + */ + li t0, 0xb24017f0 + sw ra, 0(t0) + sw sp, 4(t0) + jal board_init_f + nop + li t0, 0xb24017f0 + lw ra, 0(t0) + lw sp, 4(t0) + jr ra + nop +#else j board_init_f nop +#endif diff --git a/config.mk b/config.mk index f71e145..d78be30 100755 --- a/config.mk +++ b/config.mk @@ -195,7 +195,7 @@ endif ARFLAGS = $(error update your Makefile to use cmd_link_o_target and not AR) RELFLAGS= $(PLATFORM_RELFLAGS) DBGFLAGS= -g # -DDEBUG -OPTFLAGS= -Os #-fomit-frame-pointer +OPTFLAGS= -Os -fcommon #-fomit-frame-pointer (-fcommon: 2013 tree relies on tentative defs; GCC>=10 defaults -fno-common) OBJCFLAGS += --gap-fill=0xff diff --git a/tools/ingenic-tools/mmc_params b/tools/ingenic-tools/mmc_params new file mode 100755 index 0000000000000000000000000000000000000000..78adebd875be1ac2ec4d41c346622d76fea5e1c4 GIT binary patch literal 14472 zcmeHOZ)_Y_5r1bp^~H70ra0gvZM_P1)lhu7a~#V_Wa58G)>Rwa)&?pXuIsx!`|$l^ zZ%v%4#MhV%|uTKe1!o{@(m%=FQu=x9@iEo+l36bFj?k6D;N8lLEEbTO`v-1~p6#fKJgaHo@^W zajUoq^a`7k_D%_4m9kK_8vVqV17ch~HrBvfB@G#*@CXqxZapbhN(-Z?l{&_4z$WQ# zEYLU@*z4u|9>d#2!6+4rOp|;kY$yjqTkscdw9&c}JZfgzZGQk#m2skbUUO1-?9Uc_W zO%XXNqbSQuo%=&u9of_T;(D?J40LI)a``%F$|^=G{QztEWB#@HPp`w@y$;{74u2MS z1zv8!oNMK6T!%joyaF$`>;q!En?yYl$(dSoG!h*djl{J?5{RskNSkqFgrRFOk;&?5 zpkanY(b+H~DJ_9abX<$X6KO4(ctjV`WG1JJqejBiMKY)BqXGkP2DOPp_w;r5L|THo zf~}?YN~I2I|aQb}Rm|GGXadyXvt4ky{;R<7rKDHI@<>FD&pMByRFdfUp z6zC|t-tjt<{jlU`X+2{;M7+OK+L>p4VZY>YuH&3zx#HlR*Tn;od8~U z@OWLZ%n^?tCtM@6op$hey|SEh@b>2n8Ri|lyk4cD=-}xi%QpPf!9#&d@`{76DzRR} ztAJMluL52Lyb5>~@G9`HSKtpdw|}5c{?@NfZ}`BSWtZ=jZ*S<&&vY3W-lI^HlXeQia@ z8>OWaCEaQ|4B6u~4ZXt7Z#DfUxLSYRrT@~UzwFX4y7cod{kc_o*Faz4-N6T-OiE0h zu4uXwhNl*K8|%ZxpY%4`cg&Mknc1dJf8>XF>gvqyGXWtM=im(Hu{P@TKx2JOy{pa+ ztvR_7NGP%Lxg%WE(y@s^(;I>@DL}_^>sKb?tufmxnF^#^8F3J-B-BudA0DSI{EA6{(%GG zV)!L>rsIp?XKnr%d@=HFJjnjQ_W`5MZ0JVVbKTqwQ~4%r!&KgAU8!lvW4{*&!GDYG zzxx)19XHg%viicc{pt(X%T?b+_0kQq4mx=46S4!pbw$oQj>q|)??AH{yK7LL?05#7 zYT>F`txk752g+jKU*V);FxHD3z5}}N2*j51WBk%lFhUfz?Q5@ewE^jgR{^gAUIn}g zcopy};8nn@fL8&p0$v6FM-}kFs6#UkOmIH>7 zF{(r=6;*QCq!P`HrA?(nX$rNEE8WLTJ-41MnTd{qv1de&j_y@HgFlBk`V+ow<@@lr zUi=DR?st}j-z_N1mNg3)0z8d8U=gtP_m0Ri#+Zb zn19Ez?m&m$O8Wu55t^7M1Ud46B2arUP=9yL%}4!tv488HkMC;Sjx@&O?_g8lX9pq) zg1iZ@Jn&g0NJ4<8;I#n!Fh1)a4Ah<~>kZUDUfvZ@CM$Xaon?os0!mk)zAI4M9q@NK ze|@4(Jn$;uRluu&R{^gAUIn}gcopy};8o!Nssg+}j`zdiqXY^*i=b3XC~eT&MEaw& ze{Kuuyzg!s>3+hkguMR_pOH}5{>K|u2K95a*^T$G)l!4^t}T$A_n<9c5C}ij)Js)t zCS;&6F-7~>@aIkxe7-}$=PMN63-?i}ih3fL|11rJ$6X{p-YduXZzrDp{%pzfgSy%j z{FZ2+ub=vZU*v3^>kf~cw!TQ`|32w_9@PDR4S0XIyTcGYgmx146Fy9sCCn4f61w~O zM>_AfJk-;(SGjX=2p;dpl<+Rtp&Dv#8?)7x<1MYhP-`%}gA76hb0ay^Fts5Oge|hV zkrlyo#?*tu>9JtefPJ!tdCWl#jU`}1bs|PoS9f2tsSOL;eMHNRh+ynkI(IB3(KMvx zOS+LuWYVjY2-plgsbK)MvPlz1k$@vKgTonWp+=f(IDgm9z@S$8z1f!W$N>Ae#1OK7m^@DSduM7A8Mey~? zX?UKpj>`aEBOJfp{(tu8>wvlaXLfW9e)V8 z_uv}i@$)*w$oY94a*zK$h{qaoJg-xX?Nl%vBQ`mn*NX>%!y$7#uX~KV&Vh?9?)q!M z;u^y7ylyb^`pe^IKgKk~=lF>hUxo(Ol;e4wWGs>+=Xam~S1G=m z{CM4EJne|bnz`ej01n5+{g*b9(|W|8N7T*Vz5n