From 349a16ce3964585d003a8b456e39a425d6102797 Mon Sep 17 00:00:00 2001 From: Michael Scire Date: Sun, 22 Aug 2021 02:32:05 -0700 Subject: [PATCH] fusee_cpp: implement SDRAM initialization --- fusee_cpp/program/program_ovl.ld | 4 + .../bin/sdram_params_erista_0.bin | Bin 0 -> 1896 bytes .../bin/sdram_params_erista_1.bin | Bin 0 -> 1896 bytes .../bin/sdram_params_erista_2.bin | Bin 0 -> 1896 bytes .../bin/sdram_params_erista_3.bin | Bin 0 -> 1896 bytes .../bin/sdram_params_erista_4.bin | Bin 0 -> 1896 bytes .../bin/sdram_params_erista_5.bin | Bin 0 -> 1896 bytes .../bin/sdram_params_erista_6.bin | Bin 0 -> 1896 bytes .../bin/sdram_params_mariko_0.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_1.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_10.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_11.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_12.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_2.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_3.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_4.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_5.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_6.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_7.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_8.bin | Bin 0 -> 2104 bytes .../bin/sdram_params_mariko_9.bin | Bin 0 -> 2104 bytes .../sdram_params/lz/sdram_params_erista_0.lz4 | Bin 0 -> 940 bytes .../sdram_params/lz/sdram_params_erista_1.lz4 | Bin 0 -> 940 bytes .../sdram_params/lz/sdram_params_erista_2.lz4 | Bin 0 -> 940 bytes .../sdram_params/lz/sdram_params_erista_3.lz4 | Bin 0 -> 944 bytes .../sdram_params/lz/sdram_params_erista_4.lz4 | Bin 0 -> 940 bytes .../sdram_params/lz/sdram_params_erista_5.lz4 | Bin 0 -> 944 bytes .../sdram_params/lz/sdram_params_erista_6.lz4 | Bin 0 -> 947 bytes .../sdram_params/lz/sdram_params_mariko_0.lz4 | Bin 0 -> 937 bytes .../sdram_params/lz/sdram_params_mariko_1.lz4 | Bin 0 -> 938 bytes .../lz/sdram_params_mariko_10.lz4 | Bin 0 -> 955 bytes .../lz/sdram_params_mariko_11.lz4 | Bin 0 -> 950 bytes .../lz/sdram_params_mariko_12.lz4 | Bin 0 -> 950 bytes .../sdram_params/lz/sdram_params_mariko_2.lz4 | Bin 0 -> 947 bytes .../sdram_params/lz/sdram_params_mariko_3.lz4 | Bin 0 -> 938 bytes .../sdram_params/lz/sdram_params_mariko_4.lz4 | Bin 0 -> 948 bytes .../sdram_params/lz/sdram_params_mariko_5.lz4 | Bin 0 -> 952 bytes .../sdram_params/lz/sdram_params_mariko_6.lz4 | Bin 0 -> 947 bytes .../sdram_params/lz/sdram_params_mariko_7.lz4 | Bin 0 -> 948 bytes .../sdram_params/lz/sdram_params_mariko_8.lz4 | Bin 0 -> 951 bytes .../sdram_params/lz/sdram_params_mariko_9.lz4 | Bin 0 -> 954 bytes fusee_cpp/program/source/fusee_main.cpp | 4 + fusee_cpp/program/source/fusee_sdram.cpp | 970 +++++++++++++ fusee_cpp/program/source/fusee_sdram.hpp | 23 + .../program/source/fusee_sdram_params.inc | 1267 +++++++++++++++++ fusee_cpp/program/source/fusee_uncompress.cpp | 103 ++ fusee_cpp/program/source/fusee_uncompress.hpp | 23 + fusee_cpp/program/update_sdram_params.py | 65 + .../exosphere/br/impl/br_common_types.hpp | 28 + .../exosphere/br/impl/br_erista_types.hpp | 479 +++++++ .../exosphere/br/impl/br_mariko_types.hpp | 531 +++++++ .../include/exosphere/pmic_setup.hpp | 2 + .../source/libc/libgcc_thumb_case.arch.arm.s | 20 + .../libexosphere/source/pmic/pmic_api.cpp | 12 + .../include/vapours/tegra/tegra_ahb_arbc.hpp | 3 + .../include/vapours/tegra/tegra_clkrst.hpp | 12 + .../include/vapours/tegra/tegra_emc.hpp | 534 ++++++- .../include/vapours/tegra/tegra_mc.hpp | 20 + .../include/vapours/tegra/tegra_pmc.hpp | 5 + 59 files changed, 4088 insertions(+), 17 deletions(-) create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_erista_0.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_erista_1.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_erista_2.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_erista_3.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_erista_4.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_erista_5.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_erista_6.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_0.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_1.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_10.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_11.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_12.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_2.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_3.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_4.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_5.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_6.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_7.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_8.bin create mode 100644 fusee_cpp/program/sdram_params/bin/sdram_params_mariko_9.bin create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_erista_0.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_erista_1.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_erista_2.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_erista_3.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_erista_4.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_erista_5.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_erista_6.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_0.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_1.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_10.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_11.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_12.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_2.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_3.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_4.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_5.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_6.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_7.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_8.lz4 create mode 100644 fusee_cpp/program/sdram_params/lz/sdram_params_mariko_9.lz4 create mode 100644 fusee_cpp/program/source/fusee_sdram.cpp create mode 100644 fusee_cpp/program/source/fusee_sdram.hpp create mode 100644 fusee_cpp/program/source/fusee_sdram_params.inc create mode 100644 fusee_cpp/program/source/fusee_uncompress.cpp create mode 100644 fusee_cpp/program/source/fusee_uncompress.hpp create mode 100644 fusee_cpp/program/update_sdram_params.py create mode 100644 libraries/libexosphere/include/exosphere/br/impl/br_common_types.hpp diff --git a/fusee_cpp/program/program_ovl.ld b/fusee_cpp/program/program_ovl.ld index acda8eb77..d6b1ef5f8 100644 --- a/fusee_cpp/program/program_ovl.ld +++ b/fusee_cpp/program/program_ovl.ld @@ -10,9 +10,13 @@ SECTIONS { OVERLAY : NOCROSSREFS { .ovl_sein { fusee_secure_initialize.o(.text*); + fusee_sdram.o(.text*); fusee_secure_initialize.o(.rodata*); + fusee_sdram.o(.rodata*); fusee_secure_initialize.o(.data*); + fusee_sdram.o(.data*); fusee_secure_initialize.o(.bss*); + fusee_sdram.o(.bss*); FILL(0x00000000) . = ORIGIN(ovl) + LENGTH(ovl) - 1; BYTE(0x00); diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_erista_0.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_erista_0.bin new file mode 100644 index 0000000000000000000000000000000000000000..ef0c9d9f11211b6f568a4131fe45a224214b52da GIT binary patch literal 1896 zcmZQ(U|?WmU|>*UU|`SzF&OZJj6IA6Tnr2hEL#{07>z>8PCR2MK-Xcyz`(%NAmPBk zzyQK<>Hq)b8EynhEnr{>U}az^XTXM+EnC0YW*!3rGxLLkEKmS4Kpq7!FtBhyOj*dt zz+ePY0L36LFhSWMzk#qE0|Nsu0|SF90|SFFR1QROg8TtuKruH|9R~vg1BlJSz`&ru zz`($UghA$kl!N3z;xM~Fe2_knJ*-gmAax)NQUekPu|ej7LR^S}fkA|UfkBLcfdR$_ zhbz>AgA5D|AoD;NBm~1CJs|U8W~wtVFn};f41_`M0Qn1aSaCiP=o-}M3 zFm)ih`#(E~VgQv90`5ks0w!guj3()-jHM|?j74E40?H*}jIKuMAVr>&R2V=Q#74%_ z3=9k)j4TFX>pKd|i!d-Ufb9PN|9?IAbv6eE1||j$4rT_17)AyG0Rc$H0x5=KP?=;7 zjR^sem;nQWAR{>8f_Plef(j%BO2;4!5@%o#fRq7^0-PF?jh4DZccqs>BrwVU@BhC) z00npM+_}Sr1i)d$%+A2X%+A1|^8Y`BOL!iGMv*0hz#MOo9gGYN96k&T4GIEW3>pI9 zcmrF29Ohs%7#P650L1}_56bVL^aY|B8JL(DnV1<^SPvKS^TWzzd5}3Ee=&gaFGvsA zbI?4)!0-W{r=1V)dU6?5Sb}tbF+vW^MIyjv!1)Fs7Rad}8UvT{Fo2u~76-W-%zzLO zJrEKif<)GdIl%QH34@pr9S{=4N5OS+2z^-G$#4KgHG<=&f^a7`eF&APEH@p9zBees Hs9^^HIj)C9 literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_erista_1.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_erista_1.bin new file mode 100644 index 0000000000000000000000000000000000000000..58d368ac8a3a52a2e26dd7526ebf276dc30d9c62 GIT binary patch literal 1896 zcmZQ(U|?WmU|>*UU|`SzF&OZJj6IA6Tnr2hEL#{07>z>8PCR2MK-Xcyz`(%NAmPBk zzyQK<>Hq)b8EynhEnr{>U}az^XTXM+EnC0YW*!3rGxLLkEKmS4Kpq7!FtBhyOj*dt zz+ePY0L36LFhSWMzk#qE0|Nsu0|SF90|SFFR1QROg8TtuKru)S2y-wnFmOZV6c`v7 z*pM*DJdko0s2I#H5Fexuq@NWk2T}*ZAT=OyklPp-7#ct!F2umVAi}`FAjZJJ0Aqv0 z6>7mj1_lO@c_0iDf?<#zkohn()fpHVKo}$j!XS5m{DsVxVP;_9U63$wzct7;pLtkV zrP-L6*=3YfRarS?Ik{B0<#>72)R>v1Wt5p&*jd?BRhhWBWqCPxIOSB-)Hqbw*k^&< z$nc-xKga}R%)-FP!N9=8!N9-^a_WJ?LS_yI25yd`B0e6FIt~tA9tH+p9uW~S4v1Po z4rn-lq`_E};S2*8gE0dGgTiN44nc;%~g;(<&ruQl`pilCH{FnqtIQ6lNlzToT6UYLpIAkz<1Bo**2rw{!%78`zPL0V%OI@P7(#s$cnB@QW|KA^g zf;)Ha+~Gn3;4orlXJBGxXJAnI|DVAnJdZ)6$dW-|jyK2-Mg|5B9|nd71pzJw4FPbx zfh|A|bFdi<3}9b?ya3{Z(iRAV@;xI16B8p7GXo3j;X;0XSh*|@G6&=@22lP5=>cU_ zP$>kGU|{$F&(qF_cRjfbDl8!q49IeDAt(cE29(XfU;tu)oC=~ba2XE+$a!FKkh{SQ z2m#RpAt542WSy7;TpyA!hzZdFAwhf;TqlRnhsB)?2T)WaIBqHkcVg3rP>ITN(}C!F LgCdLwSCB9O3-yP; literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_erista_2.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_erista_2.bin new file mode 100644 index 0000000000000000000000000000000000000000..ef0c9d9f11211b6f568a4131fe45a224214b52da GIT binary patch literal 1896 zcmZQ(U|?WmU|>*UU|`SzF&OZJj6IA6Tnr2hEL#{07>z>8PCR2MK-Xcyz`(%NAmPBk zzyQK<>Hq)b8EynhEnr{>U}az^XTXM+EnC0YW*!3rGxLLkEKmS4Kpq7!FtBhyOj*dt zz+ePY0L36LFhSWMzk#qE0|Nsu0|SF90|SFFR1QROg8TtuKruH|9R~vg1BlJSz`&ru zz`($UghA$kl!N3z;xM~Fe2_knJ*-gmAax)NQUekPu|ej7LR^S}fkA|UfkBLcfdR$_ zhbz>AgA5D|AoD;NBm~1CJs|U8W~wtVFn};f41_`M0Qn1aSaCiP=o-}M3 zFm)ih`#(E~VgQv90`5ks0w!guj3()-jHM|?j74E40?H*}jIKuMAVr>&R2V=Q#74%_ z3=9k)j4TFX>pKd|i!d-Ufb9PN|9?IAbv6eE1||j$4rT_17)AyG0Rc$H0x5=KP?=;7 zjR^sem;nQWAR{>8f_Plef(j%BO2;4!5@%o#fRq7^0-PF?jh4DZccqs>BrwVU@BhC) z00npM+_}Sr1i)d$%+A2X%+A1|^8Y`BOL!iGMv*0hz#MOo9gGYN96k&T4GIEW3>pI9 zcmrF29Ohs%7#P650L1}_56bVL^aY|B8JL(DnV1<^SPvKS^TWzzd5}3Ee=&gaFGvsA zbI?4)!0-W{r=1V)dU6?5Sb}tbF+vW^MIyjv!1)Fs7Rad}8UvT{Fo2u~76-W-%zzLO zJrEKif<)GdIl%QH34@pr9S{=4N5OS+2z^-G$#4KgHG<=&f^a7`eF&APEH@p9zBees Hs9^^HIj)C9 literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_erista_3.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_erista_3.bin new file mode 100644 index 0000000000000000000000000000000000000000..8e7de31e4ef383e3b5975b5edbcd0c1055bfa8fd GIT binary patch literal 1896 zcmZQ(U|?WmU|>*UU|`SzF&OZJj6IA6Tnr2hEL#{07>z>8PCR2MK-Xcyz`(%NAmPBk zzyQK<>Hq)b8EynhEnr{>U}az^XTXM+EnC0YW*!3rGxLLkEKmS4Kpq7!FtBhyOj*dt zz+ePY0L36LFhSWMzk#qE0|Nsu0|SF90|SFFR1QROg8TtuKruH|9R~vg1BlJSz`&ru zz`($UghA$kl!N3z;xM~Fe2_knJ*-gmAax)NQUekPu|ej7LR^S}fkA|UfkBLcfdR$_ zhbz>AgA5D|AoD;NBm~1CwIK6hW~wtVFn};f41_`M0Qn2V2I&E@WtbTlco!s0+;0tX z!Dk*8R%tdSW_B56RaI6FSxzn$ZaH2aH8o}?X&Gf^7Is!PRaGV~ZdqOq9!@zGH8lRK&*vQpdr;%frCH%OfHp z#sN_)$N`EYkQ@w)GMr)HVlW1U_GeZOL5BbQ|M@|3Aa#t)3AjBX5 zjy+WUFmVG0JqBY20|sLTQw9SDBL+}hfK=iV*I>X8MHoOPgX{#^3gUrGLts!?fO!sV z3}+ZP8T=Un!CXcLa5y=DaXp*kVSejzQSQKU=pj;Bh=xUS>Qsg;Fg#m;? zY-9{db0CZ?24d?w3d@TyFfxGb{{R1fJ@<7s2L=Wv1`ZBp28I|$1_1#9NX7ywhGI~e zWDbo90g#vh1A`zVIN^eLT+o6FBn3*xAPf>`U=Vj$^Y;F zzdry4ckbM|!-WLEVZ_YNz{JeXz@YN~KZ8qn9)m`aC4;~mZ;%~~3=AAT3=9nl0$dCl z0^oQ9TYwzqU^5sPz`g**0f-OE@1XPrq8S;Om>8Lu8CX~k7xMGN%4K%woCg*Mxf{%Y z5D+~O5+Z^`)`>a5^&ts^m=GNh62wQrb#e%OSlr2Q07W%|*UU|`SzF&OZJj6IA6Tnr2hEL#{07>z>8PCR2MK-Xcyz`(%NAmPBk zzyQK<>Hq)b8EynhEnr{>U}az^XTXM+EnC0YW*!3rGxLLkEKmS4Kpq7!FtBhyOj*dt zz+ePY0L36LFhSWMzk#qE0|Nsu0|SF90|SFFR1QROg8TtuKruH|9R~vg1BlJSz`&ru zz`($UghA$kl!N3z;xM~Fe2_knJ*-gmAax)NQUekPu|ej7LR^S}fkA|UfkBLcfdR$_ zhbz>AgA5D|AoD;NBm~1CJs|U8W~wtVFn};f41_`M0Qn1aSaCiP=o-}M3 zFm)ih`#(E~VgQv90`5ks0w!guj3()-jHM|?j74E40?H*}jIKuMAVr>&R2V=Q#74%_ z3=9k)j4TFX>pKd|i!d-Ufb9PN|9?IAbv6eE1||j$4rT_17)AyG0Rc$H0x5=KP?=;7 zjR^sem;nQWAR{>8f_Plef(j%BO2;4!5@%o#fRq7^0-PF?jh4DZccqs>BrwVU@BhC) z00npM+_}Sr1i)d$%)`LM%)`K-^8Y`BOL!iGMv*0hz#MM|2~df^z~RHd(4Zi|#h@Vo zjyJFc$YBmPgMk6;3s4+@_@Mj_N?#zFk%5Vck%^gsh4pYDKR>KomIs*w@)rXr|AO>@ zJqOJ*3=ALOdD{8#t|ym4g(XM_7$fAsTqFW)2AppIVu73rqA_q84+F?~U~!PU!3+oi z(E}kNB1mMNm;+oNk}!w~(E%Yrd=y+KhtP+`oeT$1R3kWUDhPLC(}z%r%5u|z=zD`A Hj2d*UU|`SzF&OZJj6IA6Tnr2hEL#{07>z>8PCR2MK-Xcyz`(%NAmPBk zzyQK<>Hq)b8EynhEnr{>U}az^XTXM+EnC0YW*!3rGxLLkEKmS4Kpq7!FtBhyOj*dt zz+ePY0L36LFhSWMzk#qE0|Nsu0|SF90|SFFR1QROg8TtuKru)S2y-wnFmOZV6c`v7 z*pM*DJdko0s2I#H5Fexuq@NWk2T}*ZAT=OyklPp-7#ct!F2umVAi}`FAjZJJ0Aqv0 z6>7mj1_lO@c_0iDf?<$akohn()fpHVKo}$j!XS5m`~_lz^nlnh%nS^?3lb*ow+6Z9 zGY<=^G#e8$yNt4`Dl3O9CzlGh950WW8Z(o$j50F|J1d*2DiasCEH4KSr<{tK8ixuS z`z(;X4F4JagG@liEDVes3=B*h3=F&=ryeLQWaeOC;N~bQ;^P6S7&9<1D12t+5M=nz|DPWu0aC}v%uv9696hkqnOfqKx z z2b57kr4UGhf#Cx@Pdgvp_2e?Bu!Kl3Aj`pppbW4XP&NaD0f+^1Du~9wWjqWZ=YhpR z?gld;1Vj&ngoq%Kbz%;1eMrI}CPW8>1o2UDog6|R7I!inKv9k0xTzrAiA^6uB`V8J O2cqu{iZCKvLBaq_KZnZz literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_erista_6.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_erista_6.bin new file mode 100644 index 0000000000000000000000000000000000000000..47b48007a972fa239fb39f9d3acad602a4d8cdfb GIT binary patch literal 1896 zcmZQ(U|?WmU|>*UU|`SzF&OZJj6IA6Tnr2hEL#{07>z>8PCR2MK-Xcyz`(%NAmPBk zzyQK<>Hq)b8EynhEnr{>U}az^XTXM+EnC0YW*!3rGxLLkEKmS4Kpq7!FtBhyOj*dt zz+ePY0L36LFhSWMzk#qE0|Nsu0|SE<0|SFBR1QROg8TtuKruH|9R~vg1BlJSz`&ru zz`($UghA$kl!N3z;xM~Fe2_knJ*-gmAax)NQUekPu|ej7LR^S}fkA|UfkBLcfdR$_ zhbz>AgA5D|AoD;NBm~1CwIK6hW?C~aFn};f41_`M0Qn2V2I&E@WtbTlco!s0+z(R7 z@R^5&Rho^7nO#O%Rh5-PmXk|`TaK4UO^umJT1J_fg`Jg6Rh5a0Tb7rDhf_{PO^ri^ zjeQo#UWWe+|3Q90#w-ks91ILh91IM+Ag3NEEM(?jVBqE`D&pe-spH__5hQi0=N+4x$)9WrTpcQL2DRnJS}6x+-I7iVD1IG7n2Vi*|&1Oy-%3#1r|L1mIT z11MK8FbIIe3>X*$8Nmq`#N&b%R3Ir(ItF2oI9M^L3}_VK)R=6v)Frwry$m9ON&bKT z|NQ|dxO3;u9WEpQ4kKoE1}0{91_qV?{~27u^B6RWEExpmc!M0o$iTqi!@$s>Ai%|- zApnjyum#9r4mN{<0qhG<9Dw+s{0{OJD6|F1D7Z>sK!^&lOkU1cKF@W+f zNDtU^&^*Jy@ByBuoe%GNav4-uf^>i}LJrJDBEV+A`34{s$f+P21DEkIfSd^y2e})} zfDjNp5E3GSMAnHp!1W;sgP0H<5E8^k!F6&7eOTPdZ~#R$g5#!wa3?l>2$iTTHywz+ KHz>lWVFv*C1c!S7 literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_0.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_0.bin new file mode 100644 index 0000000000000000000000000000000000000000..1a6b55a10f5cd67e6db3e6915e5dccedf9083d2b GIT binary patch literal 2104 zcmZQ(U|?WmU|>*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%3)BGAFWz|g^J%6l7}$_7$PSPcNIgg#WiL3=AL)vJ-?s?g04}nJvT2z`(m8 zVWK@KP#8Y*u&_$AF)_2tD66Wna>#OWsc_5j@~EjXGfB%RGqbR>vZ<;vadFG?a`14< zsi>)OsIalm0=bvrKf`~Je~>W?17imR15*bB11~6Y4;UIUcQ7z;cf`i>^~A>VbZ~I+ z_AoH;_K1mzbwJb#azMiYZj1oK83rx}V+IBWh0m%Sf(#4{|M@|ZAa#t)3yplo#{}%-&O*BveG7xGmm`MSl z#K6ZOzyM1j2!mka&J3Omt_)5L?hKv`?hJ0=_+?-aV8A7=!GIqsF@Q`4*$J{$8eB#o zY=y8u;R9wlurZur;AHS;2y6iH8Ns0g2`^CkS4JHpV1Edcu z#;C;dfBt%ZI3K2nfq`NEe{(R8(I})$z}+ZSz@$u-(Ij1!u{6bqu_(+$K)EE0(bXs& zq{wrU3Ihm(*vJ@^=0F%(48&G&6qXlZU}ON<{r~^}dim>S(DH|qfx$!oq=W&K2fz$8 zf|-F8lr>ldKps$FU{C~Q7(@XE(G1noz~I2ZBGAA9Dgzn?I5j34Ep>_RN-u*-(~J@j zU|;}YhW8BbVV20q$jHFhFq(;(g8_sYRQ~^Ga0$<2&?vHG5SZi5AOMbU4j%@F1_c2w z1`Pp*22dP<^dZL|NDLGVpa21}K^PPqAU-=tF#{75BNHbhh=PRE ze}?}cJ)klQlm|f)3=ALOWrXwLT~98{fs0Rw6p|cN08W9;fb+nmJjkhV5oAUgD5FCK zK<y}gaq+XaGjU~$a^SaP!2=~goFwqs5&`>J}mBJIDk-!!g5nVR5{r6p(sY; QxamOjy+IN~4p(Gh0E*6iEC2ui literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_1.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_1.bin new file mode 100644 index 0000000000000000000000000000000000000000..5e605d6b619c2014d23c3863686d21c7074cce8a GIT binary patch literal 2104 zcmZQ(U|?WmU|>*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%3)BGAFWz|g^J%6l7}$_7$PSPcNIgg#WiL3=AL)vJ-?s?g04}nJvT2z`(m8 zVWK@KP#8Y*u&_$AF)_2tD66Wna>#OWsc_5j@~EjXGfB%RGqbR>vZ<;vadFG?a`14< zsi>)OsIalm0=bvrKf`~Je~>W?17imR15*bB11~6Y4;UIUcQ7z;cf`i>^~A>VbZ~I+ z_AoH;_K1mzbwJb#azMiYZj1oK83rx}V+IBWh0m%Sf(#4{|M@|ZAa#t)3yplo#{}%-&O*BveG7xGmm`MR4 z#=y(K4NfJfhQP#~8C)4$8Jrp17~B~g8Qd6nz^Rj$0hhQ21AZvR05Tb5C&*TDaC$+t z84?~~F$Xq=GYp&z{tST)AU-2FbRhDe^s}0Qiv<+IpzwrYkUD%Al-6MKATvPvz+#L_ zEdS@P_lNUgiWnFe=KnVb^B9dn$^_hvQUy%PR2fauRT)cDj2Mf;Oazom!WdnR(m{$m zC#f)iFo=zeL1_+zk;Oo41xI0d5e7yEklp|P|F4(7ZU!xXI2jmB1VBm{KzRVnKqHtL zSV38XRRH7x1qKF1P=-MiU=YnvJq-*F3@ic-44^WgQGiopve8nP=&tlKs5H$e0RaXE z5N3GK@E&G~jEsy7j18lim^m0gm_g5BC;$sF$b%?IIQ?h% z57GlFqd<8OB*DP&0bWKpAKvxkvK+Yhgh(ODK?UFx*bF!iT*`x-3Kv0Ulz}ojQ~>0D zC=*0M^gu`u9|hNmIe@%}A_nC^bU;X`5Q3_cL+HcePKE;rr6?>n6-1STO&^M4B#xU7 OMBf`EG30PX76t$!G<=)@ literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_10.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_10.bin new file mode 100644 index 0000000000000000000000000000000000000000..efbfe1fa2cd32f483d52c397dd71f94808dd6c7b GIT binary patch literal 2104 zcmZQ(U|?WmU|>*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|)_jfq?EjY-)zyLB2gh4_eIS?%ZH6LcCH3I_!2!redVVFB$Y>>ZYm>C#& z7bHxy2L%elXC5|b78!PCRwf2jRb~b`Sq@$<9!_pGHC84TW>y9^8EJM^Rdz0JSsq?a z1`atjHBJ>a4lR&-8U8c;2l)pXvoJ7rFfcH6Ffj0fBKLryA#(=<19wMkEMHG-EKdgq z2X7Ap18G=TUE7<3pI&G{J^8W_OofQNyFL0(Crf&YsFlO`Id02v517tEx9 z5MU5t;ARlUFaaj+&fv=6&*018#^A=_!QjEb!N9}7!@$jeOI(8iKNMg9nGCWMWUDZP z0EW$=6a^J@U}HGLz{%jx5ZC|`VFZT`L>`oWRx@z1fI=7)elQGDhYy3&8cZH!21p-R zj8Vhk|NQy>a6U{C0|UeS|K?y`xFT~(I*U=DVpuVYP=cv@aTtq`KvAl*xuQdAilRX{ zNRj6x6$TInv5_$-&4Dno7>KRlC@e3+z{miy`~Uy{_44P9q2&)J1A_@9bU^7Iq!t}B zGq8fP2CD$b0}2cbil7XGD8L|^A({j@7?~LY7#tWuWk90fy0M^p+P}_ zi$OyGl3zgjVDSfvGY|#^11La1Y!C(o2Z+xOQp~`_#K^?Vz{0w?h@YRK04&5H527I9 z^q=8BNDrut0_8!F1Ovkdcp2e*`qz`o|3JlOgBHjhWI2dh1PL|+&IOn9Ag97bkQrs5 zj1Comm<#1VssR`Y7lbkD#2i50gK?2*h+Pm8Sscu+lSAmk;!cJGU{#oen+l@J!KM#W V2Smh82cmBdgbO7R;R+Q1Qvl@#eg6Oe literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_11.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_11.bin new file mode 100644 index 0000000000000000000000000000000000000000..551d62210a3a1ece75ae0b7e105ed94febf64d5b GIT binary patch literal 2104 zcmZQ(U|?WmU|>*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|)_jfq?C7nqpYgR$|1|irNS-8%cG{o%p@(N%*?{h%BHHy z#KkSk%fZ7br=q6Dp~A*K3*=sg{|x`3UV>9B42&HN3``vi47{MoJz!|a+`+)W-4Pqh z*ApAd)4{>P+rz-X+an?()&Wr~$bp``1sKjSa4{G&Ffb^5R^$UvyM zU?v5G7y~Z@H#n7`8Uhn{W^iS2WpHM2V{m71WN>5P0jEx023+DA4EUiK1IT2MogiDq z!RZCnW>AWPia4+_oMGT(@Mj2Y0EsYyLkA)cNw?vi!d-Ufb9PN|9`#wbu(!B!^yy4A^=jt07~~@ z1{%T4zzWJ5tO6hpC@?T6f-(%E0E1|T>S*hW9W_WMpJyU~Cx8#LU3}!VD_^|1-FR=P_s$SuzOB@n#SJ$2W%$14Dy? z02hOX03^SF^ugi}6lWj|3I05KQJfm8!95-td1)QLHOya(eV(-6BLB(gY|T_=aohsB)?2f(T@2{#o)m4i(m WrVfaRn+`*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|)_jfq?C7nqpYgR$|1|irNS-8%cG{o%p@(N%*?{h%BHHy z#KkSk%fZ7br=q6Dp~A*K3*=sg{|x`3UV>9B42&HN3``vi47{MoJz!|a+`+)W-4Pqh z*ApAd)4{>P+rz-X+an?()&Wr~$bp``1sKjSa4{G&Ffb^5R^$UvyM zU?v5G7y~Z@H#n7`8Uhn{W^iS2WpHM2V{m71WN>5P0jEx023+DA4EUiK1IT2MogiDq z!RZCnW>AWPia4+_oMGT(@Mj2Y0EsYyLkA)cNw?vi!d-Ufb9PN|9`#wbu(!B!^yy4A^=jt07~~@ z1{%T4zzWJ5tO6hpC@?T6f-(%E0E1|T>S*hW9W_WMpJyU~Cx8#LU3}!VD_^|1-FR=P_s$SuzOB@n#SJ$2W%$14Dy? z02hOX03^SF^ugi}6lWj|3I1+pAA|ddywTIY7r#Z3^*5D%7dH=7eQu} zfigN&0Aenb1E~gJBwP^2s1tJlc@M@#rXhAgNMvy^yG{*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|-DEvTJj)8%Jmw|!7ih+Sa7Agm#I2jliSU?OY=7y@{U|?VXu|aa;3=9mS3=9k) zS{kZOfq{X64GDwn07-$=gT!I>gZLn`_@HW8L5iRlq=yF@zYGiv4WO6?1&0I!1A`O; z1A`a?0|SW71#%-uF#`j`K?Vi}ka-{s5(3GAXb}bm29VhxdqMuRW?*0dVUQRIgWLh~ zD>7S#nSp_KLBd3PP@ph;=3!x#W@BPzmr+(#W#y3Nlbvlv7bt<4|E^p9OL+!+(bVP%ptL76wKR1_mY$1_oY`Qx6y#GIKC6aC5}Q z^6|vR@^El)@bWM)@bZX=h;cyF3UZ()Zvlog3|tJx3=9kkpH(>o85kJ;^Mfn^sbgej zC}7}WU<9!_To?pcSQyxZ*+C)5z_5Tphk?jcQb6{gQ!@$Yl&kzXaGBPkUFfuSWfWi-yepWMZv4BDt#D`(9LOcX0 zt-+*0W`Oj8#Tb=X{?A|U59h-aF)%R9|8EZFF&c%G3Ah`j3Ye6sGMc2TGM1(oF&2fH z2q>3?F}fP1gA{pAQegmL5E~hT(i{jQi-Fh*j>7UH42%pQyZ`_HUoU^%3|jthGBB73 zfRr$R@&K5DMldt5g0cpy0LTLh3=E2(41*}ZAexc&2rw{!%78`zPL0V%OI@P7(#w#g zX~7l{U|;}YhW8BbVdl%o$jHFhAQ~Lz%p43%pzNmd|38CEcpigBktKt`9B+_=85tNj zd>9xS6a=^!Gz7qD0Hh6^62W?*j51J0hYCQoR(0E~nS!Wea84j}KrxX3ibE(nP%4rbTMA@pH!C&K}-Donyn c1ySW-(}$@8BI2e4(f0*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%3)BGAFWz|g^J%6l7}$_7$PSPcNIgg#WiL3=AL)vJ-?s?g04}nJvT2z`(m8 zVWK@KP#8Y*u&_$AF)_2tD66Wna>#OWsc_5j@~EjXGfB%RGqbR>vZ<;vadFG?a`14< zsi>)OsIalm0=bvrKf`~Je~>W?17imR15*bB11~6Y4;UIUcQ7z;cf`i>^~A>VbZ~I+ z_AoH;_K1mzbwJb#azMiYZj1oK83rx}V+IBWh0m%Sf(#4{|M@|ZAa#t)3yplo#{}%-&O*BveG7xGmm`MR4 z#=y(K4NfJfhQP#~8C)4$8Jrp17~B~g8Qd6nz^Rj$0hhQ21AZvR05Tb5C&*TDaC$+t z84?~~F$Xq=GYp&z{tST)AU-2FbRhDe^s}0Qiv<+IpzwrYkUD%Al-6MKATvPvz+#L_ zEdS@P_lNUgiWnFe=KnVb^B9dn$^_hvQUy%PR2fauRT)cDj2Mf;Oazom!WdnR(m{$m zC#f)iFo=zeL1_+zk;Oo41xI0d5e7yEklp|P|F4(7ZU!xXI2jmB1VBm{KzRVnKqHtL zSV38XRRH7x1qKF1P=-MiU=YnvJq-*F3@ic-44^WgQGiopve8nP=&tlKs5H$e0RaXE z5N3GK@E&G~jEsy7j18lim^m0gm_g5BC;$sF$b%?IIQ?h% z57GlFqd<8OB*DP&0bWKpAKvxkvK+Yhgh(ODK?UFx*bF!iT*`x-3Kv0Ulz}ojQ~>0D zC=*0M^gu`u9|hNmIe@%}A_nC^bU;X`5Q3_cL+HcePKE;rr6?>n6-1STO&^M4B#xU7 OMBf`EG30PX76t$!G<=)@ literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_4.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_4.bin new file mode 100644 index 0000000000000000000000000000000000000000..c709ad13a2c124c8ec6194f446402523c5ddb947 GIT binary patch literal 2104 zcmZQ(U|?WmU|>*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|)_jfq?EjY-)zyLB2gh4_eIS?%ZH6LcCH3I_!2!redVURmOenn=>Ff%al zE=ZVY4+<29&pa%w(rir3>@v!#s;nHcoLnm0a=bihYRpX1GRn*>?5u36s!Uwmvb-ET zoN_8^Y8)zT?6W}bW%$qVALJio%)-Ff!N9=O!N9-^irfQ+hRhud4BQ>Dv3xzTu{<3d z9K1aY47@!eB4Qm7wSpYbaDW>lz;K3vi@}(IfkEN3Du*Bg1H*rQkR(VQBQrw*0}lfu zh|S@`Ai%=Hz$VPj&;a5uV9;S;H0NhvXkY-R10Dtz26-ig2L3M!Oqyt*0%Rc6TriUY zLX3fzfg7AkPz`~JJ2SX4xH331xG}ghI5M~~@PJb%F9R-d4F>#Bi~(da$WD;0;^6dx zYBMNBK}8(c7|t+oGWatDHh@GJ!Jz|@2c@6Y3|uUr5C(-G41?6+!=SVVlLwgr(gzk} zRATu*f4x7P4^zazz%c*6Ihe<26jCPOZj>ruQl`pilCH{FnqtIQ6lNlzToT6UYLpIA zB Q`rbgeP!bWYPysLn0PR|S82|tP literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_5.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_5.bin new file mode 100644 index 0000000000000000000000000000000000000000..694f938ae2ecc8d7dd64f5ddc1db2ed9e0858ad0 GIT binary patch literal 2104 zcmZQ(U|?WmU|>*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|)_jfq?EjY-)zyLB2gh4_eIS?%ZH6LcCH3I_!2!redVURmOenn=>Ff%al zE=ZVY4+<29&pa%w(rir3>@v!#s;nHcoLnm0a=bihYRpX1GRn*>?5u36s!Uwmvb-ET zoN_8^Y8)zT?6W}bW%$qVALJio%)-Ff!N9=O!N9-^irfQ+hRhud4BQ>Dv3xzTu{<3d z9K1aY47@!eB4Qm7wSpYbaDW>lz;K3vi@}(IfkEN3Du*Bg1H*rQkR(VQBQrw*0}lfu zh|S@`Ai%=Hz$VPj&;a5uV9;S;H0NhvXkY-R10Dtz26-ig2L3M!Oh!sW6yVgDY_!xRx+}d5Dory= zK!AY(gc;s5yoXsLBO@aNW5Z}BW)21rW>ES6pTQ+Ok3plzl0jgOH-i8;zBzmt7#b7= zxEM49Ao&HP4>|r|@dgSI5F3O+!2#m4gA_9`F)=bRGqA8OF5>5BC;$sF$b%?IIQ?h% z57GlFqd<8OB*DP&0bWKpAKvxkvK*-RY|sJ)H?kZ=ErJA_0q25Cd5}}#BFKy~P)3Ie zK+J`5Ak_ejgbTtLbz%-6@4>jpG{i0li7XCg*U2IDVR0wJ0kA4e!c7HH*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|)_jfq?fx_^ahlN#|jft6EMp;#rl|z=3ONCpGmq$&FnMqnknVE&1l}%NZ ziHlp7mxG5>PDM?PLxqif7RbE}{~7*6y#%LN7#KSk7??U37-AtjZzCz`*dIA7lYY9V0VC z0Rs;MBZ$r6!XUuH!oViX&d>njFJRDNU^M3khbSmKco(r=IK#ln;Li})01{yYhYmy@lzvt-aIt_w7!-am3{r;=gTfXj4>AL! z4=l#0#PWasdVe?{rig)oVg7$}FptqFq)fowC{@6uOqJ0jU6rvk#fY&e%tS!BB#hD3 zC>^B8bCL=J2!q(j7?kEf7+DO&R&W%S7hzyz0NMTj|NnaV>t@jMhm(Q9L;$3O0h9;8 z3^an7ffbZBSOq{HP+(wC1Z5aR0S3_w)ziS>z`!EVzyK-(8U;8tCL1kviS9}-gG$qk z5)fcu0AYsr4DVr<$jHdZz}PUFiJ5}|gc(%+|7UOs&tuRivSbjL>$MqOiYYS%nU57i;MXA84AEc4Duif5>Eda z{)6;@$|z8&29jW4_y8{>oDc7Ma#;>kd^Tu-f*V;5q834d&46>kr98-~a1mri87QMe z1t8`^Ign}qM#2SQj5;v~koRC*WEx@@ghUnxv+Lv#`mnf@;Q&|_CgG-nsB*CB!_)y0 Tanph5djsJ@Nkq6p1;7*l?P7iz literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_7.bin b/fusee_cpp/program/sdram_params/bin/sdram_params_mariko_7.bin new file mode 100644 index 0000000000000000000000000000000000000000..a020967139c626e6b869fde90ebb385826f67cdc GIT binary patch literal 2104 zcmZQ(U|?WmU|>*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|-DEvTJj)8%Jmw|!7ih+Sa7Agm#I2jliSU?OY=7y@{U|?VXu|aa;3=9mS3=9k) zS{kZOfq{X64GDwn07-$=gT!I>gZLn`_@HW8L5iRlq=yF@zYGiv4WO6?1&0I!1A`O; z1A`a?0|SW71#%-uF#`j`K?Vi}ka-{s5(3GAXb}bm29VhxdqMuRW?*0dVUQRI!`uO5 zgZwSS%)r3AAYr0CC{P$a^RTc=voSHV%P6a=vU13Ba;b33@$#stF*8ZaC^NILv$CnG zGI4Rs@^bKS%BiTSaj3Ad&jPuZ;XlKFsF&ar3j-qu0|OHW0|PI}sRs-VnK>93xH)2D z`FLVuc{n&YczGBYczHxb#5f>o1v$`@w*bQ#1}+9;1_lO&&#D}P3=9na`9T(d)G;zM z6fp2GFoM_|E(`)JEDUVI?4S^2U|7JQ!@y|H4-Qd~dL9NA26-ig2L3M!Oqyt*0;B+H zE|^IHA;!SVzzt3%sD{AAof%viTp64h+!)*$92wjgc)+QXmjRc!1_OR5#sD%IWGBd0 zad3J;wHXo~U@-?ahBFMD4E_v(U@jvALjxlNg99l1K>7UNST1UQL2DRnJS}6x+-I7iV7puFT%jc0J8i4|Nr&!*Ug~i4<`eIi2z6m z11Q~t8E6DE11l(NunK@YpuoVO2+A;s0t})VS&sk%1E>sW6yVgDY_!xRx+}d5S(+AX z0RaXE5N3GK@E&HqjEsy7j18i}Vb09Kzy!)}D*yj8xP<31XcSp82+Z*YIhc`wfy0M^ zp+P}_i$OyGoCZMJz$p==7luK>016Ng4H5$d2Z+xOF0YuF7@3$ESXdVq@$)kjfDK@f z2T_o4`p@tmqz9DoL8Tf*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|)_jfq?EjY-)zyLB2gh4_eIS?%ZH6LcCH3I_!2!redVVFB$Y>>ZYm>C#& z7bHxy2L%elXC4+-X*MQib{S<=RaOpJPA(O0IbI$$HD)Gh8D(Y`c2+i3RVFTOSzZnv zPB|4dH4YUv_E{kJGW=)w5AqK(W?^9LU|?YCU|`?{MeYGZL*@%92wjgc)=-xmjRc!1_OR5!2mKDWGBd0ad28e zwHcJ6pdt=z3}+ZP8T=Un8$cqA;Lw4{gVN7x1}+v*2!p~8hC%A^VNhCw$%D)Q=>v-~ zDzW^Zzuq6thbdxUV3_~k9L!@h3MmtCH%b*SDN|)MNmpeoO)+9D3NsNi?0Ky6hRpVQGh`-L-jN;I54mXG%$e5fJOmMjmbt!U81|v%b?OUqXYyP z7(kfeJ;QsLB{DKHGB7rbW@6@G0AU7||Nj|W!t)q3iYyrf=6Ev*fa9CPhk>C%L4b=v zLjaOrK>A?u2Z}Qg1_c8sKtOB|1_cL*&kj<|z{JGJ#LU3Ly10m+pP>LO#2^o%AmQ|% z;Xgq};UdV4GEhc` z3P8+-av;?JjD!oq7*UU|`SzF&KshU}}(XU|?VXVYq|;|CeXD5h%5QfgymEfuVx|gcXE9 z(hxR?5900Fv;L&bJO&0P<_8B^kbpfB0O@1lU|-DEvTJj)8%Jmw|!7ih+Sa7Agm#I2jliSU?OY=7y@{U|?VXu|aa;3=9mS3=9k) zS{kZOfq{X64GDwn07-$=gT!I>gZLn`_!t-%SfT1c>OdHz2IMAav^IcZ8WbE73=9lX z3=9ln3=9k)HW$c^Pzw$+Fff4317VO5NDf4cK+T7lY0bdE0Ky%92wjgc)=-xmjRc!1_OR5!2mKDWGBd0 zad28ewHXo~U@-?ahBFMD4E_v(U@jvALjxlNg99l1K>7UNST1UQL2DRnJS}6x+-I7iV7puFT%jc0J8i4|Nr&!*Ug~i4<`eIi2z6m z11Q~t8E6DE11l(NunK@YpuoVO2+A;s0t})VS&sk%1E>sW6yVgDY_!xRx+}d5S(+AX z0RaXE5N3GK@E&HqjEsy7j18i}Vb09Kzy!)}D*yj8xP<31XcSp82+Z*YIhc`wfy0M^ zp+P}_i$OyGoCZMJz~v-JFARf%0Tdu08YBh^4iKLmTpuwpF)}eTu&^#J;^${502{y{ z527I9^q=8BNDnCE!}1^l!v}a7;e2@4lgo0T;A4Ss1R%F)%RjGB7ZxGB7X*>o5p#o?u`X zU=ZfkU=ZfuVPKG92v=ZWU|?fm5N6h45M~iz5N8r#5aw`T5N4HOV2NN5W|ClFNnv1E z#;{e0fq_AUfq_Acfq{pCF@ljfkwN%i0E0Nk2?k+i4F+-65C&m&76xHf76xIK8w?yg z3=3qK85npMBuw0I9mVib<1-Hnt27%EGrNqkswyjoEGL%=w;V5zni?~cw2U${3p*>D zswxu~w=6FQ52u`pni_`+8~ZGwgN!;1|KBifU}0e7U|?Y4U|`@~&2ZsBVIeaI0|Pfl zQ4t@H0>dE=4qhGx23{T!5it%O1|30;bfyAPhBFLY490nkQ$DkD2r~TV|IdGhv4N49 zp#bCq9)<%PE(`)JEDUVI>p=rAyvGcYhTcraY%U|?a8S5j!;|DwR8!N?#i z$jBhDZ$E<&KNEvI10#b@y$FL4g8+kw1OwY=CIbdN24e;T24e;2Ho+<{`0LCQ_Yz$`@I2rsI0wow2G#Hf~7;TtBRx@z12u3h6 zvoP?#Vc->K;$aYHPGDwQ$XKn!^8f#Oe?|>ZN;2yH&)&lDLBJ@aOu*eJRluZ7mC+ zUuSb@V%WsN!OXxA!^j{YAP~vSJ%vTsyogaqpqJ5*L6C7L$fv?wD_O(^%9&Y(7#LVs z&Nm8hYD_j->Jr_RUZ%sy8vOtL|Mv$N8N%<}xpRk$k%3W#QIVOQh2bMJgUbK^3@+h$ z3>rn23<7h!83ZC2H*xqdFf=F#a4~2IJYeD}VPxT85N8!&5NCPA{DhH#iHVVknSq7% za3Mec3|3M3&kPI)m_-=xGKe&6V-Wptg*n6d@UAD9H3Pp6 z1CxIl4+Bd86C^9l2SOQG?A=rtEEu@>85vlW S+;l7$^xrVpFfs)&fB*oWa;wY$ literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_erista_1.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_erista_1.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..6e017187907c536c319cd38b513df7a8f3e9096c GIT binary patch literal 940 zcmey*z|6qFz{tSBpv1typu@<($iVl9HDeEB0T%-U1Irf10!E{dvJ=l33RDA4Ss1R%F)%RjGB7ZxGB7X*>o5p#o?u`X zU=ZeIVF>16U|`^uVF*`XU|?WlVGw54VGw2!U=U{#U=ZeTU=U`NVPJ`15N48KV2)=L zXy9VlD#XCRAi}`FAjZJJ!@wB9$ehR^d@z7PoZ|$8FtY}OIBN)lusREaFe?j#Fv|@F z4jzUDGRzDNybBU0?zfI&_^9!jhlN#|jft6EMp;#rl|z=3ONCpGmq$&FnMqnknVE&1 zl}%NZiHlp7mxG5>PDM?PLxqifme4^)9ftpJ7&ovmFmf<3FmW(2@UCXKaG_Rk4J&w5C;b@4+8@)kBEpEhYo{|AV)e=fhfZn1}+BUJjN-XSvdq5{`3FmKf~C- z$jndx@&OOS0S*@i0TvbpHeq_6eo1q?b2jOIa%j5!R48CV$Pl@uEIzbG(iFfs@W zGBOD4+s`1x&%_|lz{sFeFTx_VCrQwWDsQB3G%8i*Gd*~fpTV6AqEB( zmh+7QoEnpjmbyfDrI+b2vIhTu|Ns2~MuzY^ckbNbVq{=cVN_&hXJPor%%JlBKZ8qn z9)m`aC4;~mZw7$~#!VbP3=9nl0$dCl0uPvYN*Gx<7{plx7&v|~KVf8GVq#=sW?*4G zT*%KqgH=TS1_R>(W)a4_3?dEN7(_o@Va{+qyz9wjxl0WCAO62#V3p+HV-PV|&A_k2 zz~o=X!@v^2#K>yGz;DICVo@jNFrSs*fA4Ss1R%F)%RjGB7ZxGB7X*>o5p#o?u`X zU=ZfkU=ZfuVPKG92v=ZWU|?fm5N6h45M~iz5N8r#5aw`T5N4HOV2NN5W|ClFNnv1E z#;{e0fq_AUfq_Acfq{pCF@ljfkwN%i0E0Nk2?k+i4F+-65C&m&76xHf76xIK8w?yg z3=3qK85npMBuw0I9mVib<1-Hnt27%EGrNqkswyjoEGL%=w;V5zni?~cw2U${3p*>D zswxu~w=6FQ52u`pni_`+8~ZGwgN!;1|KBifU}0e7U|?Y4U|`@~&2ZsBVIeaI0|Pfl zQ4t@H0>dE=4qhGx23{T!5it%O1|30;bfyAPhBFLY490nkQ$DkD2r~TV|IdGhv4N49 zp#bCq9)<%PE(`)JEDUVI>p=rAyvGcYhTcraY%U|?a8S5j!;|DwR8!N?#i z$jBhDZ$E<&KNEvI10#b@y$FL4g8+kw1OwY=CIbdN24e;T24e;2Ho+<{`0LCQ_Yz$`@I2rsI0wow2G#Hf~7;TtBRx@z12u3h6 zvoP?#Vc->K;$aYHPGDwQ$XKn!^8f#Oe?|>ZN;2yH&)&lDLBJ@aOu*eJRluZ7mC+ zUuSb@V%WsN!OXxA!^j{YAP~vSJ%vTsyogaqpqJ5*L6C7L$fv?wD_O(^%9&Y(7#LVs z&Nm8hYD_j->Jr_RUZ%sy8vOtL|Mv$N8N%<}xpRk$k%3W#QIVOQh2bMJgUbK^3@+h$ z3>rn23<7h!83ZC2H*xqdFf=F#a4~2IJYeD}VPxT85N8!&5NCPA{DhH#iHVVknSq7% za3Mec3|3M3&kPI)m_-=xGKe&6V-Wptg*n6d@UAD9H3Pp6 z1CxIl4+Bd86C^9l2SOQG?A=rtEEu@>85vlW S+;l7$^xrVpFfs)&fB*oWa;wY$ literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_erista_3.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_erista_3.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..2147f1de13895468c4da6e96cbaf127e8f5c365f GIT binary patch literal 944 zcmey*z|6qFz{tSBpv1typu@<($iVl9HDeEB0T%-U1Irf10!E{dvJ=l33RDA4Ss1R%F)%RjGB7ZxGB7X*>o5p#o?u`X zU=ZfkU=ZfuVPKG92v=ZWU|?fm5N6h45M~iz5N8r#5aw`T5N4HOV2NN5W|ClFNnv1E z#;{e0fq_AUfq_Acfq{pCF@ljfkwN%i0E0Nk39x2y)({3^bruF;Ru%?fmKzMhtOg*3 z3uKrX71R@wWariJWG$;sgF=z-pVB#rZWZ_^CXBA)&XZgYWgpq-XiIIt!fra&O zAwT~NR#ExS3=9XDMHufgh%{_t5dCn4Im7wzt|yn}E-~nT`2U81Rg!~`LBwD+1HTRf zlYbcx14{rCBdZAmzZC-BcJX7`XTu8CaFv RbSxP3-!RxPG6gVz005#DtK$Fw literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_erista_4.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_erista_4.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..d19f02d463024c79868582c5412cd207c7182bdb GIT binary patch literal 940 zcmey*z|6qFz{tSBpv1typu@<($iVl9HDeEB0T%-U1Irf10!E{dvJ=l33RDA4Ss1R%F)%RjGB7ZxGB7X*>o5p#o?u`X zU=ZfkU=ZfuVPKG92v=ZWU|?fm5N6h45M~iz5N8r#5aw`T5N4HOV2NN5W|ClFNnv1E z#;{e0fq_AUfq_Acfq{pCF@ljfkwN%i0E0Nk2?k+i4F+-65C&m&76xHf76xIK8w?yg z3=3qK85npMBuw0I9mVib<1-Hnt27%EGrNqkswyjoEGL%=w;V5zni?~cw2U${3p*>D zswxu~w=6FQ52u`pni_`+8~ZGwgN!;1|KBifU}0e7U|?Y4U|`@~&2ZsBVIeaI0|Pfl zQ4t@H0>dE=4qhGx23{T!5it%O1|30;bfyAPhBFLY490nkQ$DkD2r~TV|IdGhv4N49 zp#bCq9)<%PE(`)JEDUVI>p=rAyvGcYhTcraY%U|?a8S5j!;|DwR8!N?#i z$jBhDZ$E<&KNEvI10#b@y$FL4g8+kw1OwY=CIbdN24e;T24e;2Ho+<{`0LCQ_Yz$`@I2rsI0wow2G#Hf~7;TtBRx@z12u3h6 zvoP?#Vc->K;$aYHPGDwQ$XKn!^8f#Oe?|>ZN;2yH&)&lDLBJ@aOu*eJRluZ7mC+ zUuSb@V%WsN!OXxA!^j{YAP~vSJ%vTsyogaqpqJ5*L6C7L$fv?wD_O(^%9&Y(7#LVs z&Nm8hYD_j->Jr_RUZ%sy8vOtL|Mv$N8N%<}xpRk$k%3W#QIVO4h2bMJgUbK^3@+h$ z3>rn23<7h!86+YYH*xqdFf=F#a4~2IJYeD}VPxT85N8!&5NCPA{DhH#iHVVknSq7% za3Mec3|3M3&kPI)m_-=xGKe&6V-Wptg*n6d@UAD9H3Pp6 z1CxIl4+Bd86C^9l2SOQG?A=rtEEu@>85vlW S+;l7$^xrVpFfs)&fB*of0IS&m literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_erista_5.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_erista_5.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..b3ba64c39447dbb431e61ac891a8806b439ff228 GIT binary patch literal 944 zcmey*z|6qFz{tSBpv1typu@<($iVl9HDeEB0T%-U1Irf10!E{dvJ=l33RDA4Ss1R%F)%RjGB7ZxGB7X*>o5p#o?u`X zU=ZeIVF>16U|`^uVF*`XU|?WlVGw54VGw2!U=U{#U=ZeTU=U`NVPJ`15N48KV2)=L zXy9VlD#XCRAi}`FAjZJJ!@wB9$ehR^d@z7PoZ|#ow>WDEgRnXagD@)#gD}et24PkM zkirEr%nS^?3lb*ow~k`?sPUPHg;ko3iJ4tSSyh#lLza_Eg@64ug&$M>d%${@rb#2_ZY!1k5Fh(Vvhh{2G-gu#qKpTU@iiC=<&RbGRM zfk#+0ih(JP!CH(#w1R;(fN_Zf8^aj}P6mI5KnVs04Mt@LMjob+)eKxLf)R|&EDZc_ z77h^VHU=Uc#5NN=_Ajr5Aa~+_}TW$iS$=sL0ID!tjxqLFNB{2AA+W z28|+127x)=3<431n>c(J7#b7=xEM499x(BgFtTtkh_ebXaQt9?!pOkH#K^?Vz`}aC zke`1BtBCv!2F3%-B8+z#L>jg+h<>=joZ)A4Ss1R%F)%RjGB7Y$F)%R5>M#g!o?u`X zU=ZfkU=ZfuVPKG92v=ZWU|?fm5N6h45M~iz5N8r#5aw`T5N4HOV2NN5W|ClFNnv1E z#;{e0fq_AUfq_Acfq{pCF@ljfkwN%i0E0Nk39x2y)({3^YZeA!Ru%?fmKzMhtOg*3 z6J(ef7yBL;m2BL+hT69zK|eFkG5CVmM9R(TC3 z1|DJ2CK;$aYHPGDwQ$XKn!^8f#Oe?|>ZQZnlP&)&lDLBJ@aOu*eJRluZ7mC+UuSb@ zV%WsN!OXxA!^j{YAP~vSJ%vTkT#VU(fkA+kA<%$Jr_RUZ%sy8vOtL|Mv$N8N%<}xpRk$k%3W#QIVOQh2bMJgUbK^3@+h$ z3>rn23<7h!83ZC2H*xqdFf=F#a4~2IJYeD}VPxT85N8ztCq6-T0fr+?OpHv-3@ogR zi}?9xu!_omW?(qLEW&t~L8M_DgXo7V%o)yycRjf*cZos&!~Zu7tdbmj3?c@r8TfS= znEcCl7+3?j7z8_57}OMm zco>*i7``(wFznfLbhFJo1_mbP2M1Xg8N}@w85k@WF0gPgFa!hyFf3$bU@)*`ND^QW zV-T3oz`$I>Ak56da9xgpfq|ESfx(J_fkAc(LpUb`0|ScygD|%SgD?jV1A`1hus8z) zgD3}su(Sq4xB>$M0~-s2FtY@MFpB_#IFkSagAYS69|Hpes|*9H3L|q41M_u8fd(!H z27boL5)2FsQVa|XVmu52TpkR}i44LA0~mxkN*IK>I2eRQ5*S!Q7=*1^7=&3_7=&5g zFmUiNOpsw_VBlSlFwtI=@uLRAXC4+-X*MQib{S<=RaOpJPA(O0IbI$$HD)Gh8D(Y` zc2+i3RVFTOSzZnvPB|4dH4YUv_F4NGZT>U-XJFdE!ob+Uz`)eOz`%Qz@e|(xLqp~c z1_thq*jT=v*jSzp4i4TP1_s_9F)^_Y9R?jij{8gn0t{yuxEPG{7#%*VatLNJDDyKI zFg7qUGZZlJFfj5kEaGrs5MW_pU=wDSVJKX{pu@mu&L70cAi#K=hk=DbUP+;W|BC{X zCL@DT#VjUy{x3|1^-2tU3<3<&5)5pgnVcCs8C)5h7~B~=8QdA%7{s12@JleT%4;w& z@CYhJF)+k1FvKy~OEV}g@b|7fhlA)0~d>63?nlO z1OF3dK6V}kmK7|FA`IP(N-Y29ulHwE0VN}&`TxylFnka&3MmtCH%b*SDN|)MNmpeo zO)+9D3NsNSYCvIk)ej6_5c6>_43!v z9G)?&m0Tu=qhW8BbMHqZ#WMpJ!Fe);0urPdNW>ES6pTQ+Ok3plzl0jgO zH-o?u#`hdP3=9nl0$dCl0t^j|2N*$~7H8#Q0;M@2_9TW&OpHv-3@ogRi}?8&3Y-|k zGO*aYsW4bDaPc!TuqwIfSTIPw N5o6%BVGLjZ0RRtCrKbP@ literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_1.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_1.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..9bf1a22c06f41662197efd0e863943192a1f51f8 GIT binary patch literal 938 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6grVvGe|d%*fl>?j7z8_57}OMm zco>*i7``(wFznfLbhFJo1_mbP2M1Xg8N}@w85k@WF0gPgFa!hyFf3$bU@)*`ND^QW zV-T3oz`$I>Ak56da9xgpfq|ESfx(J_fkAc(LpUb`0|ScygD|%SgD?jV1A`1hus8z) zgD3}su(Sq4xB>$M0~-s2FtY@MFpB_#IFkSagAYS69|Hpes|*9H3L|q41M_u8fd(!H z27boL5)2FsQVa|XVmu52TpkR}i44LA0~mxkN*IK>I2eRQ5*S!Q7=*1^7=&3_7=&5g zFmUiNOpsw_VBlSlFwtI=@uLRAXC4+-X*MQib{S<=RaOpJPA(O0IbI$$HD)Gh8D(Y` zc2+i3RVFTOSzZnvPB|4dH4YUv_F4NGZT>U-XJFdE!ob+Uz`)eOz`%Qz@e|(xLqp~c z1_thq*jT=v*jSzp4i4TP1_s_9F)^_Y9R?jij{8gn0t{yuxEPG{7#%*VatLNJDDyKI zFg7qUGZZlJFfj5kEaGrs5MW_pU=wDSVJKX{pu@mu&L70cAi#K=hk=DbUP+;W|BC{X zCL@DT#VjUy{x3|1^VKDTZq{70$!^j{k#KOQcfuTXcQCMDtfsvtxq4od&|Ml|M z%^aRFtC$FIG4P*ZU@~N8VAW<;5@5Q^EUYNXBI3}^#Lmc2*udbxz#`DV!g9Y+fKy|# z(NdS_uJkenMg|`x0Ra{U7l!u???o7VWn^SzW-ux;bFeUcWM)wL|DVAnJdZ)6$dW-| zjyHqA62|u&J`4;E3IbdV8UhRrj0YG&o)%~2VFD#OA@(GOOH7PR%nU57i;MXA848>j z#N;&?o&PiZXI#Rf!q6~{LG*(PONR5|T~98{akJ`w`2U50Rg!~`f$KwP6fk0096BMWuWI literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_10.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_10.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..f5df3c449f6d565c8249dd5946fe764d88c4a69b GIT binary patch literal 955 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6gy93@|Nrs~Hv**=FfatLGB9*7 zurMen2uU%Bcd#&gXJBC1vuFKDn|TZjOw11svM@4;+cPpSSTI~*;b3402nb+U$jHE8 zV9Agqz#zsTFrk5gxr9NOnT6rH90LObF9QRE6$1l<>=cG@P6h@B76ArfZVd)u4ju*u z8HQkS1_lOE4hCUq4Tf+91_lN;76xHv2?k*n0S0j<0R{#ihG0Gh1_o9c238eD<{Sp* z>x=>oTnr5SjFTl87#O4&7#PHO7zDUH7?=|ogbxNV2y>J$2y<~T2#X{zu!JxOTeC0- zv$8O-bTF{+FfjaJm>|QEHdoOtV|55s>}>>vK+izJe=HW zYOG8w%&ZJ-GScj-s_b0cvOK(;3>U-XJFdE!ob+Uz`)eOz`%Qz z@e|(xLqp~c1_thq*jT=v*jSzp4i4TP1_s_95fQNt9R?jij{8gn0t{yuxEPG{7#%*V zatLNJDDyKIFg7qUGZZlJFfj5k9N=(a5MW_pU=wC%Xb@m1T)?2iz-Z1N#K<7Pc$!xfoR z(piiG6~l^Igc3~Mi^Eui1d39f%@rL|QxpxtRTvCCC#kS7@Gvq63$ZZpOkikGa1@po zVPIsaVQBsT|9`#wd1HrX%&H~=ADH>iFfbZ2Gq7qiD+w^&WfoQxWnn(Z!V%3lL4bpi znIV9|fsuvfexm?~rqSf3Azs;K?F@_zK1u=tEDSCT?-|~UF!;*I$jHoKRAlC0Vfe_* zpz{AegG+cGgGP}hgTNeb27x7vn>c(J7#b7=xEM494463%Fp4vtU=(K+04F{n_9TW& zOpHv-3@ogRi}?8&3Y-|kFMr{EQ5&N^Uw943cxi7=cG@P6h@B76ArfZVd)u4ju*u z8HQkS1_lOE4hCUq4Tf+91_lN;76xHv2?k*n0S0j<0R{#i24Ox4265IL1_l!bVV(z! zASX9)F);8mPL^O`V31;9U=ZVB5a9A)U`}KZJ{Z6t%;CTw%*DYVEE2;Y%yfW3*qVhw zn3aWrrGtTmhk@Y-!vq;-1_s^*2@~x_89!<;eCAXS~mgD77 zQ)6b5mQiMAVP|DiRb}GhmgVK(;gnNRQ{zx!W1qF3(dIwHe+H%vEDVet3=B*i3=F(i z89(tIFf?TDU|`_xh>hjziH+sy;NalxVPN3x5fKsV&|%OKIrGeZFb4+A3)!vPK#1_2fp1~y@Kh6VwK!UYUE42W z803`{8u-5`FljO}2vy8tlIQ=zWLPi8z{|kRATGhc_L0e%!Ii<4!I{C0!JWa8!Ht1u z7o$9{1OuDA1``91pjZ?GLkt5$9D}_$gV+=X2G$V9%?@k~XBapc{22lpBp6sY7#Q;y zLRK?yu?WU6GP5x7KVjzMKEou!D8kUqsKoMr{(65#6;OgQn*ZN?2EzvdqmVKIccWAR zlQLCClXO+a(i9`cqA(Ky<&rQ)SEF_RN-twzWbjcE5MW_&VR+B*UWCC{Mn*Ai%|-Az;AFaez^r@dTqds{lCN39%GO*aYsW4bD ZaPc!TuqwIfSTIPw5o6%BVGLjZ0RXc`r?LP5 literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_12.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_12.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..a0ac152f2ad029a923ac0037e99d61bdc44d2067 GIT binary patch literal 950 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6gy93@|Nrs~Hv**=FfatLGB9*7 zurMen2uU%Bcd#&gXJBC1vuFKDn|TZjOw11svM@4;+cPpSSTI~*;b3402nb+U$jHE8 zV9Agqz#zsTFrk5gxr9NOnT6rH90LObF9QRE6$1l<>=cG@P6h@B76ArfZVd)u4ju*u z8HQkS1_lOE4hCUq4Tf+91_lN;76xHv2?k*n0S0j<0R{#i24Ox4265IL1_l!bVV(z! zASX9)F);8mPL^O`V31;9U=ZVB5a9A)U`}KZJ{Z6t%;CTw%*DYVEE2;Y%yfW3*qVhw zn3aWrrGtTmhk@Y-!vq;-1_s^*2@~x_89!<;eCAXS~mgD77 zQ)6b5mQiMAVP|DiRb}GhmgVK(;gnNRQ{zx!W1qF3(dIwHe+H%vEDVet3=B*i3=F(i z89(tIFf?TDU|`_xh>hjziH+sy;NalxVPN3x5fKsV&|%OKIrGeZFb4+A3)!vPK#1_2fp1~y@Kh6VwK!UYUE42W z803`{8u-5`FljO}2vy8tlIQ=zWLPi8z{|kRATGhc_L0e%!Ii<4!I{C0!JWa8!Ht1u z7o$9{1OuDA1``91pjZ?GLkt5$9D}_$gV+=X2G$V9%?@k~XBapc{22lpBp6sY7#Q;y zLRK?yu?WU6GP5x7KVjzMKEou!D8kUqsKoMr{(65#6;OgQn*ZN?2EzvdqmVKIccWAR zlQLCClXO+a(i9`cqA(Ky<&rQ)SEF_RN-twzWbjcE5MW_&VR+B*UWCC{Mn*Ai%|-Az;AFaez^r@dTqds{lCN39%ckwF+4wCO#O>uASXMA_=rbG$Wni&)Q(>@R Z;NoXwU{!L{v0#vVBgVjM!x+E-0stLtsM-Jk literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_2.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_2.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..852d46d6c1cee88a2858f414e853a1e5164eae26 GIT binary patch literal 947 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6gy93@|Nrs~Hv**=FfatLGB9*7 zurMen2uU%Bcd#&gXJBC1vuFKDn|TZjOw11svM@4;+cPpSSTI~*;b3402nb+U$jHE8 zV9Aguz#zsTFu{OPn5l$8n3;v)x*P)o11|#ugB1e#U5Iz{dAk5*wAk4+VAS@EYAk1`tLD-sw zL70_=L73$Y0|yVo1Q})q2Hph;6YWJAKWZ?1=3!x#W@BPzmr+(#W#y3Nlbvlv7bt<4|E^pS7RS=0C%K2Br-x42&EM3``sh47{ru zKJgteG-T#rVBqG6jpgHsjpgCs;Naz9VBqBu5fS6iVbBrexX)A|z;K3vi@`XL(c!Zy zhhQdyGCzX>V*?{ILjeO110xT^A`TY@0TvbpHeq%dhQb95It+~F{6UO@3@MD8Ss3J% z6dL%yC@`5aG6-ujG6+@7Vv^_o!em%4#=y(K%^)tp!1j^JnZcF8mBE?8jlrG4k-?3D zXBVS9uLJ{|yZ{pekDyo-149f0LmY#>ID^;}1_ss;#w8AH3}+ZP8T=UnB^Z($7#SEG z7#)~GRx@z12*xlnvoP>KVdmpL!^B#_+|8)O@_+t%e?}Ehk}{hA-@Jk0gMd*;nSi@d zs(?wEDx*odDr0Gi5o1x9iGXrR7^ACEx(b7#=Oh&t1|CKRVIdX_RN-twzWbjcE5MW_&VR+B*UWCC%Mn*>F1EV1mGY1R9M`i|<|Nj|W!t)q3 ziYyrf=6EwGC@^f~@L^zRP!Ql^&=6o@;yu8~!oeWUDgaJ$g6skekC>PknV1<^SQi)Z z^D`7UF^I`)FgpKd_|Le6g{6hrl!4)c3QL0X;ayKI%ki^XH)t`*Fz|d~kmTTFV0^|Z z&#c41Dp2;4nSTxw1FH!GzZCKmY*D_n*fA literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_3.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_3.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..9bf1a22c06f41662197efd0e863943192a1f51f8 GIT binary patch literal 938 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6grVvGe|d%*fl>?j7z8_57}OMm zco>*i7``(wFznfLbhFJo1_mbP2M1Xg8N}@w85k@WF0gPgFa!hyFf3$bU@)*`ND^QW zV-T3oz`$I>Ak56da9xgpfq|ESfx(J_fkAc(LpUb`0|ScygD|%SgD?jV1A`1hus8z) zgD3}su(Sq4xB>$M0~-s2FtY@MFpB_#IFkSagAYS69|Hpes|*9H3L|q41M_u8fd(!H z27boL5)2FsQVa|XVmu52TpkR}i44LA0~mxkN*IK>I2eRQ5*S!Q7=*1^7=&3_7=&5g zFmUiNOpsw_VBlSlFwtI=@uLRAXC4+-X*MQib{S<=RaOpJPA(O0IbI$$HD)Gh8D(Y` zc2+i3RVFTOSzZnvPB|4dH4YUv_F4NGZT>U-XJFdE!ob+Uz`)eOz`%Qz@e|(xLqp~c z1_thq*jT=v*jSzp4i4TP1_s_9F)^_Y9R?jij{8gn0t{yuxEPG{7#%*VatLNJDDyKI zFg7qUGZZlJFfj5kEaGrs5MW_pU=wDSVJKX{pu@mu&L70cAi#K=hk=DbUP+;W|BC{X zCL@DT#VjUy{x3|1^VKDTZq{70$!^j{k#KOQcfuTXcQCMDtfsvtxq4od&|Ml|M z%^aRFtC$FIG4P*ZU@~N8VAW<;5@5Q^EUYNXBI3}^#Lmc2*udbxz#`DV!g9Y+fKy|# z(NdS_uJkenMg|`x0Ra{U7l!u???o7VWn^SzW-ux;bFeUcWM)wL|DVAnJdZ)6$dW-| zjyHqA62|u&J`4;E3IbdV8UhRrj0YG&o)%~2VFD#OA@(GOOH7PR%nU57i;MXA848>j z#N;&?o&PiZXI#Rf!q6~{LG*(PONR5|T~98{akJ`w`2U50Rg!~`f$KwP6fk0096BMWuWI literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_4.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_4.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..9262ace6fc683eb862e9046ff9be29f235a1f577 GIT binary patch literal 948 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6gy93@|Nrs~Hv**=FfatLGB9*7 zurMen2uU%Bcd#&gXJBC1vuFKDn|TZjOw11svM@4;+cPpSSTI~*;b3402nb+U$jHE8 zV9Agqz#zsTFrk5gxr9NOnT6rH90LObF9QRE6$1l<>=cG@P6h@B76ArfZVd)u4ju*u z8HQkS1_lOE4hCUq4Tf+91_lN;76xHv2?k*n0S0j<0R{#ihG0Gh1_o9c238eD<{Sp* z>x=>oTnr5SjFTl87#O4&7#PHO7zDUH7?=|ogbxNV2y>J$2y<~T2#X{zu!JxOTeC0- zv$8Ms}96X$IDr#yRDs1et_A}c2XZX*+w1I_zv4equse^%m_bTHj zz5|Aa%pD92+#Rv8d_A$TJRKYyygdvIygec!VjVgRI)WVcnF<6L&M80RrMd{*TU z%w$mJXE0!FU}R<}VBle3L4ff#4+9H> zyplo#{}%-&O-2TxidjtZ{9l+1>%|y&8Mqn5B^cN~GC4E2GPp80Gq^FhGdME1G4SkS zl;@RTV3XHiV&D-Ji(+7iVPJ@3uoq_#o5H}r8p62QfsNq|11Ez&Ltujh0}BTOV;)1u zY6dPA!5Btn76$$&%zW%T3@j^H7)2Pm8I@T6&tLD)r~*n)M)Uuh&tUiaXp*kVSejzQSQKU=pj;Bh=xUU%!eHn*Nri=hhmk>8h=qY?0z-p>qp-XP10zEX zL+k(l|Lf(in>jpVRxuIaV&Ff+z+}kGz^cuxB*1i+Sy)k&MZ}?-iJg(5uz|sWfkmK! zh2?&u0H?-eqopp9xS6a=^!Gz1Koc@8kLa4?9o@-Tr?oe+Bx!zCt0CT0c} z*2P8q{0s$73}W&cjL!cV{xdFNQDJD9#vuAZg(boH@UAD9<+xd`8?=~Y7Tfz^b8--?07qE5_#nT_9qLEK)>fn@~)hd#rBPzDxzHx&j8 a1}=U^2393E9Sa7@H)0IDHjDubAOHaJ%cZ#h literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_5.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_5.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..5185b6350dfd39927a850edb9630625d67e8e1cc GIT binary patch literal 952 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6gy93@|Nrs~Hv**=FfatLGB9*7 zurMen2uU%Bcd#&gXJBC1vuFKDn|TZjOw11svM@4;+cPpSSTI~*;b3402nb+U$jHE8 zV9Agqz#zsTFrk5gxr9NOnT6rH90LObF9QRE6$1l<>=cG@P6h@B76ArfZVd)u4ju*u z8HQkS1_lOE4hCUq4Tf+91_lN;76xHv2?k*n0S0j<0R{#ihG0Gh1_o9c238eD<{Sp* z>x=>oTnr5SjFTl87#O4&7#PHO7zDUH7?=|ogbxNV2y>J$2y<~T2#X{zu!JxOTeC0- zv$8Ms}96X$IDr#yRDs1et_A}c2XZX*+w1I_zv4equse^%m_bTHj zz5|Aa%pD92+#Rv8d_A$TJRKYyygdvIygec!VjVgRI)WVcnF<6L&M80RrMd{*TU z%w$mJXE0!FU}R<}VBle3L4ffx4+9H> zyplo#{}%-&BSr>cO-2TxidjtZ{9l+1>m?ZY8Mqn5B^cN~GI=n#Ft{?fFt{_gGdME1 zG4S>=%JWJvu*p|2G4KdVL@_YLFfhb1*o!krOkrSP4Po5uz{YTffs?_XA+SM$frW#C z(Sa#sH3JumU<@NO3j_ZXWVKDTZq{70$!^j{k#KOQcfuTXcQCMDt zfsvtxq4od&|Ml|M%^aRFtC$FIG4P*ZU@~N8VAW<;5@5Q^EUYNXBI3}^#Lmc2*udbx zz#`DV!g9Y+fKy|#(NdS_uJkenMg|`x0Ra{U7l!u???o7VWn^SzW-ux;bFeUcWM)wL z|DVAnJdZ)6$dW-|jyHqA62?s&J`4;E3IbdV8UhB)JO>zAI2goPd6+;cPl!E<;Sv)g z6Egz~>*6AQeue@k1~GXJM(6(w{~4FCs4z54V-WqI!jj;8c-NE5a@?%e4O&bx3_M>L zBsusP7@x7qGwU$03Y5KM=AXmFz-q$4Z^gi3Q77iW%*JoQAZ{<`z_NmYL!aS5C=cG@P6h@B76ArfZVd)u4ju*u z8HQkS1_lOE4hCUq4Tf+91_lN;76xHv2?k*n0S0j<0R{#i24Ox4265IL1_l!bVV(z! zASX9)F);8mPL^O`V31;9U=ZVB5a9A)U`}KZJ{Z6t%;CTw%*DYVEE2;Y%yfW3*qVhw zn3aV=nB@%v2M@yp8D<6s-USI0?L`?sYA}4}VPTbKV`65PQC3xD<&fp%QsI{429zQ&CgnP+?=AwV%=EKf`|prVT6%j2#RNOdSjiyjK}N z@f|QUWbR;K;O>Zx}zy;O${x;O!9+5$n)l&=KUg&r~45aE5`4!8ni6;j=1- zU?zhyKZ5~d10yp-0Rs;MBM-v?4i^Ri78V9JVRnWF0fxc_3_1*q=KMj7f=nrlyIC0I zl@uEIzbG(iGBOBN%wm$~|H5QgFUG*jz|9~o!NB&B$(g~G!Ii<8!HvP4!I8m@foB(^ zJg)=;o4f`S1CO9s6azyH14A5xy*Pu|6b1&?5XQ|8Yz$`@I2rsI0vjY4SU4CM^B6)_ zGjOp8#xOFoFz`QN=HouYB*G}d(9NjC@_+t%e?}Ehax$9#-+Ttc2LYpyG68p^Q~{GR zRYsF^RmRd3BgUdI69MItFh*CSbQK0e&q*pQ3_Oes!a^(zJQEli6dZ-+MHm;4J<78 z8wEHuCL1kviS9}-V_;R-41m<`%2rOaT#Norh(4Zi|#h@Wzz|3=ik%fanoRxokAd+S zt30y~1FJyUOJ@E#Obo0h4E$CMEEaWQ4$N%)77XI{at#U5Iz{dAk5*wAk4+VAS@EYAk1`tLD-sw zL70_=fu)0ig@=LR2g3vzW(Ee{1ql=FMHxS8Fns1=VU=cMVrG|7R#j!?kmcl3;g;j& zQBz}Pl9o|sW?^S#Q&nZ+;+Ey*;Ng^0QB&hkVPl`QpV8(&!+!>*4J-_d91ILh91IM+ z=ly9`6&0tOuhMsxlkMnQ%Y#@#Fo z@=6K~{9hE9G#MF$DrPas^M7G7tQTY8W#DEImtbJ~$mGo6%HYc2%;3i0&fv)4#=x_S zQJzZ7@1iZ_@6NIai3vgtzhnERATu*f4x7W3MfGt&Hr!S!0rn2 z3<7h!859&4HgfndFf=F#a4~2IurP5RU=(LO!N?N8BFt#Q!XUsP$S%O}h>3}jiJ5_g zb#W0tKSO~NgP6Pqqw{};|BMAJEG^8Y3=AJsSQ4BM?|O1sj-S=KL5oR-f#(Z@BnKY@ z<1ckwF+4wCO#O>uASXMA_=rbG$Wni&)Q(>@R Z;NoXwU{!L{v0#vVBgVjM!x+E-0syx@pydDn literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_8.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_8.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..03ed21baf15d974dcad20d07588e4c91083f25f8 GIT binary patch literal 951 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6gy93@|Nrs~Hv**=FfatLGB9*7 zurMen2uU%Bcd#&gXJBC1vuFKDn|TZjOw11svM@4;+cPpSSTI~*;b3402nb+U$jHE8 zV9Agqz#zsTFrk5gxr9NOnT6rH90LObF9QRE6$1l<>=cG@P6h@B76ArfZVd)u4ju*u z8HQkS1_lOE4hCUq4Tf+91_lN;76xHv2?k*n0S0j<0R{#ihG0Gh1_o9c238eD<{Sp* z>x=>oTnr5SjFTl87#O4&7#PHO7zDUH7?=|ogbxNV2y>J$2y<~T2#X{zu!JxOTeC0- zv$8O-bTF{+FfjaJm>|Q@v!#s;nHcoLnm0a=bih zYRpX1GRn*>?5u36s!Uwmvb-EToN_8^Y8)zT?6dYW+Wcqu&%m^Sg@Lhyfq|)mfr0lb z<0rlYhK9@?3=G^Iv9WwTv9UZI92~qo3=F(IA|hfPIt)639QT+B2xPU>2fzg~lh><~n@iq?w z3xm9pLIeL71tv{K2BC^sO!E9+m<;PB82A~u8N?+R*gi6OFt{+dGPp3fGq^K2GPp7D z_A$!yN-(g=YcMhJ2uegTFvKu0#4*^5Ge}HfU|^bp^qi!^!ob7GAS}efz%zlNLBUa2UW9>> zp@yOL|NsB>^4HBAo-wPK2yij*pJ8A!WM*L1W>ykly2~uAD9R$@(9Oio$WYk8;K0Bl z(7?iSzfpiwW3tgwm*}qaG6qHlA0+_+76uoF_YChv7<^@9WMpPADl&7hFnnZYQ2GC# z!6iJ8L8Hi$L12zIgTNBTO&mT93=IkbTnril2Fx4>7{wV+Fp9GZfD@h&dlJJXCPpS^ z1{T)EMg05>1x^fN@*0fJ{~7)>7O+Ft7@gy=3N}!^FU9!oY9Ez+zD+=D^IxZ^0mLFXzCrf`LPy;Xo(@i@lo) cg9QT@KO+OHlADeNgX9}A23{M+00s~M00Km&i~s-t literal 0 HcmV?d00001 diff --git a/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_9.lz4 b/fusee_cpp/program/sdram_params/lz/sdram_params_mariko_9.lz4 new file mode 100644 index 0000000000000000000000000000000000000000..93b6869f769cd47d120e9584b9f9ac3b666a86da GIT binary patch literal 954 zcmey*z|6qFz{tSBpv1typu@<($S|#gsX@Ylfq}t6gy93@|Nrs~Hv**=FfatLGB9*7 zurMen2uU%Bcd#&gXJBC1vuFKDn|TZjOw11svM@4;+cPpSSTI~*;b3402nb+U$jHE8 zV9Aguz#zsTFu{OPn5l$8n3;v)x*P)o11|#ugB1euqGpeP{k}JdHydE*{0!U-;t~vOADKKDTo_y#To~LL+!-7h z+!%QK80C2-7}(@Bm>75jC88J@Vi*|W80^IvB&IMhu!b-$abROO!@$Yl&k!iVklet? zz~I2>z!b8Yfr~{jhLM?tf&U3JA3F~N%L*383g&J`C6@p5*ZVW7fRdHb{Qu?+3?BrH zLdpc(jZy_n%2XLm(p4EtQ;Zmk!b}8|OTrjkjnY*Z3_T~QurTm2G6)N?Fz`%ZXi#tz zmKR}QWT;_i{r~@ez5I1EhiA+xCIVax{AU=L44D~NwV9O!nC>zQD~hs+ICL|~GR$RS zWMR4AD8Q*P*=VUtbXR&A10#cvl7IjUgA2oZhW8>2J~A>gG9MTXnV30P7(OyHsQmxW z;1Zt4piyMWATY<9K|z6GBZm(ILxX|<7lVcX3lrx7Msdayj4S~x!i**?3<3;->;epr zn3x!um>F1D7Z>sKGZZ*6h{ #include "fusee_secure_initialize.hpp" +#include "fusee_sdram.hpp" namespace ams::nxboot { @@ -22,6 +23,9 @@ namespace ams::nxboot { /* Perform secure hardware initialization. */ SecureInitialize(true); + /* Initialize Sdram. */ + InitializeSdram(); + /* TODO */ AMS_INFINITE_LOOP(); } diff --git a/fusee_cpp/program/source/fusee_sdram.cpp b/fusee_cpp/program/source/fusee_sdram.cpp new file mode 100644 index 000000000..377e7e4c2 --- /dev/null +++ b/fusee_cpp/program/source/fusee_sdram.cpp @@ -0,0 +1,970 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#include "fusee_sdram.hpp" +#include "fusee_uncompress.hpp" + +namespace ams::nxboot { + + namespace { + + template + struct SdramParamsImpl; + + template<> struct SdramParamsImpl { using Type = br::erista::BootSdramParams; }; + template<> struct SdramParamsImpl { using Type = br::mariko::BootSdramParams; }; + + template + using BootSdramParams = SdramParamsImpl::Type; + + constexpr inline const uintptr_t CLKRST = secmon::MemoryRegionPhysicalDeviceClkRst.GetAddress(); + constexpr inline const uintptr_t PMC = secmon::MemoryRegionPhysicalDevicePmc.GetAddress(); + constexpr inline const uintptr_t APB = secmon::MemoryRegionPhysicalDeviceApbMisc.GetAddress(); + constexpr inline const uintptr_t MC = secmon::MemoryRegionPhysicalDeviceMemoryController.GetAddress(); + constexpr inline const uintptr_t EMC = EMC_ADDRESS(0); + constexpr inline const uintptr_t AHB = AHB_ARBC(0); + + #include "fusee_sdram_params.inc" + + void *GetSdramParams(fuse::SocType soc_type) { + /* Get DRAM Id. */ + const auto dram_id = fuse::GetDramId(); + + /* Extract to work buffer. */ + void *sdram_params_work_buffer = reinterpret_cast(0x4003D000); + + if (soc_type == fuse::SocType_Erista) { + #define HANDLE_DRAM_CASE(_DRAM_ID_, _INDEX_) \ + case _DRAM_ID_: \ + Uncompress(sdram_params_work_buffer, sizeof(BootSdramParams), SdramParamsErista##_INDEX_, sizeof(SdramParamsErista##_INDEX_)); \ + break; + switch (dram_id) { + HANDLE_DRAM_CASE(0, 0) + HANDLE_DRAM_CASE(1, 1) + HANDLE_DRAM_CASE(2, 2) + HANDLE_DRAM_CASE(3, 3) + HANDLE_DRAM_CASE(4, 4) + HANDLE_DRAM_CASE(5, 5) + HANDLE_DRAM_CASE(6, 6) + default: + AMS_ABORT("Invalid DRAM id"); + } + #undef HANDLE_DRAM_CASE + + return static_cast *>(sdram_params_work_buffer); + } else /* if (soc_type == fuse::SocType_Mariko) */ { + #define HANDLE_DRAM_CASE(_DRAM_ID_, _INDEX_) \ + case _DRAM_ID_: \ + Uncompress(sdram_params_work_buffer, sizeof(BootSdramParams), SdramParamsMariko##_INDEX_, sizeof(SdramParamsMariko##_INDEX_)); \ + break; + switch (dram_id) { + HANDLE_DRAM_CASE( 3, 12) + HANDLE_DRAM_CASE( 7, 0) + HANDLE_DRAM_CASE( 8, 1) + HANDLE_DRAM_CASE( 9, 2) + HANDLE_DRAM_CASE(10, 3) + HANDLE_DRAM_CASE(11, 4) + HANDLE_DRAM_CASE(12, 1) + HANDLE_DRAM_CASE(13, 2) + HANDLE_DRAM_CASE(14, 3) + HANDLE_DRAM_CASE(15, 4) + HANDLE_DRAM_CASE(16, 5) + HANDLE_DRAM_CASE(17, 6) + HANDLE_DRAM_CASE(18, 7) + HANDLE_DRAM_CASE(19, 6) + HANDLE_DRAM_CASE(20, 8) + HANDLE_DRAM_CASE(21, 9) + HANDLE_DRAM_CASE(22, 10) + HANDLE_DRAM_CASE(23, 7) + HANDLE_DRAM_CASE(24, 6) + HANDLE_DRAM_CASE(25, 11) + HANDLE_DRAM_CASE(26, 11) + HANDLE_DRAM_CASE(27, 11) + HANDLE_DRAM_CASE(28, 7) + default: + AMS_ABORT("Invalid DRAM id"); + } + #undef HANDLE_DRAM_CASE + + return static_cast *>(sdram_params_work_buffer); + } + } + + template + void SpareWrite(u32 reg, u32 value) { + if (reg) { + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(reinterpret_cast(reg), value); + } else if constexpr (SocType == fuse::SocType_Mariko) { + /* TODO: Validate the write. */ + reg::Write(reinterpret_cast(reg), value); + } + } + } + + template + void InitializeSdramImpl(BootSdramParams *params) { + /* Perform initial soc-specific setup. */ + if constexpr (SocType == fuse::SocType_Erista) { + /* Enable sel_dpd on unused pins. */ + reg::Write(PMC + APBDEV_PMC_IO_DPD3_REQ, (((params->EmcPmcScratch1 & 0x3FFFFFFF) | 0x80000000) ^ 0xFFFF) & 0xC000FFFF); + util::WaitMicroSeconds(params->PmcIoDpd3ReqWait); + + /* Disable e_dpd_vttgen. */ + u32 dpd4 = (params->EmcPmcScratch2 & 0x3FFFFFFF) | 0x80000000; + reg::Write(PMC + APBDEV_PMC_IO_DPD4_REQ, (dpd4 ^ 0x3FFF0000) & 0xFFFF0000); + util::WaitMicroSeconds(params->PmcIoDpd4ReqWait); + + /* Disable e_dpd_bg. */ + reg::Write(PMC + APBDEV_PMC_IO_DPD4_REQ, (dpd4 ^ 0x0000FFFF) & 0xC000FFFF); + util::WaitMicroSeconds(params->PmcIoDpd4ReqWait); + + reg::Write(PMC + APBDEV_PMC_WEAK_BIAS, 0); + util::WaitMicroSeconds(1); + + /* Enable memory clock. */ + { + /* Initialize pllm. */ + { + reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_MISC1, params->PllMSetupControl); + reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_MISC2, 0); + + reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_BASE, CLK_RST_REG_BITS_ENUM (PLLM_BASE_PLLM_ENABLE, DISABLE), + CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVP, params->PllMPostDivider), + CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVN, params->PllMFeedbackDivider), + CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVM, params->PllMInputDivider)); + + + reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_BASE, CLK_RST_REG_BITS_ENUM (PLLM_BASE_PLLM_ENABLE, ENABLE), + CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVP, params->PllMPostDivider), + CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVN, params->PllMFeedbackDivider), + CLK_RST_REG_BITS_VALUE(PLLM_BASE_PLLM_DIVM, params->PllMInputDivider)); + + /* Wait 300us ffor stability. */ + const auto stable_time = util::GetMicroSeconds() + 300; + while (true) { + if (reg::HasValue(CLKRST + CLK_RST_CONTROLLER_PLLM_BASE, CLK_RST_REG_BITS_ENUM(PLLM_BASE_PLLM_LOCK, LOCK))) { + util::WaitMicroSeconds(10); + break; + } + + if (util::GetMicroSeconds() >= stable_time) { + break; + } + } + } + + /* Set CLK_SOURCE_EMC, using McEmcmArbMisc0 as MC_EMC_SAME_FREQ. */ + reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_SOURCE_EMC, (params->EmcClockSource & ~0x10000) | ((params->McEmemArbMisc0 >> 11) & 0x10000)); + + if (params->EmcClockSourceDll) { + reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL, params->EmcClockSourceDll); + } + + if (params->ClearClk2Mc1) { + reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_ENB_W_CLR, CLK_RST_REG_BITS_ENUM(CLK_ENB_W_CLK_ENB_MC1, ENABLE)); + } + + /* Enable EMC/Mem. */ + reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_ENB_H_SET, CLK_RST_REG_BITS_ENUM(CLK_ENB_H_CLK_ENB_EMC, ENABLE), + CLK_RST_REG_BITS_ENUM(CLK_ENB_H_CLK_ENB_MEM, ENABLE)); + + /* Enable EMC DLL. */ + reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_ENB_X_SET, CLK_RST_REG_BITS_ENUM(CLK_ENB_X_CLK_ENB_EMC_DLL, ENABLE)); + } + + /* Clear reset for MEM/EMC. */ + reg::Write(CLKRST + CLK_RST_CONTROLLER_RST_DEV_H_CLR, CLK_RST_REG_BITS_ENUM(RST_DEV_H_EMC_RST, ENABLE), + CLK_RST_REG_BITS_ENUM(RST_DEV_H_MEM_RST, ENABLE)); + + /* Set pad macros. */ + reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_0, params->EmcPmacroVttgenCtrl0); + reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_1, params->EmcPmacroVttgenCtrl1); + reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_2, params->EmcPmacroVttgenCtrl2); + + reg::Write(EMC + EMC_TIMING_CONTROL, 1); + util::WaitMicroSeconds(1); + + /* Select EMC write mux. */ + reg::Write(EMC + EMC_DBG, params->EmcDbg | reg::EncodeValue(EMC_REG_BITS_VALUE(DBG_WRITE_MUX, params->EmcDbgWriteMux))); + + /* Patch 2. */ + SpareWrite(params->EmcBctSpare2, params->EmcBctSpare3); + } else if constexpr (SocType == fuse::SocType_Mariko) { + /* Patch 1 */ + SpareWrite(params->EmcBctSpare0, params->EmcBctSpare1); + + if (params->ClkRstControllerPllmMisc2OverrideEnable) { + reg::Write(CLKRST + CLK_RST_CONTROLLER_PLLM_MISC2, params->ClkRstControllerPllmMisc2Override); + } + + /* Enable sel_dpd on unused pins. */ + { + u32 val = (~params->EmcPmcScratch1 & 0x00000FFF) << 18; + val |= ((~params->EmcPmcScratch1 & 0x00001000) << 19) | ((~params->EmcPmcScratch1 & 0x00008000) << 15); + reg::Write(PMC + APBDEV_PMC_WEAK_BIAS, val); + } + + reg::Write(PMC + APBDEV_PMC_IO_DPD3_REQ, 0x80000000 | (~params->EmcPmcScratch1 & 0x00009FFF)); + util::WaitMicroSeconds(params->PmcIoDpd3ReqWait); + + /* Disable e_dpd_vttgen. */ + reg::Write(PMC + APBDEV_PMC_IO_DPD4_REQ, 0x80000000 | (~params->EmcPmcScratch2 & 0x3FFF0000)); + util::WaitMicroSeconds(params->PmcIoDpd4ReqWait); + + /* Disable e_dpd_bg. */ + reg::Write(PMC + APBDEV_PMC_IO_DPD4_REQ, 0x80000000 | (~params->EmcPmcScratch2 & 0x00001FFF)); + util::WaitMicroSeconds(1); + } + + /* Common phase 1. */ + + /* Program CMD mapping. */ + reg::Write(EMC + EMC_FBIO_CFG7, params->EmcFbioCfg7); + + reg::Write(EMC + EMC_CMD_MAPPING_CMD0_0, params->EmcCmdMappingCmd0_0); + reg::Write(EMC + EMC_CMD_MAPPING_CMD0_1, params->EmcCmdMappingCmd0_1); + reg::Write(EMC + EMC_CMD_MAPPING_CMD0_2, params->EmcCmdMappingCmd0_2); + reg::Write(EMC + EMC_CMD_MAPPING_CMD1_0, params->EmcCmdMappingCmd1_0); + reg::Write(EMC + EMC_CMD_MAPPING_CMD1_1, params->EmcCmdMappingCmd1_1); + reg::Write(EMC + EMC_CMD_MAPPING_CMD1_2, params->EmcCmdMappingCmd1_2); + reg::Write(EMC + EMC_CMD_MAPPING_CMD2_0, params->EmcCmdMappingCmd2_0); + reg::Write(EMC + EMC_CMD_MAPPING_CMD2_1, params->EmcCmdMappingCmd2_1); + reg::Write(EMC + EMC_CMD_MAPPING_CMD2_2, params->EmcCmdMappingCmd2_2); + reg::Write(EMC + EMC_CMD_MAPPING_CMD3_0, params->EmcCmdMappingCmd3_0); + reg::Write(EMC + EMC_CMD_MAPPING_CMD3_1, params->EmcCmdMappingCmd3_1); + reg::Write(EMC + EMC_CMD_MAPPING_CMD3_2, params->EmcCmdMappingCmd3_2); + reg::Write(EMC + EMC_CMD_MAPPING_BYTE, params->EmcCmdMappingByte); + + /* Program brick mapping. */ + reg::Write(EMC + EMC_PMACRO_BRICK_MAPPING_0, params->EmcPmacroBrickMapping0); + reg::Write(EMC + EMC_PMACRO_BRICK_MAPPING_1, params->EmcPmacroBrickMapping1); + reg::Write(EMC + EMC_PMACRO_BRICK_MAPPING_2, params->EmcPmacroBrickMapping2); + + /* Specific phase 2. */ + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU1, (params->EmcPmacroBrickCtrlRfu1 | ~0x01120112) & 0x1FFF1FFF); + } else if constexpr (SocType == fuse::SocType_Mariko) { + /* Set pad macros. */ + reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_0, params->EmcPmacroVttgenCtrl0); + reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_1, params->EmcPmacroVttgenCtrl1); + reg::Write(EMC + EMC_PMACRO_VTTGEN_CTRL_2, params->EmcPmacroVttgenCtrl2); + + /* Set pad macro bias. */ + reg::Write(EMC + EMC_PMACRO_BG_BIAS_CTRL_0, params->EmcPmacroBgBiasCtrl0); + + SpareWrite(params->EmcBctSpareSecure0, params->EmcBctSpareSecure1); + SpareWrite(params->EmcBctSpareSecure2, params->EmcBctSpareSecure3); + SpareWrite(params->EmcBctSpareSecure4, params->EmcBctSpareSecure5); + + /* Trigger timing update. */ + reg::Write(EMC + EMC_TIMING_CONTROL, 1); + util::WaitMicroSeconds(params->PmcVddpSelWait + 2); + + /* Set clock sources. */ + reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_SOURCE_EMC, params->EmcClockSource); + reg::Write(CLKRST + CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL, params->EmcClockSourceDll); + + /* Select EMC write mux. */ + reg::Write(EMC + EMC_DBG, params->EmcDbg | reg::EncodeValue(EMC_REG_BITS_VALUE(DBG_WRITE_MUX, params->EmcDbgWriteMux))); + + /* Patch 2. */ + SpareWrite(params->EmcBctSpare2, params->EmcBctSpare3); + } + + /* Common phase 2. */ + reg::Write(EMC + EMC_CONFIG_SAMPLE_DELAY, params->EmcConfigSampleDelay); + reg::Write(EMC + EMC_FBIO_CFG8, params->EmcFbioCfg8); + + /* Program swizzle registers. */ + reg::Write(EMC + EMC_SWIZZLE_RANK0_BYTE0, params->EmcSwizzleRank0Byte0); + reg::Write(EMC + EMC_SWIZZLE_RANK0_BYTE1, params->EmcSwizzleRank0Byte1); + reg::Write(EMC + EMC_SWIZZLE_RANK0_BYTE2, params->EmcSwizzleRank0Byte2); + reg::Write(EMC + EMC_SWIZZLE_RANK0_BYTE3, params->EmcSwizzleRank0Byte3); + reg::Write(EMC + EMC_SWIZZLE_RANK1_BYTE0, params->EmcSwizzleRank1Byte0); + reg::Write(EMC + EMC_SWIZZLE_RANK1_BYTE1, params->EmcSwizzleRank1Byte1); + reg::Write(EMC + EMC_SWIZZLE_RANK1_BYTE2, params->EmcSwizzleRank1Byte2); + reg::Write(EMC + EMC_SWIZZLE_RANK1_BYTE3, params->EmcSwizzleRank1Byte3); + + /* Patch 3. */ + SpareWrite(params->EmcBctSpare6, params->EmcBctSpare7); + + /* Program pad controls. */ + reg::Write(EMC + EMC_XM2COMPPADCTRL, params->EmcXm2CompPadCtrl); + reg::Write(EMC + EMC_XM2COMPPADCTRL2, params->EmcXm2CompPadCtrl2); + reg::Write(EMC + EMC_XM2COMPPADCTRL3, params->EmcXm2CompPadCtrl3); + + /* Program autocal controls with shadowed register fields. */ + reg::Write(EMC + EMC_AUTO_CAL_CONFIG2, params->EmcAutoCalConfig2); + reg::Write(EMC + EMC_AUTO_CAL_CONFIG3, params->EmcAutoCalConfig3); + reg::Write(EMC + EMC_AUTO_CAL_CONFIG4, params->EmcAutoCalConfig4); + reg::Write(EMC + EMC_AUTO_CAL_CONFIG5, params->EmcAutoCalConfig5); + reg::Write(EMC + EMC_AUTO_CAL_CONFIG6, params->EmcAutoCalConfig6); + reg::Write(EMC + EMC_AUTO_CAL_CONFIG7, params->EmcAutoCalConfig7); + reg::Write(EMC + EMC_AUTO_CAL_CONFIG8, params->EmcAutoCalConfig8); + + reg::Write(EMC + EMC_PMACRO_RX_TERM, params->EmcPmacroRxTerm); + reg::Write(EMC + EMC_PMACRO_DQ_TX_DRV, params->EmcPmacroDqTxDrv); + reg::Write(EMC + EMC_PMACRO_CA_TX_DRV, params->EmcPmacroCaTxDrv); + reg::Write(EMC + EMC_PMACRO_CMD_TX_DRV, params->EmcPmacroCmdTxDrv); + reg::Write(EMC + EMC_PMACRO_AUTOCAL_CFG_COMMON, params->EmcPmacroAutocalCfgCommon); + reg::Write(EMC + EMC_AUTO_CAL_CHANNEL, params->EmcAutoCalChannel); + reg::Write(EMC + EMC_PMACRO_ZCTRL, params->EmcPmacroZctrl); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_DLL_CFG_0, params->EmcDllCfg0); + reg::Write(EMC + EMC_DLL_CFG_1, params->EmcDllCfg1); + } else if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_PMACRO_DLL_CFG_0, params->EmcPmacroDllCfg0); + reg::Write(EMC + EMC_PMACRO_DLL_CFG_1, params->EmcPmacroDllCfg1); + } + + reg::Write(EMC + EMC_CFG_DIG_DLL_1, params->EmcCfgDigDll_1); + + reg::Write(EMC + EMC_DATA_BRLSHFT_0, params->EmcDataBrlshft0); + reg::Write(EMC + EMC_DATA_BRLSHFT_1, params->EmcDataBrlshft1); + reg::Write(EMC + EMC_DQS_BRLSHFT_0, params->EmcDqsBrlshft0); + reg::Write(EMC + EMC_DQS_BRLSHFT_1, params->EmcDqsBrlshft1); + reg::Write(EMC + EMC_CMD_BRLSHFT_0, params->EmcCmdBrlshft0); + reg::Write(EMC + EMC_CMD_BRLSHFT_1, params->EmcCmdBrlshft1); + reg::Write(EMC + EMC_CMD_BRLSHFT_2, params->EmcCmdBrlshft2); + reg::Write(EMC + EMC_CMD_BRLSHFT_3, params->EmcCmdBrlshft3); + reg::Write(EMC + EMC_QUSE_BRLSHFT_0, params->EmcQuseBrlshft0); + reg::Write(EMC + EMC_QUSE_BRLSHFT_1, params->EmcQuseBrlshft1); + reg::Write(EMC + EMC_QUSE_BRLSHFT_2, params->EmcQuseBrlshft2); + reg::Write(EMC + EMC_QUSE_BRLSHFT_3, params->EmcQuseBrlshft3); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU1, (params->EmcPmacroBrickCtrlRfu1 | ~0x01BF01BF) & 0x1FFF1FFF); + } else if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU1, params->EmcPmacroBrickCtrlRfu1); + } + + reg::Write(EMC + EMC_PMACRO_PAD_CFG_CTRL, params->EmcPmacroPadCfgCtrl); + reg::Write(EMC + EMC_PMACRO_CMD_BRICK_CTRL_FDPD, params->EmcPmacroCmdBrickCtrlFdpd); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU2, params->EmcPmacroBrickCtrlRfu2 & 0xFF7FFF7F); + } else if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU2, params->EmcPmacroBrickCtrlRfu2); + } + + reg::Write(EMC + EMC_PMACRO_DATA_BRICK_CTRL_FDPD, params->EmcPmacroDataBrickCtrlFdpd); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_PMACRO_BG_BIAS_CTRL_0, params->EmcPmacroBgBiasCtrl0); + } + + reg::Write(EMC + EMC_PMACRO_DATA_PAD_RX_CTRL, params->EmcPmacroDataPadRxCtrl); + reg::Write(EMC + EMC_PMACRO_CMD_PAD_RX_CTRL, params->EmcPmacroCmdPadRxCtrl); + reg::Write(EMC + EMC_PMACRO_DATA_PAD_TX_CTRL, params->EmcPmacroDataPadTxCtrl); + reg::Write(EMC + EMC_PMACRO_DATA_RX_TERM_MODE, params->EmcPmacroDataRxTermMode); + reg::Write(EMC + EMC_PMACRO_CMD_RX_TERM_MODE, params->EmcPmacroCmdRxTermMode); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_PMACRO_CMD_PAD_TX_CTRL, params->EmcPmacroCmdPadTxCtrl); + } else if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_PMACRO_CMD_PAD_TX_CTRL, params->EmcPmacroCmdPadTxCtrl & 0xEFFFFFFF); + } + + reg::Write(EMC + EMC_CFG_3, params->EmcCfg3); + + reg::Write(EMC + EMC_PMACRO_TX_PWRD_0, params->EmcPmacroTxPwrd0); + reg::Write(EMC + EMC_PMACRO_TX_PWRD_1, params->EmcPmacroTxPwrd1); + reg::Write(EMC + EMC_PMACRO_TX_PWRD_2, params->EmcPmacroTxPwrd2); + reg::Write(EMC + EMC_PMACRO_TX_PWRD_3, params->EmcPmacroTxPwrd3); + reg::Write(EMC + EMC_PMACRO_TX_PWRD_4, params->EmcPmacroTxPwrd4); + reg::Write(EMC + EMC_PMACRO_TX_PWRD_5, params->EmcPmacroTxPwrd5); + + reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_0, params->EmcPmacroTxSelClkSrc0); + reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_1, params->EmcPmacroTxSelClkSrc1); + reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_2, params->EmcPmacroTxSelClkSrc2); + reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_3, params->EmcPmacroTxSelClkSrc3); + reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_4, params->EmcPmacroTxSelClkSrc4); + reg::Write(EMC + EMC_PMACRO_TX_SEL_CLK_SRC_5, params->EmcPmacroTxSelClkSrc5); + + if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_0, params->EmcPmacroPerbitFgcgCtrl0); + reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_1, params->EmcPmacroPerbitFgcgCtrl1); + reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_2, params->EmcPmacroPerbitFgcgCtrl2); + reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_3, params->EmcPmacroPerbitFgcgCtrl3); + reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_4, params->EmcPmacroPerbitFgcgCtrl4); + reg::Write(EMC + EMC_PMACRO_PERBIT_FGCG_CTRL_5, params->EmcPmacroPerbitFgcgCtrl5); + + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_0, params->EmcPmacroPerbitRfuCtrl0); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_1, params->EmcPmacroPerbitRfuCtrl1); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_2, params->EmcPmacroPerbitRfuCtrl2); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_3, params->EmcPmacroPerbitRfuCtrl3); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_4, params->EmcPmacroPerbitRfuCtrl4); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU_CTRL_5, params->EmcPmacroPerbitRfuCtrl5); + + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_0, params->EmcPmacroPerbitRfu1Ctrl0); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_1, params->EmcPmacroPerbitRfu1Ctrl1); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_2, params->EmcPmacroPerbitRfu1Ctrl2); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_3, params->EmcPmacroPerbitRfu1Ctrl3); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_4, params->EmcPmacroPerbitRfu1Ctrl4); + reg::Write(EMC + EMC_PMACRO_PERBIT_RFU1_CTRL_5, params->EmcPmacroPerbitRfu1Ctrl5); + + reg::Write(EMC + EMC_PMACRO_DATA_PI_CTRL, params->EmcPmacroDataPiCtrl); + reg::Write(EMC + EMC_PMACRO_CMD_PI_CTRL, params->EmcPmacroCmdPiCtrl); + } + + reg::Write(EMC + EMC_PMACRO_DDLL_BYPASS, params->EmcPmacroDdllBypass); + reg::Write(EMC + EMC_PMACRO_DDLL_PWRD_0, params->EmcPmacroDdllPwrd0); + reg::Write(EMC + EMC_PMACRO_DDLL_PWRD_1, params->EmcPmacroDdllPwrd1); + reg::Write(EMC + EMC_PMACRO_DDLL_PWRD_2, params->EmcPmacroDdllPwrd2); + reg::Write(EMC + EMC_PMACRO_CMD_CTRL_0, params->EmcPmacroCmdCtrl0); + reg::Write(EMC + EMC_PMACRO_CMD_CTRL_1, params->EmcPmacroCmdCtrl1); + reg::Write(EMC + EMC_PMACRO_CMD_CTRL_2, params->EmcPmacroCmdCtrl2); + reg::Write(EMC + EMC_PMACRO_IB_VREF_DQ_0, params->EmcPmacroIbVrefDq_0); + reg::Write(EMC + EMC_PMACRO_IB_VREF_DQ_1, params->EmcPmacroIbVrefDq_1); + reg::Write(EMC + EMC_PMACRO_IB_VREF_DQS_0, params->EmcPmacroIbVrefDqs_0); + reg::Write(EMC + EMC_PMACRO_IB_VREF_DQS_1, params->EmcPmacroIbVrefDqs_1); + reg::Write(EMC + EMC_PMACRO_IB_RXRT, params->EmcPmacroIbRxrt); + + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_0, params->EmcPmacroQuseDdllRank0_0); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_1, params->EmcPmacroQuseDdllRank0_1); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_2, params->EmcPmacroQuseDdllRank0_2); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_3, params->EmcPmacroQuseDdllRank0_3); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_4, params->EmcPmacroQuseDdllRank0_4); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK0_5, params->EmcPmacroQuseDdllRank0_5); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_0, params->EmcPmacroQuseDdllRank1_0); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_1, params->EmcPmacroQuseDdllRank1_1); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_2, params->EmcPmacroQuseDdllRank1_2); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_3, params->EmcPmacroQuseDdllRank1_3); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_4, params->EmcPmacroQuseDdllRank1_4); + reg::Write(EMC + EMC_PMACRO_QUSE_DDLL_RANK1_5, params->EmcPmacroQuseDdllRank1_5); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU1, params->EmcPmacroBrickCtrlRfu1); + } + + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0, params->EmcPmacroObDdllLongDqRank0_0); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1, params->EmcPmacroObDdllLongDqRank0_1); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2, params->EmcPmacroObDdllLongDqRank0_2); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3, params->EmcPmacroObDdllLongDqRank0_3); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4, params->EmcPmacroObDdllLongDqRank0_4); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5, params->EmcPmacroObDdllLongDqRank0_5); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0, params->EmcPmacroObDdllLongDqRank1_0); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1, params->EmcPmacroObDdllLongDqRank1_1); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2, params->EmcPmacroObDdllLongDqRank1_2); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3, params->EmcPmacroObDdllLongDqRank1_3); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4, params->EmcPmacroObDdllLongDqRank1_4); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5, params->EmcPmacroObDdllLongDqRank1_5); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0, params->EmcPmacroObDdllLongDqsRank0_0); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1, params->EmcPmacroObDdllLongDqsRank0_1); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2, params->EmcPmacroObDdllLongDqsRank0_2); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3, params->EmcPmacroObDdllLongDqsRank0_3); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4, params->EmcPmacroObDdllLongDqsRank0_4); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5, params->EmcPmacroObDdllLongDqsRank0_5); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0, params->EmcPmacroObDdllLongDqsRank1_0); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1, params->EmcPmacroObDdllLongDqsRank1_1); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2, params->EmcPmacroObDdllLongDqsRank1_2); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3, params->EmcPmacroObDdllLongDqsRank1_3); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4, params->EmcPmacroObDdllLongDqsRank1_4); + reg::Write(EMC + EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5, params->EmcPmacroObDdllLongDqsRank1_5); + reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0, params->EmcPmacroIbDdllLongDqsRank0_0); + reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1, params->EmcPmacroIbDdllLongDqsRank0_1); + reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2, params->EmcPmacroIbDdllLongDqsRank0_2); + reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3, params->EmcPmacroIbDdllLongDqsRank0_3); + reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0, params->EmcPmacroIbDdllLongDqsRank1_0); + reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1, params->EmcPmacroIbDdllLongDqsRank1_1); + reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2, params->EmcPmacroIbDdllLongDqsRank1_2); + reg::Write(EMC + EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3, params->EmcPmacroIbDdllLongDqsRank1_3); + + reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_0, params->EmcPmacroDdllLongCmd_0); + reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_1, params->EmcPmacroDdllLongCmd_1); + reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_2, params->EmcPmacroDdllLongCmd_2); + reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_3, params->EmcPmacroDdllLongCmd_3); + reg::Write(EMC + EMC_PMACRO_DDLL_LONG_CMD_4, params->EmcPmacroDdllLongCmd_4); + reg::Write(EMC + EMC_PMACRO_DDLL_SHORT_CMD_0, params->EmcPmacroDdllShortCmd_0); + reg::Write(EMC + EMC_PMACRO_DDLL_SHORT_CMD_1, params->EmcPmacroDdllShortCmd_1); + reg::Write(EMC + EMC_PMACRO_DDLL_SHORT_CMD_2, params->EmcPmacroDdllShortCmd_2); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_PMACRO_COMMON_PAD_TX_CTRL, (params->EmcPmacroCommonPadTxCtrl | ~0x1) & 0xF); + } else if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_PMACRO_DDLL_PERIODIC_OFFSET, params->EmcPmacroDdllPeriodicOffset); + } + + if constexpr (SocType == fuse::SocType_Erista) { + SpareWrite(params->EmcBctSpare4, params->EmcBctSpare5); + } else if constexpr (SocType == fuse::SocType_Mariko) { + SpareWrite(params->EmcBctSpare4, params->EmcBctSpare5); + SpareWrite(params->EmcBctSpareSecure6, params->EmcBctSpareSecure7); + SpareWrite(params->EmcBctSpareSecure8, params->EmcBctSpareSecure9); + SpareWrite(params->EmcBctSpareSecure10, params->EmcBctSpareSecure11); + } + + reg::Write(EMC + EMC_TIMING_CONTROL, 1); + + /* Initialize MC VPR settings. */ + reg::Write(MC + MC_VIDEO_PROTECT_BOM, params->McVideoProtectBom); + reg::Write(MC + MC_VIDEO_PROTECT_BOM_ADR_HI, params->McVideoProtectBomAdrHi); + reg::Write(MC + MC_VIDEO_PROTECT_SIZE_MB, params->McVideoProtectSizeMb); + reg::Write(MC + MC_VIDEO_PROTECT_VPR_OVERRIDE, params->McVideoProtectVprOverride); + reg::Write(MC + MC_VIDEO_PROTECT_VPR_OVERRIDE1, params->McVideoProtectVprOverride1); + reg::Write(MC + MC_VIDEO_PROTECT_GPU_OVERRIDE_0, params->McVideoProtectGpuOverride0); + reg::Write(MC + MC_VIDEO_PROTECT_GPU_OVERRIDE_1, params->McVideoProtectGpuOverride1); + + /* Program SDRAM geometry parameters. */ + reg::Write(MC + MC_EMEM_ADR_CFG, params->McEmemAdrCfg); + reg::Write(MC + MC_EMEM_ADR_CFG_DEV0, params->McEmemAdrCfgDev0); + reg::Write(MC + MC_EMEM_ADR_CFG_DEV1, params->McEmemAdrCfgDev1); + reg::Write(MC + MC_EMEM_ADR_CFG_CHANNEL_MASK, params->McEmemAdrCfgChannelMask); + + /* Program bank swizzling. */ + reg::Write(MC + MC_EMEM_ADR_CFG_BANK_MASK_0, params->McEmemAdrCfgBankMask0); + reg::Write(MC + MC_EMEM_ADR_CFG_BANK_MASK_1, params->McEmemAdrCfgBankMask1); + reg::Write(MC + MC_EMEM_ADR_CFG_BANK_MASK_2, params->McEmemAdrCfgBankMask2); + + /* Program external memory aperture (base and size). */ + reg::Write(MC + MC_EMEM_CFG, params->McEmemCfg); + + /* Program SEC carveout (base and size). */ + reg::Write(MC + MC_SEC_CARVEOUT_BOM, params->McSecCarveoutBom); + reg::Write(MC + MC_SEC_CARVEOUT_ADR_HI, params->McSecCarveoutAdrHi); + reg::Write(MC + MC_SEC_CARVEOUT_SIZE_MB, params->McSecCarveoutSizeMb); + + /* Program MTS carveout (base and size). */ + reg::Write(MC + MC_MTS_CARVEOUT_BOM, params->McMtsCarveoutBom); + reg::Write(MC + MC_MTS_CARVEOUT_ADR_HI, params->McMtsCarveoutAdrHi); + reg::Write(MC + MC_MTS_CARVEOUT_SIZE_MB, params->McMtsCarveoutSizeMb); + + /* Program the memory arbiter. */ + reg::Write(MC + MC_EMEM_ARB_CFG, params->McEmemArbCfg); + reg::Write(MC + MC_EMEM_ARB_OUTSTANDING_REQ, params->McEmemArbOutstandingReq); + reg::Write(MC + MC_EMEM_ARB_REFPB_HP_CTRL, params->McEmemArbRefpbHpCtrl); + reg::Write(MC + MC_EMEM_ARB_REFPB_BANK_CTRL, params->McEmemArbRefpbBankCtrl); + reg::Write(MC + MC_EMEM_ARB_TIMING_RCD, params->McEmemArbTimingRcd); + reg::Write(MC + MC_EMEM_ARB_TIMING_RP, params->McEmemArbTimingRp); + reg::Write(MC + MC_EMEM_ARB_TIMING_RC, params->McEmemArbTimingRc); + reg::Write(MC + MC_EMEM_ARB_TIMING_RAS, params->McEmemArbTimingRas); + reg::Write(MC + MC_EMEM_ARB_TIMING_FAW, params->McEmemArbTimingFaw); + reg::Write(MC + MC_EMEM_ARB_TIMING_RRD, params->McEmemArbTimingRrd); + reg::Write(MC + MC_EMEM_ARB_TIMING_RAP2PRE, params->McEmemArbTimingRap2Pre); + reg::Write(MC + MC_EMEM_ARB_TIMING_WAP2PRE, params->McEmemArbTimingWap2Pre); + reg::Write(MC + MC_EMEM_ARB_TIMING_R2R, params->McEmemArbTimingR2R); + reg::Write(MC + MC_EMEM_ARB_TIMING_W2W, params->McEmemArbTimingW2W); + reg::Write(MC + MC_EMEM_ARB_TIMING_CCDMW, params->McEmemArbTimingCcdmw); + reg::Write(MC + MC_EMEM_ARB_TIMING_R2W, params->McEmemArbTimingR2W); + reg::Write(MC + MC_EMEM_ARB_TIMING_W2R, params->McEmemArbTimingW2R); + reg::Write(MC + MC_EMEM_ARB_TIMING_RFCPB, params->McEmemArbTimingRFCPB); + reg::Write(MC + MC_EMEM_ARB_DA_TURNS, params->McEmemArbDaTurns); + reg::Write(MC + MC_EMEM_ARB_DA_COVERS, params->McEmemArbDaCovers); + reg::Write(MC + MC_EMEM_ARB_MISC0, params->McEmemArbMisc0); + reg::Write(MC + MC_EMEM_ARB_MISC1, params->McEmemArbMisc1); + reg::Write(MC + MC_EMEM_ARB_MISC2, params->McEmemArbMisc2); + reg::Write(MC + MC_EMEM_ARB_RING1_THROTTLE, params->McEmemArbRing1Throttle); + reg::Write(MC + MC_EMEM_ARB_OVERRIDE, params->McEmemArbOverride); + reg::Write(MC + MC_EMEM_ARB_OVERRIDE_1, params->McEmemArbOverride1); + reg::Write(MC + MC_EMEM_ARB_RSV, params->McEmemArbRsv); + reg::Write(MC + MC_DA_CONFIG0, params->McDaCfg0); + + /* Trigger MC timing update. */ + reg::Write(MC + MC_TIMING_CONTROL, 1); + + /* Program second-level clock enable overrides. */ + reg::Write(MC + MC_CLKEN_OVERRIDE, params->McClkenOverride); + + /* Program statistics gathering. */ + reg::Write(MC + MC_STAT_CONTROL, params->McStatControl); + + /* Program SDRAM geometry parameters. */ + reg::Write(EMC + EMC_ADR_CFG, params->EmcAdrCfg); + + /* Program second-level clock enable overrides. */ + reg::Write(EMC + EMC_CLKEN_OVERRIDE, params->EmcClkenOverride); + + /* Program EMC pad auto calibration. */ + reg::Write(EMC + EMC_PMACRO_AUTOCAL_CFG_0, params->EmcPmacroAutocalCfg0); + reg::Write(EMC + EMC_PMACRO_AUTOCAL_CFG_1, params->EmcPmacroAutocalCfg1); + reg::Write(EMC + EMC_PMACRO_AUTOCAL_CFG_2, params->EmcPmacroAutocalCfg2); + + reg::Write(EMC + EMC_AUTO_CAL_VREF_SEL_0, params->EmcAutoCalVrefSel0); + reg::Write(EMC + EMC_AUTO_CAL_VREF_SEL_1, params->EmcAutoCalVrefSel1); + + reg::Write(EMC + EMC_AUTO_CAL_INTERVAL, params->EmcAutoCalInterval); + reg::Write(EMC + EMC_AUTO_CAL_CONFIG, params->EmcAutoCalConfig); + util::WaitMicroSeconds(params->EmcAutoCalWait); + + /* Patch 5. */ + if constexpr (SocType == fuse::SocType_Erista) { + SpareWrite(params->EmcBctSpare8, params->EmcBctSpare9); + } else if constexpr (SocType == fuse::SocType_Mariko) { + SpareWrite(params->EmcBctSpare8, params->EmcBctSpare9); + reg::Write(EMC + EMC_AUTO_CAL_CONFIG9, params->EmcAutoCalConfig9); + } + + /* Program EMC timing configuration. */ + reg::Write(EMC + EMC_CFG_2, params->EmcCfg2); + reg::Write(EMC + EMC_CFG_PIPE, params->EmcCfgPipe); + reg::Write(EMC + EMC_CFG_PIPE_1, params->EmcCfgPipe1); + reg::Write(EMC + EMC_CFG_PIPE_2, params->EmcCfgPipe2); + reg::Write(EMC + EMC_CMDQ, params->EmcCmdQ); + reg::Write(EMC + EMC_MC2EMCQ, params->EmcMc2EmcQ); + reg::Write(EMC + EMC_MRS_WAIT_CNT, params->EmcMrsWaitCnt); + reg::Write(EMC + EMC_MRS_WAIT_CNT2, params->EmcMrsWaitCnt2); + reg::Write(EMC + EMC_FBIO_CFG5, params->EmcFbioCfg5); + reg::Write(EMC + EMC_RC, params->EmcRc); + reg::Write(EMC + EMC_RFC, params->EmcRfc); + reg::Write(EMC + EMC_RFCPB, params->EmcRfcPb); + reg::Write(EMC + EMC_REFCTRL2, params->EmcRefctrl2); + reg::Write(EMC + EMC_RFC_SLR, params->EmcRfcSlr); + reg::Write(EMC + EMC_RAS, params->EmcRas); + reg::Write(EMC + EMC_RP, params->EmcRp); + reg::Write(EMC + EMC_TPPD, params->EmcTppd); + + if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_TRTM, params->EmcTrtm); + reg::Write(EMC + EMC_TWTM, params->EmcTwtm); + reg::Write(EMC + EMC_TRATM, params->EmcTratm); + reg::Write(EMC + EMC_TWATM, params->EmcTwatm); + reg::Write(EMC + EMC_TR2REF, params->EmcTr2ref); + } + + reg::Write(EMC + EMC_R2R, params->EmcR2r); + reg::Write(EMC + EMC_W2W, params->EmcW2w); + reg::Write(EMC + EMC_R2W, params->EmcR2w); + reg::Write(EMC + EMC_W2R, params->EmcW2r); + reg::Write(EMC + EMC_R2P, params->EmcR2p); + reg::Write(EMC + EMC_W2P, params->EmcW2p); + reg::Write(EMC + EMC_CCDMW, params->EmcCcdmw); + reg::Write(EMC + EMC_RD_RCD, params->EmcRdRcd); + reg::Write(EMC + EMC_WR_RCD, params->EmcWrRcd); + reg::Write(EMC + EMC_RRD, params->EmcRrd); + reg::Write(EMC + EMC_REXT, params->EmcRext); + reg::Write(EMC + EMC_WEXT, params->EmcWext); + reg::Write(EMC + EMC_WDV, params->EmcWdv); + reg::Write(EMC + EMC_WDV_CHK, params->EmcWdvChk); + reg::Write(EMC + EMC_WSV, params->EmcWsv); + reg::Write(EMC + EMC_WEV, params->EmcWev); + reg::Write(EMC + EMC_WDV_MASK, params->EmcWdvMask); + reg::Write(EMC + EMC_WS_DURATION, params->EmcWsDuration); + reg::Write(EMC + EMC_WE_DURATION, params->EmcWeDuration); + reg::Write(EMC + EMC_QUSE, params->EmcQUse); + reg::Write(EMC + EMC_QUSE_WIDTH, params->EmcQuseWidth); + reg::Write(EMC + EMC_IBDLY, params->EmcIbdly); + reg::Write(EMC + EMC_OBDLY, params->EmcObdly); + reg::Write(EMC + EMC_EINPUT, params->EmcEInput); + reg::Write(EMC + EMC_EINPUT_DURATION, params->EmcEInputDuration); + reg::Write(EMC + EMC_PUTERM_EXTRA, params->EmcPutermExtra); + reg::Write(EMC + EMC_PUTERM_WIDTH, params->EmcPutermWidth); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_PMACRO_COMMON_PAD_TX_CTRL, params->EmcPmacroCommonPadTxCtrl); + } + + reg::Write(EMC + EMC_DBG, params->EmcDbg); + reg::Write(EMC + EMC_QRST, params->EmcQRst); + reg::Write(EMC + EMC_ISSUE_QRST, 1); + reg::Write(EMC + EMC_ISSUE_QRST, 0); + reg::Write(EMC + EMC_QSAFE, params->EmcQSafe); + reg::Write(EMC + EMC_RDV, params->EmcRdv); + reg::Write(EMC + EMC_RDV_MASK, params->EmcRdvMask); + reg::Write(EMC + EMC_RDV_EARLY, params->EmcRdvEarly); + reg::Write(EMC + EMC_RDV_EARLY_MASK, params->EmcRdvEarlyMask); + reg::Write(EMC + EMC_QPOP, params->EmcQpop); + reg::Write(EMC + EMC_REFRESH, params->EmcRefresh); + reg::Write(EMC + EMC_BURST_REFRESH_NUM, params->EmcBurstRefreshNum); + reg::Write(EMC + EMC_PRE_REFRESH_REQ_CNT, params->EmcPreRefreshReqCnt); + reg::Write(EMC + EMC_PDEX2WR, params->EmcPdEx2Wr); + reg::Write(EMC + EMC_PDEX2RD, params->EmcPdEx2Rd); + reg::Write(EMC + EMC_PCHG2PDEN, params->EmcPChg2Pden); + reg::Write(EMC + EMC_ACT2PDEN, params->EmcAct2Pden); + reg::Write(EMC + EMC_AR2PDEN, params->EmcAr2Pden); + reg::Write(EMC + EMC_RW2PDEN, params->EmcRw2Pden); + reg::Write(EMC + EMC_CKE2PDEN, params->EmcCke2Pden); + reg::Write(EMC + EMC_PDEX2CKE, params->EmcPdex2Cke); + reg::Write(EMC + EMC_PDEX2MRR, params->EmcPdex2Mrr); + reg::Write(EMC + EMC_TXSR, params->EmcTxsr); + reg::Write(EMC + EMC_TXSRDLL, params->EmcTxsrDll); + reg::Write(EMC + EMC_TCKE, params->EmcTcke); + reg::Write(EMC + EMC_TCKESR, params->EmcTckesr); + reg::Write(EMC + EMC_TPD, params->EmcTpd); + reg::Write(EMC + EMC_TFAW, params->EmcTfaw); + reg::Write(EMC + EMC_TRPAB, params->EmcTrpab); + reg::Write(EMC + EMC_TCLKSTABLE, params->EmcTClkStable); + reg::Write(EMC + EMC_TCLKSTOP, params->EmcTClkStop); + reg::Write(EMC + EMC_TREFBW, params->EmcTRefBw); + reg::Write(EMC + EMC_ODT_WRITE, params->EmcOdtWrite); + reg::Write(EMC + EMC_CFG_DIG_DLL, params->EmcCfgDigDll); + reg::Write(EMC + EMC_CFG_DIG_DLL_PERIOD, params->EmcCfgDigDllPeriod); + + /* Lock bit written later for CFG_ADR_EN. */ + reg::Write(EMC + EMC_FBIO_SPARE, params->EmcFbioSpare & 0xFFFFFFFD); + reg::Write(EMC + EMC_CFG_RSV, params->EmcCfgRsv); + reg::Write(EMC + EMC_PMC_SCRATCH1, params->EmcPmcScratch1); + reg::Write(EMC + EMC_PMC_SCRATCH2, params->EmcPmcScratch2); + reg::Write(EMC + EMC_PMC_SCRATCH3, params->EmcPmcScratch3); + reg::Write(EMC + EMC_ACPD_CONTROL, params->EmcAcpdControl); + reg::Write(EMC + EMC_TXDSRVTTGEN, params->EmcTxdsrvttgen); + + if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_PMACRO_DSR_VTTGEN_CTRL_0, params->EmcPmacroDsrVttgenCtrl0); + } + + /* Set pipe bypass enable bits before sending any DRAM commands. */ + reg::Write(EMC + EMC_CFG, (params->EmcCfg * 0xE) | 0x03C00000); + + /* Perform bootrom patch. */ + if constexpr (SocType == fuse::SocType_Erista) { + if (params->BootRomPatchControl & 0x80000000) { + reg::Write(APB + ((params->BootRomPatchControl & 0x3FFFFFFF) << 2), params->BootRomPatchData); + reg::Write(MC + MC_TIMING_CONTROL, 1); + } + } else if constexpr (SocType == fuse::SocType_Mariko) { + if (params->BootRomPatchControl) { + SpareWrite(params->BootRomPatchControl, params->BootRomPatchData); + reg::Write(MC + MC_TIMING_CONTROL, 1); + } + + SpareWrite(params->EmcBctSpareSecure12, params->EmcBctSpareSecure13); + SpareWrite(params->EmcBctSpareSecure14, params->EmcBctSpareSecure15); + SpareWrite(params->EmcBctSpareSecure16, params->EmcBctSpareSecure17); + } + + /* Release SEL_DPD_CMD. */ + reg::Write(PMC + APBDEV_PMC_IO_DPD3_REQ, ((params->EmcPmcScratch1 & 0x3FFFFFFF) | 0x40000000) & 0xCFFF0000); + util::WaitMicroSeconds(params->PmcIoDpd3ReqWait); + + if constexpr (SocType == fuse::SocType_Erista) { + if (params->EmcAutoCalInterval == 0) { + reg::Write(EMC + EMC_AUTO_CAL_CONFIG, params->EmcAutoCalConfig | 0x200); + } + + reg::Write(EMC + EMC_PMACRO_BRICK_CTRL_RFU2, params->EmcPmacroBrickCtrlRfu2); + } else if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_PMACRO_CMD_PAD_TX_CTRL, params->EmcPmacroCmdPadTxCtrl); + } + + /* ZQ CAL setup */ + if (params->EmcZcalWarmColdBootEnables & 1) { + if (params->MemoryType == br::BootMemoryType_Ddr3) { + reg::Write(EMC + EMC_ZCAL_WAIT_CNT, params->EmcZcalWaitCnt << 3); + } else if (params->MemoryType == br::BootMemoryType_LpDdr4) { + reg::Write(EMC + EMC_ZCAL_WAIT_CNT, params->EmcZcalWaitCnt); + reg::Write(EMC + EMC_ZCAL_MRW_CMD, params->EmcZcalMrwCmd); + } + } + + /* Trigger timing update. */ + reg::Write(EMC + EMC_TIMING_CONTROL, 1); + util::WaitMicroSeconds(params->EmcTimingControlWait); + + /* Deassert HOLD_CKE_LOW. */ + if constexpr (SocType == fuse::SocType_Erista) { + reg::ClearBits(PMC + APBDEV_PMC_DDR_CNTRL, ~0xFFF8007F); + } else if constexpr (SocType == fuse::SocType_Mariko) { + reg::ClearBits(PMC + APBDEV_PMC_DDR_CNTRL, ~0xFF78007F); + } + + util::WaitMicroSeconds(params->PmcDdrCntrlWait); + + /* Set clock enable signal. */ + const u32 pin_gpio_cfg = (params->EmcPinGpioEn << 16) | (params->EmcPinGpio << 12); + if (params->MemoryType == br::BootMemoryType_Ddr3 || params->MemoryType == br::BootMemoryType_LpDdr4) { + reg::Write(EMC + EMC_PIN, pin_gpio_cfg); + reg::Read(EMC + EMC_PIN); + util::WaitMicroSeconds(200 + params->EmcPinExtraWait); + + reg::Write(EMC + EMC_PIN, pin_gpio_cfg | 0x100); + reg::Read(EMC + EMC_PIN); + + const u32 wait = params->MemoryType == br::BootMemoryType_Ddr3 ? 500 : 2000; + util::WaitMicroSeconds(wait + params->EmcPinExtraWait); + } + + /* Set clock enable signal. */ + reg::Write(EMC + EMC_PIN, pin_gpio_cfg | 0x101); + reg::Read(EMC + EMC_PIN); + util::WaitMicroSeconds(params->EmcPinProgramWait); + + /* Send NOP */ + if (params->MemoryType != br::BootMemoryType_LpDdr4) { + reg::Write(EMC + EMC_NOP, (params->EmcDevSelect << 30) | 1); + } + + /* On coldboot with LPDDR2/3, wait 200us after asserting CKE high. */ + if (params->MemoryType != br::BootMemoryType_LpDdr2) { + util::WaitMicroSeconds(200 + params->EmcPinExtraWait); + } + + /* Init ZQ calibration. */ + if (params->MemoryType == br::BootMemoryType_LpDdr4) { + SpareWrite(params->EmcBctSpare10, params->EmcBctSpare11); + + reg::Write(EMC + EMC_MRW2, params->EmcMrw2); + reg::Write(EMC + EMC_MRW, params->EmcMrw1); + reg::Write(EMC + EMC_MRW3, params->EmcMrw3); + reg::Write(EMC + EMC_MRW4, params->EmcMrw4); + reg::Write(EMC + EMC_MRW6, params->EmcMrw6); + reg::Write(EMC + EMC_MRW14, params->EmcMrw14); + + reg::Write(EMC + EMC_MRW8, params->EmcMrw8); + reg::Write(EMC + EMC_MRW12, params->EmcMrw12); + reg::Write(EMC + EMC_MRW9, params->EmcMrw9); + reg::Write(EMC + EMC_MRW13, params->EmcMrw13); + + if (params->EmcZcalWarmColdBootEnables & 1) { + /* Issue ZQCAL start, device 0. */ + reg::Write(EMC + EMC_ZQ_CAL, params->EmcZcalInitDev0); + util::WaitMicroSeconds(params->EmcZcalInitWait); + + /* Issue ZQCAL latch. */ + reg::Write(EMC + EMC_ZQ_CAL, params->EmcZcalInitDev0 ^ 0x3); + + /* Do the same for device 1. */ + if ((params->EmcDevSelect & 2) == 0) { + reg::Write(EMC + EMC_ZQ_CAL, params->EmcZcalInitDev1); + util::WaitMicroSeconds(params->EmcZcalInitWait); + + reg::Write(EMC + EMC_ZQ_CAL, params->EmcZcalInitDev1 ^ 0x3); + } + } + } + + /* Patches 10-12. */ + if constexpr (SocType == fuse::SocType_Mariko) { + SpareWrite(params->EmcBctSpareSecure18, params->EmcBctSpareSecure19); + SpareWrite(params->EmcBctSpareSecure20, params->EmcBctSpareSecure21); + SpareWrite(params->EmcBctSpareSecure22, params->EmcBctSpareSecure23); + } + + /* Set package and DPD pad control. */ + reg::Write(PMC + APBDEV_PMC_DDR_CFG, params->PmcDdrCfg); + + /* Start periodic ZQ calibration. */ + if (params->MemoryType == br::BootMemoryType_LpDdr2 || params->MemoryType == br::BootMemoryType_Ddr3 || params->MemoryType == br::BootMemoryType_LpDdr4) { + reg::Write(EMC + EMC_ZCAL_INTERVAL, params->EmcZcalInterval); + reg::Write(EMC + EMC_ZCAL_WAIT_CNT, params->EmcZcalWaitCnt); + reg::Write(EMC + EMC_ZCAL_MRW_CMD, params->EmcZcalMrwCmd); + } + + SpareWrite(params->EmcBctSpare12, params->EmcBctSpare13); + + /* Trigger timing update. */ + reg::Write(EMC + EMC_TIMING_CONTROL, 1); + + if (params->EmcExtraRefreshNum) { + reg::Write(EMC + EMC_REF, (params->EmcDevSelect << 30) | (((1 << params->EmcExtraRefreshNum) - 1) << 8) | 3); + } + + /* Enable refresh. */ + reg::Write(EMC + EMC_REFCTRL, params->EmcDevSelect | 0x80000000); + + reg::Write(EMC + EMC_DYN_SELF_REF_CONTROL, params->EmcDynSelfRefControl); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(EMC + EMC_CFG_UPDATE, params->EmcCfgUpdate); + } + + reg::Write(EMC + EMC_CFG, params->EmcCfg); + reg::Write(EMC + EMC_FDPD_CTRL_DQ, params->EmcFdpdCtrlDq); + reg::Write(EMC + EMC_FDPD_CTRL_CMD, params->EmcFdpdCtrlCmd); + reg::Write(EMC + EMC_SEL_DPD_CTRL, params->EmcSelDpdCtrl); + + /* Write addr swizzle lock bit. */ + reg::Write(EMC + EMC_FBIO_SPARE, params->EmcFbioSpare | 2); + + /* Trigger timing update. */ + reg::Write(EMC + EMC_TIMING_CONTROL, 1); + + if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(EMC + EMC_CFG_UPDATE, params->EmcCfgUpdate); + } + + /* Enable EMC pipe clock gating. */ + reg::Write(EMC + EMC_CFG_PIPE_CLK, params->EmcCfgPipeClk); + + /* Depending on freqency, enable CMD/CLK fdpd. */ + reg::Write(EMC + EMC_FDPD_CTRL_CMD_NO_RAMP, params->EmcFdpdCtrlCmdNoRamp); + + if constexpr (SocType == fuse::SocType_Erista) { + reg::ReadWrite(AHB + AHB_ARBITRATION_XBAR_CTRL, AHB_REG_BITS_VALUE(ARBITRATION_XBAR_CTRL_MEM_INIT_DONE, params->AhbArbitrationXbarCtrlMemInitDone)); + } + + if constexpr (SocType == fuse::SocType_Mariko) { + reg::Write(MC + MC_UNTRANSLATED_REGION_CHECK, params->McUntranslatedRegionCheck); + } + + /* Lock carveouts. */ + reg::Write(MC + MC_VIDEO_PROTECT_REG_CTRL, params->McVideoProtectWriteAccess); + reg::Write(MC + MC_SEC_CARVEOUT_REG_CTRL, params->McSecCarveoutProtectWriteAccess); + reg::Write(MC + MC_MTS_CARVEOUT_REG_CTRL, params->McMtsCarveoutRegCtrl); + + reg::Write(MC + MC_EMEM_CFG_ACCESS_CTRL, 1); + + if constexpr (SocType == fuse::SocType_Mariko) { + reg::ReadWrite(AHB + AHB_ARBITRATION_XBAR_CTRL, AHB_REG_BITS_VALUE(ARBITRATION_XBAR_CTRL_MEM_INIT_DONE, params->AhbArbitrationXbarCtrlMemInitDone)); + } + } + + template + void SaveSdramParamsToScratch(BootSdramParams *params) { + /* TODO */ + } + + template + void InitializeSdram(void *generic_params) { + /* Get converted parameters. */ + auto *sdram_params = static_cast *>(generic_params); + + /* Enable VDD Memory */ + pmic::EnableVddMemory(SocType); + + /* Set VDDP select. */ + reg::Write(PMC + APBDEV_PMC_VDDP_SEL, sdram_params->PmcVddpSel); + util::WaitMicroSeconds(sdram_params->PmcVddpSelWait); + + /* If Erista, Set DDR pad voltage. */ + if constexpr (SocType == fuse::SocType_Erista) { + reg::Write(PMC + APBDEV_PMC_DDR_PWR, reg::Read(PMC + APBDEV_PMC_DDR_PWR)); + } + + /* Turn on MEM IO power. */ + reg::Write(PMC + APBDEV_PMC_NO_IOPOWER, sdram_params->PmcNoIoPower); + reg::Write(PMC + APBDEV_PMC_REG_SHORT, sdram_params->PmcRegShort); + reg::Write(PMC + APBDEV_PMC_DDR_CNTRL, sdram_params->PmcDdrCntrl); + + /* Apply patch 1. */ + *reinterpret_cast(sdram_params->EmcBctSpare0) = sdram_params->EmcBctSpare1; + + /* Do main init. */ + InitializeSdramImpl(sdram_params); + + /* Save parameters to scratch. */ + SaveSdramParamsToScratch(sdram_params); + } + + } + + void InitializeSdram() { + /* Get soc type. */ + const auto soc_type = fuse::GetSocType(); + + /* Get Sdram params. */ + void *sdram_params = GetSdramParams(soc_type); + + /* Perform SoC-specific init. */ + if (soc_type == fuse::SocType_Erista) { + InitializeSdram(sdram_params); + } else /* if (soc_type == fuse::SocType_Mariko) */ { + InitializeSdram(sdram_params); + } + } + +} diff --git a/fusee_cpp/program/source/fusee_sdram.hpp b/fusee_cpp/program/source/fusee_sdram.hpp new file mode 100644 index 000000000..5e8fb74c1 --- /dev/null +++ b/fusee_cpp/program/source/fusee_sdram.hpp @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#pragma once + +namespace ams::nxboot { + + void InitializeSdram(); + +} \ No newline at end of file diff --git a/fusee_cpp/program/source/fusee_sdram_params.inc b/fusee_cpp/program/source/fusee_sdram_params.inc new file mode 100644 index 000000000..6fbf35e83 --- /dev/null +++ b/fusee_cpp/program/source/fusee_sdram_params.inc @@ -0,0 +1,1267 @@ +/* + * Copyright (c) 2018-2020 AtmosphÃre-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ + +constexpr inline const u8 SdramParamsErista0[0x3AC] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x0E, 0xFC, 0x05, 0x68, 0xBC, 0x01, 0x70, 0x0A, 0x00, 0x00, 0x00, 0x04, 0xB4, + 0x01, 0x70, 0x01, 0x32, 0x54, 0x76, 0xC8, 0xE6, 0x00, 0x70, 0x24, 0x00, 0xC8, 0x34, 0x00, 0x00, + 0x00, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x1F, + 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x77, 0x00, 0x04, 0x00, 0x01, + 0xD3, 0xA6, 0xA6, 0xAF, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x03, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, + 0x00, 0x3C, 0x00, 0x19, 0x1F, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0x08, 0x46, 0x00, 0x57, 0xA1, + 0x01, 0x00, 0x00, 0x32, 0x64, 0x00, 0x00, 0xC3, 0x00, 0x13, 0x02, 0x0C, 0x00, 0x13, 0x03, 0x04, + 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x2C, + 0x00, 0x10, 0x09, 0xC8, 0x00, 0x07, 0x10, 0x00, 0x13, 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, + 0x00, 0x1C, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x2C, 0x00, 0x13, + 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x13, 0x08, 0x40, 0x00, 0x13, 0x05, 0x1C, 0x00, 0x04, + 0x58, 0x00, 0x13, 0x02, 0x18, 0x00, 0x04, 0x64, 0x00, 0x00, 0xA6, 0x00, 0xB5, 0x12, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x58, 0x01, 0x03, 0x61, 0x00, + 0x13, 0xC1, 0x50, 0x00, 0x17, 0x08, 0xC8, 0x00, 0x13, 0x03, 0x28, 0x00, 0x17, 0x05, 0x54, 0x00, + 0x13, 0x27, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xD8, 0x00, 0x08, 0x0C, 0x00, 0xA0, + 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0xBF, 0x3B, 0x5A, 0x00, 0xF1, 0x28, 0xF3, 0x0C, + 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, + 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, + 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, + 0x24, 0x06, 0x07, 0x9A, 0x12, 0xC1, 0x01, 0x2C, 0x00, 0xFF, 0xEC, 0x01, 0xB0, 0x04, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0xAB, 0x00, 0xD0, 0xC0, 0x71, 0x71, 0x03, 0x08, + 0x00, 0x00, 0x0B, 0x08, 0x72, 0x72, 0x0E, 0x0C, 0x20, 0x00, 0xC2, 0x08, 0x08, 0x0D, 0x0C, 0x00, + 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0x67, 0x02, 0x70, 0x15, + 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x94, 0xF3, 0x05, 0x08, 0x11, 0x00, 0xFF, 0x0F, + 0xFF, 0x0F, 0xCC, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, + 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0xA2, 0xA0, + 0x00, 0x2C, 0x00, 0x01, 0x37, 0x00, 0x00, 0x00, 0x80, 0x48, 0x00, 0xD3, 0x08, 0x00, 0x04, 0x00, + 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x28, 0x01, 0x00, 0x13, 0x11, 0x01, 0x00, 0x10, + 0xBE, 0xBF, 0x00, 0x12, 0x0F, 0x02, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x2C, 0x7F, 0x14, 0x00, 0x12, + 0x00, 0x10, 0x00, 0x14, 0x18, 0x00, 0x06, 0xF3, 0x02, 0x30, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x30, 0x00, 0x32, 0x00, 0x05, 0x20, 0x00, 0x0F, 0x18, 0x00, 0x05, + 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x14, 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x11, 0x10, 0x0C, 0x00, + 0x0C, 0x7A, 0x00, 0x05, 0x50, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, + 0x51, 0x18, 0x00, 0x00, 0x28, 0x01, 0x23, 0x40, 0x01, 0x3C, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, + 0x11, 0x58, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xEC, 0x00, 0x0D, 0x17, 0x02, 0x0C, 0x00, 0x17, 0x03, + 0x60, 0x03, 0x02, 0xA1, 0x01, 0x7B, 0x22, 0x04, 0xFF, 0xFF, 0xAF, 0x4F, 0x01, 0x28, 0x00, 0x00, + 0x01, 0x00, 0x32, 0x8B, 0xFF, 0x07, 0x84, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, + 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, + 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, + 0x00, 0x0C, 0x01, 0x00, 0x13, 0x1B, 0x04, 0x00, 0x0C, 0x94, 0x00, 0x80, 0x2F, 0x41, 0x13, 0x1F, + 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x0B, 0xD7, 0x06, 0x40, 0x82, + 0x00, 0xB2, 0x08, 0x08, 0x03, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x10, 0x10, 0x10, 0x59, 0x03, 0x0B, + 0x94, 0x04, 0x13, 0x37, 0x72, 0x01, 0x12, 0x10, 0x8D, 0x01, 0x31, 0x00, 0x11, 0x01, 0xB9, 0x02, + 0x00, 0x1F, 0x00, 0x13, 0x0A, 0xA9, 0x04, 0x17, 0x10, 0x77, 0x03, 0x05, 0x12, 0x00, 0x00, 0x04, + 0x04, 0xCF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x2C, 0x01, + 0x05, 0x53, 0xFF, 0xEF, 0xFF, 0xEF, 0xC0, 0x01, 0x00, 0x57, 0xDC, 0xDC, 0xDC, 0xDC, 0x0A, 0x01, + 0x00, 0x01, 0x24, 0x01, 0x21, 0x03, 0x07, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, + 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x10, 0x58, 0x01, 0xB2, + 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0xE0, 0x02, 0x0C, 0x74, 0x01, + 0x04, 0x08, 0x00, 0x17, 0x05, 0x10, 0x00, 0x17, 0x04, 0xEC, 0x03, 0xE4, 0x01, 0x00, 0x02, 0x02, + 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xC3, 0x71, 0x0F, 0x0F, 0x98, 0x05, 0x15, 0x1F, 0xF3, 0x00, + 0x00, 0xC0, 0x03, 0x14, 0x01, 0xDD, 0x00, 0x14, 0x80, 0xB6, 0x00, 0x15, 0xF0, 0xD4, 0x03, 0x68, + 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0xD2, 0x00, 0x2F, 0xF0, 0xFF, 0xEC, 0x00, 0x05, 0x19, 0x08, + 0x0E, 0x00, 0x14, 0x30, 0xAB, 0x00, 0x0F, 0x2C, 0x00, 0x02, 0x4F, 0x76, 0x0C, 0x00, 0x04, 0x50, + 0x02, 0x01, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x9F, 0x05, 0x0F, + 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, + 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, + 0x2F, 0xEC, 0x00, 0x3C, 0x01, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsErista1[0x3AC] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x0E, 0xFC, 0x05, 0x68, 0xBC, 0x01, 0x70, 0x0A, 0x00, 0x00, 0x00, 0x04, 0xB4, + 0x01, 0x70, 0x01, 0x32, 0x54, 0x76, 0xC8, 0xE6, 0x00, 0x70, 0x24, 0x00, 0xC8, 0x34, 0x00, 0x00, + 0x00, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x1F, + 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x77, 0x00, 0x04, 0x00, 0x01, + 0xD3, 0xA6, 0xA6, 0xAF, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x03, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, + 0x00, 0x3C, 0x00, 0x19, 0x1F, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0x08, 0x46, 0x00, 0x57, 0xA1, + 0x01, 0x00, 0x00, 0x32, 0x64, 0x00, 0x00, 0xC3, 0x00, 0x13, 0x02, 0x0C, 0x00, 0x13, 0x03, 0x04, + 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x2C, + 0x00, 0x10, 0x09, 0xC8, 0x00, 0x07, 0x10, 0x00, 0x13, 0x0D, 0x04, 0x00, 0x53, 0x08, 0x00, 0x00, + 0x00, 0x0B, 0x1C, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x2C, 0x00, + 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x13, 0x08, 0x40, 0x00, 0x13, 0x05, 0x1C, 0x00, + 0x04, 0x58, 0x00, 0x13, 0x02, 0x18, 0x00, 0x03, 0x5F, 0x01, 0x10, 0x80, 0x0A, 0x00, 0xB5, 0x12, + 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x58, 0x01, 0x03, + 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x17, 0x08, 0xC8, 0x00, 0x13, 0x03, 0x28, 0x00, 0x17, 0x05, + 0x54, 0x00, 0x13, 0x27, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xD8, 0x00, 0x08, 0x0C, + 0x00, 0xA0, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0xBF, 0x3B, 0x5A, 0x00, 0xF1, 0x28, + 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, + 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, + 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, + 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0x12, 0xC1, 0x01, 0x2C, 0x00, 0xFF, 0xEC, 0x01, 0xB0, 0x04, + 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0xAB, 0x00, 0xD0, 0xC0, 0x71, 0x71, + 0x03, 0x08, 0x00, 0x00, 0x0B, 0x08, 0x72, 0x72, 0x0E, 0x0C, 0x20, 0x00, 0xC2, 0x08, 0x08, 0x0D, + 0x0C, 0x00, 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0x67, 0x02, + 0x70, 0x15, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x94, 0xF3, 0x05, 0x08, 0x11, 0x00, + 0xFF, 0x0F, 0xFF, 0x0F, 0xCC, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, + 0x00, 0xC0, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, + 0x62, 0xA0, 0x00, 0x2C, 0x00, 0x01, 0x37, 0x52, 0x01, 0x01, 0x6C, 0x00, 0xC3, 0x00, 0x04, 0x00, + 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x28, 0x01, 0x00, 0x13, 0x11, 0x01, 0x00, 0x10, + 0xBE, 0xBF, 0x00, 0x12, 0x0F, 0x02, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x2C, 0x7F, 0x14, 0x00, 0x12, + 0x00, 0x10, 0x00, 0x14, 0x18, 0x00, 0x06, 0xF3, 0x02, 0x30, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x30, 0x00, 0x32, 0x00, 0x05, 0x20, 0x00, 0x0F, 0x18, 0x00, 0x05, + 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x14, 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x11, 0x10, 0x0C, 0x00, + 0x0C, 0x7A, 0x00, 0x05, 0x50, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, + 0x51, 0x18, 0x00, 0x00, 0x28, 0x01, 0x23, 0x40, 0x01, 0x3C, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, + 0x11, 0x58, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xEC, 0x00, 0x0D, 0x17, 0x02, 0x0C, 0x00, 0x17, 0x03, + 0x60, 0x03, 0x02, 0xA1, 0x01, 0x7B, 0x22, 0x04, 0xFF, 0xFF, 0xAF, 0x4F, 0x01, 0x28, 0x00, 0x00, + 0x01, 0x00, 0x32, 0x8B, 0xFF, 0x07, 0x84, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, + 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, + 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, + 0x00, 0x0C, 0x01, 0x00, 0x13, 0x1B, 0x04, 0x00, 0x0C, 0x94, 0x00, 0x80, 0x2F, 0x41, 0x13, 0x1F, + 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x0B, 0xD7, 0x06, 0x40, 0x82, + 0x00, 0xB2, 0x08, 0x08, 0x03, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x10, 0x10, 0x10, 0x59, 0x03, 0x0B, + 0x94, 0x04, 0x13, 0x37, 0x72, 0x01, 0x21, 0x10, 0x02, 0x8D, 0x01, 0x31, 0x00, 0x11, 0x01, 0xB9, + 0x02, 0x00, 0x1F, 0x00, 0x13, 0x0A, 0xA9, 0x04, 0x17, 0x10, 0x77, 0x03, 0x05, 0x12, 0x00, 0x00, + 0x04, 0x04, 0xCF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x2C, + 0x01, 0x05, 0x53, 0xFF, 0xEF, 0xFF, 0xEF, 0xC0, 0x01, 0x00, 0x57, 0xDC, 0xDC, 0xDC, 0xDC, 0x0A, + 0x01, 0x00, 0x01, 0x24, 0x01, 0x21, 0x03, 0x07, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, + 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x10, 0x58, 0x01, + 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0xE0, 0x02, 0x0C, 0x74, + 0x01, 0x04, 0x08, 0x00, 0x17, 0x05, 0x10, 0x00, 0x08, 0xF8, 0x03, 0xE4, 0x01, 0x00, 0x02, 0x02, + 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xC3, 0x71, 0x0F, 0x0F, 0x98, 0x05, 0x14, 0x1F, 0xD8, 0x00, + 0x01, 0xC0, 0x03, 0x14, 0x01, 0xDD, 0x00, 0x14, 0x80, 0xB6, 0x00, 0x15, 0xF0, 0xD4, 0x03, 0x68, + 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0xD2, 0x00, 0x2F, 0xF0, 0xFF, 0xEC, 0x00, 0x05, 0x19, 0x08, + 0x0E, 0x00, 0x14, 0x30, 0xAB, 0x00, 0x0F, 0x2C, 0x00, 0x02, 0x4F, 0x76, 0x0C, 0x00, 0x04, 0x50, + 0x02, 0x01, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x9F, 0x05, 0x0F, + 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, + 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, + 0x2F, 0xEC, 0x00, 0x3C, 0x01, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsErista2[0x3AC] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x0E, 0xFC, 0x05, 0x68, 0xBC, 0x01, 0x70, 0x0A, 0x00, 0x00, 0x00, 0x04, 0xB4, + 0x01, 0x70, 0x01, 0x32, 0x54, 0x76, 0xC8, 0xE6, 0x00, 0x70, 0x24, 0x00, 0xC8, 0x34, 0x00, 0x00, + 0x00, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x1F, + 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x77, 0x00, 0x04, 0x00, 0x01, + 0xD3, 0xA6, 0xA6, 0xAF, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x03, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, + 0x00, 0x3C, 0x00, 0x19, 0x1F, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0x08, 0x46, 0x00, 0x57, 0xA1, + 0x01, 0x00, 0x00, 0x32, 0x64, 0x00, 0x00, 0xC3, 0x00, 0x13, 0x02, 0x0C, 0x00, 0x13, 0x03, 0x04, + 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x2C, + 0x00, 0x10, 0x09, 0xC8, 0x00, 0x07, 0x10, 0x00, 0x13, 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, + 0x00, 0x1C, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x2C, 0x00, 0x13, + 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x13, 0x08, 0x40, 0x00, 0x13, 0x05, 0x1C, 0x00, 0x04, + 0x58, 0x00, 0x13, 0x02, 0x18, 0x00, 0x04, 0x64, 0x00, 0x00, 0xA6, 0x00, 0xB5, 0x12, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x58, 0x01, 0x03, 0x61, 0x00, + 0x13, 0xC1, 0x50, 0x00, 0x17, 0x08, 0xC8, 0x00, 0x13, 0x03, 0x28, 0x00, 0x17, 0x05, 0x54, 0x00, + 0x13, 0x27, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xD8, 0x00, 0x08, 0x0C, 0x00, 0xA0, + 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0xBF, 0x3B, 0x5A, 0x00, 0xF1, 0x28, 0xF3, 0x0C, + 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, + 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, + 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, + 0x24, 0x06, 0x07, 0x9A, 0x12, 0xC1, 0x01, 0x2C, 0x00, 0xFF, 0xEC, 0x01, 0xB0, 0x04, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0xAB, 0x00, 0xD0, 0xC0, 0x71, 0x71, 0x03, 0x08, + 0x00, 0x00, 0x0B, 0x08, 0x72, 0x72, 0x0E, 0x0C, 0x20, 0x00, 0xC2, 0x08, 0x08, 0x0D, 0x0C, 0x00, + 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0x67, 0x02, 0x70, 0x15, + 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x94, 0xF3, 0x05, 0x08, 0x11, 0x00, 0xFF, 0x0F, + 0xFF, 0x0F, 0xCC, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, + 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0xA2, 0xA0, + 0x00, 0x2C, 0x00, 0x01, 0x37, 0x00, 0x00, 0x00, 0x80, 0x48, 0x00, 0xD3, 0x08, 0x00, 0x04, 0x00, + 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x28, 0x01, 0x00, 0x13, 0x11, 0x01, 0x00, 0x10, + 0xBE, 0xBF, 0x00, 0x12, 0x0F, 0x02, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x2C, 0x7F, 0x14, 0x00, 0x12, + 0x00, 0x10, 0x00, 0x14, 0x18, 0x00, 0x06, 0xF3, 0x02, 0x30, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x30, 0x00, 0x32, 0x00, 0x05, 0x20, 0x00, 0x0F, 0x18, 0x00, 0x05, + 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x14, 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x11, 0x10, 0x0C, 0x00, + 0x0C, 0x7A, 0x00, 0x05, 0x50, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, + 0x51, 0x18, 0x00, 0x00, 0x28, 0x01, 0x23, 0x40, 0x01, 0x3C, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, + 0x11, 0x58, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xEC, 0x00, 0x0D, 0x17, 0x02, 0x0C, 0x00, 0x17, 0x03, + 0x60, 0x03, 0x02, 0xA1, 0x01, 0x7B, 0x22, 0x04, 0xFF, 0xFF, 0xAF, 0x4F, 0x01, 0x28, 0x00, 0x00, + 0x01, 0x00, 0x32, 0x8B, 0xFF, 0x07, 0x84, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, + 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, + 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, + 0x00, 0x0C, 0x01, 0x00, 0x13, 0x1B, 0x04, 0x00, 0x0C, 0x94, 0x00, 0x80, 0x2F, 0x41, 0x13, 0x1F, + 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x0B, 0xD7, 0x06, 0x40, 0x82, + 0x00, 0xB2, 0x08, 0x08, 0x03, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x10, 0x10, 0x10, 0x59, 0x03, 0x0B, + 0x94, 0x04, 0x13, 0x37, 0x72, 0x01, 0x12, 0x10, 0x8D, 0x01, 0x31, 0x00, 0x11, 0x01, 0xB9, 0x02, + 0x00, 0x1F, 0x00, 0x13, 0x0A, 0xA9, 0x04, 0x17, 0x10, 0x77, 0x03, 0x05, 0x12, 0x00, 0x00, 0x04, + 0x04, 0xCF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x2C, 0x01, + 0x05, 0x53, 0xFF, 0xEF, 0xFF, 0xEF, 0xC0, 0x01, 0x00, 0x57, 0xDC, 0xDC, 0xDC, 0xDC, 0x0A, 0x01, + 0x00, 0x01, 0x24, 0x01, 0x21, 0x03, 0x07, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, + 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x10, 0x58, 0x01, 0xB2, + 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0xE0, 0x02, 0x0C, 0x74, 0x01, + 0x04, 0x08, 0x00, 0x17, 0x05, 0x10, 0x00, 0x17, 0x04, 0xEC, 0x03, 0xE4, 0x01, 0x00, 0x02, 0x02, + 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xC3, 0x71, 0x0F, 0x0F, 0x98, 0x05, 0x15, 0x1F, 0xF3, 0x00, + 0x00, 0xC0, 0x03, 0x14, 0x01, 0xDD, 0x00, 0x14, 0x80, 0xB6, 0x00, 0x15, 0xF0, 0xD4, 0x03, 0x68, + 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0xD2, 0x00, 0x2F, 0xF0, 0xFF, 0xEC, 0x00, 0x05, 0x19, 0x08, + 0x0E, 0x00, 0x14, 0x30, 0xAB, 0x00, 0x0F, 0x2C, 0x00, 0x02, 0x4F, 0x76, 0x0C, 0x00, 0x04, 0x50, + 0x02, 0x01, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x9F, 0x05, 0x0F, + 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, + 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, + 0x2F, 0xEC, 0x00, 0x3C, 0x01, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsErista3[0x3B0] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x0E, 0xFC, 0x05, 0x68, 0xBC, 0x01, 0x70, 0x0A, 0x00, 0x00, 0x00, 0x04, 0xB4, + 0x01, 0x70, 0x01, 0x32, 0x54, 0x76, 0xC8, 0xE6, 0x00, 0x70, 0x24, 0x00, 0xC8, 0x34, 0x00, 0x00, + 0x00, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x1F, + 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x77, 0x00, 0x04, 0x00, 0x01, + 0xD3, 0xA6, 0xA6, 0xAF, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x03, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, + 0x00, 0x3C, 0x00, 0x19, 0x1F, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0x08, 0x46, 0x00, 0x57, 0xA1, + 0x01, 0x00, 0x00, 0x32, 0x64, 0x00, 0x00, 0xC3, 0x00, 0x13, 0x02, 0x0C, 0x00, 0x13, 0x03, 0x04, + 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x2C, + 0x00, 0x10, 0x09, 0xC8, 0x00, 0x07, 0x10, 0x00, 0x13, 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, + 0x00, 0x1C, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x2C, 0x00, 0x13, + 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x13, 0x08, 0x40, 0x00, 0x13, 0x05, 0x1C, 0x00, 0x04, + 0x58, 0x00, 0x13, 0x02, 0x18, 0x00, 0x04, 0x64, 0x00, 0x00, 0xA6, 0x00, 0xB5, 0x12, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x58, 0x01, 0x03, 0x61, 0x00, + 0x13, 0xC1, 0x50, 0x00, 0x17, 0x08, 0xC8, 0x00, 0x13, 0x03, 0x2C, 0x00, 0x17, 0x05, 0x54, 0x00, + 0x13, 0x27, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xD8, 0x00, 0x13, 0x05, 0x30, 0x00, + 0x00, 0x0C, 0x00, 0xA0, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0xBF, 0x3B, 0x5A, 0x00, + 0xF1, 0x28, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, + 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, + 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, + 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0x12, 0xC1, 0x01, 0x2C, 0x00, 0xFF, 0xEC, 0x01, + 0xB0, 0x04, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0xAB, 0x00, 0xD0, 0xC0, + 0x71, 0x71, 0x03, 0x08, 0x00, 0x00, 0x0B, 0x08, 0x72, 0x72, 0x0E, 0x0C, 0x20, 0x00, 0xC2, 0x08, + 0x08, 0x0D, 0x0C, 0x00, 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, + 0x67, 0x02, 0x70, 0x15, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x94, 0xF3, 0x05, 0x08, + 0x11, 0x00, 0xFF, 0x0F, 0xFF, 0x0F, 0xCC, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, + 0x01, 0x0C, 0x00, 0xC0, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, + 0x10, 0x00, 0xA2, 0xA0, 0x00, 0x2C, 0x00, 0x01, 0x37, 0x00, 0x00, 0x00, 0x80, 0x48, 0x00, 0xD3, + 0x08, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x28, 0x01, 0x00, 0x13, + 0x11, 0x01, 0x00, 0x10, 0xBE, 0xBF, 0x00, 0x12, 0x0F, 0x02, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x2C, + 0x7F, 0x14, 0x00, 0x12, 0x00, 0x10, 0x00, 0x14, 0x18, 0x00, 0x06, 0xF3, 0x02, 0x30, 0x00, 0x2E, + 0x00, 0x33, 0x00, 0x30, 0x00, 0x33, 0x00, 0x35, 0x00, 0x30, 0x00, 0x32, 0x00, 0x05, 0x20, 0x00, + 0x0F, 0x18, 0x00, 0x05, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x14, 0x5A, 0x00, 0x00, 0x5C, 0x00, + 0x11, 0x10, 0x0C, 0x00, 0x0C, 0x7A, 0x00, 0x05, 0x50, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, + 0x09, 0x00, 0x4F, 0x00, 0x51, 0x18, 0x00, 0x00, 0x28, 0x01, 0x23, 0x40, 0x01, 0x0C, 0x02, 0x54, + 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x58, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xEC, 0x00, 0x0D, 0x17, 0x02, + 0x0C, 0x00, 0x17, 0x03, 0x60, 0x03, 0x02, 0xA1, 0x01, 0x7B, 0x22, 0x04, 0xFF, 0xFF, 0xAF, 0x4F, + 0x01, 0x28, 0x00, 0x00, 0x01, 0x00, 0x32, 0x8B, 0xFF, 0x07, 0x84, 0x00, 0xF0, 0x10, 0x32, 0x54, + 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, + 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, + 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x94, 0x00, 0x80, + 0x2F, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x0B, + 0xD7, 0x06, 0x40, 0x82, 0x00, 0xB2, 0x08, 0x08, 0x03, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x10, 0x10, + 0x10, 0x59, 0x03, 0x0B, 0x94, 0x04, 0x13, 0x37, 0x72, 0x01, 0x12, 0x10, 0x8D, 0x01, 0x31, 0x00, + 0x11, 0x01, 0xB9, 0x02, 0x00, 0x1F, 0x00, 0x13, 0x0A, 0xA9, 0x04, 0x17, 0x10, 0x77, 0x03, 0x05, + 0x12, 0x00, 0x00, 0x04, 0x04, 0xCF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, + 0x67, 0x76, 0x2C, 0x01, 0x05, 0x53, 0xFF, 0xEF, 0xFF, 0xEF, 0xC0, 0x01, 0x00, 0x57, 0xDC, 0xDC, + 0xDC, 0xDC, 0x0A, 0x01, 0x00, 0x01, 0x24, 0x01, 0x21, 0x03, 0x07, 0x04, 0x00, 0xF1, 0x03, 0x00, + 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, + 0x10, 0x58, 0x01, 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0xE0, + 0x02, 0x0C, 0x74, 0x01, 0x04, 0x08, 0x00, 0x17, 0x05, 0x10, 0x00, 0x17, 0x04, 0xF8, 0x03, 0xE4, + 0x01, 0x00, 0x02, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xC3, 0x71, 0x0F, 0x0F, 0x98, 0x05, + 0x15, 0x1F, 0xF3, 0x00, 0x00, 0xC0, 0x03, 0x14, 0x01, 0xDD, 0x00, 0x14, 0x80, 0xB6, 0x00, 0x15, + 0xF0, 0xD4, 0x03, 0x68, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0xD2, 0x00, 0x2F, 0xF0, 0xFF, 0xEC, + 0x00, 0x05, 0x19, 0x08, 0x0E, 0x00, 0x14, 0x30, 0xAB, 0x00, 0x0F, 0x2C, 0x00, 0x02, 0x4F, 0x76, + 0x0C, 0x00, 0x04, 0x50, 0x02, 0x01, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, + 0x40, 0x9F, 0x05, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, + 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, + 0x46, 0x2C, 0x38, 0x00, 0x2F, 0xEC, 0x00, 0x3C, 0x01, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsErista4[0x3AC] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x0E, 0xFC, 0x05, 0x68, 0xBC, 0x01, 0x70, 0x0A, 0x00, 0x00, 0x00, 0x04, 0xB4, + 0x01, 0x70, 0x01, 0x32, 0x54, 0x76, 0xC8, 0xE6, 0x00, 0x70, 0x24, 0x00, 0xC8, 0x34, 0x00, 0x00, + 0x00, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x1F, + 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x77, 0x00, 0x04, 0x00, 0x01, + 0xD3, 0xA6, 0xA6, 0xAF, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x03, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, + 0x00, 0x3C, 0x00, 0x19, 0x1F, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0x08, 0x46, 0x00, 0x57, 0xA1, + 0x01, 0x00, 0x00, 0x32, 0x64, 0x00, 0x00, 0xC3, 0x00, 0x13, 0x02, 0x0C, 0x00, 0x13, 0x03, 0x04, + 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x2C, + 0x00, 0x10, 0x09, 0xC8, 0x00, 0x07, 0x10, 0x00, 0x13, 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, + 0x00, 0x1C, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x2C, 0x00, 0x13, + 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x13, 0x08, 0x40, 0x00, 0x13, 0x05, 0x1C, 0x00, 0x04, + 0x58, 0x00, 0x13, 0x02, 0x18, 0x00, 0x04, 0x64, 0x00, 0x00, 0xA6, 0x00, 0xB5, 0x12, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x58, 0x01, 0x03, 0x61, 0x00, + 0x13, 0xC1, 0x50, 0x00, 0x17, 0x08, 0xC8, 0x00, 0x13, 0x03, 0x28, 0x00, 0x17, 0x05, 0x54, 0x00, + 0x13, 0x27, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xD8, 0x00, 0x08, 0x0C, 0x00, 0xA0, + 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0xBF, 0x3B, 0x5A, 0x00, 0xF1, 0x28, 0xF3, 0x0C, + 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, + 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, + 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, + 0x24, 0x06, 0x07, 0x9A, 0x12, 0xC1, 0x01, 0x2C, 0x00, 0xFF, 0xEC, 0x01, 0xB0, 0x04, 0x00, 0x01, + 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0xAB, 0x00, 0xD0, 0xC0, 0x71, 0x71, 0x03, 0x08, + 0x00, 0x00, 0x0B, 0x08, 0x72, 0x72, 0x0E, 0x0C, 0x20, 0x00, 0xC2, 0x08, 0x08, 0x0D, 0x0C, 0x00, + 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0x67, 0x02, 0x70, 0x15, + 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x94, 0xF3, 0x05, 0x08, 0x11, 0x00, 0xFF, 0x0F, + 0xFF, 0x0F, 0xCC, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, + 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0xA2, 0xA0, + 0x00, 0x2C, 0x00, 0x01, 0x37, 0x00, 0x00, 0x00, 0x80, 0x48, 0x00, 0xD3, 0x08, 0x00, 0x04, 0x00, + 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x28, 0x01, 0x00, 0x13, 0x11, 0x01, 0x00, 0x10, + 0xBE, 0xBF, 0x00, 0x12, 0x0F, 0x02, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x2C, 0x7F, 0x14, 0x00, 0x12, + 0x00, 0x10, 0x00, 0x14, 0x18, 0x00, 0x06, 0xF3, 0x02, 0x30, 0x00, 0x2E, 0x00, 0x33, 0x00, 0x30, + 0x00, 0x33, 0x00, 0x35, 0x00, 0x30, 0x00, 0x32, 0x00, 0x05, 0x20, 0x00, 0x0F, 0x18, 0x00, 0x05, + 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x14, 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x11, 0x10, 0x0C, 0x00, + 0x0C, 0x7A, 0x00, 0x05, 0x50, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, + 0x51, 0x18, 0x00, 0x00, 0x28, 0x01, 0x23, 0x40, 0x01, 0x3C, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, + 0x11, 0x58, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xEC, 0x00, 0x0D, 0x17, 0x02, 0x0C, 0x00, 0x17, 0x03, + 0x60, 0x03, 0x02, 0xA1, 0x01, 0x7B, 0x22, 0x04, 0xFF, 0xFF, 0xAF, 0x4F, 0x01, 0x28, 0x00, 0x00, + 0x01, 0x00, 0x32, 0x8B, 0xFF, 0x07, 0x84, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, + 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, + 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, + 0x00, 0x0C, 0x01, 0x00, 0x13, 0x1B, 0x04, 0x00, 0x0C, 0x94, 0x00, 0x80, 0x2F, 0x41, 0x13, 0x1F, + 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x0B, 0xD7, 0x06, 0x40, 0x82, + 0x00, 0xB2, 0x08, 0x08, 0x03, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x10, 0x10, 0x10, 0x59, 0x03, 0x0B, + 0x94, 0x04, 0x13, 0x37, 0x72, 0x01, 0x12, 0x10, 0x8D, 0x01, 0x31, 0x00, 0x11, 0x01, 0xB9, 0x02, + 0x00, 0x1F, 0x00, 0x13, 0x0A, 0xA9, 0x04, 0x17, 0x10, 0x77, 0x03, 0x05, 0x12, 0x00, 0x00, 0x04, + 0x04, 0xCF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x2C, 0x01, + 0x05, 0x53, 0xFF, 0xEF, 0xFF, 0xEF, 0xC0, 0x01, 0x00, 0x57, 0xDC, 0xDC, 0xDC, 0xDC, 0x0A, 0x01, + 0x00, 0x01, 0x24, 0x01, 0x21, 0x03, 0x0C, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, + 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x18, 0x58, 0x01, 0xB2, + 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0xE0, 0x02, 0x0C, 0x74, 0x01, + 0x04, 0x08, 0x00, 0x17, 0x05, 0x10, 0x00, 0x17, 0x04, 0xEC, 0x03, 0xE4, 0x01, 0x00, 0x02, 0x02, + 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xC3, 0x71, 0x0F, 0x0F, 0x98, 0x05, 0x15, 0x1F, 0xF3, 0x00, + 0x00, 0xC0, 0x03, 0x14, 0x01, 0xDD, 0x00, 0x14, 0x80, 0xB6, 0x00, 0x15, 0xF0, 0xD4, 0x03, 0x68, + 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0xD2, 0x00, 0x2F, 0xF0, 0xFF, 0xEC, 0x00, 0x05, 0x19, 0x08, + 0x0E, 0x00, 0x14, 0x30, 0xAB, 0x00, 0x0F, 0x2C, 0x00, 0x02, 0x4F, 0x76, 0x0C, 0x00, 0x04, 0x50, + 0x02, 0x01, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x9F, 0x05, 0x0F, + 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, + 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, + 0x2F, 0xEC, 0x00, 0x3C, 0x01, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsErista5[0x3B0] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x0E, 0xFC, 0x05, 0x68, 0xBC, 0x01, 0x70, 0x0A, 0x00, 0x00, 0x00, 0x04, 0xB4, + 0x01, 0x70, 0x01, 0x32, 0x54, 0x76, 0xC8, 0xE6, 0x00, 0x70, 0x24, 0x00, 0xC8, 0x34, 0x00, 0x00, + 0x00, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x1F, + 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x77, 0x00, 0x04, 0x00, 0x01, + 0xD3, 0xA6, 0xA6, 0xAF, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x03, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, + 0x00, 0x3C, 0x00, 0x19, 0x1F, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0x08, 0x46, 0x00, 0x57, 0xA1, + 0x01, 0x00, 0x00, 0x32, 0x64, 0x00, 0x00, 0xC3, 0x00, 0x13, 0x02, 0x0C, 0x00, 0x13, 0x03, 0x04, + 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x25, 0x00, 0x00, 0x00, 0x13, 0x2C, + 0x00, 0x10, 0x09, 0xC8, 0x00, 0x07, 0x10, 0x00, 0x13, 0x0D, 0x04, 0x00, 0x53, 0x08, 0x00, 0x00, + 0x00, 0x0B, 0x1C, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x2C, 0x00, + 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x13, 0x08, 0x40, 0x00, 0x13, 0x05, 0x1C, 0x00, + 0x04, 0x58, 0x00, 0x13, 0x02, 0x18, 0x00, 0x03, 0x5F, 0x01, 0x10, 0x80, 0x0A, 0x00, 0xB5, 0x12, + 0x00, 0x00, 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x58, 0x01, 0x03, + 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x17, 0x08, 0xC8, 0x00, 0x13, 0x03, 0x2C, 0x00, 0x17, 0x05, + 0x54, 0x00, 0x13, 0x27, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xD8, 0x00, 0x13, 0x05, + 0x30, 0x00, 0x00, 0x0C, 0x00, 0xA0, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0xBF, 0x3B, + 0x5A, 0x00, 0xF1, 0x28, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, + 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, + 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, + 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0x12, 0xC1, 0x01, 0x2C, 0x00, 0xFF, + 0xEC, 0x01, 0xB0, 0x04, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0xAB, 0x00, + 0xD0, 0xC0, 0x71, 0x71, 0x03, 0x08, 0x00, 0x00, 0x0B, 0x08, 0x72, 0x72, 0x0E, 0x0C, 0x20, 0x00, + 0xC2, 0x08, 0x08, 0x0D, 0x0C, 0x00, 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, + 0x11, 0x08, 0x67, 0x02, 0x70, 0x15, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x94, 0xF3, + 0x05, 0x08, 0x11, 0x00, 0xFF, 0x0F, 0xFF, 0x0F, 0xCC, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, + 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, + 0x00, 0x80, 0x10, 0x00, 0x62, 0xA0, 0x00, 0x2C, 0x00, 0x01, 0x37, 0x52, 0x01, 0x01, 0x6C, 0x00, + 0xC3, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x28, 0x01, 0x00, 0x13, + 0x11, 0x01, 0x00, 0x10, 0xBE, 0xBF, 0x00, 0x12, 0x0F, 0x02, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x2C, + 0x7F, 0x15, 0x00, 0x12, 0x00, 0x12, 0x00, 0x16, 0x18, 0x00, 0x06, 0xF5, 0x00, 0x32, 0x00, 0x2F, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x2F, 0x00, 0x33, 0x0C, 0x02, 0x0F, 0x18, + 0x00, 0x05, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x13, 0x15, 0x5A, 0x00, 0x02, 0x5E, 0x00, 0x3B, 0x16, + 0x00, 0x15, 0x78, 0x00, 0x05, 0x50, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, + 0x00, 0x51, 0x18, 0x00, 0x00, 0x28, 0x01, 0x23, 0x40, 0x01, 0x0C, 0x02, 0x54, 0xAB, 0x00, 0x0A, + 0x04, 0x11, 0x58, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xEC, 0x00, 0x0D, 0x17, 0x02, 0x0C, 0x00, 0x17, + 0x03, 0x60, 0x03, 0x02, 0xA1, 0x01, 0x7B, 0x22, 0x04, 0xFF, 0xFF, 0xAF, 0x4F, 0x01, 0x28, 0x00, + 0x00, 0x01, 0x00, 0x32, 0x8B, 0xFF, 0x07, 0x84, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, + 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, + 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, + 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x94, 0x00, 0x80, 0x2F, 0x41, 0x13, + 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x0B, 0xD7, 0x06, 0x40, + 0x82, 0x00, 0xB2, 0x08, 0x08, 0x03, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x10, 0x10, 0x10, 0x59, 0x03, + 0x0B, 0x94, 0x04, 0x11, 0x37, 0x16, 0x03, 0x30, 0x00, 0x00, 0x10, 0xAD, 0x00, 0x51, 0x30, 0x00, + 0x00, 0x11, 0x01, 0xB9, 0x02, 0x00, 0x1F, 0x00, 0x13, 0x0A, 0xA9, 0x04, 0x17, 0x10, 0x77, 0x03, + 0x05, 0x12, 0x00, 0x00, 0x04, 0x04, 0xCF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, + 0x8A, 0x67, 0x76, 0x2C, 0x01, 0x05, 0x53, 0xFF, 0xEF, 0xFF, 0xEF, 0xC0, 0x01, 0x00, 0x57, 0xDC, + 0xDC, 0xDC, 0xDC, 0x0A, 0x01, 0x00, 0x01, 0x24, 0x01, 0x21, 0x03, 0x07, 0x04, 0x00, 0xF1, 0x03, + 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, + 0x00, 0x10, 0x58, 0x01, 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, + 0xE0, 0x02, 0x0C, 0x74, 0x01, 0x04, 0x08, 0x00, 0x17, 0x05, 0x10, 0x00, 0x08, 0xF8, 0x03, 0xE4, + 0x01, 0x00, 0x02, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xC3, 0x71, 0x0F, 0x0F, 0x98, 0x05, + 0x14, 0x1F, 0xD8, 0x00, 0x01, 0xC0, 0x03, 0x14, 0x01, 0xDD, 0x00, 0x14, 0x80, 0xB6, 0x00, 0x15, + 0xF0, 0xD4, 0x03, 0x68, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0xD2, 0x00, 0x2F, 0xF0, 0xFF, 0xEC, + 0x00, 0x05, 0x19, 0x08, 0x0E, 0x00, 0x14, 0x30, 0xAB, 0x00, 0x0F, 0x2C, 0x00, 0x02, 0x4F, 0x76, + 0x0C, 0x00, 0x04, 0x50, 0x02, 0x01, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, + 0x40, 0x9F, 0x05, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, + 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, + 0x46, 0x2C, 0x38, 0x00, 0x2F, 0xEC, 0x00, 0x3C, 0x01, 0x02, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsErista6[0x3B3] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x0E, 0xFC, 0x05, 0x68, 0xBC, 0x01, 0x70, 0x0A, 0x00, 0x00, 0x00, 0x04, 0xB4, + 0x01, 0x70, 0x01, 0x32, 0x54, 0x76, 0xC8, 0xE6, 0x00, 0x70, 0x24, 0x00, 0xC8, 0x34, 0x00, 0x00, + 0x00, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x18, 0x00, 0xFF, 0x01, 0xFF, 0xFF, 0x1F, + 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x77, 0x00, 0x04, 0x00, 0x01, + 0xD3, 0xA6, 0xA6, 0xAF, 0xB3, 0x3C, 0x9E, 0x00, 0x00, 0x03, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, + 0x00, 0x3C, 0x00, 0x19, 0x1F, 0x01, 0x00, 0x42, 0x00, 0x00, 0x04, 0x08, 0x46, 0x00, 0x57, 0xA1, + 0x01, 0x00, 0x00, 0x32, 0x64, 0x00, 0x00, 0xC3, 0x00, 0x13, 0x02, 0x0C, 0x00, 0x13, 0x03, 0x04, + 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x2C, + 0x00, 0x10, 0x09, 0xC8, 0x00, 0x07, 0x10, 0x00, 0x13, 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, + 0x00, 0x1C, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x2C, 0x00, 0x13, + 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x13, 0x08, 0x40, 0x00, 0x13, 0x05, 0x1C, 0x00, 0x04, + 0x58, 0x00, 0x13, 0x02, 0x18, 0x00, 0x04, 0x64, 0x00, 0x00, 0xA6, 0x00, 0xB5, 0x12, 0x00, 0x00, + 0x00, 0x14, 0x00, 0x00, 0x00, 0x16, 0x00, 0x00, 0x0C, 0x00, 0x01, 0x58, 0x01, 0x03, 0x61, 0x00, + 0x13, 0xC1, 0x50, 0x00, 0x17, 0x08, 0xC8, 0x00, 0x13, 0x03, 0x2C, 0x00, 0x17, 0x05, 0x54, 0x00, + 0x13, 0x3B, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xD8, 0x00, 0x13, 0x05, 0x30, 0x00, + 0x00, 0x0C, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0xBF, 0x29, 0x00, 0xF1, + 0x29, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, + 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, + 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, + 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0x12, 0xC1, 0x01, 0x2C, 0x00, 0xFF, 0xEC, 0x01, + 0xB0, 0x04, 0x00, 0x01, 0x08, 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0xAB, 0x00, 0xD0, 0xC0, + 0x71, 0x71, 0x03, 0x08, 0x00, 0x00, 0x0B, 0x08, 0x72, 0x72, 0x0E, 0x0C, 0x20, 0x00, 0xC2, 0x08, + 0x08, 0x0D, 0x0C, 0x00, 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, + 0x67, 0x02, 0x70, 0x15, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x94, 0xF3, 0x05, 0x08, + 0x11, 0x00, 0xFF, 0x0F, 0xFF, 0x0F, 0xCC, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, + 0x01, 0x0C, 0x00, 0xC0, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, + 0x10, 0x00, 0xA2, 0xA0, 0x00, 0x2C, 0x00, 0x01, 0x37, 0x00, 0x00, 0x00, 0x80, 0x48, 0x00, 0xD3, + 0x08, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x28, 0x01, 0x00, 0x13, + 0x11, 0x01, 0x00, 0x10, 0xBE, 0xBF, 0x00, 0x12, 0x0F, 0x02, 0x00, 0x1F, 0x00, 0x01, 0x00, 0x2C, + 0x7F, 0x15, 0x00, 0x12, 0x00, 0x12, 0x00, 0x16, 0x18, 0x00, 0x06, 0xF5, 0x00, 0x32, 0x00, 0x2F, + 0x00, 0x32, 0x00, 0x31, 0x00, 0x34, 0x00, 0x36, 0x00, 0x2F, 0x00, 0x33, 0x0C, 0x02, 0x0F, 0x18, + 0x00, 0x05, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x13, 0x15, 0x5A, 0x00, 0x02, 0x5E, 0x00, 0x3B, 0x16, + 0x00, 0x15, 0x78, 0x00, 0x05, 0x50, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, + 0x00, 0x51, 0x18, 0x00, 0x00, 0x28, 0x01, 0x23, 0x40, 0x01, 0x0C, 0x02, 0x54, 0xAB, 0x00, 0x0A, + 0x04, 0x11, 0x58, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xEC, 0x00, 0x0D, 0x17, 0x02, 0x0C, 0x00, 0x17, + 0x03, 0x60, 0x03, 0x02, 0xA1, 0x01, 0x7B, 0x22, 0x04, 0xFF, 0xFF, 0xAF, 0x4F, 0x01, 0x28, 0x00, + 0x00, 0x01, 0x00, 0x32, 0x8B, 0xFF, 0x07, 0x84, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, + 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, + 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, + 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x94, 0x00, 0x80, 0x2F, 0x41, 0x13, + 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x80, 0xFF, 0xFF, 0xFF, 0x7F, 0x0B, 0xD7, 0x06, 0x40, + 0x82, 0x00, 0xB2, 0x08, 0x08, 0x03, 0x00, 0x00, 0x5C, 0x01, 0x00, 0x10, 0x10, 0x10, 0x59, 0x03, + 0x0B, 0x94, 0x04, 0x11, 0x37, 0x16, 0x03, 0x30, 0x00, 0x00, 0x10, 0x05, 0x00, 0x51, 0x30, 0x00, + 0x00, 0x11, 0x01, 0xB9, 0x02, 0x00, 0x1F, 0x00, 0x13, 0x0A, 0xA9, 0x04, 0x17, 0x10, 0x77, 0x03, + 0x05, 0x12, 0x00, 0x00, 0x04, 0x04, 0xCF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, + 0x8A, 0x67, 0x76, 0x2C, 0x01, 0x05, 0x53, 0xFF, 0xEF, 0xFF, 0xEF, 0xC0, 0x01, 0x00, 0x57, 0xDC, + 0xDC, 0xDC, 0xDC, 0x0A, 0x01, 0x00, 0x01, 0x24, 0x01, 0x21, 0x03, 0x07, 0x04, 0x00, 0xF1, 0x03, + 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, + 0x00, 0x10, 0x58, 0x01, 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, + 0xE0, 0x02, 0x0C, 0x74, 0x01, 0x04, 0x08, 0x00, 0x17, 0x05, 0x10, 0x00, 0x13, 0x04, 0x10, 0x00, + 0x11, 0x07, 0x10, 0x00, 0xC4, 0x02, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, + 0x0F, 0x98, 0x05, 0x15, 0x1F, 0xF3, 0x00, 0x00, 0xC0, 0x03, 0x14, 0x01, 0xDD, 0x00, 0x14, 0x80, + 0xB6, 0x00, 0x15, 0xF0, 0xD4, 0x03, 0x68, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0xD2, 0x00, 0x2F, + 0xF0, 0xFF, 0xEC, 0x00, 0x05, 0x19, 0x08, 0x0E, 0x00, 0x14, 0x30, 0xAB, 0x00, 0x0F, 0x2C, 0x00, + 0x02, 0x4F, 0x76, 0x0C, 0x00, 0x04, 0x50, 0x02, 0x01, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, + 0x38, 0x7E, 0x16, 0x40, 0x9F, 0x05, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, + 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, + 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x2F, 0xEC, 0x00, 0x3C, 0x01, 0x02, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko0[0x3A9] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0x82, + 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x0E, 0x00, 0x11, 0x88, 0x04, 0x00, 0x26, 0x20, + 0x12, 0x0C, 0x00, 0x02, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, 0xBC, 0xBC, 0xC5, 0xB3, 0x3C, 0x9E, + 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, + 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, + 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, + 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, + 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, + 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, + 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, + 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x53, 0x0E, 0x00, 0x00, 0x00, 0x05, 0x1C, 0x00, 0x05, 0x24, + 0x01, 0x03, 0x6C, 0x00, 0x03, 0xD7, 0x01, 0x10, 0x80, 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, + 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, + 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x74, 0x00, 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x60, + 0x00, 0x04, 0x54, 0x00, 0x13, 0x3B, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xEC, 0x00, + 0x08, 0x0C, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, + 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, + 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, + 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, + 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, + 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, + 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, 0x88, 0x5D, 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, + 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, 0x8C, 0x16, 0x16, 0x16, 0x88, 0x2C, 0x00, 0x2C, + 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, + 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, 0x00, 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, + 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xA2, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, + 0x1C, 0x00, 0x71, 0xA0, 0x00, 0x2C, 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x00, 0x10, 0x01, 0xDB, + 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, + 0x78, 0x9A, 0x02, 0x1F, 0x0F, 0xF4, 0x02, 0x31, 0x7F, 0x22, 0x00, 0x0E, 0x00, 0x10, 0x00, 0x1B, + 0x18, 0x00, 0x06, 0xF3, 0x02, 0x43, 0x00, 0x49, 0x00, 0x45, 0x00, 0x42, 0x00, 0x47, 0x00, 0x49, + 0x00, 0x47, 0x00, 0x46, 0x00, 0x16, 0xE6, 0x00, 0x0F, 0x18, 0x00, 0x05, 0x1F, 0x28, 0x02, 0x00, + 0x0C, 0x11, 0x22, 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x1B, 0x00, 0x22, 0x94, + 0x00, 0x00, 0x05, 0x54, 0x01, 0xB3, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, + 0x80, 0x18, 0x00, 0x04, 0x08, 0x00, 0x01, 0x40, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, + 0x01, 0x03, 0x04, 0x00, 0x0F, 0xE4, 0x03, 0x0E, 0x07, 0x0C, 0x00, 0x04, 0xA8, 0x04, 0x01, 0x14, + 0x00, 0x8B, 0x01, 0x22, 0x04, 0xFF, 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, + 0x9F, 0xFF, 0x37, 0x98, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, + 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, + 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, + 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, + 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, + 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, + 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, 0x14, 0x40, 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, 0x00, + 0x40, 0x00, 0x04, 0x10, 0x80, 0x04, 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, + 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, + 0x00, 0xEF, 0x14, 0x00, 0x4D, 0x1C, 0x1C, 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, 0x00, + 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, + 0x9C, 0x4B, 0x00, 0x10, 0xA4, 0x01, 0xEF, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, + 0x28, 0x10, 0x00, 0x80, 0x01, 0xC0, 0x01, 0x00, 0x04, 0x08, 0x00, 0x17, 0x05, 0x0C, 0x02, 0x13, + 0x04, 0x10, 0x00, 0x12, 0x07, 0x62, 0x00, 0xD2, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, + 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, + 0xA4, 0x04, 0x24, 0x00, 0x80, 0x96, 0x00, 0x15, 0xF0, 0x24, 0x04, 0x68, 0x43, 0xC3, 0xBA, 0xE4, + 0xD3, 0x1E, 0x0B, 0x05, 0x2F, 0xF0, 0xFF, 0xF4, 0x00, 0x05, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, + 0x05, 0x1F, 0x03, 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, + 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, + 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, + 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, + 0x0D, 0x3C, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko1[0x3AA] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0x82, + 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x0E, 0x00, 0x11, 0x88, 0x04, 0x00, 0x26, 0x20, + 0x12, 0x0C, 0x00, 0x02, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, 0xBC, 0xBC, 0xC5, 0xB3, 0x3C, 0x9E, + 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, + 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, + 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, + 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, + 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, + 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, + 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, + 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x53, 0x0E, 0x00, 0x00, 0x00, 0x05, 0x1C, 0x00, 0x05, 0x24, + 0x01, 0x03, 0x6C, 0x00, 0x03, 0xD7, 0x01, 0x10, 0x80, 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, + 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, + 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x74, 0x00, 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x60, + 0x00, 0x04, 0x54, 0x00, 0x13, 0x3B, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xEC, 0x00, + 0x08, 0x0C, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, + 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, + 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, + 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, + 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, + 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, + 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, 0x88, 0x5D, 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, + 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, 0x8C, 0x16, 0x16, 0x16, 0x88, 0x2C, 0x00, 0x2C, + 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, + 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, 0x00, 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, + 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xA2, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, + 0x1C, 0x00, 0x71, 0xA0, 0x00, 0x2C, 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x00, 0x10, 0x01, 0xDB, + 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, + 0x78, 0x9A, 0x02, 0x1F, 0x0F, 0xF4, 0x02, 0x31, 0x7F, 0x16, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x17, + 0x18, 0x00, 0x06, 0xF1, 0x02, 0x43, 0x00, 0x45, 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, + 0x00, 0x41, 0x00, 0x46, 0x00, 0x0C, 0xBA, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, + 0x00, 0x0C, 0x11, 0x16, 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x16, + 0x94, 0x00, 0x00, 0x05, 0x54, 0x01, 0xB3, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, + 0x51, 0x80, 0x18, 0x00, 0x04, 0x08, 0x00, 0x01, 0x6E, 0x00, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, + 0x5C, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xE4, 0x03, 0x0E, 0x07, 0x0C, 0x00, 0x04, 0xA8, 0x04, 0x01, + 0x14, 0x00, 0x8B, 0x01, 0x22, 0x04, 0xFF, 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, + 0x32, 0x9F, 0xFF, 0x37, 0x98, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, + 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, + 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, + 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, + 0x01, 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, + 0x34, 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, + 0x02, 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, 0x14, 0x40, 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, + 0x00, 0x40, 0x00, 0x04, 0x10, 0x80, 0x04, 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, + 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, + 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4D, 0x1C, 0x1C, 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, + 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, + 0x10, 0x9C, 0x4B, 0x00, 0x10, 0xA4, 0x01, 0xEF, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, + 0x00, 0x28, 0x10, 0x00, 0x80, 0x01, 0xC0, 0x01, 0x00, 0x04, 0x08, 0x00, 0x17, 0x05, 0x0C, 0x02, + 0x13, 0x04, 0x10, 0x00, 0x12, 0x07, 0x62, 0x00, 0xD2, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, + 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, + 0x01, 0xA4, 0x04, 0x24, 0x00, 0x80, 0x96, 0x00, 0x15, 0xF0, 0x24, 0x04, 0x68, 0x43, 0xC3, 0xBA, + 0xE4, 0xD3, 0x1E, 0x0B, 0x05, 0x2F, 0xF0, 0xFF, 0xF4, 0x00, 0x05, 0x19, 0x08, 0x0E, 0x00, 0x01, + 0xE6, 0x05, 0x1F, 0x03, 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, + 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, + 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, + 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, + 0x00, 0x0D, 0x3C, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko2[0x3B3] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x61, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x30, 0x01, 0x13, + 0x02, 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, + 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, + 0x08, 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, + 0x18, 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x13, 0x0E, 0x18, + 0x00, 0x17, 0x05, 0x6C, 0x00, 0x00, 0x34, 0x00, 0x13, 0x0C, 0xE0, 0x01, 0x40, 0x00, 0x00, 0x00, + 0x80, 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, + 0x0C, 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x40, + 0x00, 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x5C, 0x00, 0x13, 0x02, 0xC0, 0x00, 0x13, 0x3B, 0x04, + 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xEC, 0x00, 0x08, 0x0C, 0x00, 0x90, 0x1C, 0x03, 0x00, + 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, + 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, + 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, + 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, + 0x9A, 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x08, 0x00, 0x00, + 0x02, 0x08, 0x00, 0x00, 0x0D, 0xAB, 0x00, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x08, 0x00, 0x00, + 0x0B, 0x08, 0x5D, 0x5D, 0x0E, 0x0C, 0x5D, 0x5D, 0x0C, 0x08, 0x08, 0x08, 0x0D, 0x0C, 0x00, 0x00, + 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, + 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, + 0x00, 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xA2, 0x08, + 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x1C, 0x00, 0x71, 0xA0, 0x00, 0x2C, 0x00, + 0x01, 0x37, 0x0F, 0x52, 0x01, 0x11, 0x00, 0x64, 0x01, 0xB3, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, + 0x0F, 0xF4, 0x20, 0x02, 0x35, 0x01, 0x00, 0x13, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, + 0x0F, 0xF4, 0x02, 0x31, 0x7F, 0x16, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, 0xF1, + 0x02, 0x43, 0x00, 0x45, 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, 0x00, 0x41, 0x00, 0x46, + 0x00, 0x0C, 0xBA, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x10, 0x02, 0x00, 0x0C, 0x11, 0x16, + 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x16, 0x94, 0x00, 0x00, 0x05, + 0x54, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x18, 0x00, 0x63, + 0x80, 0x01, 0x00, 0x00, 0x40, 0x01, 0x40, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, + 0x03, 0x04, 0x00, 0x0F, 0xE4, 0x03, 0x0E, 0x0B, 0xCC, 0x02, 0x05, 0x78, 0x03, 0x8B, 0x01, 0x22, + 0x04, 0xFF, 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, 0x9F, 0xFF, 0x37, 0x80, + 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, + 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, + 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, + 0x00, 0x0C, 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x85, + 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, 0x10, 0x0A, 0x00, 0x0F, + 0xCC, 0x00, 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, 0x13, 0x21, + 0x15, 0x04, 0x14, 0x40, 0x8B, 0x02, 0x1D, 0x00, 0x9D, 0x02, 0x01, 0x04, 0x04, 0xDF, 0x81, 0x10, + 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, 0x00, 0x4C, 0x22, 0x10, + 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4C, 0x1C, 0x1C, 0x1C, 0x1C, 0xF0, + 0x01, 0x31, 0x02, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, + 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x20, 0x20, 0x00, 0xB1, 0x08, 0x4C, + 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x04, 0x02, 0x0D, 0xC0, 0x01, 0x04, 0x08, + 0x00, 0x17, 0x05, 0x10, 0x00, 0x13, 0x04, 0x10, 0x00, 0x11, 0x07, 0x10, 0x00, 0xE2, 0x02, 0x02, + 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, 0x1F, + 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0xA4, 0x04, 0x04, 0x84, 0x03, 0x35, 0x00, 0x00, 0xF0, + 0x24, 0x04, 0x60, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x0F, 0x05, 0x3B, 0x80, 0x2A, 0x02, 0x1C, + 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, 0x05, 0x1F, 0x03, 0x2C, 0x00, 0x05, + 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, + 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, + 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, + 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, 0x0D, 0x3C, 0x01, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko3[0x3AA] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0x82, + 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x0E, 0x00, 0x11, 0x88, 0x04, 0x00, 0x26, 0x20, + 0x12, 0x0C, 0x00, 0x02, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, 0xBC, 0xBC, 0xC5, 0xB3, 0x3C, 0x9E, + 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, + 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, + 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, + 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, + 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, + 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, + 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, + 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x53, 0x0E, 0x00, 0x00, 0x00, 0x05, 0x1C, 0x00, 0x05, 0x24, + 0x01, 0x03, 0x6C, 0x00, 0x03, 0xD7, 0x01, 0x10, 0x80, 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, + 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, + 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x74, 0x00, 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x60, + 0x00, 0x04, 0x54, 0x00, 0x13, 0x3B, 0x04, 0x00, 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xEC, 0x00, + 0x08, 0x0C, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, + 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, + 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, + 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, + 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, + 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, + 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, 0x88, 0x5D, 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, + 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, 0x8C, 0x16, 0x16, 0x16, 0x88, 0x2C, 0x00, 0x2C, + 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, + 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, 0x00, 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, + 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xA2, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, + 0x1C, 0x00, 0x71, 0xA0, 0x00, 0x2C, 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x00, 0x10, 0x01, 0xDB, + 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, + 0x78, 0x9A, 0x02, 0x1F, 0x0F, 0xF4, 0x02, 0x31, 0x7F, 0x16, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x17, + 0x18, 0x00, 0x06, 0xF1, 0x02, 0x43, 0x00, 0x45, 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, + 0x00, 0x41, 0x00, 0x46, 0x00, 0x0C, 0xBA, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, + 0x00, 0x0C, 0x11, 0x16, 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x16, + 0x94, 0x00, 0x00, 0x05, 0x54, 0x01, 0xB3, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, + 0x51, 0x80, 0x18, 0x00, 0x04, 0x08, 0x00, 0x01, 0x6E, 0x00, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, + 0x5C, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xE4, 0x03, 0x0E, 0x07, 0x0C, 0x00, 0x04, 0xA8, 0x04, 0x01, + 0x14, 0x00, 0x8B, 0x01, 0x22, 0x04, 0xFF, 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, + 0x32, 0x9F, 0xFF, 0x37, 0x98, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, + 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, + 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, + 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, + 0x01, 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, + 0x34, 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, + 0x02, 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, 0x14, 0x40, 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, + 0x00, 0x40, 0x00, 0x04, 0x10, 0x80, 0x04, 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, + 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, + 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4D, 0x1C, 0x1C, 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, + 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, + 0x10, 0x9C, 0x4B, 0x00, 0x10, 0xA4, 0x01, 0xEF, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, + 0x00, 0x28, 0x10, 0x00, 0x80, 0x01, 0xC0, 0x01, 0x00, 0x04, 0x08, 0x00, 0x17, 0x05, 0x0C, 0x02, + 0x13, 0x04, 0x10, 0x00, 0x12, 0x07, 0x62, 0x00, 0xD2, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, + 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, + 0x01, 0xA4, 0x04, 0x24, 0x00, 0x80, 0x96, 0x00, 0x15, 0xF0, 0x24, 0x04, 0x68, 0x43, 0xC3, 0xBA, + 0xE4, 0xD3, 0x1E, 0x0B, 0x05, 0x2F, 0xF0, 0xFF, 0xF4, 0x00, 0x05, 0x19, 0x08, 0x0E, 0x00, 0x01, + 0xE6, 0x05, 0x1F, 0x03, 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, + 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, + 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, + 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, + 0x00, 0x0D, 0x3C, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko4[0x3B4] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, + 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, + 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, + 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, + 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, + 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x53, 0x0E, 0x00, 0x00, + 0x00, 0x05, 0x1C, 0x00, 0x05, 0x24, 0x01, 0x03, 0x6C, 0x00, 0x03, 0xD7, 0x01, 0x10, 0x80, 0x0A, + 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, 0x00, + 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x74, 0x00, 0x13, + 0x0A, 0x08, 0x00, 0x13, 0x14, 0x60, 0x00, 0x04, 0x54, 0x00, 0x13, 0x3B, 0x04, 0x00, 0x13, 0x05, + 0x04, 0x00, 0x13, 0x04, 0xEC, 0x00, 0x08, 0x0C, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, + 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, + 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, + 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, + 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0xBF, 0x01, + 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, + 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, 0x88, 0x5D, + 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, 0x8C, 0x14, + 0x14, 0x16, 0x88, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, 0xCC, 0x00, 0x0A, + 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, 0x00, 0x30, 0x01, + 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, 0x08, 0x44, 0x00, 0x10, + 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0x71, 0xA0, 0x00, 0x2C, 0x00, 0x01, + 0x37, 0x0F, 0x52, 0x01, 0x00, 0x10, 0x01, 0xDB, 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, + 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, 0x0F, 0xF4, 0x02, 0x31, + 0x7F, 0x16, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, 0xF1, 0x02, 0x43, 0x00, 0x45, + 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, 0x00, 0x41, 0x00, 0x46, 0x00, 0x0C, 0xBA, 0x01, + 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x16, 0x5A, 0x00, 0x00, 0x5C, + 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x16, 0x94, 0x00, 0x00, 0x05, 0x54, 0x01, 0xB3, 0x40, + 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x80, 0x18, 0x00, 0x04, 0x08, 0x00, 0x01, + 0x6E, 0x00, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xE4, 0x03, + 0x0E, 0x07, 0x0C, 0x00, 0x04, 0xA8, 0x04, 0x01, 0x14, 0x00, 0x8B, 0x01, 0x22, 0x04, 0xFF, 0x9F, + 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, 0x9F, 0xFF, 0x37, 0x98, 0x00, 0xF0, 0x10, + 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, + 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, + 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x90, + 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, 0xFF, + 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, 0x02, + 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, 0x14, + 0x40, 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, 0x00, 0x40, 0x00, 0x04, 0x10, 0x80, 0x04, 0x04, + 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, 0x00, + 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4D, 0x1C, 0x1C, + 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, + 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x10, 0xA4, 0x01, 0xB2, + 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x30, 0x03, 0x0C, 0xC0, 0x01, + 0x04, 0x08, 0x00, 0x17, 0x05, 0x0C, 0x02, 0x13, 0x04, 0x10, 0x00, 0x12, 0x07, 0x62, 0x00, 0xD2, + 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, + 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0xA4, 0x04, 0x24, 0x00, 0x80, 0x96, 0x00, 0x15, + 0xF0, 0x24, 0x04, 0x60, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x0B, 0x05, 0x3B, 0x80, 0x2A, 0x02, + 0x1C, 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, 0x05, 0x1F, 0x03, 0x2C, 0x00, + 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, + 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, + 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, + 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, 0x0D, 0x3C, 0x01, 0x50, 0x00, + 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko5[0x3B8] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, + 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, + 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, + 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, + 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, + 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x53, 0x0E, 0x00, 0x00, + 0x00, 0x05, 0x1C, 0x00, 0x05, 0x24, 0x01, 0x03, 0x6C, 0x00, 0x03, 0xD7, 0x01, 0x10, 0x80, 0x0A, + 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, 0x00, + 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x74, 0x00, 0x13, + 0x0A, 0x08, 0x00, 0x13, 0x14, 0x60, 0x00, 0x04, 0x54, 0x00, 0x13, 0x3B, 0x04, 0x00, 0x13, 0x05, + 0x04, 0x00, 0x13, 0x04, 0xEC, 0x00, 0x08, 0x0C, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, 0x0D, 0xA0, + 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, 0x02, 0x03, + 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, 0x0C, 0x26, + 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, 0x0A, 0x0B, + 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, 0xBF, 0x01, + 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, 0x88, 0x00, + 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, 0x88, 0x5D, + 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, 0x8C, 0x14, + 0x14, 0x16, 0x88, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, 0xCC, 0x00, 0x0A, + 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, 0x00, 0x30, 0x01, + 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, 0x08, 0x44, 0x00, 0x10, + 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0x71, 0xA0, 0x00, 0x2C, 0x00, 0x01, + 0x37, 0x0F, 0x52, 0x01, 0x00, 0x10, 0x01, 0xD3, 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, 0x80, + 0x0F, 0xF4, 0x20, 0x02, 0x32, 0x01, 0x00, 0x13, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, + 0x0F, 0xF4, 0x02, 0x31, 0x7F, 0x18, 0x00, 0x0F, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, 0xF1, + 0x02, 0x48, 0x00, 0x44, 0x00, 0x45, 0x00, 0x44, 0x00, 0x47, 0x00, 0x47, 0x00, 0x41, 0x00, 0x46, + 0x00, 0x0D, 0x8E, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x78, 0x02, 0x00, 0x0C, 0x11, 0x18, + 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x18, 0x94, 0x00, 0x00, 0x05, + 0x54, 0x01, 0xB3, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x80, 0x18, 0x00, + 0x04, 0x08, 0x00, 0x01, 0x40, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, 0x03, 0x04, + 0x00, 0x0F, 0xE4, 0x03, 0x0E, 0x07, 0x0C, 0x00, 0x04, 0xA8, 0x04, 0x01, 0x14, 0x00, 0x8B, 0x01, + 0x22, 0x04, 0xFF, 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, 0x9F, 0xFF, 0x37, + 0x98, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, + 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, + 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, + 0x04, 0x00, 0x0C, 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, + 0x85, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, 0x10, 0x0A, 0x00, + 0x0F, 0xCC, 0x00, 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, 0x13, + 0x21, 0x15, 0x04, 0x14, 0x40, 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, 0x00, 0x40, 0x00, 0x04, + 0x10, 0x80, 0x04, 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, + 0x76, 0x00, 0x01, 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, + 0x00, 0x4D, 0x1C, 0x1C, 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, + 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, + 0x10, 0xA4, 0x01, 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x30, + 0x03, 0x0C, 0xC0, 0x01, 0x04, 0x08, 0x00, 0x17, 0x05, 0x0C, 0x02, 0x13, 0x04, 0x10, 0x00, 0x12, + 0x07, 0x62, 0x00, 0xD2, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, + 0x70, 0x42, 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0xA4, 0x04, 0x24, 0x00, + 0x80, 0x96, 0x00, 0x15, 0xF0, 0x24, 0x04, 0x60, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x0B, 0x05, + 0x3B, 0x80, 0x2A, 0x02, 0x1C, 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, 0x05, + 0x1F, 0x03, 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, 0x00, + 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, + 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, + 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, 0x0D, + 0x3C, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko6[0x3B3] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, + 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, + 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, + 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, + 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, + 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x13, 0x0E, 0x18, 0x00, + 0x17, 0x05, 0x6C, 0x00, 0x00, 0x34, 0x00, 0x13, 0x0C, 0xE0, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, + 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, + 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x40, 0x00, + 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x5C, 0x00, 0x13, 0x02, 0xC0, 0x00, 0x13, 0x3B, 0x04, 0x00, + 0x13, 0x05, 0x04, 0x00, 0x13, 0x04, 0xEC, 0x00, 0x08, 0x0C, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, + 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, + 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, + 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, + 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, + 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, + 0x88, 0x00, 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, + 0x88, 0x5D, 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, + 0x8C, 0x14, 0x14, 0x16, 0x88, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, 0xCC, + 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, 0x00, + 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, 0x08, 0x44, + 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0x71, 0xA0, 0x00, 0x2C, + 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x11, 0x02, 0x64, 0x01, 0xBB, 0x04, 0x00, 0x1F, 0x22, 0x20, + 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, 0x0F, 0xF4, 0x02, + 0x31, 0x7F, 0x16, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, 0xF1, 0x02, 0x43, 0x00, + 0x45, 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, 0x00, 0x41, 0x00, 0x46, 0x00, 0x0C, 0xBA, + 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x16, 0x5A, 0x00, 0x00, + 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x16, 0x94, 0x00, 0x00, 0x05, 0x54, 0x01, 0xB3, + 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x80, 0x18, 0x00, 0x04, 0x08, 0x00, + 0x01, 0x6E, 0x00, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, 0x03, 0x04, 0x00, 0x0F, 0xE4, + 0x03, 0x0E, 0x0B, 0xCC, 0x02, 0x14, 0x01, 0x14, 0x00, 0x8B, 0x01, 0x22, 0x04, 0xFF, 0x9F, 0xAF, + 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, 0x9F, 0xFF, 0x37, 0x98, 0x00, 0xF0, 0x10, 0x32, + 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, + 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, + 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x90, 0x00, + 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, 0xFF, 0x7F, + 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, 0x02, 0x31, + 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, 0x14, 0x40, + 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, 0x00, 0x40, 0x00, 0x04, 0x10, 0x80, 0x04, 0x04, 0xDF, + 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, 0x00, 0x4C, + 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4D, 0x1C, 0x1C, 0x1C, + 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, + 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x10, 0xA4, 0x01, 0xB2, 0x08, + 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x30, 0x03, 0x0C, 0xC0, 0x01, 0x04, + 0x08, 0x00, 0x17, 0x05, 0x0C, 0x02, 0x13, 0x04, 0x10, 0x00, 0x12, 0x07, 0x62, 0x00, 0xD2, 0x02, + 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, 0x1F, + 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0xA4, 0x04, 0x24, 0x00, 0x80, 0x96, 0x00, 0x15, 0xF0, + 0x24, 0x04, 0x60, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x0F, 0x05, 0x3B, 0x80, 0x2A, 0x02, 0x1C, + 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, 0x05, 0x1F, 0x03, 0x2C, 0x00, 0x05, + 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, + 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, + 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, + 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, 0x0D, 0x3C, 0x01, 0x50, 0x00, 0x00, + 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko7[0x3B4] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x61, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x30, 0x01, 0x13, + 0x02, 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, + 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, + 0x08, 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, + 0x18, 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x13, 0x0E, 0x18, + 0x00, 0x17, 0x05, 0x6C, 0x00, 0x00, 0x34, 0x00, 0x13, 0x0C, 0xE0, 0x01, 0x40, 0x00, 0x00, 0x00, + 0x80, 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, + 0x0C, 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x40, + 0x00, 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x5C, 0x00, 0x13, 0x02, 0xC0, 0x00, 0x13, 0x3B, 0x04, + 0x00, 0x13, 0x05, 0x04, 0x00, 0x04, 0x88, 0x00, 0x04, 0x0C, 0x00, 0x00, 0xF8, 0x00, 0x90, 0x1C, + 0x03, 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, + 0x05, 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, + 0x0B, 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, + 0x25, 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, + 0x06, 0x07, 0x9A, 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x08, + 0x00, 0x00, 0x02, 0x08, 0x00, 0x00, 0x0D, 0x77, 0x00, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x08, + 0x00, 0x00, 0x0B, 0x08, 0x5D, 0x5D, 0x0E, 0x0C, 0x5D, 0x5D, 0x0C, 0x08, 0x08, 0x08, 0x0D, 0x0C, + 0x00, 0x00, 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, + 0x10, 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, + 0x23, 0x0F, 0x00, 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, + 0xA2, 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x1C, 0x00, 0x71, 0xA0, 0x00, + 0x2C, 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x11, 0x00, 0x64, 0x01, 0xBB, 0x04, 0x00, 0x1F, 0x22, + 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, 0x0F, 0xF4, + 0x02, 0x31, 0x7F, 0x16, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, 0xF1, 0x02, 0x43, + 0x00, 0x45, 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, 0x00, 0x41, 0x00, 0x46, 0x00, 0x0C, + 0xBA, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x16, 0x5A, 0x00, + 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x16, 0x94, 0x00, 0x00, 0x05, 0x54, 0x01, + 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x18, 0x00, 0x63, 0x80, 0x01, + 0x00, 0x00, 0x40, 0x01, 0x40, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, 0x03, 0x04, + 0x00, 0x0F, 0xE4, 0x03, 0x0E, 0x0B, 0xCC, 0x02, 0x05, 0x78, 0x03, 0x8B, 0x01, 0x22, 0x04, 0xFF, + 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, 0x9F, 0xFF, 0x37, 0x80, 0x00, 0xF0, + 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, + 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, + 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, + 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, + 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, + 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, + 0x14, 0x40, 0x8B, 0x02, 0x1D, 0x00, 0x9D, 0x02, 0x01, 0x04, 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, + 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, + 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4C, 0x1C, 0x1C, 0x1C, 0x1C, 0xF0, 0x01, 0x31, + 0x02, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, + 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x20, 0x20, 0x00, 0xB1, 0x08, 0x4C, 0x00, 0x00, + 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x04, 0x02, 0x09, 0xC0, 0x01, 0x17, 0x01, 0xC8, 0x01, + 0x04, 0x50, 0x04, 0x13, 0x01, 0x34, 0x04, 0x00, 0x10, 0x00, 0x11, 0x07, 0x10, 0x00, 0xE2, 0x02, + 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, + 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0x70, 0x04, 0x04, 0x84, 0x03, 0x35, 0x00, 0x00, + 0xF0, 0x24, 0x04, 0x60, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x0F, 0x05, 0x3B, 0x80, 0x2A, 0x02, + 0x1C, 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, 0x05, 0x1F, 0x03, 0x2C, 0x00, + 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, + 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, + 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, + 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, 0x0D, 0x3C, 0x01, 0x50, 0x00, + 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko8[0x3B7] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, + 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, + 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, + 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, + 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, + 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x53, 0x0E, 0x00, 0x00, + 0x00, 0x05, 0x1C, 0x00, 0x05, 0x24, 0x01, 0x03, 0x6C, 0x00, 0x03, 0xD7, 0x01, 0x10, 0x80, 0x0A, + 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, 0x00, + 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x74, 0x00, 0x13, + 0x0A, 0x08, 0x00, 0x13, 0x14, 0x60, 0x00, 0x04, 0x54, 0x00, 0x13, 0x3B, 0x04, 0x00, 0x13, 0x05, + 0x04, 0x00, 0x04, 0x88, 0x00, 0x04, 0x0C, 0x00, 0x00, 0xF8, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, + 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, 0x06, + 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, 0x0D, + 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, 0x02, + 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, 0x9A, + 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, + 0x88, 0x00, 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, + 0x88, 0x5D, 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, + 0x8C, 0x14, 0x14, 0x16, 0x88, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, 0xCC, + 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, 0x00, + 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, 0x08, 0x44, + 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0x71, 0xA0, 0x00, 0x2C, + 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x00, 0x10, 0x01, 0xDB, 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, + 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, 0x0F, 0xF4, + 0x02, 0x31, 0x7F, 0x18, 0x00, 0x0F, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, 0xF1, 0x02, 0x48, + 0x00, 0x44, 0x00, 0x45, 0x00, 0x44, 0x00, 0x47, 0x00, 0x47, 0x00, 0x41, 0x00, 0x46, 0x00, 0x0D, + 0x8E, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x18, 0x5A, 0x00, + 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x18, 0x94, 0x00, 0x00, 0x05, 0x54, 0x01, + 0xB3, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x80, 0x18, 0x00, 0x04, 0x08, + 0x00, 0x01, 0x40, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, 0x03, 0x04, 0x00, 0x0F, + 0xE4, 0x03, 0x0E, 0x07, 0x0C, 0x00, 0x04, 0xA8, 0x04, 0x01, 0x14, 0x00, 0x8B, 0x01, 0x22, 0x04, + 0xFF, 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, 0x9F, 0xFF, 0x37, 0x98, 0x00, + 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, + 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, + 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, + 0x0C, 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x85, 0xFF, + 0xFF, 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, 0x10, 0x0A, 0x00, 0x0F, 0xCC, + 0x00, 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, 0x13, 0x21, 0x15, + 0x04, 0x14, 0x40, 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, 0x00, 0x40, 0x00, 0x04, 0x10, 0x80, + 0x04, 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, + 0x01, 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4D, + 0x1C, 0x1C, 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, + 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x10, 0xA4, + 0x01, 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x30, 0x03, 0x08, + 0xC0, 0x01, 0x17, 0x01, 0xC8, 0x01, 0x17, 0x05, 0x10, 0x00, 0x13, 0x04, 0x10, 0x00, 0x12, 0x07, + 0x62, 0x00, 0xD2, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, + 0x42, 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0x70, 0x04, 0x24, 0x00, 0x80, + 0x96, 0x00, 0x15, 0xF0, 0x24, 0x04, 0x60, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x0B, 0x05, 0x3B, + 0x80, 0x2A, 0x02, 0x1C, 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, 0x05, 0x1F, + 0x03, 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, 0x00, 0x0F, + 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, + 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, + 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, 0x0D, 0x3C, + 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko9[0x3BA] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x61, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x30, 0x01, 0x13, + 0x02, 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, + 0x3A, 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, + 0x0B, 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, + 0x08, 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, + 0x18, 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x53, 0x0E, 0x00, + 0x00, 0x00, 0x05, 0x1C, 0x00, 0x05, 0x24, 0x01, 0x03, 0x6C, 0x00, 0x03, 0xD7, 0x01, 0x10, 0x80, + 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, + 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x74, 0x00, + 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x60, 0x00, 0x04, 0x54, 0x00, 0x13, 0x3B, 0x04, 0x00, 0x13, + 0x05, 0x04, 0x00, 0x04, 0x88, 0x00, 0x04, 0x0C, 0x00, 0x00, 0xF8, 0x00, 0x90, 0x1C, 0x03, 0x00, + 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, 0x1B, + 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, 0x1E, + 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, 0x25, + 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, 0x07, + 0x9A, 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x08, 0x00, 0x00, + 0x02, 0x08, 0x00, 0x00, 0x0D, 0x77, 0x00, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x08, 0x00, 0x00, + 0x0B, 0x08, 0x5D, 0x5D, 0x0E, 0x0C, 0x5D, 0x5D, 0x0C, 0x08, 0x08, 0x08, 0x0D, 0x0C, 0x00, 0x00, + 0x0D, 0x0C, 0x14, 0x14, 0x16, 0x08, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, + 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, + 0x00, 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xA2, 0x08, + 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x1C, 0x00, 0x71, 0xA0, 0x00, 0x2C, 0x00, + 0x01, 0x37, 0x0F, 0x52, 0x01, 0x00, 0x48, 0x00, 0xD3, 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, 0x20, + 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x32, 0x01, 0x00, 0x13, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, + 0x1F, 0x0F, 0xF4, 0x02, 0x31, 0x7F, 0x18, 0x00, 0x0F, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, + 0xF1, 0x02, 0x48, 0x00, 0x44, 0x00, 0x45, 0x00, 0x44, 0x00, 0x47, 0x00, 0x47, 0x00, 0x41, 0x00, + 0x46, 0x00, 0x0D, 0x8E, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, + 0x18, 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x18, 0x94, 0x00, 0x00, + 0x05, 0x54, 0x01, 0xA4, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x18, 0x00, + 0x63, 0x80, 0x01, 0x00, 0x00, 0x40, 0x01, 0x40, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, + 0x01, 0x03, 0x04, 0x00, 0x0F, 0xE4, 0x03, 0x0E, 0x07, 0x0C, 0x00, 0x04, 0xA8, 0x04, 0x01, 0x78, + 0x03, 0x8B, 0x01, 0x22, 0x04, 0xFF, 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, + 0x9F, 0xFF, 0x37, 0x80, 0x00, 0xF0, 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, + 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, + 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, + 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, + 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, + 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, + 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, 0x14, 0x40, 0x8B, 0x02, 0x1D, 0x00, 0x9D, 0x02, 0x01, 0x04, + 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, + 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4C, 0x1C, + 0x1C, 0x1C, 0x1C, 0xF0, 0x01, 0x31, 0x02, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, + 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x20, 0x20, + 0x00, 0xB1, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x04, 0x02, 0x09, + 0xC0, 0x01, 0x17, 0x01, 0xC8, 0x01, 0x04, 0x50, 0x04, 0x13, 0x01, 0x34, 0x04, 0x00, 0x10, 0x00, + 0x11, 0x07, 0x10, 0x00, 0xE2, 0x02, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, + 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0x70, 0x04, + 0x04, 0x84, 0x03, 0x35, 0x00, 0x00, 0xF0, 0x24, 0x04, 0x60, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, + 0x0B, 0x05, 0x3B, 0x80, 0x2A, 0x02, 0x1C, 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, + 0xE6, 0x05, 0x1F, 0x03, 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, + 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, + 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, + 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, + 0x00, 0x0D, 0x3C, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko10[0x3BB] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, + 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, + 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, + 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, + 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, + 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x53, 0x0E, 0x00, 0x00, + 0x00, 0x05, 0x1C, 0x00, 0x05, 0x24, 0x01, 0x03, 0x6C, 0x00, 0x03, 0xD7, 0x01, 0x10, 0x80, 0x0A, + 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, 0x00, + 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x74, 0x00, 0x13, + 0x0A, 0x08, 0x00, 0x13, 0x14, 0x60, 0x00, 0x04, 0x54, 0x00, 0x13, 0x3B, 0x04, 0x00, 0x13, 0x05, + 0x04, 0x00, 0x04, 0x88, 0x00, 0x04, 0x0C, 0x00, 0x00, 0xF8, 0x00, 0x90, 0x1C, 0x03, 0x00, 0x00, + 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x06, 0x1B, 0x04, 0x1C, + 0x07, 0x03, 0x05, 0x02, 0x00, 0x25, 0x25, 0x03, 0x00, 0x1E, 0x1D, 0x08, 0x0D, 0x0A, 0x0C, 0x09, + 0x0B, 0x26, 0x26, 0x05, 0x02, 0x04, 0x03, 0x05, 0x00, 0x06, 0x1C, 0x1B, 0x07, 0x25, 0x25, 0x07, + 0x0A, 0x0B, 0x1D, 0x0C, 0x0D, 0x09, 0x00, 0x08, 0x1E, 0x26, 0x26, 0x09, 0x24, 0x06, 0x08, 0x2A, + 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, 0x00, 0x02, + 0x88, 0x00, 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, 0x00, 0x0B, + 0x88, 0x5D, 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, 0x00, 0x0D, + 0x8C, 0x14, 0x14, 0x16, 0x88, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, 0x00, 0xCC, + 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, 0x0F, 0x00, + 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, 0x08, 0x44, + 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0x71, 0xA0, 0x00, 0x2C, + 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x00, 0x10, 0x01, 0xDB, 0x0C, 0x00, 0x04, 0x00, 0x1F, 0x22, + 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, 0x0F, 0xF4, + 0x02, 0x31, 0x7F, 0x10, 0x00, 0x14, 0x00, 0x0B, 0x00, 0x13, 0x18, 0x00, 0x06, 0xFF, 0x08, 0x47, + 0x00, 0x45, 0x00, 0x4F, 0x00, 0x4D, 0x00, 0x46, 0x00, 0x46, 0x00, 0x48, 0x00, 0x48, 0x00, 0x08, + 0x00, 0x0C, 0x00, 0x0C, 0x00, 0x0B, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x10, + 0x5A, 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x13, 0x00, 0x10, 0x94, 0x00, 0x00, 0x05, + 0x54, 0x01, 0xB3, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x80, 0x18, 0x00, + 0x04, 0x08, 0x00, 0x01, 0x40, 0x02, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, 0x03, 0x04, + 0x00, 0x0F, 0xE4, 0x03, 0x0E, 0x07, 0x0C, 0x00, 0x04, 0xA8, 0x04, 0x01, 0x14, 0x00, 0x8B, 0x01, + 0x28, 0x40, 0xFF, 0x9F, 0x9F, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x31, 0x9F, 0xFF, 0x37, + 0x08, 0x00, 0xF0, 0x11, 0x57, 0x21, 0x03, 0x64, 0x67, 0x04, 0x32, 0x51, 0x21, 0x56, 0x73, 0x04, + 0x12, 0x60, 0x35, 0x47, 0x73, 0x56, 0x04, 0x12, 0x10, 0x72, 0x65, 0x43, 0x37, 0x21, 0x40, 0x65, + 0x64, 0x21, 0x30, 0x57, 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, + 0x12, 0x04, 0x00, 0x0C, 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, + 0x00, 0x85, 0xFF, 0xFF, 0xFF, 0x7F, 0x1F, 0xCF, 0x33, 0x40, 0xE6, 0x03, 0x25, 0x34, 0x10, 0xF0, + 0x03, 0x0F, 0xCC, 0x00, 0x01, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, + 0x13, 0x21, 0x15, 0x04, 0x03, 0xC1, 0x04, 0x08, 0x5B, 0x01, 0x90, 0x10, 0x08, 0x01, 0x03, 0x00, + 0x50, 0x00, 0x40, 0x01, 0x04, 0x04, 0xDF, 0x81, 0x10, 0x08, 0x29, 0x32, 0x93, 0xA5, 0x54, 0x4A, + 0x6B, 0x76, 0x87, 0x00, 0x01, 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, + 0xEF, 0x14, 0x00, 0x4D, 0x1C, 0x1C, 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, 0x00, 0xF1, + 0x03, 0x00, 0x24, 0xFF, 0xFF, 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, + 0x4B, 0x00, 0x10, 0xA4, 0x01, 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, + 0x10, 0x30, 0x03, 0x08, 0xC0, 0x01, 0x17, 0x01, 0xC8, 0x01, 0x17, 0x05, 0x10, 0x00, 0x13, 0x04, + 0x10, 0x00, 0x12, 0x07, 0x62, 0x00, 0xD2, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, + 0x0F, 0x0F, 0x00, 0x70, 0x42, 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0x70, + 0x04, 0x24, 0x00, 0x80, 0x96, 0x00, 0x15, 0xF0, 0x24, 0x04, 0x60, 0x43, 0xCB, 0xFA, 0xE4, 0xD3, + 0xFE, 0x0B, 0x05, 0x3B, 0x80, 0x2A, 0x02, 0x1C, 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, + 0x01, 0xE6, 0x05, 0x1F, 0x03, 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, + 0x05, 0x34, 0x00, 0x0F, 0x3A, 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, + 0x17, 0x3F, 0x1E, 0x40, 0x04, 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, + 0x24, 0x00, 0x38, 0x00, 0x0A, 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0x9C, + 0x16, 0x00, 0x0D, 0x3C, 0x01, 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko11[0x3B6] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, + 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, + 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, + 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, + 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, + 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x13, 0x0E, 0x18, 0x00, + 0x17, 0x05, 0x6C, 0x00, 0x00, 0x34, 0x00, 0x13, 0x0C, 0xE0, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, + 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, + 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x40, 0x00, + 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x5C, 0x00, 0x13, 0x02, 0xC0, 0x00, 0x13, 0x3B, 0x04, 0x00, + 0x13, 0x05, 0x04, 0x00, 0x04, 0x88, 0x00, 0x04, 0x0C, 0x00, 0x00, 0xF8, 0x00, 0x90, 0x1C, 0x03, + 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, + 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, + 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, + 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, + 0x07, 0x9A, 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, + 0x00, 0x02, 0x88, 0x00, 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, + 0x00, 0x0B, 0x88, 0x5D, 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, + 0x00, 0x0D, 0x8C, 0x14, 0x14, 0x16, 0x88, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, + 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, + 0x0F, 0x00, 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, + 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0x71, 0xA0, + 0x00, 0x2C, 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x11, 0x02, 0x64, 0x01, 0xBB, 0x04, 0x00, 0x1F, + 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, 0x0F, + 0xF4, 0x02, 0x31, 0x7F, 0x16, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, 0xF1, 0x02, + 0x43, 0x00, 0x45, 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, 0x00, 0x41, 0x00, 0x46, 0x00, + 0x0C, 0xBA, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x16, 0x5A, + 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x16, 0x94, 0x00, 0x00, 0x05, 0x54, + 0x01, 0xB3, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x80, 0x18, 0x00, 0x04, + 0x08, 0x00, 0x01, 0x6E, 0x00, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, 0x03, 0x04, 0x00, + 0x0F, 0xE4, 0x03, 0x0E, 0x0B, 0xCC, 0x02, 0x14, 0x01, 0x14, 0x00, 0x8B, 0x01, 0x22, 0x04, 0xFF, + 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, 0x9F, 0xFF, 0x37, 0x98, 0x00, 0xF0, + 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, + 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, + 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, + 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, + 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, + 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, + 0x14, 0x40, 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, 0x00, 0x40, 0x00, 0x04, 0x10, 0x80, 0x04, + 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, + 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4D, 0x1C, + 0x1C, 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, + 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x10, 0xA4, 0x01, + 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x30, 0x03, 0x08, 0xC0, + 0x01, 0x17, 0x01, 0xC8, 0x01, 0x17, 0x05, 0x10, 0x00, 0x13, 0x04, 0x10, 0x00, 0x12, 0x07, 0x62, + 0x00, 0xD2, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, + 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0x70, 0x04, 0x24, 0x00, 0x80, 0x96, + 0x00, 0x15, 0xF0, 0x24, 0x04, 0x60, 0x43, 0xC3, 0xBA, 0xE4, 0xD3, 0x1E, 0x0F, 0x05, 0x3B, 0x80, + 0x2A, 0x02, 0x1C, 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, 0x05, 0x1F, 0x03, + 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, 0x00, 0x0F, 0x3A, + 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, + 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, + 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, 0x0D, 0x3C, 0x01, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + +constexpr inline const u8 SdramParamsMariko12[0x3B6] = { + 0xFF, 0x00, 0x03, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00, 0x00, 0x22, 0x00, 0x00, 0x00, 0x2C, 0x01, + 0x00, 0x01, 0x00, 0x96, 0x88, 0x02, 0x80, 0x18, 0x40, 0x00, 0x00, 0x00, 0x40, 0x14, 0x00, 0xF0, + 0x01, 0xFF, 0xFF, 0x1F, 0x00, 0xD8, 0x51, 0x1A, 0xA0, 0x00, 0x00, 0x50, 0x05, 0x00, 0x00, 0x88, + 0x00, 0x04, 0x00, 0x20, 0x20, 0x12, 0x1A, 0x00, 0x17, 0x88, 0x04, 0x00, 0xF7, 0x00, 0x00, 0x00, + 0xBC, 0xBC, 0xAF, 0xC9, 0x3C, 0x9E, 0x00, 0x00, 0x02, 0x03, 0xE0, 0xC1, 0x04, 0x01, 0x00, 0x17, + 0x3F, 0x01, 0x00, 0x00, 0x38, 0x00, 0xD0, 0x04, 0x08, 0x00, 0x00, 0x50, 0x50, 0x50, 0x00, 0xA1, + 0x01, 0x00, 0x00, 0x30, 0x39, 0x00, 0x62, 0x10, 0x00, 0x16, 0x00, 0x10, 0x90, 0x80, 0x00, 0x03, + 0x74, 0x00, 0x13, 0x03, 0x04, 0x00, 0xD7, 0x1E, 0x00, 0x00, 0x00, 0x0D, 0x00, 0x00, 0x00, 0x3A, + 0x00, 0x00, 0x00, 0x1D, 0x94, 0x00, 0x57, 0x09, 0x00, 0x00, 0x00, 0x04, 0x10, 0x00, 0x13, 0x0B, + 0x28, 0x00, 0x13, 0x08, 0x0C, 0x00, 0x00, 0x1C, 0x00, 0x53, 0x17, 0x00, 0x00, 0x00, 0x15, 0x08, + 0x00, 0x13, 0x1B, 0x28, 0x00, 0x57, 0x20, 0x00, 0x00, 0x00, 0x06, 0x04, 0x00, 0x13, 0x03, 0x18, + 0x00, 0x13, 0x04, 0x10, 0x00, 0x17, 0x02, 0x10, 0x00, 0x00, 0x4C, 0x00, 0x13, 0x0E, 0x18, 0x00, + 0x17, 0x05, 0x6C, 0x00, 0x00, 0x34, 0x00, 0x13, 0x0C, 0xE0, 0x01, 0x40, 0x00, 0x00, 0x00, 0x80, + 0x0A, 0x00, 0x00, 0x0F, 0x01, 0x93, 0x18, 0x00, 0x00, 0x00, 0x1A, 0x00, 0x00, 0x00, 0x16, 0x0C, + 0x00, 0x10, 0x0A, 0x48, 0x00, 0x03, 0x61, 0x00, 0x13, 0xC1, 0x50, 0x00, 0x13, 0x08, 0x40, 0x00, + 0x13, 0x0A, 0x08, 0x00, 0x13, 0x14, 0x5C, 0x00, 0x13, 0x02, 0xC0, 0x00, 0x13, 0x3B, 0x04, 0x00, + 0x13, 0x05, 0x04, 0x00, 0x04, 0x88, 0x00, 0x04, 0x0C, 0x00, 0x00, 0xF8, 0x00, 0x90, 0x1C, 0x03, + 0x00, 0x00, 0x0D, 0xA0, 0x60, 0x91, 0x3F, 0x15, 0x01, 0xF1, 0x28, 0x00, 0xF3, 0x0C, 0x04, 0x05, + 0x1B, 0x06, 0x02, 0x03, 0x07, 0x1C, 0x23, 0x25, 0x25, 0x05, 0x08, 0x1D, 0x09, 0x0A, 0x24, 0x0B, + 0x1E, 0x0D, 0x0C, 0x26, 0x26, 0x03, 0x02, 0x1B, 0x1C, 0x23, 0x03, 0x04, 0x07, 0x05, 0x06, 0x25, + 0x25, 0x02, 0x0A, 0x0B, 0x1D, 0x0D, 0x08, 0x0C, 0x09, 0x1E, 0x24, 0x26, 0x26, 0x08, 0x24, 0x06, + 0x07, 0x9A, 0xBF, 0x01, 0x3C, 0xFF, 0x00, 0xFF, 0x00, 0x02, 0xB0, 0x04, 0x00, 0x01, 0x88, 0x00, + 0x00, 0x02, 0x88, 0x00, 0x00, 0x0D, 0xD5, 0x01, 0xF2, 0x0E, 0xC0, 0x31, 0x31, 0x03, 0x88, 0x00, + 0x00, 0x0B, 0x88, 0x5D, 0x5D, 0x0E, 0x8C, 0x5D, 0x5D, 0x0C, 0x88, 0x08, 0x08, 0x0D, 0x8C, 0x00, + 0x00, 0x0D, 0x8C, 0x14, 0x14, 0x16, 0x88, 0x2C, 0x00, 0x2C, 0x11, 0x08, 0xDF, 0x02, 0x70, 0x10, + 0x00, 0xCC, 0x00, 0x0A, 0x00, 0x33, 0x6E, 0x01, 0x40, 0xF3, 0x25, 0x08, 0x11, 0x69, 0x00, 0x23, + 0x0F, 0x00, 0x30, 0x01, 0x80, 0x01, 0x03, 0x00, 0x70, 0x00, 0x0C, 0x00, 0x01, 0x0C, 0x00, 0xC0, + 0x08, 0x44, 0x00, 0x10, 0x04, 0x04, 0x00, 0x06, 0x13, 0x07, 0x00, 0x80, 0x10, 0x00, 0x71, 0xA0, + 0x00, 0x2C, 0x00, 0x01, 0x37, 0x0F, 0x52, 0x01, 0x11, 0x02, 0x64, 0x01, 0xBB, 0x04, 0x00, 0x1F, + 0x22, 0x20, 0x80, 0x0F, 0xF4, 0x20, 0x02, 0x29, 0x01, 0x00, 0x12, 0x78, 0x9A, 0x02, 0x1F, 0x0F, + 0xF4, 0x02, 0x31, 0x7F, 0x16, 0x00, 0x0D, 0x00, 0x0B, 0x00, 0x17, 0x18, 0x00, 0x06, 0xF1, 0x02, + 0x43, 0x00, 0x45, 0x00, 0x45, 0x00, 0x43, 0x00, 0x46, 0x00, 0x47, 0x00, 0x41, 0x00, 0x46, 0x00, + 0x0C, 0xBA, 0x01, 0x1F, 0x0D, 0x18, 0x00, 0x06, 0x1F, 0x28, 0x02, 0x00, 0x0C, 0x11, 0x16, 0x5A, + 0x00, 0x00, 0x5C, 0x00, 0x00, 0x5E, 0x00, 0x3F, 0x17, 0x00, 0x16, 0x94, 0x00, 0x00, 0x05, 0x54, + 0x01, 0xB3, 0x40, 0x06, 0x00, 0xCC, 0x00, 0x09, 0x00, 0x4F, 0x00, 0x51, 0x80, 0x18, 0x00, 0x04, + 0x08, 0x00, 0x01, 0x6E, 0x00, 0x54, 0xAB, 0x00, 0x0A, 0x04, 0x11, 0x5C, 0x01, 0x03, 0x04, 0x00, + 0x0F, 0xE4, 0x03, 0x0E, 0x0B, 0xCC, 0x02, 0x14, 0x01, 0x14, 0x00, 0x8B, 0x01, 0x22, 0x04, 0xFF, + 0x9F, 0xAF, 0x4F, 0x01, 0x24, 0x00, 0x00, 0x01, 0x00, 0x32, 0x9F, 0xFF, 0x37, 0x98, 0x00, 0xF0, + 0x10, 0x32, 0x54, 0x76, 0x10, 0x47, 0x32, 0x65, 0x10, 0x34, 0x76, 0x25, 0x01, 0x34, 0x67, 0x25, + 0x01, 0x75, 0x64, 0x32, 0x01, 0x72, 0x56, 0x34, 0x10, 0x23, 0x74, 0x56, 0x01, 0x45, 0x32, 0x67, + 0x24, 0x00, 0x31, 0x49, 0x92, 0x24, 0x04, 0x00, 0x0C, 0x01, 0x00, 0x13, 0x12, 0x04, 0x00, 0x0C, + 0x90, 0x00, 0x80, 0x20, 0x41, 0x13, 0x1F, 0x14, 0x00, 0x01, 0x00, 0x7C, 0x00, 0x85, 0xFF, 0xFF, + 0xFF, 0x7F, 0x1F, 0xD7, 0x36, 0x40, 0xE6, 0x03, 0x24, 0x34, 0x10, 0x0A, 0x00, 0x0F, 0xCC, 0x00, + 0x02, 0x31, 0x03, 0x00, 0x05, 0x2B, 0x03, 0x22, 0x10, 0x02, 0xDD, 0x03, 0x13, 0x21, 0x15, 0x04, + 0x14, 0x40, 0x8B, 0x02, 0x07, 0x01, 0x00, 0x71, 0x80, 0x00, 0x40, 0x00, 0x04, 0x10, 0x80, 0x04, + 0x04, 0xDF, 0x81, 0x10, 0x09, 0x28, 0x93, 0x32, 0xA5, 0x44, 0x5B, 0x8A, 0x67, 0x76, 0x00, 0x01, + 0x00, 0x4C, 0x22, 0x10, 0x10, 0x04, 0x00, 0x44, 0x00, 0xEF, 0x00, 0xEF, 0x14, 0x00, 0x4D, 0x1C, + 0x1C, 0x1C, 0x1C, 0x98, 0x01, 0x21, 0x03, 0x08, 0x04, 0x00, 0xF1, 0x03, 0x00, 0x24, 0xFF, 0xFF, + 0x00, 0x44, 0x57, 0x6E, 0x00, 0x28, 0x72, 0x39, 0x00, 0x10, 0x9C, 0x4B, 0x00, 0x10, 0xA4, 0x01, + 0xB2, 0x08, 0x4C, 0x00, 0x00, 0x80, 0x20, 0x10, 0x0A, 0x00, 0x28, 0x10, 0x30, 0x03, 0x08, 0xC0, + 0x01, 0x17, 0x01, 0xC8, 0x01, 0x17, 0x05, 0x10, 0x00, 0x13, 0x04, 0x10, 0x00, 0x12, 0x07, 0x62, + 0x00, 0xD2, 0x02, 0x01, 0x02, 0x03, 0x00, 0x04, 0x05, 0xA3, 0x72, 0x0F, 0x0F, 0x00, 0x70, 0x42, + 0x00, 0x16, 0x1F, 0x28, 0x01, 0x43, 0xFF, 0x00, 0xFF, 0x01, 0x70, 0x04, 0x24, 0x00, 0x80, 0x96, + 0x00, 0x15, 0xF0, 0x24, 0x04, 0x60, 0x43, 0xCB, 0xFA, 0xE4, 0xD3, 0xFE, 0x0F, 0x05, 0x3B, 0x80, + 0x2A, 0x02, 0x1C, 0x00, 0x0C, 0xF4, 0x00, 0x19, 0x08, 0x0E, 0x00, 0x01, 0xE6, 0x05, 0x1F, 0x03, + 0x2C, 0x00, 0x05, 0x10, 0x76, 0xE9, 0x03, 0x0F, 0x9C, 0x02, 0x00, 0x05, 0x34, 0x00, 0x0F, 0x3A, + 0x00, 0x04, 0x38, 0x7E, 0x16, 0x40, 0x03, 0x06, 0x0F, 0x38, 0x00, 0x17, 0x3F, 0x1E, 0x40, 0x04, + 0xA8, 0x00, 0x08, 0x2F, 0x00, 0xC0, 0x55, 0x00, 0x04, 0x3F, 0x46, 0x24, 0x00, 0x38, 0x00, 0x0A, + 0x0F, 0x01, 0x00, 0x05, 0x22, 0x46, 0x2C, 0x38, 0x00, 0x19, 0xEC, 0x16, 0x00, 0x0D, 0x3C, 0x01, + 0x50, 0x00, 0x00, 0x00, 0x00, 0x00, +}; + diff --git a/fusee_cpp/program/source/fusee_uncompress.cpp b/fusee_cpp/program/source/fusee_uncompress.cpp new file mode 100644 index 000000000..6d31bf1a7 --- /dev/null +++ b/fusee_cpp/program/source/fusee_uncompress.cpp @@ -0,0 +1,103 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#include "fusee_uncompress.hpp" + +namespace ams::nxboot { + + namespace { + + class Lz4Uncompressor { + private: + const u8 *src; + size_t src_size; + size_t src_offset; + u8 *dst; + size_t dst_size; + size_t dst_offset; + public: + Lz4Uncompressor(void *dst, size_t dst_size, const void *src, size_t src_size) : src(static_cast(src)), src_size(src_size), src_offset(0), dst(static_cast(dst)), dst_size(dst_size), dst_offset(0) { + /* ... */ + } + + void Uncompress() { + while (true) { + /* Read a control byte. */ + const u8 control = this->ReadByte(); + + /* Copy what it specifies we should copy. */ + this->Copy(this->GetCopySize(control >> 4)); + + /* If we've exceeded size, we're done. */ + if (this->src_offset >= this->src_size) { + break; + } + + /* Read the wide copy offset. */ + u16 wide_offset = this->ReadByte(); + AMS_ABORT_UNLESS(this->CanRead()); + wide_offset |= (this->ReadByte() << 8); + + /* Determine the copy size. */ + const size_t wide_copy_size = this->GetCopySize(control & 0xF); + + /* Copy bytes. */ + const size_t end_offset = this->dst_offset + wide_copy_size + 4; + for (size_t cur_offset = this->dst_offset; cur_offset < end_offset; this->dst_offset = (++cur_offset)) { + AMS_ABORT_UNLESS(wide_offset <= cur_offset); + + this->dst[cur_offset] = this->dst[cur_offset - wide_offset]; + } + } + } + private: + u8 ReadByte() { + return this->src[this->src_offset++]; + } + + bool CanRead() const { + return this->src_offset < this->src_size; + } + + size_t GetCopySize(u8 control) { + size_t size = control; + + if (control >= 0xF) { + do { + AMS_ABORT_UNLESS(this->CanRead()); + control = this->ReadByte(); + size += control; + } while (control == 0xFF); + } + + return size; + } + + void Copy(size_t size) { + __builtin_memcpy(this->dst + this->dst_offset, this->src + this->src_offset, size); + this->dst_offset += size; + this->src_offset += size; + } + }; + + } + + void Uncompress(void *dst, size_t dst_size, const void *src, size_t src_size) { + /* Create an execute a decompressor. */ + Lz4Uncompressor(dst, dst_size, src, src_size).Uncompress(); + } + +} \ No newline at end of file diff --git a/fusee_cpp/program/source/fusee_uncompress.hpp b/fusee_cpp/program/source/fusee_uncompress.hpp new file mode 100644 index 000000000..26b82fc89 --- /dev/null +++ b/fusee_cpp/program/source/fusee_uncompress.hpp @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#include +#pragma once + +namespace ams::nxboot { + + void Uncompress(void *dst, size_t dst_size, const void *src, size_t src_size); + +} \ No newline at end of file diff --git a/fusee_cpp/program/update_sdram_params.py b/fusee_cpp/program/update_sdram_params.py new file mode 100644 index 000000000..d7d07c919 --- /dev/null +++ b/fusee_cpp/program/update_sdram_params.py @@ -0,0 +1,65 @@ +#!/usr/bin/env python +import sys, lz4, os +from struct import unpack as up + +def lz4_compress(data): + try: + import lz4.block as block + except ImportError: + block = lz4.LZ4_compress + return block.compress(data, 'high_compression', store_size=False) + +def read_file(fn): + with open(fn, 'rb') as f: + return f.read() + +def write_file(fn, data): + with open(fn, 'wb') as f: + f.write(data) + +def main(argc, argv): + if argc != 1: + print('Usage: %s' % argv[0]) + return 1 + params = { + 'erista' : {}, + 'mariko' : {}, + } + for fn in os.listdir('sdram_params/bin'): + assert fn.startswith('sdram_params_') and fn.endswith('.bin') + (_sdram, _params, soc, _id_bin) = tuple(fn.split('_')) + param_id = int(_id_bin[:-len('.bin')]) + assert soc in params.keys() + compressed = lz4_compress(read_file(os.path.join('sdram_params/bin', fn))) + write_file(os.path.join('sdram_params/lz', fn.replace('.bin', '.lz4')), compressed) + params[soc][param_id] = compressed + with open('source/fusee_sdram_params.inc', 'w') as f: + f.write('%s\n' % "/*") + f.write('%s\n' % " * Copyright (c) 2018-2020 Atmosph\xc3re-NX") + f.write('%s\n' % " *") + f.write('%s\n' % " * This program is free software; you can redistribute it and/or modify it") + f.write('%s\n' % " * under the terms and conditions of the GNU General Public License,") + f.write('%s\n' % " * version 2, as published by the Free Software Foundation.") + f.write('%s\n' % " *") + f.write('%s\n' % " * This program is distributed in the hope it will be useful, but WITHOUT") + f.write('%s\n' % " * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or") + f.write('%s\n' % " * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for") + f.write('%s\n' % " * more details.") + f.write('%s\n' % " *") + f.write('%s\n' % " * You should have received a copy of the GNU General Public License") + f.write('%s\n' % " * along with this program. If not, see .") + f.write('%s\n' % " */") + f.write('\n') + for soc in ('Erista', 'Mariko'): + for param_id in sorted(params[soc.lower()].keys()): + compressed = params[soc.lower()][param_id] + f.write('%s\n' % ('constexpr inline const u8 SdramParams%s%d[0x%03X] = {' % (soc, param_id, len(compressed)))) + while compressed: + block = compressed[:0x10] + compressed = compressed[0x10:] + f.write(' %s\n' % (', '.join('0x%02X' % ord(c) for c in block) + ',')) + f.write('};\n\n') + return 0 + +if __name__ == '__main__': + sys.exit(main(len(sys.argv), sys.argv)) diff --git a/libraries/libexosphere/include/exosphere/br/impl/br_common_types.hpp b/libraries/libexosphere/include/exosphere/br/impl/br_common_types.hpp new file mode 100644 index 000000000..23d032580 --- /dev/null +++ b/libraries/libexosphere/include/exosphere/br/impl/br_common_types.hpp @@ -0,0 +1,28 @@ +/* + * Copyright (c) 2018-2020 Atmosphère-NX + * + * This program is free software; you can redistribute it and/or modify it + * under the terms and conditions of the GNU General Public License, + * version 2, as published by the Free Software Foundation. + * + * This program is distributed in the hope it will be useful, but WITHOUT + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or + * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for + * more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +#pragma once +#include + +namespace ams::br { + + enum BootMemoryType : u32 { + BootMemoryType_None, + BootMemoryType_LpDdr2, + BootMemoryType_Ddr3, + BootMemoryType_LpDdr4, + }; + +} diff --git a/libraries/libexosphere/include/exosphere/br/impl/br_erista_types.hpp b/libraries/libexosphere/include/exosphere/br/impl/br_erista_types.hpp index ee26f5b9e..39d0daa1c 100644 --- a/libraries/libexosphere/include/exosphere/br/impl/br_erista_types.hpp +++ b/libraries/libexosphere/include/exosphere/br/impl/br_erista_types.hpp @@ -15,7 +15,486 @@ */ #pragma once #include +#include namespace ams::br::erista { + struct BootSdramParams { + BootMemoryType MemoryType; + u32 PllMInputDivider; + u32 PllMFeedbackDivider; + u32 PllMStableTime; + u32 PllMSetupControl; + u32 PllMPostDivider; + u32 PllMKCP; + u32 PllMKVCO; + u32 EmcBctSpare0; + u32 EmcBctSpare1; + u32 EmcBctSpare2; + u32 EmcBctSpare3; + u32 EmcBctSpare4; + u32 EmcBctSpare5; + u32 EmcBctSpare6; + u32 EmcBctSpare7; + u32 EmcBctSpare8; + u32 EmcBctSpare9; + u32 EmcBctSpare10; + u32 EmcBctSpare11; + u32 EmcBctSpare12; + u32 EmcBctSpare13; + u32 EmcClockSource; + u32 EmcClockSourceDll; + u32 ClkRstControllerPllmMisc2Override; + u32 ClkRstControllerPllmMisc2OverrideEnable; + u32 ClearClk2Mc1; + u32 EmcAutoCalInterval; + u32 EmcAutoCalConfig; + u32 EmcAutoCalConfig2; + u32 EmcAutoCalConfig3; + u32 EmcAutoCalConfig4; + u32 EmcAutoCalConfig5; + u32 EmcAutoCalConfig6; + u32 EmcAutoCalConfig7; + u32 EmcAutoCalConfig8; + u32 EmcAutoCalVrefSel0; + u32 EmcAutoCalVrefSel1; + u32 EmcAutoCalChannel; + u32 EmcPmacroAutocalCfg0; + u32 EmcPmacroAutocalCfg1; + u32 EmcPmacroAutocalCfg2; + u32 EmcPmacroRxTerm; + u32 EmcPmacroDqTxDrv; + u32 EmcPmacroCaTxDrv; + u32 EmcPmacroCmdTxDrv; + u32 EmcPmacroAutocalCfgCommon; + u32 EmcPmacroZctrl; + u32 EmcAutoCalWait; + u32 EmcXm2CompPadCtrl; + u32 EmcXm2CompPadCtrl2; + u32 EmcXm2CompPadCtrl3; + u32 EmcAdrCfg; + u32 EmcPinProgramWait; + u32 EmcPinExtraWait; + u32 EmcPinGpioEn; + u32 EmcPinGpio; + u32 EmcTimingControlWait; + u32 EmcRc; + u32 EmcRfc; + u32 EmcRfcPb; + u32 EmcRefctrl2; + u32 EmcRfcSlr; + u32 EmcRas; + u32 EmcRp; + u32 EmcR2r; + u32 EmcW2w; + u32 EmcR2w; + u32 EmcW2r; + u32 EmcR2p; + u32 EmcW2p; + u32 EmcTppd; + u32 EmcCcdmw; + u32 EmcRdRcd; + u32 EmcWrRcd; + u32 EmcRrd; + u32 EmcRext; + u32 EmcWext; + u32 EmcWdv; + u32 EmcWdvChk; + u32 EmcWsv; + u32 EmcWev; + u32 EmcWdvMask; + u32 EmcWsDuration; + u32 EmcWeDuration; + u32 EmcQUse; + u32 EmcQuseWidth; + u32 EmcIbdly; + u32 EmcObdly; + u32 EmcEInput; + u32 EmcEInputDuration; + u32 EmcPutermExtra; + u32 EmcPutermWidth; + u32 EmcQRst; + u32 EmcQSafe; + u32 EmcRdv; + u32 EmcRdvMask; + u32 EmcRdvEarly; + u32 EmcRdvEarlyMask; + u32 EmcQpop; + u32 EmcRefresh; + u32 EmcBurstRefreshNum; + u32 EmcPreRefreshReqCnt; + u32 EmcPdEx2Wr; + u32 EmcPdEx2Rd; + u32 EmcPChg2Pden; + u32 EmcAct2Pden; + u32 EmcAr2Pden; + u32 EmcRw2Pden; + u32 EmcCke2Pden; + u32 EmcPdex2Cke; + u32 EmcPdex2Mrr; + u32 EmcTxsr; + u32 EmcTxsrDll; + u32 EmcTcke; + u32 EmcTckesr; + u32 EmcTpd; + u32 EmcTfaw; + u32 EmcTrpab; + u32 EmcTClkStable; + u32 EmcTClkStop; + u32 EmcTRefBw; + u32 EmcFbioCfg5; + u32 EmcFbioCfg7; + u32 EmcFbioCfg8; + u32 EmcCmdMappingCmd0_0; + u32 EmcCmdMappingCmd0_1; + u32 EmcCmdMappingCmd0_2; + u32 EmcCmdMappingCmd1_0; + u32 EmcCmdMappingCmd1_1; + u32 EmcCmdMappingCmd1_2; + u32 EmcCmdMappingCmd2_0; + u32 EmcCmdMappingCmd2_1; + u32 EmcCmdMappingCmd2_2; + u32 EmcCmdMappingCmd3_0; + u32 EmcCmdMappingCmd3_1; + u32 EmcCmdMappingCmd3_2; + u32 EmcCmdMappingByte; + u32 EmcFbioSpare; + u32 EmcCfgRsv; + u32 EmcMrs; + u32 EmcEmrs; + u32 EmcEmrs2; + u32 EmcEmrs3; + u32 EmcMrw1; + u32 EmcMrw2; + u32 EmcMrw3; + u32 EmcMrw4; + u32 EmcMrw6; + u32 EmcMrw8; + u32 EmcMrw9; + u32 EmcMrw10; + u32 EmcMrw12; + u32 EmcMrw13; + u32 EmcMrw14; + u32 EmcMrwExtra; + u32 EmcWarmBootMrwExtra; + u32 EmcWarmBootExtraModeRegWriteEnable; + u32 EmcExtraModeRegWriteEnable; + u32 EmcMrwResetCommand; + u32 EmcMrwResetNInitWait; + u32 EmcMrsWaitCnt; + u32 EmcMrsWaitCnt2; + u32 EmcCfg; + u32 EmcCfg2; + u32 EmcCfgPipe; + u32 EmcCfgPipeClk; + u32 EmcFdpdCtrlCmdNoRamp; + u32 EmcCfgUpdate; + u32 EmcDbg; + u32 EmcDbgWriteMux; + u32 EmcCmdQ; + u32 EmcMc2EmcQ; + u32 EmcDynSelfRefControl; + u32 AhbArbitrationXbarCtrlMemInitDone; + u32 EmcCfgDigDll; + u32 EmcCfgDigDll_1; + u32 EmcCfgDigDllPeriod; + u32 EmcDevSelect; + u32 EmcSelDpdCtrl; + u32 EmcFdpdCtrlDq; + u32 EmcFdpdCtrlCmd; + u32 EmcPmacroIbVrefDq_0; + u32 EmcPmacroIbVrefDq_1; + u32 EmcPmacroIbVrefDqs_0; + u32 EmcPmacroIbVrefDqs_1; + u32 EmcPmacroIbRxrt; + u32 EmcCfgPipe1; + u32 EmcCfgPipe2; + u32 EmcPmacroQuseDdllRank0_0; + u32 EmcPmacroQuseDdllRank0_1; + u32 EmcPmacroQuseDdllRank0_2; + u32 EmcPmacroQuseDdllRank0_3; + u32 EmcPmacroQuseDdllRank0_4; + u32 EmcPmacroQuseDdllRank0_5; + u32 EmcPmacroQuseDdllRank1_0; + u32 EmcPmacroQuseDdllRank1_1; + u32 EmcPmacroQuseDdllRank1_2; + u32 EmcPmacroQuseDdllRank1_3; + u32 EmcPmacroQuseDdllRank1_4; + u32 EmcPmacroQuseDdllRank1_5; + u32 EmcPmacroObDdllLongDqRank0_0; + u32 EmcPmacroObDdllLongDqRank0_1; + u32 EmcPmacroObDdllLongDqRank0_2; + u32 EmcPmacroObDdllLongDqRank0_3; + u32 EmcPmacroObDdllLongDqRank0_4; + u32 EmcPmacroObDdllLongDqRank0_5; + u32 EmcPmacroObDdllLongDqRank1_0; + u32 EmcPmacroObDdllLongDqRank1_1; + u32 EmcPmacroObDdllLongDqRank1_2; + u32 EmcPmacroObDdllLongDqRank1_3; + u32 EmcPmacroObDdllLongDqRank1_4; + u32 EmcPmacroObDdllLongDqRank1_5; + u32 EmcPmacroObDdllLongDqsRank0_0; + u32 EmcPmacroObDdllLongDqsRank0_1; + u32 EmcPmacroObDdllLongDqsRank0_2; + u32 EmcPmacroObDdllLongDqsRank0_3; + u32 EmcPmacroObDdllLongDqsRank0_4; + u32 EmcPmacroObDdllLongDqsRank0_5; + u32 EmcPmacroObDdllLongDqsRank1_0; + u32 EmcPmacroObDdllLongDqsRank1_1; + u32 EmcPmacroObDdllLongDqsRank1_2; + u32 EmcPmacroObDdllLongDqsRank1_3; + u32 EmcPmacroObDdllLongDqsRank1_4; + u32 EmcPmacroObDdllLongDqsRank1_5; + u32 EmcPmacroIbDdllLongDqsRank0_0; + u32 EmcPmacroIbDdllLongDqsRank0_1; + u32 EmcPmacroIbDdllLongDqsRank0_2; + u32 EmcPmacroIbDdllLongDqsRank0_3; + u32 EmcPmacroIbDdllLongDqsRank1_0; + u32 EmcPmacroIbDdllLongDqsRank1_1; + u32 EmcPmacroIbDdllLongDqsRank1_2; + u32 EmcPmacroIbDdllLongDqsRank1_3; + u32 EmcPmacroDdllLongCmd_0; + u32 EmcPmacroDdllLongCmd_1; + u32 EmcPmacroDdllLongCmd_2; + u32 EmcPmacroDdllLongCmd_3; + u32 EmcPmacroDdllLongCmd_4; + u32 EmcPmacroDdllShortCmd_0; + u32 EmcPmacroDdllShortCmd_1; + u32 EmcPmacroDdllShortCmd_2; + u32 WarmBootWait; + u32 EmcOdtWrite; + u32 EmcZcalInterval; + u32 EmcZcalWaitCnt; + u32 EmcZcalMrwCmd; + u32 EmcMrsResetDll; + u32 EmcZcalInitDev0; + u32 EmcZcalInitDev1; + u32 EmcZcalInitWait; + u32 EmcZcalWarmColdBootEnables; + u32 EmcMrwLpddr2ZcalWarmBoot; + u32 EmcZqCalDdr3WarmBoot; + u32 EmcZqCalLpDdr4WarmBoot; + u32 EmcZcalWarmBootWait; + u32 EmcMrsWarmBootEnable; + u32 EmcMrsResetDllWait; + u32 EmcMrsExtra; + u32 EmcWarmBootMrsExtra; + u32 EmcEmrsDdr2DllEnable; + u32 EmcMrsDdr2DllReset; + u32 EmcEmrsDdr2OcdCalib; + u32 EmcDdr2Wait; + u32 EmcClkenOverride; + u32 EmcExtraRefreshNum; + u32 EmcClkenOverrideAllWarmBoot; + u32 McClkenOverrideAllWarmBoot; + u32 EmcCfgDigDllPeriodWarmBoot; + u32 PmcVddpSel; + u32 PmcVddpSelWait; + u32 PmcDdrPwr; + u32 PmcDdrCfg; + u32 PmcIoDpd3Req; + u32 PmcIoDpd3ReqWait; + u32 PmcIoDpd4ReqWait; + u32 PmcRegShort; + u32 PmcNoIoPower; + u32 PmcDdrCntrlWait; + u32 PmcDdrCntrl; + u32 EmcAcpdControl; + u32 EmcSwizzleRank0Byte0; + u32 EmcSwizzleRank0Byte1; + u32 EmcSwizzleRank0Byte2; + u32 EmcSwizzleRank0Byte3; + u32 EmcSwizzleRank1Byte0; + u32 EmcSwizzleRank1Byte1; + u32 EmcSwizzleRank1Byte2; + u32 EmcSwizzleRank1Byte3; + u32 EmcTxdsrvttgen; + u32 EmcDataBrlshft0; + u32 EmcDataBrlshft1; + u32 EmcDqsBrlshft0; + u32 EmcDqsBrlshft1; + u32 EmcCmdBrlshft0; + u32 EmcCmdBrlshft1; + u32 EmcCmdBrlshft2; + u32 EmcCmdBrlshft3; + u32 EmcQuseBrlshft0; + u32 EmcQuseBrlshft1; + u32 EmcQuseBrlshft2; + u32 EmcQuseBrlshft3; + u32 EmcDllCfg0; + u32 EmcDllCfg1; + u32 EmcPmcScratch1; + u32 EmcPmcScratch2; + u32 EmcPmcScratch3; + u32 EmcPmacroPadCfgCtrl; + u32 EmcPmacroVttgenCtrl0; + u32 EmcPmacroVttgenCtrl1; + u32 EmcPmacroVttgenCtrl2; + u32 EmcPmacroBrickCtrlRfu1; + u32 EmcPmacroCmdBrickCtrlFdpd; + u32 EmcPmacroBrickCtrlRfu2; + u32 EmcPmacroDataBrickCtrlFdpd; + u32 EmcPmacroBgBiasCtrl0; + u32 EmcPmacroDataPadRxCtrl; + u32 EmcPmacroCmdPadRxCtrl; + u32 EmcPmacroDataRxTermMode; + u32 EmcPmacroCmdRxTermMode; + u32 EmcPmacroDataPadTxCtrl; + u32 EmcPmacroCommonPadTxCtrl; + u32 EmcPmacroCmdPadTxCtrl; + u32 EmcCfg3; + u32 EmcPmacroTxPwrd0; + u32 EmcPmacroTxPwrd1; + u32 EmcPmacroTxPwrd2; + u32 EmcPmacroTxPwrd3; + u32 EmcPmacroTxPwrd4; + u32 EmcPmacroTxPwrd5; + u32 EmcConfigSampleDelay; + u32 EmcPmacroBrickMapping0; + u32 EmcPmacroBrickMapping1; + u32 EmcPmacroBrickMapping2; + u32 EmcPmacroTxSelClkSrc0; + u32 EmcPmacroTxSelClkSrc1; + u32 EmcPmacroTxSelClkSrc2; + u32 EmcPmacroTxSelClkSrc3; + u32 EmcPmacroTxSelClkSrc4; + u32 EmcPmacroTxSelClkSrc5; + u32 EmcPmacroDdllBypass; + u32 EmcPmacroDdllPwrd0; + u32 EmcPmacroDdllPwrd1; + u32 EmcPmacroDdllPwrd2; + u32 EmcPmacroCmdCtrl0; + u32 EmcPmacroCmdCtrl1; + u32 EmcPmacroCmdCtrl2; + u32 McEmemAdrCfg; + u32 McEmemAdrCfgDev0; + u32 McEmemAdrCfgDev1; + u32 McEmemAdrCfgChannelMask; + u32 McEmemAdrCfgBankMask0; + u32 McEmemAdrCfgBankMask1; + u32 McEmemAdrCfgBankMask2; + u32 McEmemCfg; + u32 McEmemArbCfg; + u32 McEmemArbOutstandingReq; + u32 McEmemArbRefpbHpCtrl; + u32 McEmemArbRefpbBankCtrl; + u32 McEmemArbTimingRcd; + u32 McEmemArbTimingRp; + u32 McEmemArbTimingRc; + u32 McEmemArbTimingRas; + u32 McEmemArbTimingFaw; + u32 McEmemArbTimingRrd; + u32 McEmemArbTimingRap2Pre; + u32 McEmemArbTimingWap2Pre; + u32 McEmemArbTimingR2R; + u32 McEmemArbTimingW2W; + u32 McEmemArbTimingR2W; + u32 McEmemArbTimingW2R; + u32 McEmemArbTimingRFCPB; + u32 McEmemArbDaTurns; + u32 McEmemArbDaCovers; + u32 McEmemArbMisc0; + u32 McEmemArbMisc1; + u32 McEmemArbMisc2; + u32 McEmemArbRing1Throttle; + u32 McEmemArbOverride; + u32 McEmemArbOverride1; + u32 McEmemArbRsv; + u32 McDaCfg0; + u32 McEmemArbTimingCcdmw; + u32 McClkenOverride; + u32 McStatControl; + u32 McVideoProtectBom; + u32 McVideoProtectBomAdrHi; + u32 McVideoProtectSizeMb; + u32 McVideoProtectVprOverride; + u32 McVideoProtectVprOverride1; + u32 McVideoProtectGpuOverride0; + u32 McVideoProtectGpuOverride1; + u32 McSecCarveoutBom; + u32 McSecCarveoutAdrHi; + u32 McSecCarveoutSizeMb; + u32 McVideoProtectWriteAccess; + u32 McSecCarveoutProtectWriteAccess; + u32 McGeneralizedCarveout1Bom; + u32 McGeneralizedCarveout1BomHi; + u32 McGeneralizedCarveout1Size128kb; + u32 McGeneralizedCarveout1Access0; + u32 McGeneralizedCarveout1Access1; + u32 McGeneralizedCarveout1Access2; + u32 McGeneralizedCarveout1Access3; + u32 McGeneralizedCarveout1Access4; + u32 McGeneralizedCarveout1ForceInternalAccess0; + u32 McGeneralizedCarveout1ForceInternalAccess1; + u32 McGeneralizedCarveout1ForceInternalAccess2; + u32 McGeneralizedCarveout1ForceInternalAccess3; + u32 McGeneralizedCarveout1ForceInternalAccess4; + u32 McGeneralizedCarveout1Cfg0; + u32 McGeneralizedCarveout2Bom; + u32 McGeneralizedCarveout2BomHi; + u32 McGeneralizedCarveout2Size128kb; + u32 McGeneralizedCarveout2Access0; + u32 McGeneralizedCarveout2Access1; + u32 McGeneralizedCarveout2Access2; + u32 McGeneralizedCarveout2Access3; + u32 McGeneralizedCarveout2Access4; + u32 McGeneralizedCarveout2ForceInternalAccess0; + u32 McGeneralizedCarveout2ForceInternalAccess1; + u32 McGeneralizedCarveout2ForceInternalAccess2; + u32 McGeneralizedCarveout2ForceInternalAccess3; + u32 McGeneralizedCarveout2ForceInternalAccess4; + u32 McGeneralizedCarveout2Cfg0; + u32 McGeneralizedCarveout3Bom; + u32 McGeneralizedCarveout3BomHi; + u32 McGeneralizedCarveout3Size128kb; + u32 McGeneralizedCarveout3Access0; + u32 McGeneralizedCarveout3Access1; + u32 McGeneralizedCarveout3Access2; + u32 McGeneralizedCarveout3Access3; + u32 McGeneralizedCarveout3Access4; + u32 McGeneralizedCarveout3ForceInternalAccess0; + u32 McGeneralizedCarveout3ForceInternalAccess1; + u32 McGeneralizedCarveout3ForceInternalAccess2; + u32 McGeneralizedCarveout3ForceInternalAccess3; + u32 McGeneralizedCarveout3ForceInternalAccess4; + u32 McGeneralizedCarveout3Cfg0; + u32 McGeneralizedCarveout4Bom; + u32 McGeneralizedCarveout4BomHi; + u32 McGeneralizedCarveout4Size128kb; + u32 McGeneralizedCarveout4Access0; + u32 McGeneralizedCarveout4Access1; + u32 McGeneralizedCarveout4Access2; + u32 McGeneralizedCarveout4Access3; + u32 McGeneralizedCarveout4Access4; + u32 McGeneralizedCarveout4ForceInternalAccess0; + u32 McGeneralizedCarveout4ForceInternalAccess1; + u32 McGeneralizedCarveout4ForceInternalAccess2; + u32 McGeneralizedCarveout4ForceInternalAccess3; + u32 McGeneralizedCarveout4ForceInternalAccess4; + u32 McGeneralizedCarveout4Cfg0; + u32 McGeneralizedCarveout5Bom; + u32 McGeneralizedCarveout5BomHi; + u32 McGeneralizedCarveout5Size128kb; + u32 McGeneralizedCarveout5Access0; + u32 McGeneralizedCarveout5Access1; + u32 McGeneralizedCarveout5Access2; + u32 McGeneralizedCarveout5Access3; + u32 McGeneralizedCarveout5Access4; + u32 McGeneralizedCarveout5ForceInternalAccess0; + u32 McGeneralizedCarveout5ForceInternalAccess1; + u32 McGeneralizedCarveout5ForceInternalAccess2; + u32 McGeneralizedCarveout5ForceInternalAccess3; + u32 McGeneralizedCarveout5ForceInternalAccess4; + u32 McGeneralizedCarveout5Cfg0; + u32 EmcCaTrainingEnable; + u32 SwizzleRankByteEncode; + u32 BootRomPatchControl; + u32 BootRomPatchData; + u32 McMtsCarveoutBom; + u32 McMtsCarveoutAdrHi; + u32 McMtsCarveoutSizeMb; + u32 McMtsCarveoutRegCtrl; + }; + static_assert(sizeof(BootSdramParams) == 0x768); + } diff --git a/libraries/libexosphere/include/exosphere/br/impl/br_mariko_types.hpp b/libraries/libexosphere/include/exosphere/br/impl/br_mariko_types.hpp index 8210479c2..a84735d5d 100644 --- a/libraries/libexosphere/include/exosphere/br/impl/br_mariko_types.hpp +++ b/libraries/libexosphere/include/exosphere/br/impl/br_mariko_types.hpp @@ -15,7 +15,538 @@ */ #pragma once #include +#include namespace ams::br::mariko { + struct BootSdramParams { + BootMemoryType MemoryType; + u32 PllMInputDivider; + u32 PllMFeedbackDivider; + u32 PllMStableTime; + u32 PllMSetupControl; + u32 PllMPostDivider; + u32 PllMKCP; + u32 PllMKVCO; + u32 EmcBctSpare0; + u32 EmcBctSpare1; + u32 EmcBctSpare2; + u32 EmcBctSpare3; + u32 EmcBctSpare4; + u32 EmcBctSpare5; + u32 EmcBctSpare6; + u32 EmcBctSpare7; + u32 EmcBctSpare8; + u32 EmcBctSpare9; + u32 EmcBctSpare10; + u32 EmcBctSpare11; + u32 EmcBctSpare12; + u32 EmcBctSpare13; + u32 EmcBctSpareSecure0; + u32 EmcBctSpareSecure1; + u32 EmcBctSpareSecure2; + u32 EmcBctSpareSecure3; + u32 EmcBctSpareSecure4; + u32 EmcBctSpareSecure5; + u32 EmcBctSpareSecure6; + u32 EmcBctSpareSecure7; + u32 EmcBctSpareSecure8; + u32 EmcBctSpareSecure9; + u32 EmcBctSpareSecure10; + u32 EmcBctSpareSecure11; + u32 EmcBctSpareSecure12; + u32 EmcBctSpareSecure13; + u32 EmcBctSpareSecure14; + u32 EmcBctSpareSecure15; + u32 EmcBctSpareSecure16; + u32 EmcBctSpareSecure17; + u32 EmcBctSpareSecure18; + u32 EmcBctSpareSecure19; + u32 EmcBctSpareSecure20; + u32 EmcBctSpareSecure21; + u32 EmcBctSpareSecure22; + u32 EmcBctSpareSecure23; + u32 EmcClockSource; + u32 EmcClockSourceDll; + u32 ClkRstControllerPllmMisc2Override; + u32 ClkRstControllerPllmMisc2OverrideEnable; + u32 ClearClk2Mc1; + u32 EmcAutoCalInterval; + u32 EmcAutoCalConfig; + u32 EmcAutoCalConfig2; + u32 EmcAutoCalConfig3; + u32 EmcAutoCalConfig4; + u32 EmcAutoCalConfig5; + u32 EmcAutoCalConfig6; + u32 EmcAutoCalConfig7; + u32 EmcAutoCalConfig8; + u32 EmcAutoCalConfig9; + u32 EmcAutoCalVrefSel0; + u32 EmcAutoCalVrefSel1; + u32 EmcAutoCalChannel; + u32 EmcPmacroAutocalCfg0; + u32 EmcPmacroAutocalCfg1; + u32 EmcPmacroAutocalCfg2; + u32 EmcPmacroRxTerm; + u32 EmcPmacroDqTxDrv; + u32 EmcPmacroCaTxDrv; + u32 EmcPmacroCmdTxDrv; + u32 EmcPmacroAutocalCfgCommon; + u32 EmcPmacroZctrl; + u32 EmcAutoCalWait; + u32 EmcXm2CompPadCtrl; + u32 EmcXm2CompPadCtrl2; + u32 EmcXm2CompPadCtrl3; + u32 EmcAdrCfg; + u32 EmcPinProgramWait; + u32 EmcPinExtraWait; + u32 EmcPinGpioEn; + u32 EmcPinGpio; + u32 EmcTimingControlWait; + u32 EmcRc; + u32 EmcRfc; + u32 EmcRfcPb; + u32 EmcRefctrl2; + u32 EmcRfcSlr; + u32 EmcRas; + u32 EmcRp; + u32 EmcR2r; + u32 EmcW2w; + u32 EmcR2w; + u32 EmcW2r; + u32 EmcR2p; + u32 EmcW2p; + u32 EmcTppd; + u32 EmcTrtm; + u32 EmcTwtm; + u32 EmcTratm; + u32 EmcTwatm; + u32 EmcTr2ref; + u32 EmcCcdmw; + u32 EmcRdRcd; + u32 EmcWrRcd; + u32 EmcRrd; + u32 EmcRext; + u32 EmcWext; + u32 EmcWdv; + u32 EmcWdvChk; + u32 EmcWsv; + u32 EmcWev; + u32 EmcWdvMask; + u32 EmcWsDuration; + u32 EmcWeDuration; + u32 EmcQUse; + u32 EmcQuseWidth; + u32 EmcIbdly; + u32 EmcObdly; + u32 EmcEInput; + u32 EmcEInputDuration; + u32 EmcPutermExtra; + u32 EmcPutermWidth; + u32 EmcQRst; + u32 EmcQSafe; + u32 EmcRdv; + u32 EmcRdvMask; + u32 EmcRdvEarly; + u32 EmcRdvEarlyMask; + u32 EmcQpop; + u32 EmcRefresh; + u32 EmcBurstRefreshNum; + u32 EmcPreRefreshReqCnt; + u32 EmcPdEx2Wr; + u32 EmcPdEx2Rd; + u32 EmcPChg2Pden; + u32 EmcAct2Pden; + u32 EmcAr2Pden; + u32 EmcRw2Pden; + u32 EmcCke2Pden; + u32 EmcPdex2Cke; + u32 EmcPdex2Mrr; + u32 EmcTxsr; + u32 EmcTxsrDll; + u32 EmcTcke; + u32 EmcTckesr; + u32 EmcTpd; + u32 EmcTfaw; + u32 EmcTrpab; + u32 EmcTClkStable; + u32 EmcTClkStop; + u32 EmcTRefBw; + u32 EmcFbioCfg5; + u32 EmcFbioCfg7; + u32 EmcFbioCfg8; + u32 EmcCmdMappingCmd0_0; + u32 EmcCmdMappingCmd0_1; + u32 EmcCmdMappingCmd0_2; + u32 EmcCmdMappingCmd1_0; + u32 EmcCmdMappingCmd1_1; + u32 EmcCmdMappingCmd1_2; + u32 EmcCmdMappingCmd2_0; + u32 EmcCmdMappingCmd2_1; + u32 EmcCmdMappingCmd2_2; + u32 EmcCmdMappingCmd3_0; + u32 EmcCmdMappingCmd3_1; + u32 EmcCmdMappingCmd3_2; + u32 EmcCmdMappingByte; + u32 EmcFbioSpare; + u32 EmcCfgRsv; + u32 EmcMrs; + u32 EmcEmrs; + u32 EmcEmrs2; + u32 EmcEmrs3; + u32 EmcMrw1; + u32 EmcMrw2; + u32 EmcMrw3; + u32 EmcMrw4; + u32 EmcMrw6; + u32 EmcMrw8; + u32 EmcMrw9; + u32 EmcMrw10; + u32 EmcMrw12; + u32 EmcMrw13; + u32 EmcMrw14; + u32 EmcMrwExtra; + u32 EmcWarmBootMrwExtra; + u32 EmcWarmBootExtraModeRegWriteEnable; + u32 EmcExtraModeRegWriteEnable; + u32 EmcMrwResetCommand; + u32 EmcMrwResetNInitWait; + u32 EmcMrsWaitCnt; + u32 EmcMrsWaitCnt2; + u32 EmcCfg; + u32 EmcCfg2; + u32 EmcCfgPipe; + u32 EmcCfgPipeClk; + u32 EmcFdpdCtrlCmdNoRamp; + u32 EmcCfgUpdate; + u32 EmcDbg; + u32 EmcDbgWriteMux; + u32 EmcCmdQ; + u32 EmcMc2EmcQ; + u32 EmcDynSelfRefControl; + u32 AhbArbitrationXbarCtrlMemInitDone; + u32 EmcCfgDigDll; + u32 EmcCfgDigDll_1; + u32 EmcCfgDigDllPeriod; + u32 EmcDevSelect; + u32 EmcSelDpdCtrl; + u32 EmcFdpdCtrlDq; + u32 EmcFdpdCtrlCmd; + u32 EmcPmacroIbVrefDq_0; + u32 EmcPmacroIbVrefDq_1; + u32 EmcPmacroIbVrefDqs_0; + u32 EmcPmacroIbVrefDqs_1; + u32 EmcPmacroIbRxrt; + u32 EmcCfgPipe1; + u32 EmcCfgPipe2; + u32 EmcPmacroQuseDdllRank0_0; + u32 EmcPmacroQuseDdllRank0_1; + u32 EmcPmacroQuseDdllRank0_2; + u32 EmcPmacroQuseDdllRank0_3; + u32 EmcPmacroQuseDdllRank0_4; + u32 EmcPmacroQuseDdllRank0_5; + u32 EmcPmacroQuseDdllRank1_0; + u32 EmcPmacroQuseDdllRank1_1; + u32 EmcPmacroQuseDdllRank1_2; + u32 EmcPmacroQuseDdllRank1_3; + u32 EmcPmacroQuseDdllRank1_4; + u32 EmcPmacroQuseDdllRank1_5; + u32 EmcPmacroObDdllLongDqRank0_0; + u32 EmcPmacroObDdllLongDqRank0_1; + u32 EmcPmacroObDdllLongDqRank0_2; + u32 EmcPmacroObDdllLongDqRank0_3; + u32 EmcPmacroObDdllLongDqRank0_4; + u32 EmcPmacroObDdllLongDqRank0_5; + u32 EmcPmacroObDdllLongDqRank1_0; + u32 EmcPmacroObDdllLongDqRank1_1; + u32 EmcPmacroObDdllLongDqRank1_2; + u32 EmcPmacroObDdllLongDqRank1_3; + u32 EmcPmacroObDdllLongDqRank1_4; + u32 EmcPmacroObDdllLongDqRank1_5; + u32 EmcPmacroObDdllLongDqsRank0_0; + u32 EmcPmacroObDdllLongDqsRank0_1; + u32 EmcPmacroObDdllLongDqsRank0_2; + u32 EmcPmacroObDdllLongDqsRank0_3; + u32 EmcPmacroObDdllLongDqsRank0_4; + u32 EmcPmacroObDdllLongDqsRank0_5; + u32 EmcPmacroObDdllLongDqsRank1_0; + u32 EmcPmacroObDdllLongDqsRank1_1; + u32 EmcPmacroObDdllLongDqsRank1_2; + u32 EmcPmacroObDdllLongDqsRank1_3; + u32 EmcPmacroObDdllLongDqsRank1_4; + u32 EmcPmacroObDdllLongDqsRank1_5; + u32 EmcPmacroIbDdllLongDqsRank0_0; + u32 EmcPmacroIbDdllLongDqsRank0_1; + u32 EmcPmacroIbDdllLongDqsRank0_2; + u32 EmcPmacroIbDdllLongDqsRank0_3; + u32 EmcPmacroIbDdllLongDqsRank1_0; + u32 EmcPmacroIbDdllLongDqsRank1_1; + u32 EmcPmacroIbDdllLongDqsRank1_2; + u32 EmcPmacroIbDdllLongDqsRank1_3; + u32 EmcPmacroDdllLongCmd_0; + u32 EmcPmacroDdllLongCmd_1; + u32 EmcPmacroDdllLongCmd_2; + u32 EmcPmacroDdllLongCmd_3; + u32 EmcPmacroDdllLongCmd_4; + u32 EmcPmacroDdllShortCmd_0; + u32 EmcPmacroDdllShortCmd_1; + u32 EmcPmacroDdllShortCmd_2; + u32 EmcPmacroDdllPeriodicOffset; + u32 WarmBootWait; + u32 EmcOdtWrite; + u32 EmcZcalInterval; + u32 EmcZcalWaitCnt; + u32 EmcZcalMrwCmd; + u32 EmcMrsResetDll; + u32 EmcZcalInitDev0; + u32 EmcZcalInitDev1; + u32 EmcZcalInitWait; + u32 EmcZcalWarmColdBootEnables; + u32 EmcMrwLpddr2ZcalWarmBoot; + u32 EmcZqCalDdr3WarmBoot; + u32 EmcZqCalLpDdr4WarmBoot; + u32 EmcZcalWarmBootWait; + u32 EmcMrsWarmBootEnable; + u32 EmcMrsResetDllWait; + u32 EmcMrsExtra; + u32 EmcWarmBootMrsExtra; + u32 EmcEmrsDdr2DllEnable; + u32 EmcMrsDdr2DllReset; + u32 EmcEmrsDdr2OcdCalib; + u32 EmcDdr2Wait; + u32 EmcClkenOverride; + u32 EmcExtraRefreshNum; + u32 EmcClkenOverrideAllWarmBoot; + u32 McClkenOverrideAllWarmBoot; + u32 EmcCfgDigDllPeriodWarmBoot; + u32 PmcVddpSel; + u32 PmcVddpSelWait; + u32 PmcDdrCfg; + u32 PmcIoDpd3Req; + u32 PmcIoDpd3ReqWait; + u32 PmcIoDpd4ReqWait; + u32 PmcRegShort; + u32 PmcNoIoPower; + u32 PmcDdrCntrlWait; + u32 PmcDdrCntrl; + u32 EmcAcpdControl; + u32 EmcSwizzleRank0Byte0; + u32 EmcSwizzleRank0Byte1; + u32 EmcSwizzleRank0Byte2; + u32 EmcSwizzleRank0Byte3; + u32 EmcSwizzleRank1Byte0; + u32 EmcSwizzleRank1Byte1; + u32 EmcSwizzleRank1Byte2; + u32 EmcSwizzleRank1Byte3; + u32 EmcTxdsrvttgen; + u32 EmcDataBrlshft0; + u32 EmcDataBrlshft1; + u32 EmcDqsBrlshft0; + u32 EmcDqsBrlshft1; + u32 EmcCmdBrlshft0; + u32 EmcCmdBrlshft1; + u32 EmcCmdBrlshft2; + u32 EmcCmdBrlshft3; + u32 EmcQuseBrlshft0; + u32 EmcQuseBrlshft1; + u32 EmcQuseBrlshft2; + u32 EmcQuseBrlshft3; + u32 EmcPmacroDllCfg0; + u32 EmcPmacroDllCfg1; + u32 EmcPmcScratch1; + u32 EmcPmcScratch2; + u32 EmcPmcScratch3; + u32 EmcPmacroPadCfgCtrl; + u32 EmcPmacroVttgenCtrl0; + u32 EmcPmacroVttgenCtrl1; + u32 EmcPmacroVttgenCtrl2; + u32 EmcPmacroDsrVttgenCtrl0; + u32 EmcPmacroBrickCtrlRfu1; + u32 EmcPmacroCmdBrickCtrlFdpd; + u32 EmcPmacroBrickCtrlRfu2; + u32 EmcPmacroDataBrickCtrlFdpd; + u32 EmcPmacroBgBiasCtrl0; + u32 EmcPmacroDataPadRxCtrl; + u32 EmcPmacroCmdPadRxCtrl; + u32 EmcPmacroDataRxTermMode; + u32 EmcPmacroCmdRxTermMode; + u32 EmcPmacroDataPadTxCtrl; + u32 EmcPmacroCmdPadTxCtrl; + u32 EmcCfg3; + u32 EmcPmacroTxPwrd0; + u32 EmcPmacroTxPwrd1; + u32 EmcPmacroTxPwrd2; + u32 EmcPmacroTxPwrd3; + u32 EmcPmacroTxPwrd4; + u32 EmcPmacroTxPwrd5; + u32 EmcConfigSampleDelay; + u32 EmcPmacroBrickMapping0; + u32 EmcPmacroBrickMapping1; + u32 EmcPmacroBrickMapping2; + u32 EmcPmacroTxSelClkSrc0; + u32 EmcPmacroTxSelClkSrc1; + u32 EmcPmacroTxSelClkSrc2; + u32 EmcPmacroTxSelClkSrc3; + u32 EmcPmacroTxSelClkSrc4; + u32 EmcPmacroTxSelClkSrc5; + u32 EmcPmacroPerbitFgcgCtrl0; + u32 EmcPmacroPerbitFgcgCtrl1; + u32 EmcPmacroPerbitFgcgCtrl2; + u32 EmcPmacroPerbitFgcgCtrl3; + u32 EmcPmacroPerbitFgcgCtrl4; + u32 EmcPmacroPerbitFgcgCtrl5; + u32 EmcPmacroPerbitRfuCtrl0; + u32 EmcPmacroPerbitRfuCtrl1; + u32 EmcPmacroPerbitRfuCtrl2; + u32 EmcPmacroPerbitRfuCtrl3; + u32 EmcPmacroPerbitRfuCtrl4; + u32 EmcPmacroPerbitRfuCtrl5; + u32 EmcPmacroPerbitRfu1Ctrl0; + u32 EmcPmacroPerbitRfu1Ctrl1; + u32 EmcPmacroPerbitRfu1Ctrl2; + u32 EmcPmacroPerbitRfu1Ctrl3; + u32 EmcPmacroPerbitRfu1Ctrl4; + u32 EmcPmacroPerbitRfu1Ctrl5; + u32 EmcPmacroDataPiCtrl; + u32 EmcPmacroCmdPiCtrl; + u32 EmcPmacroDdllBypass; + u32 EmcPmacroDdllPwrd0; + u32 EmcPmacroDdllPwrd1; + u32 EmcPmacroDdllPwrd2; + u32 EmcPmacroCmdCtrl0; + u32 EmcPmacroCmdCtrl1; + u32 EmcPmacroCmdCtrl2; + u32 McEmemAdrCfg; + u32 McEmemAdrCfgDev0; + u32 McEmemAdrCfgDev1; + u32 McEmemAdrCfgChannelMask; + u32 McEmemAdrCfgBankMask0; + u32 McEmemAdrCfgBankMask1; + u32 McEmemAdrCfgBankMask2; + u32 McEmemCfg; + u32 McEmemArbCfg; + u32 McEmemArbOutstandingReq; + u32 McEmemArbRefpbHpCtrl; + u32 McEmemArbRefpbBankCtrl; + u32 McEmemArbTimingRcd; + u32 McEmemArbTimingRp; + u32 McEmemArbTimingRc; + u32 McEmemArbTimingRas; + u32 McEmemArbTimingFaw; + u32 McEmemArbTimingRrd; + u32 McEmemArbTimingRap2Pre; + u32 McEmemArbTimingWap2Pre; + u32 McEmemArbTimingR2R; + u32 McEmemArbTimingW2W; + u32 McEmemArbTimingR2W; + u32 McEmemArbTimingW2R; + u32 McEmemArbTimingRFCPB; + u32 McEmemArbDaTurns; + u32 McEmemArbDaCovers; + u32 McEmemArbMisc0; + u32 McEmemArbMisc1; + u32 McEmemArbMisc2; + u32 McEmemArbRing1Throttle; + u32 McEmemArbOverride; + u32 McEmemArbOverride1; + u32 McEmemArbRsv; + u32 McDaCfg0; + u32 McEmemArbTimingCcdmw; + u32 McClkenOverride; + u32 McStatControl; + u32 McVideoProtectBom; + u32 McVideoProtectBomAdrHi; + u32 McVideoProtectSizeMb; + u32 McVideoProtectVprOverride; + u32 McVideoProtectVprOverride1; + u32 McVideoProtectGpuOverride0; + u32 McVideoProtectGpuOverride1; + u32 McSecCarveoutBom; + u32 McSecCarveoutAdrHi; + u32 McSecCarveoutSizeMb; + u32 McVideoProtectWriteAccess; + u32 McSecCarveoutProtectWriteAccess; + u32 McGeneralizedCarveout1Bom; + u32 McGeneralizedCarveout1BomHi; + u32 McGeneralizedCarveout1Size128kb; + u32 McGeneralizedCarveout1Access0; + u32 McGeneralizedCarveout1Access1; + u32 McGeneralizedCarveout1Access2; + u32 McGeneralizedCarveout1Access3; + u32 McGeneralizedCarveout1Access4; + u32 McGeneralizedCarveout1ForceInternalAccess0; + u32 McGeneralizedCarveout1ForceInternalAccess1; + u32 McGeneralizedCarveout1ForceInternalAccess2; + u32 McGeneralizedCarveout1ForceInternalAccess3; + u32 McGeneralizedCarveout1ForceInternalAccess4; + u32 McGeneralizedCarveout1Cfg0; + u32 McGeneralizedCarveout2Bom; + u32 McGeneralizedCarveout2BomHi; + u32 McGeneralizedCarveout2Size128kb; + u32 McGeneralizedCarveout2Access0; + u32 McGeneralizedCarveout2Access1; + u32 McGeneralizedCarveout2Access2; + u32 McGeneralizedCarveout2Access3; + u32 McGeneralizedCarveout2Access4; + u32 McGeneralizedCarveout2ForceInternalAccess0; + u32 McGeneralizedCarveout2ForceInternalAccess1; + u32 McGeneralizedCarveout2ForceInternalAccess2; + u32 McGeneralizedCarveout2ForceInternalAccess3; + u32 McGeneralizedCarveout2ForceInternalAccess4; + u32 McGeneralizedCarveout2Cfg0; + u32 McGeneralizedCarveout3Bom; + u32 McGeneralizedCarveout3BomHi; + u32 McGeneralizedCarveout3Size128kb; + u32 McGeneralizedCarveout3Access0; + u32 McGeneralizedCarveout3Access1; + u32 McGeneralizedCarveout3Access2; + u32 McGeneralizedCarveout3Access3; + u32 McGeneralizedCarveout3Access4; + u32 McGeneralizedCarveout3ForceInternalAccess0; + u32 McGeneralizedCarveout3ForceInternalAccess1; + u32 McGeneralizedCarveout3ForceInternalAccess2; + u32 McGeneralizedCarveout3ForceInternalAccess3; + u32 McGeneralizedCarveout3ForceInternalAccess4; + u32 McGeneralizedCarveout3Cfg0; + u32 McGeneralizedCarveout4Bom; + u32 McGeneralizedCarveout4BomHi; + u32 McGeneralizedCarveout4Size128kb; + u32 McGeneralizedCarveout4Access0; + u32 McGeneralizedCarveout4Access1; + u32 McGeneralizedCarveout4Access2; + u32 McGeneralizedCarveout4Access3; + u32 McGeneralizedCarveout4Access4; + u32 McGeneralizedCarveout4ForceInternalAccess0; + u32 McGeneralizedCarveout4ForceInternalAccess1; + u32 McGeneralizedCarveout4ForceInternalAccess2; + u32 McGeneralizedCarveout4ForceInternalAccess3; + u32 McGeneralizedCarveout4ForceInternalAccess4; + u32 McGeneralizedCarveout4Cfg0; + u32 McGeneralizedCarveout5Bom; + u32 McGeneralizedCarveout5BomHi; + u32 McGeneralizedCarveout5Size128kb; + u32 McGeneralizedCarveout5Access0; + u32 McGeneralizedCarveout5Access1; + u32 McGeneralizedCarveout5Access2; + u32 McGeneralizedCarveout5Access3; + u32 McGeneralizedCarveout5Access4; + u32 McGeneralizedCarveout5ForceInternalAccess0; + u32 McGeneralizedCarveout5ForceInternalAccess1; + u32 McGeneralizedCarveout5ForceInternalAccess2; + u32 McGeneralizedCarveout5ForceInternalAccess3; + u32 McGeneralizedCarveout5ForceInternalAccess4; + u32 McGeneralizedCarveout5Cfg0; + u32 EmcCaTrainingEnable; + u32 SwizzleRankByteEncode; + u32 BootRomPatchControl; + u32 BootRomPatchData; + u32 McMtsCarveoutBom; + u32 McMtsCarveoutAdrHi; + u32 McMtsCarveoutSizeMb; + u32 McMtsCarveoutRegCtrl; + u32 McUntranslatedRegionCheck; + u32 BCT_NA; + }; + static_assert(sizeof(BootSdramParams) == 0x838); + } diff --git a/libraries/libexosphere/include/exosphere/pmic_setup.hpp b/libraries/libexosphere/include/exosphere/pmic_setup.hpp index 38466504c..b6ff75e93 100644 --- a/libraries/libexosphere/include/exosphere/pmic_setup.hpp +++ b/libraries/libexosphere/include/exosphere/pmic_setup.hpp @@ -24,4 +24,6 @@ namespace ams::pmic { void EnableVddCore(fuse::SocType soc_type); void EnableLdo8(); + void EnableVddMemory(fuse::SocType soc_type); + } \ No newline at end of file diff --git a/libraries/libexosphere/source/libc/libgcc_thumb_case.arch.arm.s b/libraries/libexosphere/source/libc/libgcc_thumb_case.arch.arm.s index a7726543a..ffd068f4a 100644 --- a/libraries/libexosphere/source/libc/libgcc_thumb_case.arch.arm.s +++ b/libraries/libexosphere/source/libc/libgcc_thumb_case.arch.arm.s @@ -52,3 +52,23 @@ __gnu_thumb1_case_uhi: bx lr .type __gnu_thumb1_case_uhi, %function .size __gnu_thumb1_case_uhi, .-__gnu_thumb1_case_uhi + +.section .text.__gnu_thumb1_case_si, "ax", %progbits +.globl __gnu_thumb1_case_si +.align 0 +.thumb_func +.syntax unified +__gnu_thumb1_case_si: + push {r0, r1} + mov r1, lr + adds.n r1, r1, #2 + lsrs r1, r1, #2 + lsls r0, r0, #2 + lsls r1, r1, #2 + ldr r0, [r1, r0] + adds r0, r0, r1 + mov lr, r0 + pop {r0, r1} + bx lr +.type __gnu_thumb1_case_si, %function +.size __gnu_thumb1_case_si, .-__gnu_thumb1_case_si diff --git a/libraries/libexosphere/source/pmic/pmic_api.cpp b/libraries/libexosphere/source/pmic/pmic_api.cpp index 37dab92d7..47b862443 100644 --- a/libraries/libexosphere/source/pmic/pmic_api.cpp +++ b/libraries/libexosphere/source/pmic/pmic_api.cpp @@ -35,6 +35,8 @@ namespace ams::pmic { constexpr inline int Max77620RegisterCnfgBbc = 0x04; constexpr inline int Max77620RegisterOnOffStat = 0x15; constexpr inline int Max77620RegisterSd0 = 0x16; + constexpr inline int Max77620RegisterSd1 = 0x17; + constexpr inline int Max77620RegisterCnfg2Sd = 0x22; constexpr inline int Max77620RegisterCnfg1Ldo8 = 0x33; constexpr inline int Max77620RegisterGpio0 = 0x36; constexpr inline int Max77620RegisterAmeGpio = 0x40; @@ -276,4 +278,14 @@ namespace ams::pmic { i2c::SendByte(i2c::Port_5, I2cAddressMax77620Pmic, Max77620RegisterCnfg1Ldo8, 0xE8); } + void EnableVddMemory(fuse::SocType soc_type) { + /* Disable remote sense for Sd1. */ + i2c::SendByte(i2c::Port_5, I2cAddressMax77620Pmic, Max77620RegisterCnfg2Sd, 0x05); + + /* On Erista, set Sd1 voltage. */ + if (soc_type == fuse::SocType_Erista) { + SetVoltage(Max77620RegisterSd1, 1100); + } + } + } diff --git a/libraries/libvapours/include/vapours/tegra/tegra_ahb_arbc.hpp b/libraries/libvapours/include/vapours/tegra/tegra_ahb_arbc.hpp index 37066da05..9d1b454a4 100644 --- a/libraries/libvapours/include/vapours/tegra/tegra_ahb_arbc.hpp +++ b/libraries/libvapours/include/vapours/tegra/tegra_ahb_arbc.hpp @@ -28,6 +28,7 @@ #define AHB_MASTER_SWID (0x018) #define AHB_MASTER_SWID_1 (0x038) #define AHB_GIZMO_TZRAM (0x054) +#define AHB_ARBITRATION_XBAR_CTRL (0x0E0) #define AHB_AHB_SPARE_REG (0x110) #define AHB_REG_BITS_MASK(NAME) REG_NAMED_BITS_MASK (AHB_, NAME) @@ -46,6 +47,8 @@ DEFINE_AHB_REG_BIT_ENUM(ARBITRATION_DISABLE_AHBDMA, 5, ENABLE, DISABLE); DEFINE_AHB_REG_BIT_ENUM(ARBITRATION_DISABLE_USB, 6, ENABLE, DISABLE); DEFINE_AHB_REG_BIT_ENUM(ARBITRATION_DISABLE_USB2, 18, ENABLE, DISABLE); +DEFINE_AHB_REG_BIT_ENUM(ARBITRATION_XBAR_CTRL_MEM_INIT_DONE, 16, NOT_DONE, DONE); + DEFINE_AHB_REG(AHB_SPARE_REG_CSITE_PADMACRO3_TRIM_SEL, 0, 5); DEFINE_AHB_REG_BIT_ENUM(AHB_SPARE_REG_OBS_OVERRIDE_EN, 5, DISABLE, ENABLE); DEFINE_AHB_REG_BIT_ENUM(AHB_SPARE_REG_APB2JTAG_OVERRIDE_EN, 6, DISABLE, ENABLE); diff --git a/libraries/libvapours/include/vapours/tegra/tegra_clkrst.hpp b/libraries/libvapours/include/vapours/tegra/tegra_clkrst.hpp index 6d7fc51e6..9ba01e90c 100644 --- a/libraries/libvapours/include/vapours/tegra/tegra_clkrst.hpp +++ b/libraries/libvapours/include/vapours/tegra/tegra_clkrst.hpp @@ -41,6 +41,9 @@ #define CLK_RST_CONTROLLER_CLK_SYSTEM_RATE (0x030) #define CLK_RST_CONTROLLER_MISC_CLK_ENB (0x048) #define CLK_RST_CONTROLLER_OSC_CTRL (0x050) +#define CLK_RST_CONTROLLER_PLLM_BASE (0x090) +#define CLK_RST_CONTROLLER_PLLM_MISC1 (0x098) +#define CLK_RST_CONTROLLER_PLLM_MISC2 (0x09C) #define CLK_RST_CONTROLLER_PLLD_BASE (0x0D0) #define CLK_RST_CONTROLLER_PLLD_MISC1 (0x0D8) #define CLK_RST_CONTROLLER_PLLD_MISC (0x0DC) @@ -92,6 +95,14 @@ DEFINE_CLK_RST_REG_BIT_ENUM(OSC_CTRL_XOE, 0, DISABLE, ENABLE); DEFINE_CLK_RST_REG(OSC_CTRL_XOFS, 4, 6); DEFINE_CLK_RST_REG_FOUR_BIT_ENUM(OSC_CTRL_OSC_FREQ, 28, OSC13, OSC16P8, RSVD2, RSVD3, OSC19P2, OSC38P4, RSVD6, RSVD7, OSC12, OSC48, RSVD10, RSVD11, OSC26, RSVD13, RSVD14, RSVD15); +DEFINE_CLK_RST_REG(PLLM_BASE_PLLM_DIVM, 0, 8); +DEFINE_CLK_RST_REG(PLLM_BASE_PLLM_DIVN, 8, 8); +DEFINE_CLK_RST_REG(PLLM_BASE_PLLM_DIVP, 20, 5); +DEFINE_CLK_RST_REG_BIT_ENUM(PLLM_BASE_PLLM_LOCK, 27, NOT_LOCK, LOCK); +DEFINE_CLK_RST_REG_BIT_ENUM(PLLM_BASE_PLLM_REF_DIS, 29, REF_ENABLE, REF_DISABLE); +DEFINE_CLK_RST_REG_BIT_ENUM(PLLM_BASE_PLLM_ENABLE, 30, DISABLE, ENABLE); +DEFINE_CLK_RST_REG_BIT_ENUM(PLLM_BASE_PLLM_BYPASSPLL, 31, DISABLE, ENABLE); + DEFINE_CLK_RST_REG_BIT_ENUM(PLLD_BASE_CSI_CLK_SRC, 23, BRICK, PLL_D); DEFINE_CLK_RST_REG_BIT_ENUM(PLLD_BASE_PLLD_REF_DIS, 29, REF_ENABLE, REF_DISABLE); DEFINE_CLK_RST_REG_BIT_ENUM(PLLD_BASE_PLLD_ENABLE, 30, DISABLE, ENABLE); @@ -171,6 +182,7 @@ DEFINE_CLK_RST_REG_BIT_ENUM(PLLMB_BASE_PLLMB_ENABLE, 30, DISABLE, ENABLE); #define CLK_RST_CONTROLLER_CLK_SOURCE_DVFS_REF (0x62C) #define CLK_RST_CONTROLLER_CLK_SOURCE_DVFS_SOC (0x630) #define CLK_RST_CONTROLLER_CLK_SOURCE_I2C6 (0x65C) +#define CLK_RST_CONTROLLER_CLK_SOURCE_EMC_DLL (0x664) #define CLK_RST_CONTROLLER_CLK_SOURCE_UART_FST_MIPI_CAL (0x66C) #define CLK_RST_CONTROLLER_CLK_SOURCE_SDMMC_LEGACY_TM (0x694) #define CLK_RST_CONTROLLER_CLK_SOURCE_NVENC (0x6A4) diff --git a/libraries/libvapours/include/vapours/tegra/tegra_emc.hpp b/libraries/libvapours/include/vapours/tegra/tegra_emc.hpp index 1e1560d4c..6ec7802ff 100644 --- a/libraries/libvapours/include/vapours/tegra/tegra_emc.hpp +++ b/libraries/libvapours/include/vapours/tegra/tegra_emc.hpp @@ -25,23 +25,521 @@ #define EMC0_ADDRESS(x) (0x7001E000 + x) #define EMC1_ADDRESS(x) (0x7001F000 + x) -#define EMC_CFG (0x00C) -#define EMC_ADR_CFG (0x010) -#define EMC_TIMING_CONTROL (0x028) -#define EMC_SELF_REF (0x0E0) -#define EMC_MRW (0x0E8) -#define EMC_FBIO_CFG5 (0x104) -#define EMC_MRW3 (0x138) -#define EMC_AUTO_CAL_CONFIG (0x2A4) -#define EMC_REQ_CTRL (0x2B0) -#define EMC_EMC_STATUS (0x2B4) -#define EMC_CFG_DIG_DLL (0x2BC) -#define EMC_ZCAL_INTERVAL (0x2E0) -#define EMC_PMC_SCRATCH3 (0x448) -#define EMC_FBIO_CFG7 (0x584) -#define EMC_PMACRO_CFG_PM_GLOBAL_0 (0xC30) -#define EMC_PMACRO_TRAINING_CTRL_0 (0xCF8) -#define EMC_PMACRO_TRAINING_CTRL_1 (0xCFC) +#define EMC_INTSTATUS (0x000) +#define EMC_DBG (0x008) +#define EMC_CFG (0x00C) +#define EMC_ADR_CFG (0x010) +#define EMC_REFCTRL (0x020) +#define EMC_PIN (0x024) +#define EMC_TIMING_CONTROL (0x028) +#define EMC_RC (0x02C) +#define EMC_RFC (0x030) +#define EMC_RAS (0x034) +#define EMC_RP (0x038) +#define EMC_R2W (0x03C) +#define EMC_W2R (0x040) +#define EMC_R2P (0x044) +#define EMC_W2P (0x048) +#define EMC_RD_RCD (0x04C) +#define EMC_WR_RCD (0x050) +#define EMC_RRD (0x054) +#define EMC_REXT (0x058) +#define EMC_WDV (0x05C) +#define EMC_QUSE (0x060) +#define EMC_QRST (0x064) +#define EMC_QSAFE (0x068) +#define EMC_RDV (0x06C) +#define EMC_REFRESH (0x070) +#define EMC_BURST_REFRESH_NUM (0x074) +#define EMC_PDEX2WR (0x078) +#define EMC_PDEX2RD (0x07C) +#define EMC_PCHG2PDEN (0x080) +#define EMC_ACT2PDEN (0x084) +#define EMC_AR2PDEN (0x088) +#define EMC_RW2PDEN (0x08C) +#define EMC_TXSR (0x090) +#define EMC_TCKE (0x094) +#define EMC_TFAW (0x098) +#define EMC_TRPAB (0x09C) +#define EMC_TCLKSTABLE (0x0A0) +#define EMC_TCLKSTOP (0x0A4) +#define EMC_TREFBW (0x0A8) +#define EMC_TPPD (0x0AC) +#define EMC_ODT_WRITE (0x0B0) +#define EMC_PDEX2MRR (0x0B4) +#define EMC_WEXT (0x0B8) +#define EMC_TRTM (0x0BC) +#define EMC_RFC_SLR (0x0C0) +#define EMC_MRS_WAIT_CNT2 (0x0C4) +#define EMC_MRS_WAIT_CNT (0x0C8) +#define EMC_MRS (0x0CC) +#define EMC_EMRS (0x0D0) +#define EMC_REF (0x0D4) +#define EMC_NOP (0x0DC) +#define EMC_SELF_REF (0x0E0) +#define EMC_MRW (0x0E8) +#define EMC_MRR (0x0EC) +#define EMC_CMDQ (0x0F0) +#define EMC_MC2EMCQ (0x0F4) +#define EMC_TWTM (0x0F8) +#define EMC_TRATM (0x0FC) +#define EMC_FBIO_SPARE (0x100) +#define EMC_FBIO_CFG5 (0x104) +#define EMC_TWATM (0x108) +#define EMC_TR2REF (0x10C) +#define EMC_PMACRO_DATA_PI_CTRL (0x110) +#define EMC_PMACRO_CMD_PI_CTRL (0x114) +#define EMC_PDEX2CKE (0x118) +#define EMC_CKE2PDEN (0x11C) +#define EMC_CFG_RSV (0x120) +#define EMC_ACPD_CONTROL (0x124) +#define EMC_MPC (0x128) +#define EMC_EMRS2 (0x12C) +#define EMC_MRW2 (0x134) +#define EMC_MRW3 (0x138) +#define EMC_MRW3 (0x138) +#define EMC_MRW4 (0x13C) +#define EMC_CLKEN_OVERRIDE (0x140) +#define EMC_R2R (0x144) +#define EMC_W2W (0x148) +#define EMC_EINPUT (0x14C) +#define EMC_EINPUT_DURATION (0x150) +#define EMC_PUTERM_EXTRA (0x154) +#define EMC_TCKESR (0x158) +#define EMC_TPD (0x15C) +#define EMC_AUTO_CAL_CONFIG (0x2A4) +#define EMC_AUTO_CAL_INTERVAL (0x2A8) +#define EMC_REQ_CTRL (0x2B0) +#define EMC_EMC_STATUS (0x2B4) +#define EMC_CFG_2 (0x2B8) +#define EMC_CFG_DIG_DLL (0x2BC) +#define EMC_CFG_DIG_DLL_PERIOD (0x2C0) +#define EMC_DIG_DLL_STATUS (0x2C4) +#define EMC_CFG_DIG_DLL_1 (0x2C8) +#define EMC_RDV_MASK (0x2CC) +#define EMC_WDV_MASK (0x2D0) +#define EMC_RDV_EARLY_MASK (0x2D4) +#define EMC_RDV_EARLY (0x2D8) +#define EMC_AUTO_CAL_CONFIG8 (0x2DC) +#define EMC_ZCAL_INTERVAL (0x2E0) +#define EMC_ZCAL_WAIT_CNT (0x2E4) +#define EMC_ZCAL_MRW_CMD (0x2E8) +#define EMC_ZQ_CAL (0x2EC) +#define EMC_XM2COMPPADCTRL3 (0x2F4) +#define EMC_AUTO_CAL_VREF_SEL_0 (0x2F8) +#define EMC_AUTO_CAL_VREF_SEL_1 (0x300) +#define EMC_XM2COMPPADCTRL (0x30C) +#define EMC_FDPD_CTRL_DQ (0x310) +#define EMC_FDPD_CTRL_CMD (0x314) +#define EMC_PMACRO_CMD_BRICK_CTRL_FDPD (0x318) +#define EMC_PMACRO_DATA_BRICK_CTRL_FDPD (0x31C) +#define EMC_SCRATCH0 (0x324) +#define EMC_PMACRO_BRICK_CTRL_RFU1 (0x330) +#define EMC_PMACRO_BRICK_CTRL_RFU2 (0x334) +#define EMC_CMD_MAPPING_CMD0_0 (0x380) +#define EMC_CMD_MAPPING_CMD0_1 (0x384) +#define EMC_CMD_MAPPING_CMD0_2 (0x388) +#define EMC_CMD_MAPPING_CMD1_0 (0x38C) +#define EMC_CMD_MAPPING_CMD1_1 (0x390) +#define EMC_CMD_MAPPING_CMD1_2 (0x394) +#define EMC_CMD_MAPPING_CMD2_0 (0x398) +#define EMC_CMD_MAPPING_CMD2_1 (0x39C) +#define EMC_CMD_MAPPING_CMD2_2 (0x3A0) +#define EMC_CMD_MAPPING_CMD3_0 (0x3A4) +#define EMC_CMD_MAPPING_CMD3_1 (0x3A8) +#define EMC_CMD_MAPPING_CMD3_2 (0x3AC) +#define EMC_CMD_MAPPING_BYTE (0x3B0) +#define EMC_TR_TIMING_0 (0x3B4) +#define EMC_TR_CTRL_0 (0x3B8) +#define EMC_TR_CTRL_1 (0x3BC) +#define EMC_SWITCH_BACK_CTRL (0x3C0) +#define EMC_TR_RDV (0x3C4) +#define EMC_STALL_THEN_EXE_AFTER_CLKCHANGE (0x3CC) +#define EMC_SEL_DPD_CTRL (0x3D8) +#define EMC_PRE_REFRESH_REQ_CNT (0x3DC) +#define EMC_DYN_SELF_REF_CONTROL (0x3E0) +#define EMC_TXSRDLL (0x3E4) +#define EMC_CCFIFO_ADDR (0x3E8) +#define EMC_CCFIFO_DATA (0x3EC) +#define EMC_CCFIFO_STATUS (0x3F0) +#define EMC_TR_QPOP (0x3F4) +#define EMC_TR_RDV_MASK (0x3F8) +#define EMC_TR_QSAFE (0x3FC) +#define EMC_TR_QRST (0x400) +#define EMC_SWIZZLE_RANK0_BYTE0 (0x404) +#define EMC_SWIZZLE_RANK0_BYTE1 (0x408) +#define EMC_SWIZZLE_RANK0_BYTE2 (0x40C) +#define EMC_SWIZZLE_RANK0_BYTE3 (0x410) +#define EMC_SWIZZLE_RANK1_BYTE0 (0x418) +#define EMC_SWIZZLE_RANK1_BYTE1 (0x41C) +#define EMC_SWIZZLE_RANK1_BYTE2 (0x420) +#define EMC_SWIZZLE_RANK1_BYTE3 (0x424) +#define EMC_ISSUE_QRST (0x428) +#define EMC_AUTO_CAL_CONFIG9 (0x42C) +#define EMC_PMC_SCRATCH1 (0x440) +#define EMC_PMC_SCRATCH2 (0x444) +#define EMC_PMC_SCRATCH3 (0x448) +#define EMC_AUTO_CAL_CONFIG2 (0x458) +#define EMC_AUTO_CAL_CONFIG3 (0x45C) +#define EMC_TR_DVFS (0x460) +#define EMC_AUTO_CAL_CHANNEL (0x464) +#define EMC_IBDLY (0x468) +#define EMC_OBDLY (0x46C) +#define EMC_TXDSRVTTGEN (0x480) +#define EMC_WE_DURATION (0x48C) +#define EMC_WS_DURATION (0x490) +#define EMC_WEV (0x494) +#define EMC_WSV (0x498) +#define EMC_CFG_3 (0x49C) +#define EMC_MRW5 (0x4A0) +#define EMC_MRW6 (0x4A4) +#define EMC_MRW7 (0x4A8) +#define EMC_MRW8 (0x4AC) +#define EMC_MRW9 (0x4B0) +#define EMC_MRW10 (0x4B4) +#define EMC_MRW11 (0x4B8) +#define EMC_MRW12 (0x4BC) +#define EMC_MRW13 (0x4C0) +#define EMC_MRW14 (0x4C4) +#define EMC_MRW15 (0x4D0) +#define EMC_CFG_SYNC (0x4D4) +#define EMC_FDPD_CTRL_CMD_NO_RAMP (0x4D8) +#define EMC_WDV_CHK (0x4E0) +#define EMC_CFG_PIPE_2 (0x554) +#define EMC_CFG_PIPE_CLK (0x558) +#define EMC_CFG_PIPE_1 (0x55C) +#define EMC_CFG_PIPE (0x560) +#define EMC_QPOP (0x564) +#define EMC_QUSE_WIDTH (0x568) +#define EMC_PUTERM_WIDTH (0x56C) +#define EMC_AUTO_CAL_CONFIG7 (0x574) +#define EMC_XM2COMPPADCTRL2 (0x578) +#define EMC_REFCTRL2 (0x580) +#define EMC_FBIO_CFG7 (0x584) +#define EMC_DATA_BRLSHFT_0 (0x588) +#define EMC_DATA_BRLSHFT_1 (0x58C) +#define EMC_RFCPB (0x590) +#define EMC_DQS_BRLSHFT_0 (0x594) +#define EMC_DQS_BRLSHFT_1 (0x598) +#define EMC_CMD_BRLSHFT_0 (0x59C) +#define EMC_CMD_BRLSHFT_1 (0x5A0) +#define EMC_CMD_BRLSHFT_2 (0x5A4) +#define EMC_CMD_BRLSHFT_3 (0x5A8) +#define EMC_QUSE_BRLSHFT_0 (0x5AC) +#define EMC_AUTO_CAL_CONFIG4 (0x5B0) +#define EMC_AUTO_CAL_CONFIG5 (0x5B4) +#define EMC_QUSE_BRLSHFT_1 (0x5B8) +#define EMC_QUSE_BRLSHFT_2 (0x5BC) +#define EMC_CCDMW (0x5C0) +#define EMC_QUSE_BRLSHFT_3 (0x5C4) +#define EMC_FBIO_CFG8 (0x5C8) +#define EMC_AUTO_CAL_CONFIG6 (0x5CC) + +/* Erista */ +#define EMC_DLL_CFG_0 (0x5E4) +#define EMC_DLL_CFG_1 (0x5E8) + +/* Mariko */ +#define EMC_PMACRO_DLL_CFG_0 (0x5E4) +#define EMC_PMACRO_DLL_CFG_1 (0x5E8) + +#define EMC_CONFIG_SAMPLE_DELAY (0x5F0) +#define EMC_CFG_UPDATE (0x5F4) +#define EMC_PMACRO_QUSE_DDLL_RANK0_0 (0x600) +#define EMC_PMACRO_QUSE_DDLL_RANK0_1 (0x604) +#define EMC_PMACRO_QUSE_DDLL_RANK0_2 (0x608) +#define EMC_PMACRO_QUSE_DDLL_RANK0_3 (0x60C) +#define EMC_PMACRO_QUSE_DDLL_RANK0_4 (0x610) +#define EMC_PMACRO_QUSE_DDLL_RANK0_5 (0x614) +#define EMC_PMACRO_QUSE_DDLL_RANK1_4 (0x630) +#define EMC_PMACRO_QUSE_DDLL_RANK1_5 (0x634) +#define EMC_PMACRO_QUSE_DDLL_RANK1_0 (0x620) +#define EMC_PMACRO_QUSE_DDLL_RANK1_1 (0x624) +#define EMC_PMACRO_QUSE_DDLL_RANK1_2 (0x628) +#define EMC_PMACRO_QUSE_DDLL_RANK1_3 (0x62C) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_0 (0x640) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_1 (0x644) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_2 (0x648) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_3 (0x64C) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_4 (0x650) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK0_5 (0x654) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_0 (0x660) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_1 (0x664) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_2 (0x668) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_3 (0x66C) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_4 (0x670) +#define EMC_PMACRO_OB_DDLL_LONG_DQ_RANK1_5 (0x674) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_0 (0x680) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_1 (0x684) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_2 (0x688) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_3 (0x68C) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_4 (0x690) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK0_5 (0x694) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_0 (0x6A0) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_1 (0x6A4) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_2 (0x6A8) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_3 (0x6AC) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_4 (0x6B0) +#define EMC_PMACRO_OB_DDLL_LONG_DQS_RANK1_5 (0x6B4) +#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_0 (0x6C0) +#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_1 (0x6C4) +#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_2 (0x6C8) +#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK0_3 (0x6CC) +#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_0 (0x6E0) +#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_1 (0x6E4) +#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_2 (0x6E8) +#define EMC_PMACRO_IB_DDLL_LONG_DQS_RANK1_3 (0x6EC) +#define EMC_PMACRO_AUTOCAL_CFG_0 (0x700) +#define EMC_PMACRO_AUTOCAL_CFG_1 (0x704) +#define EMC_PMACRO_AUTOCAL_CFG_2 (0x708) +#define EMC_PMACRO_TX_PWRD_0 (0x720) +#define EMC_PMACRO_TX_PWRD_1 (0x724) +#define EMC_PMACRO_TX_PWRD_2 (0x728) +#define EMC_PMACRO_TX_PWRD_3 (0x72C) +#define EMC_PMACRO_TX_PWRD_4 (0x730) +#define EMC_PMACRO_TX_PWRD_5 (0x734) +#define EMC_PMACRO_TX_SEL_CLK_SRC_0 (0x740) +#define EMC_PMACRO_TX_SEL_CLK_SRC_1 (0x744) +#define EMC_PMACRO_TX_SEL_CLK_SRC_3 (0x74C) +#define EMC_PMACRO_TX_SEL_CLK_SRC_2 (0x748) +#define EMC_PMACRO_TX_SEL_CLK_SRC_4 (0x750) +#define EMC_PMACRO_TX_SEL_CLK_SRC_5 (0x754) +#define EMC_PMACRO_DDLL_BYPASS (0x760) +#define EMC_PMACRO_DDLL_PWRD_0 (0x770) +#define EMC_PMACRO_DDLL_PWRD_1 (0x774) +#define EMC_PMACRO_DDLL_PWRD_2 (0x778) +#define EMC_PMACRO_CMD_CTRL_0 (0x780) +#define EMC_PMACRO_CMD_CTRL_1 (0x784) +#define EMC_PMACRO_CMD_CTRL_2 (0x788) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_0 (0x800) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_1 (0x804) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_2 (0x808) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE0_3 (0x80C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_0 (0x810) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_1 (0x814) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_2 (0x818) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE1_3 (0x81C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_0 (0x820) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_1 (0x824) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_2 (0x828) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE2_3 (0x82C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_0 (0x830) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_1 (0x834) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_2 (0x838) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE3_3 (0x83C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_0 (0x840) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_1 (0x844) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_2 (0x848) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE4_3 (0x84C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_0 (0x850) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_1 (0x854) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_2 (0x858) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE5_3 (0x85C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_0 (0x860) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_1 (0x864) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_2 (0x868) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE6_3 (0x86C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_0 (0x870) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_1 (0x874) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_2 (0x878) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_BYTE7_3 (0x87C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_0 (0x880) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_1 (0x884) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_2 (0x888) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD0_3 (0x88C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_0 (0x890) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_1 (0x894) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_2 (0x898) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD1_3 (0x89C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_0 (0x8A0) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_1 (0x8A4) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_2 (0x8A8) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD2_3 (0x8AC) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_0 (0x8B0) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_1 (0x8B4) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_2 (0x8B8) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK0_CMD3_3 (0x8BC) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_0 (0x900) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_1 (0x904) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_2 (0x908) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE0_3 (0x90C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_0 (0x910) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_1 (0x914) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_2 (0x918) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE1_3 (0x91C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_0 (0x920) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_1 (0x924) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_2 (0x928) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE2_3 (0x92C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_0 (0x930) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_1 (0x934) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_2 (0x938) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE3_3 (0x93C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_0 (0x940) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_1 (0x944) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_2 (0x948) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE4_3 (0x94C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_0 (0x950) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_1 (0x954) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_2 (0x958) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE5_3 (0x95C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_0 (0x960) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_1 (0x964) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_2 (0x968) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE6_3 (0x96C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_0 (0x970) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_1 (0x974) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_2 (0x978) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_BYTE7_3 (0x97C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_0 (0x980) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_1 (0x984) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_2 (0x988) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD0_3 (0x98C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_0 (0x990) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_1 (0x994) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_2 (0x998) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD1_3 (0x99C) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_0 (0x9A0) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_1 (0x9A4) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_2 (0x9A8) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD2_3 (0x9AC) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_0 (0x9B0) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_1 (0x9B4) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_2 (0x9B8) +#define EMC_PMACRO_OB_DDLL_SHORT_DQ_RANK1_CMD3_3 (0x9BC) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_0 (0xA00) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_1 (0xA04) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE0_2 (0xA08) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_0 (0xA10) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_1 (0xA14) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE1_2 (0xA18) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_0 (0xA20) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_1 (0xA24) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE2_2 (0xA28) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_0 (0xA30) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_1 (0xA34) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE3_2 (0xA38) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_0 (0xA40) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_1 (0xA44) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE4_2 (0xA48) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_0 (0xA50) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_1 (0xA54) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE5_2 (0xA58) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_0 (0xA60) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_1 (0xA64) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE6_2 (0xA68) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_0 (0xA70) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_1 (0xA74) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK0_BYTE7_2 (0xA78) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_0 (0xB00) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_1 (0xB04) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE0_2 (0xB08) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_0 (0xB10) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_1 (0xB14) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE1_2 (0xB18) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_0 (0xB20) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_1 (0xB24) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE2_2 (0xB28) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_0 (0xB30) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_1 (0xB34) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE3_2 (0xB38) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_0 (0xB40) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_1 (0xB44) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE4_2 (0xB48) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_0 (0xB50) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_1 (0xB54) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE5_2 (0xB58) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_0 (0xB60) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_1 (0xB64) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE6_2 (0xB68) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_0 (0xB70) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_1 (0xB74) +#define EMC_PMACRO_IB_DDLL_SHORT_DQ_RANK1_BYTE7_2 (0xB78) +#define EMC_PMACRO_IB_VREF_DQ_0 (0xBE0) +#define EMC_PMACRO_IB_VREF_DQ_1 (0xBE4) +#define EMC_PMACRO_IB_VREF_DQS_0 (0xBF0) +#define EMC_PMACRO_IB_VREF_DQS_1 (0xBF4) +#define EMC_PMACRO_DDLL_LONG_CMD_0 (0xC00) +#define EMC_PMACRO_DDLL_LONG_CMD_1 (0xC04) +#define EMC_PMACRO_DDLL_LONG_CMD_2 (0xC08) +#define EMC_PMACRO_DDLL_LONG_CMD_3 (0xC0C) +#define EMC_PMACRO_DDLL_LONG_CMD_4 (0xC10) +#define EMC_PMACRO_DDLL_SHORT_CMD_0 (0xC20) +#define EMC_PMACRO_DDLL_SHORT_CMD_1 (0xC24) +#define EMC_PMACRO_DDLL_SHORT_CMD_2 (0xC28) +#define EMC_PMACRO_CFG_PM_GLOBAL_0 (0xC30) +#define EMC_PMACRO_VTTGEN_CTRL_0 (0xC34) +#define EMC_PMACRO_VTTGEN_CTRL_1 (0xC38) +#define EMC_PMACRO_BG_BIAS_CTRL_0 (0xC3C) +#define EMC_PMACRO_PAD_CFG_CTRL (0xC40) +#define EMC_PMACRO_ZCTRL (0xC44) +#define EMC_PMACRO_RX_TERM (0xC48) +#define EMC_PMACRO_CMD_TX_DRV (0xC4C) +#define EMC_PMACRO_CMD_PAD_RX_CTRL (0xC50) +#define EMC_PMACRO_DATA_PAD_RX_CTRL (0xC54) +#define EMC_PMACRO_CMD_RX_TERM_MODE (0xC58) +#define EMC_PMACRO_DATA_RX_TERM_MODE (0xC5C) +#define EMC_PMACRO_CMD_PAD_TX_CTRL (0xC60) +#define EMC_PMACRO_DATA_PAD_TX_CTRL (0xC64) +#define EMC_PMACRO_COMMON_PAD_TX_CTRL (0xC68) +#define EMC_PMACRO_DSR_VTTGEN_CTRL_0 (0xC6C) +#define EMC_PMACRO_DQ_TX_DRV (0xC70) +#define EMC_PMACRO_CA_TX_DRV (0xC74) +#define EMC_PMACRO_AUTOCAL_CFG_COMMON (0xC78) +#define EMC_PMACRO_BRICK_MAPPING_0 (0xC80) +#define EMC_PMACRO_BRICK_MAPPING_1 (0xC84) +#define EMC_PMACRO_BRICK_MAPPING_2 (0xC88) +#define EMC_PMACRO_DDLL_PERIODIC_OFFSET (0xCE8) +#define EMC_PMACRO_VTTGEN_CTRL_2 (0xCF0) +#define EMC_PMACRO_IB_RXRT (0xCF4) +#define EMC_PMACRO_TRAINING_CTRL_0 (0xCF8) +#define EMC_PMACRO_TRAINING_CTRL_1 (0xCFC) +#define EMC_PMACRO_PERBIT_FGCG_CTRL_0 (0xD40) +#define EMC_PMACRO_PERBIT_FGCG_CTRL_1 (0xD44) +#define EMC_PMACRO_PERBIT_FGCG_CTRL_2 (0xD48) +#define EMC_PMACRO_PERBIT_FGCG_CTRL_3 (0xD4C) +#define EMC_PMACRO_PERBIT_FGCG_CTRL_4 (0xD50) +#define EMC_PMACRO_PERBIT_FGCG_CTRL_5 (0xD54) +#define EMC_PMACRO_PERBIT_RFU_CTRL_0 (0xD60) +#define EMC_PMACRO_PERBIT_RFU_CTRL_1 (0xD64) +#define EMC_PMACRO_PERBIT_RFU_CTRL_2 (0xD68) +#define EMC_PMACRO_PERBIT_RFU_CTRL_3 (0xD6C) +#define EMC_PMACRO_PERBIT_RFU_CTRL_4 (0xD70) +#define EMC_PMACRO_PERBIT_RFU_CTRL_5 (0xD74) +#define EMC_PMACRO_PERBIT_RFU1_CTRL_0 (0xD80) +#define EMC_PMACRO_PERBIT_RFU1_CTRL_1 (0xD84) +#define EMC_PMACRO_PERBIT_RFU1_CTRL_2 (0xD88) +#define EMC_PMACRO_PERBIT_RFU1_CTRL_3 (0xD8C) +#define EMC_PMACRO_PERBIT_RFU1_CTRL_4 (0xD90) +#define EMC_PMACRO_PERBIT_RFU1_CTRL_5 (0xD94) +#define EMC_TRAINING_CMD (0xE00) +#define EMC_TRAINING_CTRL (0xE04) +#define EMC_TRAINING_STATUS (0xE08) +#define EMC_TRAINING_QUSE_CORS_CTRL (0xE0C) +#define EMC_TRAINING_QUSE_FINE_CTRL (0xE10) +#define EMC_TRAINING_QUSE_CTRL_MISC (0xE14) +#define EMC_TRAINING_WRITE_FINE_CTRL (0xE18) +#define EMC_TRAINING_WRITE_CTRL_MISC (0xE1C) +#define EMC_TRAINING_WRITE_VREF_CTRL (0xE20) +#define EMC_TRAINING_READ_FINE_CTRL (0xE24) +#define EMC_TRAINING_READ_CTRL_MISC (0xE28) +#define EMC_TRAINING_READ_VREF_CTRL (0xE2C) +#define EMC_TRAINING_CA_FINE_CTRL (0xE30) +#define EMC_TRAINING_CA_CTRL_MISC (0xE34) +#define EMC_TRAINING_CA_CTRL_MISC1 (0xE38) +#define EMC_TRAINING_CA_VREF_CTRL (0xE3C) +#define EMC_TRAINING_SETTLE (0xE44) +#define EMC_TRAINING_MPC (0xE5C) +#define EMC_TRAINING_PATRAM_CTRL (0xE60) +#define EMC_TRAINING_PATRAM_DQ (0xE64) +#define EMC_TRAINING_PATRAM_DMI (0xE68) +#define EMC_TRAINING_VREF_SETTLE (0xE6C) +#define EMC_TRAINING_OPT_CA_VREF (0xEC0) +#define EMC_TRAINING_OPT_DQ_OB_VREF (0xEC4) +#define EMC_TRAINING_QUSE_VREF_CTRL (0xED0) +#define EMC_TRAINING_OPT_DQS_IB_VREF_RANK0 (0xED4) +#define EMC_TRAINING_OPT_DQS_IB_VREF_RANK1 (0xED8) + #define EMC_REG_BITS_MASK(NAME) REG_NAMED_BITS_MASK (EMC, NAME) #define EMC_REG_BITS_VALUE(NAME, VALUE) REG_NAMED_BITS_VALUE (EMC, NAME, VALUE) @@ -54,6 +552,8 @@ #define DEFINE_EMC_REG_THREE_BIT_ENUM(NAME, __OFFSET__, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN) REG_DEFINE_NAMED_THREE_BIT_ENUM(EMC, NAME, __OFFSET__, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN) #define DEFINE_EMC_REG_FOUR_BIT_ENUM(NAME, __OFFSET__, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, ELEVEN, TWELVE, THIRTEEN, FOURTEEN, FIFTEEN) REG_DEFINE_NAMED_FOUR_BIT_ENUM (EMC, NAME, __OFFSET__, ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, ELEVEN, TWELVE, THIRTEEN, FOURTEEN, FIFTEEN) +DEFINE_EMC_REG_BIT_ENUM(DBG_WRITE_MUX, 1, ASSEMBLY, ACTIVE); + DEFINE_EMC_REG_BIT_ENUM(CFG_DYN_SELF_REF, 28, DISABLED, ENABLED); DEFINE_EMC_REG_BIT_ENUM(CFG_DRAM_ACPD, 29, NO_POWERDOWN, ACTIVE_POWERDOWN); diff --git a/libraries/libvapours/include/vapours/tegra/tegra_mc.hpp b/libraries/libvapours/include/vapours/tegra/tegra_mc.hpp index 3b44a2769..fffece960 100644 --- a/libraries/libvapours/include/vapours/tegra/tegra_mc.hpp +++ b/libraries/libvapours/include/vapours/tegra/tegra_mc.hpp @@ -32,6 +32,12 @@ #define MC_SMMU_PTC_FLUSH_0 (0x034) #define MC_EMEM_CFG (0x050) #define MC_EMEM_ADR_CFG (0x054) +#define MC_EMEM_ADR_CFG_DEV0 (0x058) +#define MC_EMEM_ADR_CFG_DEV1 (0x05C) +#define MC_EMEM_ADR_CFG_CHANNEL_MASK (0x060) +#define MC_EMEM_ADR_CFG_BANK_MASK_0 (0x064) +#define MC_EMEM_ADR_CFG_BANK_MASK_1 (0x068) +#define MC_EMEM_ADR_CFG_BANK_MASK_2 (0x06C) #define MC_EMEM_ARB_CFG (0x090) #define MC_EMEM_ARB_OUTSTANDING_REQ (0x094) #define MC_EMEM_ARB_TIMING_RCD (0x098) @@ -52,6 +58,11 @@ #define MC_EMEM_ARB_MISC0 (0x0D8) #define MC_EMEM_ARB_MISC1 (0x0DC) #define MC_EMEM_ARB_RING1_THROTTLE (0x0E0) +#define MC_EMEM_ARB_OVERRIDE (0x0E8) +#define MC_EMEM_ARB_RSV (0x0EC) +#define MC_CLKEN_OVERRIDE (0x0F4) +#define MC_TIMING_CONTROL_DBG (0x0F8) +#define MC_TIMING_CONTROL (0x0FC) #define MC_CLIENT_HOTRESET_CTRL (0x200) #define MC_CLIENT_HOTRESET_STATUS (0x204) #define MC_SMMU_AFI_ASID (0x238) @@ -95,6 +106,7 @@ #define MC_LATENCY_ALLOWANCE_SDMMCAB_0 (0x3C4) #define MC_LATENCY_ALLOWANCE_NVDEC_0 (0x3D8) #define MC_LATENCY_ALLOWANCE_GPU2_0 (0x3E8) +#define MC_VIDEO_PROTECT_VPR_OVERRIDE (0x418) #define MC_DIS_PTSA_RATE (0x41C) #define MC_DIS_PTSA_MIN (0x420) #define MC_DIS_PTSA_MAX (0x424) @@ -142,6 +154,7 @@ #define MC_JPG_PTSA_RATE (0x584) #define MC_JPG_PTSA_MIN (0x588) #define MC_JPG_PTSA_MAX (0x58C) +#define MC_VIDEO_PROTECT_VPR_OVERRIDE1 (0x590) #define MC_GK2_PTSA_RATE (0x610) #define MC_GK2_PTSA_MIN (0x614) #define MC_GK2_PTSA_MAX (0x618) @@ -151,6 +164,8 @@ #define MC_HDAPC_PTSA_RATE (0x628) #define MC_HDAPC_PTSA_MIN (0x62C) #define MC_HDAPC_PTSA_MAX (0x630) +#define MC_VIDEO_PROTECT_BOM (0x648) +#define MC_EMEM_CFG_ACCESS_CTRL (0x664) #define MC_SEC_CARVEOUT_BOM (0x670) #define MC_SEC_CARVEOUT_SIZE_MB (0x674) #define MC_SCALED_LATENCY_ALLOWANCE_DISPLAY0A (0x690) @@ -165,9 +180,13 @@ #define MC_EMEM_ARB_REFPB_BANK_CTRL (0x6F4) #define MC_UNTRANSLATED_REGION_CHECK (0x948) #define MC_PTSA_GRANT_DECREMENT (0x960) +#define MC_EMEM_ARB_OVERRIDE_1 (0x968) #define MC_CLIENT_HOTRESET_CTRL_1 (0x970) #define MC_CLIENT_HOTRESET_STATUS_1 (0x974) +#define MC_VIDEO_PROTECT_BOM_ADR_HI (0x978) #define MC_SMMU_PTC_FLUSH_1 (0x9B8) +#define MC_SEC_CARVEOUT_ADR_HI (0x9D4) +#define MC_DA_CONFIG0 (0x9DC) #define MC_SMMU_DC1_ASID (0xA88) #define MC_SMMU_SDMMC1A_ASID (0xA94) #define MC_SMMU_SDMMC2A_ASID (0xA98) @@ -200,6 +219,7 @@ #define MC_EMEM_ARB_DHYST_TIMEOUT_UTIL_7 (0xBEC) #define MC_ERR_GENERALIZED_CARVEOUT_STATUS (0xC00) + #define MC_SMMU_TLB_CONFIG (0x014) #define MC_SMMU_PTC_CONFIG (0x018) diff --git a/libraries/libvapours/include/vapours/tegra/tegra_pmc.hpp b/libraries/libvapours/include/vapours/tegra/tegra_pmc.hpp index 5c5198bdf..6154db4fb 100644 --- a/libraries/libvapours/include/vapours/tegra/tegra_pmc.hpp +++ b/libraries/libvapours/include/vapours/tegra/tegra_pmc.hpp @@ -46,6 +46,7 @@ #define APBDEV_PMC_AUTO_WAKE_LVL_MASK (0x0DC) #define APBDEV_PMC_WAKE_DELAY (0x0E0) #define APBDEV_PMC_PWR_DET_VAL (0x0E4) +#define APBDEV_PMC_DDR_PWR (0x0E8) #define APBDEV_PMC_CRYPTO_OP (0x0F4) #define APBDEV_PMC_SCRATCH31 (0x118) #define APBDEV_PMC_SCRATCH32 (0x11C) @@ -64,12 +65,15 @@ #define APBDEV_PMC_IO_DPD2_REQ (0x1C0) #define APBDEV_PMC_IO_DPD2_STATUS (0x1C4) #define APBDEV_PMC_SEL_DPD_TIM (0x1C8) +#define APBDEV_PMC_VDDP_SEL (0x1CC) +#define APBDEV_PMC_DDR_CFG (0x1D0) #define APBDEV_PMC_SCRATCH45 (0x234) #define APBDEV_PMC_SCRATCH46 (0x238) #define APBDEV_PMC_SCRATCH49 (0x244) #define APBDEV_PMC_TSC_MULT (0x2B4) #define APBDEV_PMC_STICKY_BITS (0x2C0) #define APBDEV_PMC_WEAK_BIAS (0x2C8) +#define APBDEV_PMC_REG_SHORT (0x2CC) #define APBDEV_PMC_GPU_RG_CNTRL (0x2D4) #define APBDEV_PMC_CNTRL2 (0x440) #define APBDEV_PMC_FUSE_CTRL (0x450) @@ -125,6 +129,7 @@ #define APBDEV_PMC_SECURE_SCRATCH115 (0xB24) #define APBDEV_PMC_SECURE_SCRATCH119 (0xB34) +/* Mariko. */ #define APBDEV_PMC_TZRAM_PWR_CNTRL (0xBE8) #define APBDEV_PMC_TZRAM_SEC_DISABLE (0xBEC) #define APBDEV_PMC_TZRAM_NON_SEC_DISABLE (0xBF0)