From cf56fdeabd3d92f0042cbf99bf0ba04bd469e81b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=91=A8=E7=9D=BF?= Date: Fri, 29 Nov 2024 14:01:01 +0800 Subject: [PATCH] [feat] add phytium pi support --- .gitignore | 1 + doc/figures/phytium_select_app.png | Bin 0 -> 50352 bytes doc/figures/phytium_select_dtb.png | Bin 0 -> 43675 bytes doc/figures/phytium_select_platform.png | Bin 0 -> 25942 bytes doc/platform_phytium_pi.md | 32 +++++++ modules/axconfig/build.rs | 42 +++++---- modules/axconfig/defconfig.toml | 3 + .../src/platform/aarch64_bsta1000b/mp.rs | 5 ++ .../src/platform/aarch64_phytium_pi/mem.rs | 30 +++++++ .../src/platform/aarch64_phytium_pi/mod.rs | 69 +++++++++++++++ .../src/platform/aarch64_phytium_pi/mp.rs | 28 ++++++ .../src/platform/aarch64_qemu_virt/mp.rs | 5 ++ .../axhal/src/platform/aarch64_raspi/mp.rs | 5 ++ modules/axhal/src/platform/dummy/mod.rs | 3 + modules/axhal/src/platform/mod.rs | 3 + .../src/platform/riscv64_qemu_virt/mp.rs | 5 ++ modules/axhal/src/platform/x86_pc/mp.rs | 5 ++ modules/axruntime/src/mp.rs | 3 +- platforms/aarch64-phytium-pi.toml | 80 ++++++++++++++++++ 19 files changed, 302 insertions(+), 17 deletions(-) create mode 100644 doc/figures/phytium_select_app.png create mode 100644 doc/figures/phytium_select_dtb.png create mode 100644 doc/figures/phytium_select_platform.png create mode 100644 doc/platform_phytium_pi.md create mode 100644 modules/axhal/src/platform/aarch64_phytium_pi/mem.rs create mode 100644 modules/axhal/src/platform/aarch64_phytium_pi/mod.rs create mode 100644 modules/axhal/src/platform/aarch64_phytium_pi/mp.rs create mode 100644 platforms/aarch64-phytium-pi.toml diff --git a/.gitignore b/.gitignore index 107809a42e..7801ea1b3d 100644 --- a/.gitignore +++ b/.gitignore @@ -8,3 +8,4 @@ *.bin qemu.log rusty-tags.vi +/.project.toml diff --git a/doc/figures/phytium_select_app.png b/doc/figures/phytium_select_app.png new file mode 100644 index 0000000000000000000000000000000000000000..eea2083510d9775535356ce1868a7ff2775cae2c GIT binary patch literal 50352 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

b60Ee_``wo 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

uU>~>HJuinZo&3 z@i9{t-kjPDbQQ97sI4LHc>L_adj?#uDd}~xkt$%j<&pP*+=z)t!teqPfN}!sVJL0} zj*5cp>dJhz3SwA6TC$d5IRt{*tP4DM_|Fk8C!>77~RFuK`0$0)zTt&PNQSj z1mS75_bvlNLv;3UmEHq19P(T^&ojq2KeDjqy5)WkD=frdOm4$_)KfG6NRj^6yoH}p zm7Tl2pR%C3Sl=VTiO(WjheX-~wszh$^c7EJv=xyxG;v9Wwh8|)fs{xG_zxhEvijcw zDSd{He-}t`uKZsEDa2cwU2=0H-z02I6iVE0)_Zn_L-6)Mn}DjVFXAk2ojlsrrDMM~ zXk5LqU^y^d7Yyl2WV;db(ZIJBekwdrY$1|3LP}haK|QQ_v>i;!%(B*W_!MvO=4hMa zigf|Wm3^eaNa7o8WBgrpta+Fc8==p=+R2Ao49@=$0>n?h@@7vmFnef=fH;~zJ|~qT z_u;{zKRNI=MN3n61mV34a;Y}eX&q`;Am7pL5Ap6BC!cLPKCrEpf&|*+&d0FRx|Av5gti!B(vw|LPHGo^FKlF%(VB{X(Rn3a}ClU z2oUHDx18xKlZW%tbs$g!L!~kKx&enfXftt4I&mv74tl92EoI2$ud^0!0+;V~Y}+Bp zRvoqjrMS7uyrrX{mK7t=R*BIm_42GT#^(E^mRlFMu!@mU9A@U!Z=63;-(dbCw>(&E z`er_K?@RA-^~e@6{fxBZedzRKQVrtX@GBFq2I!>Cw>KxZSqnEPMLB)3j(Q$&>`w5q zo+Hck32)^B2%eMTEs$70Z0eK>Kzae7!bZlk&V6dInJGQDuy0C5aLNwCs2;jMBqHQR z#v}Fl&>p1a3;7s`%fVHK94hR6^knh!=0HdOdQ3A(P}7y5=kRuRB0)fV7TvY$&s4;# zcWV(xrBB<+L+67Lc^?VCo#$2qyyZMq-)}maErI zjC?5mr_R$ubl&2rvZkxgkiY|ByOU=Pp6Yy{U4d$!_SSVb5~fJb?)>gMxF^b7Y3#<% zzXP*p1j>Zq4+@+%DHDiN;Dc9gAR90rukU{JV~rU|s^Ob*J}Whc&Q|+z!N)ai|u2a9sAY(FII!C<(5Kbrk}tbY{*BmPI! z8kWMyV0P+EZ~;?0-gJVrJf6 zav@@D%rulPsvhDG1#Zi(q)Kh zl}7~EUsI%~2C?8>Skw1H1o?oflR+}Yr3FCvnUec9LBEBN>< z;3hC)$ih4sZ!1hcfg0;*F%#fUW{-+lKkzfuOcMU!o247FGGZvGj@}fT+)_j%UBge< vx5(w~|2v*+X>_nXmzle`NfZQ#Gj;8I3?&ImgF%a<;OmU4&gmz(%K`rcthCl_ literal 0 HcmV?d00001 diff --git a/doc/figures/phytium_select_dtb.png b/doc/figures/phytium_select_dtb.png new file mode 100644 index 0000000000000000000000000000000000000000..8f9b60e81657f7c899cbc46b6a3fed7146c73d7f GIT binary patch literal 43675 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 literal 0 HcmV?d00001 diff --git a/doc/figures/phytium_select_platform.png b/doc/figures/phytium_select_platform.png new file mode 100644 index 0000000000000000000000000000000000000000..5a1e65d0eb63076d990f291baea2be731e964886 GIT binary patch literal 25942 zcmb5W1yt4Fw*I|Ax{;JFL8PTyLJ*OXR5}Dix?|HRsepvU7EtN#ZjkQol1}M-*Y0pww$ztnycP! zy@w8=Y|Y(W7b6-00&4uPbo}Q?s6?_6DvbPH9Y5QDb`brv!j3nYBX~A}jU(=Ga6gJf zQ6znV7tuXVm&j?N6v2K(nv?7Gb0d@pIf~MuX42*aPQPyR`?CCkX5QX|x~EnK){8y^ zS0`H&?>Dy6YjSJ0v)xlOx2l=NmI}OmH}J7g?xDQ%w;OUsXN-|ceOZMzmg$mq$xyS* zcpnEz0xuvL)}@38zCl7q^`k+PMEHL_RF|9*P+gupXP9*%hb-bc%*Qbi)FYMO8`8IZ zEnw1Ui;E(Qg#>|`)rN}SdH7#Pi^&ZxLKuF`MbZ}2Mz3F;N~4Oo?jkkR+CED~Ui>}B zPmd$DEQ$B+1oa%co5``XYG!rbDZ9{JdW<&8e1S5GBkjHPYp{s6XN`#x->sIIK-Fk+ z;TECt>slD*`TUQ0yHg@Mn+c2puS0DMi=K|H2UsF3K{1_-ytSu69u!o~KL0 z&(Kd2(e_8SRO$}*d5h<%i7=kD&2n@ft?BUq0)!+_ylEPW4&gMCOxVe3=p5Zqu^heo zTuo_XbB8)Ve~Sx!YmEvye{bDf&%JC??eig<>tMnW1KF-Y>8x^5ct#!aR7;JsB?!68 z{*;Z*$PXW%Al%o#09{f4Tj4B|#4)nYeH@B~u5#}i%Kns1LY%b9likSue&(T<5yuy( zW(OTV1`eX48rsFhE{Sa{FR@^IHV6=`NYaqnOx*a@dZ__~Is?4*+(PRX*j+sW%-a^_ z>alod7k!Fk5Di*-;bOEcDH#bOL}11qJyT2^6+-%hoV7N`#%?C0->k;s4n4v{sVhcB zf3D3GLCUE7$OO`~CZDotKY!7~bsq~!;#e-3?>R1Y5ADsAozKrfKC>H+#lmW2>@kJ& z0BS?b5NrpCfmK7m-RqGM;Y?}zrG_-ivfJ`CL@|&3G7Bd6^;q*+F-Af|mFAb8^rRlR zV|*DWu?nfkkdLu~h(j4t4};#yx}{zWbfFDjuDtI-9=%>FVo;#j-Q*fn2yarqQkqmd zpc3W~X*{s3Z=M?orni<9@TkBXr?z#~=cd~y9nGg5opOKRd4~70kBY5(iZ?ZmsdLJ? zG4*Uy4%|llrp?6GUGy}_LKkLP%HB04)!aLu?a+@0+VCig;g&7J#klUJ7i2<^@W00} zacAEz@Uox6*RZBJ&mZDLlP|tE=#aqWEfN&9tF~QK){OAeYl$kHBs;XGuXTouy+S^s z&nO_#_goCJm_(2wGZ2zsAky#%KVzSYPVS8Fol=yg^|uVu`Sk^lB<+&&T)^8YutPb zBUAlB&>qYMvXF}LVO5^rV4Y7i9@OtXK2`Vfb#eCcO|q^*uZ%!zX7dtnjncf0cS{gC z-u?tGBhtCbED5!j|A6>8%0hC{lDGGzct8N|>K*mLTBcQA@8~QN)`R)%%Zu*W$c%k& z{~uBLRgV3U&7XV^CT9KM3)+MCz&XH1(Ge`i-#c{)O%k`HVih9?^IpG%f0ZBaYVx&( z;{-C=LJ-SSCfXQm&nNC~Fn7%wVs1zVNX6n>MWfmfuOFSHr05&$!=lo`ny%tChXi#v zjnk{unds!lpK>oWAOF(a!Q0ySjoZIicsKP(E+!tCznj3ee6Fz5(|s5RX(-;-;uju| zfKNp9o5q@-{jeq3eu+2U((?rcQ6vN@O-m69u;T1XSr5e$p5|5tb6dzVqcr5Y^XzEa zKMSl5`1*nE*ff(TiAhO05s>916}j}N#EF9^a^qnJttp*Wa^5>^=pGO*9J$PmL>ch> zU4I?>7@_jAcws@e%1@Ku3$cfmMVJJv-|VRjc^IsD>#Y8hA&WY z9kogi*Ebvm%hqmt6}7ch99_WgNb}+Z3!kg`dB5Dji(pKMf0Z_ZUVi2e)Vou8r$#TO z?RNE9wt=~S3cVoJ771I!o26y-@CJ{N)pK7Goc^jZA#NdDO0u6`VP?#8wEbtjTUUoy z3aUiGoL7gx8(+tk#uPwT+WlIGLf6Mt`F7^)357L10|vwe{BuuX@chsvh<+q5n$9v4 zLY6unmRqHrTD!Z)zBixgle_yA&l5W{z<;sjG3i{Jtn|xFt~XjlTME|L4L@2onFA7) zG=rqAwARgs9)S9Rynnq$D&}#<(?nkEF|9neuo2RD=@7*z~ZV~*o1rahcr8wqG0~sT2$@H|Urctv0`Te)^sqj&xL^O{Q-Y8lB zvUPn`SnXQ%%--Jeo+n1tG>Ec^4GjS__Pm9ug2!THOL#I1D)hpY69)m_&||idnJ5p= zZe}TdlZ(9+{7l;jr?yIc=dFkv-pa)^{is+bdS(YC2N$9OWShaAt@*Z`M>bhAoy{lVm9*Jz7;&x?ahcJLNUc+HnURS2){FnVn}Swc0Z&Y#vLG+!2e$0j zaq0ygr>3Lg;jdT_{GnzvO0p2x9F!n()SFEXlbpD1_GzQg@Lp_KCZC!=C~33HXWVUb z4{)r_@%&KVa|#&IfRbaFV9hDBz#ULM+Wq?-BC5f$s8lmHwx4$s8yY!rK#`#Y>Dv(L zMH=re(d2hqO(C^(U(qQBt8wq^TTd3z%zmb5CFb!2C7z$pv*V~e0<)E4J+c)%t7(oH z&1&+gv$xB`P8u<;`|xC>xhuYOqp9RtcQ_9cknssAw-DjNOu^Tcows0#w)-o!(QmAi zRb0Sk1BX-G@wq`+_Lt;E8@)6(*FodChgxJt`8K3YeD{uJ3OY1*G;8JJJ71-wG%e99 z)kyWB7+0G12!~Cw1@(na33?03hJBzT01lDTOE1XNl_Y&R9i{eJ!G~lq7x;q{-YNwVOX$Jy@NHz% zIrC8T_UJ~=yw3Mrv-i;7EDT~$)Wvpp{EY%HvAG4m%Pqz(L6@Fwc4`U{YWG92+U^lu zVKkF#FT@#lnS3n2s(D92hv!vhkJ4qGaze$RyYj)>4&L5}kM~xEyQwWT?S5qYvpu($ zb}2>c>C}L_EMZvJY%kT9wsypQY?R?)SV&F^V0xJAJ|$ zoJYFo&CSz%%R1mvk!vpIj^lCbDqZq~qK@NM0pfLecy~~$?ZwEv?stM(=H-Nc^|-OA z*groSnrd({8TzL-px_#4hv^sH`bd@cRY5l&lMm%YXw7Al_(qn-A1cIPSE67m_q`W& zQYn5`QM=~!xiHsRmSaAXX_p30PazK|L+@@j?+&~oo}IX%ExQk|_4?AF`Biakj?*Xr zuAFuKXbXO(A^iXSa6XH%8G(sS>QrkVw!Lg+x^p+_p{+9e==kLF+Nqn8lOaGZHEq|A zvgff_>xaVc+F$UHmPE~eJw0c=Q7+lt2duKb;O--NtsN5cjalZiX>MA6P1F_9H@u)kqW66U;zK6ix>)d)HNmQZq zQPeeM&7c~N?)u|(qaxD@9e&gMu`u&MHUk{QKs;rK{#HZFZIpKL-HHbMLovY_LnEsU zo6*Q;AIR<3w`wFi6se0y;EAH5qqeMvU{L?`f?apm_2T-`xZ`A6;n=nMeL4&?$67<7 z6I#~58a;3Lr=lhSU0C5RqNtL9^}PsI@_<*!~5hNsVaj#F5m6#%Eg!>vD(8f z2qqWAC%vV^PM$=1xgive!ZgA+>eV?4=9wS?7WWReV`sP+or}KBDcqTN>TfAB?>RLa z(;xO+WlS#UC)b2rY`=76V1DtcFgOY(J9cYIAvFHri`v1h`^wG8;Q4}Ic1+MB>Q&VF zjBua1kS98_Qn=)#0d|9c6Fx`%^|SbWa*6XNihUG6W{EyHHP&LPGGRA^3(Smk4}yiG zvGrN19N~Oq+2e3>bY`j(WqxM0q1aICthScZ&LoQ=ipllWymv2E)WX|{wt#b(eCj}A zU47p{n#8&8`13CAd8!8?nIkI))TN#B1t$TEzQfK`S%!-tXe9C1k2u$-<7tBE;`$AI!5KBAPss{ z9*33u&w!(-Pdc+bcalOKf*+>p=aK&E~pi^uFPi!m6 z_uq8x99Bi)CZ0Ec;)4!5QZ3va&pXc-X?$c-NE>_a_99^FNl{oX-IekwxKsJHCaHK;XN)dX*3jz>jVEAS&{lnA0svPMa%jsp_Pvd zwN-Pt)Z$UNQ58#9)Lzn|hL0HAT!N~JOi}FH-ZmcIzQe-7F*tdAnlN2*g>?Jsj3`O) z+Tac!Q~#25x(UJ3x%}-J`Y5kgSOjv+uCOTP_F0bU0@p%mQ6vZeN2*+ci6cfSPb zDD0c@aa!7ZOv;3H}%E9B}^Tl@|TTHCmgX9T*hAq z>q2fAvN%}mATV|*3Ng42X+AQEx2voxE>6iXfK1*rPvm4Qf(T#XXSix-9w3Oz<7Fx& zYBDAAhRocgL^Zx`L>3d7?(k9~8#|#{1wnGbtYNCjP3^Z4CGe19eE$;Bie!fr#5)Ms zgW9}L=QBAB*Y6JNUBx`Yw?Zt>2Wd{PY;vQE8hM`Cp>f|=XzEK(-dnPETZZaG-x@bw z(JhqSK|)O3Q=izGJi2{9uRE###gF7S)7M9uQRzCOw-t}&yf&SrX1(mynM|x6Q{VK^ z4m|R!0@Sz!E`+Pm>w9`RLP6l>7bmuXjFlkt4vmkah8&ZMoOxh;eGmobBdo>{e%|u1 zaqbk)8DwF2Rsgr?QKBFo(vY~_3js7Vp>w7<-o@gFC*aPLZa;#rQWF$fsz6bFXRS0c zJnH#`l3MLlfrXGqYgkzvTmn_9W9t$9!tY;Tfgp$HaFNsDG+p@#J#ERq5Lu5r^LNogEAJ$J?2g zx|MtwyphnUW-p~38T}pjRf-ZN%*dg0h?|^=t%aQ;1q~%%6M|$yDxR)-=e3mX&b0Bu z6NhRv+fVRv4LPu|Ar}Wp^fkw_nfpe8;>0Viv&d>wPVw`0-W4thJY5F|^U05EM=|!q zB7FCQkZ|BZ%f%2v*;waI3bJ+(f>(;rb>paKAZC1l(@R7Ddtbw-0zQ64NN_$=mX<|n zS=cv?^WJKs9Yn!y%C;Gkt%)zZ4&Z531{H+X$QI&fed5n&4q*{iUSaCmwswapeEB?E+tPoh#pg2mDv}onC0Z?}tH?B(% zZ%(7VRogyuZP+PlBgn6HnO3Q85kfumV7TU3x>2qTqPZlS%lW(1iK+OjJ6Rvv2#zD|2vJMiIo(A(oGmSG?Fl=`qeJM8@W+i>mAxucqH zrr7o8DfSzaf~?R@vb)KB;+T%WY_HF#csDXK83zkZdDI$3(f3wi44=`ZWlZ%6S%JUOVUO3T*J zFeE(W>Dx6NHT8*~98S;QZKAYE%X&aLjOtFH4dKdX1bbh65;n}60@t0+uD0``{E}C? zN>Jxt%60C@Po9{TkRU_o=;=Pj@;o3SN_sePzd=5&7_#=3gO=Wy@z`DT{XjxOf8>k) z{@t0&8}p(v$9pg2`Dr-#wNqEsF(QyBYrZ2sc)*=#U`y=M*f`%WdrTq5OmXyk{b}L; zY)N(XcjV8Xg_U1d-y;q~Uey0`JL`6gDiA64tlgC1p+b<%$OE$$qvEd(4G82t-Nhbf zNk^=U0yxtj`+r*X^|2kTdP%)>oxQnr7p5L6 zJ^yA~CCr5nG1x9LoUcR9$|;agcfuwnBT1|NUOJM%^Ddp0WJ$j6pyfUvMwu2XCmD%h znjQXlT%N4%t{BC-IF!ppk#xX|TJ*A-A;LDrxHB@N#2)oW=0KC=3f&|-^S!6pOM7P% zGZ!JL?dt*l%?1V;oj3apEJ`vr3*-<8Sp*7mcGr z0X|pGq|~Htd?_hWV4reYZ2s$gI@beQk%l%7Gor{IzJnZ`UG~Q#r}s-^`#1aK#Ji+z zt?6=-VgX(;;3Q4xY=cJ%_@_r~b3WJCf{Oxglg$uZj)=%G8Qj3VfIv!~a4V}6C#L9Y zmUJxrHhpVqpxZ^JR$mvU+vsq`M_8!m>zbnIRgL5(2=4Hw&xy2+SPfNoRDS-b9^+W@1`oQc|?f)U_U9$mhJSRVhhqqstwo|!SMbde##L_;%}=49D48$uv8!s}5Il-N8bA3#VBCJ@4LX`IQsnMi|jzW~g z#H`AWWbL_{G)(Kv8;(Mz_aG3f5MuXwDi%$47cJ}OAsQ-*CeldY1+UOTTvH--&s2=* zL6oHx`#dn5_?%~VJ`@z}gb^I4SHUkW9Y7Bvo4nbt64S(_H`eh85!^nlYJ0)^1WdGy zLT_Hd5S#r`x|FIT_~%K??7*7Yg&OHtiMI$s6$O6k`{eavS(i^ejY|HD)q~7QEsg%j`f?}Eq`sn=-9dAnoRqTK3lMLe$Hx!AFL4eirQI)E z!LQ+==zfVcI$GB<4AyhU5iuENLi515Ve9;~kR>aNELheFeWr0{TT-|sB1X&0%LaT& zpU#dgopD=GlaimP+gly)PK1B8GMiD>sk<*H7n6vukvWp>RW>m~N=ZcYFk3dm4xc+{ z>%=_}(%YNRg(PXbBB7?S_pxlfqs0CP4uVh3v}Z!9m_H@r$q9D!?;}S9mw6JG|2*k$ zsEnlxAd}F@ZHJaW+%B%H!0~v$U1YCbEHcGXR#}-*;7l#t-OZN<;weviA^T{^oX3@B zbNa^Pi&DQ)reb{?#u68C2RwLZ{3&PH@3 z|F9}asXsowzZrj7apE(6HGfvtB%L^NOjp}1LA(1!niL&^movSi*K+H^0`=l9HCO|A z-1F5A@si(1#+ERSTvWc6LAfm{`OJC97#I~L75i1;sU9SdVn;cZ$_`J>!||(StRpk$ zQ}_bur@31Qcn`mhy}6W4g4ol`OghaZdSR%?_Y9gkq{wkxZ3M)=Q3*R z_&(346N+D#_9kD0G$IVV1Ih1SY)y4;n4BJ`rAIvv_I^2#*m*{VQ`5?AqmPO?3%0O6 z4WD(kt6vhpS*mNY|2B_j$yZw90AG4w^%zh(zZy0P9@xj2`0Z)820#C~rI%Oux+@MX z@L=YCgK>LggyjEu&U*iq5{}nvFRxpQi+6=IS<+uv6+-dtH46g&`bfp3xL==fa#?Vw zZ)0y1mAtj0QEnd~OVHe!uTcpfNhv==rxGjZN7PxXUKlW|_)@u`!rmV}GCv=gvqeU6 zegF|>I-Pyhn)qq=1gfud0m`Ai3p}8slcZXMSmR-J^YGNl$VevP>sz%xU(0nc?n^3a zL73_$6u&u$OL2~diUVaB=zhdQyqFgJgNB`txHWjeHz??AE#6i7MYkHbOXsNPE7BwA z$->@L6rD@OvfQ6yL@^hjS8Qc(*w}SzLTnl?h}ZjJXOCb{Eq81gj^<@iaVcB6IBF|} z(M~qk*MqP28*xE4Z)t7eWVIkQG7etpw_7U3}{?&W# zM11Euk=u-ujg1K53#6@0nx58>5CxYi+)$;J)1ia@XLmBXxVZS_u5)ah^(zq={SO6s ze~n!AdJ-2EkA~P$lU~o$N>WjGo~GKI+mpgth6?~GRcEQS_=FSzlaot334$y5A_q_J zUteECAnF{Nxnc_e=qvbSWElAxVdw-M#>xjY%<2?yWC!Qk>OeKCNtP`5LOU5^TX)*U;0M8UDJ*H5vEya@Sc)__NaHK8wt(in0=<)p`mdv3W!#$#gv%e)L{WMdx)Zj0G{|Oj<_(J`6VMk9J_A8 zBY9WF47*SAercJ?+#7tAWnYUAX~F^eP|DXS27{;mz`!4|C~vXklNYfXwN(>e+}=3C z6)$QmocOa?lP+f8iMO}`6nzR%T1WhUzWG{RJNo8I$!_3U0)<6rGZiHTO@pWdNg)aSaWjVPk)05^UGD*+o8| zds(Tz_mOF#NVz_1C8lL*vUnvcZ`OBnle=iJ3avuE0GXJnK%AqlD4_2?D={XxM_T4O z0icenXx1v>k6}T=FtH)BQC{qF^de^46}x~4T9=3?`5&usYyr9k1#$J&^QSG9aKPPq z`Y(XHxFRp$APUr4Sy;&Wq9P$D?KCkYPrDHTj8S-f=p@BLVSRlqay4UJxnikJ9!V)2 z8Lwa9EP!Fh1QR$SlOEay@cI#u%##;|IbP}~ZlzDS4LDy)s;LpGo=gf^3f!E$vs}0( zc^1qXi8L`gOUIl!X3-8Ru6m#=xKGkD(oKMt@^*9p#0HofSbVygbwjO@a%}(?4h;wE zmB@lGE^ZdeL;G^QWhbH7*gS-q4?avHjmkEl;3dGsHN6t0R`D-Z_rpmq$`O~JjM25B z@6y=N+g%|cA<=Nz-QRH*o_BxG5lLy&Qdd17NuK`9K_2r3e;ms^uZwNv&1`l&IX)~| z(A7V$S6?Dy=xN4~!FV3iYL}kjM?S5iN|_7^(7+78QdQPFjc)yEvGfVH5Y zQZX(fHTch8CLnb0r)OTPs7oG`PUj7W0UT=7|P>SM7 zMty3>M%gH#oG4jDm=@ZLdc7!+@ZE@;+T8`O4-I`tIxOxuSh)SscPkg%NFd6ZwYVcA zW<^qFnp}VlI8-7?2lPB#esd5=M-(+? zgg0bsn;f16K)%oW9qV1TN0!mPZICQDTI4jzaN;^^B%w0&%DGVPY=Nm~=mX11iPMbp zxM0prrF4dd z;*S8j;8X7t0JPByvI+yKpK`!=;hv_5owBTbx{l1Fh znSEo;^IV|n!y@(=sDL2ZzMiU1;I~2e)u-(DRvSZ!-Qq3F5KX|dhwG|q1@5t*iO*}O^g*e7` zw5d<>k3@d1vpbbvB^X*ym+=HsR#XZ=&s9%_!D5snJ2xXl@|_HOx#vbNj-(#Dn7z`c zvZ^&7BahW-7ZMhB5290(#q+I39>^gd4BzZrZs)y_tE+#h^hBDmXvIkgHoKk2KeI2> z!W1awa%sBsk^H2MkPP!<+!sHv7+G~+F({oTM@Y&DqUW1c_&xuRr5qmEgN6Py--aQEg;PV#98Ivv2fH86&cgh^h zw~04VgO0!GGIC-Q^tRCtjud|Qmr$hA3f$i~aW{GER1j<{^W9_#l>pR2EzJ^{;h>8P zhq|K%DBb`;t#7$CkVZ5`t?k8-%_sV9X)nvwyOz~| z96|kbpPdVgZCHFSA``8aoVMhnXJ=PD@q)t>F-J_YL!}-PP#^#gL?4ln;|e)GB;F{{ zI~yP8+OH$T)zB1vBVoB+v}8H+`czj!4b_4rGtmA1ZRIp?>Z0P6+ba%!GBH7i0~GbK z!WQewR_jXR^?qGof@A}63y1NQzcW>kM~e{aDS(-rVt zKAxrfe(H$1&T6#5#ycS)%kz=A{AfNnr0Oqx#lxEaT3=7eq?r6M*+J&}YL;H}#O@lk z7x;<9FydnsR#>~AdhVTSN!6(4#_nmY%0U+pH;++t`ylT3Y@)u|@D#XQow!`?0zVr{ z6uAOd6}k8J<}<>rB=9E4!SLizD`1!KTW~YK*6lnry?bXVGWk6}grtOqqvGk%ac*bw?=Qx`bPnR zyiQC>!o2T^2|LkvA*Ud7B&CW+MAUxW5*V>rp}wb#?IPz&Vq>M$^q-PyB)e2h_vVL) zvyjwh=Ab>T=~H{szS8?z`iuHPAOmukVn0Hyvu5LP7% zCrT%gBaKY#t?U;}5CSTJSDXPjpDDTni8hSGD$`T6~R9VI;Jfu&NEcd}?IIe@E5 zs5~W8d-2ju5t?dF$ZN2hH*i25k|!1)xUHDk6_^_#I9zHS&MjN^sT_!({m3X7)-Qu8oc`HoJ)vLl&1msmxerwjA8Fk&zeQ_EZ z$cGOxK*2p6*Y>d6aV7ZG=Sd8}?2Gmr<(lH;H4<5N)v(j`-2^=0N*jMZ=`e7SL2t#P zgd)AmaEG$CpG7L`^k`tE*F#}w)*Tg=BySD4;(Q-xOuLNk zU)CJm$V-L|#O_ZZvmTYiQ^;sI@WT=gia6W09YN<9>iHD%b!4-s$iSDb!TE5D2;NN^ zu1*A*r%h}Z+ppONuLT8|6RiO#h6|;ENk(;wods7}#h43LlPPU;!mBgGz42t*ohg@XIl6Z0^n^+D=x+F%fj;+7D!j#F^4 z5X7EyEhSk*$5PLZVgn!sE>TYuzPQi#pqN;qmU0_Vg6H=GV>#)Q=))AA%6k^j*7ouy!$6q3=&Gg0gi-9oqHgI zz72WC%Ec8#TpQ@Fk)R*?2oxO9FSo{`j%_1CQm<~H<93OCrtmel`>1TGu6irOdiSdY zT$ml(B0*@F$A!8=+>{1PPssW2tS`mT{Eb<5UC2U%0CMP|ecTJg2QaVXRGG`CkZ9{}&+0secgUOJv%}9#&Ut z(4ES~Fd{;k&SzUBKYVHg+A26uxYrYWVp8jh4@6ZiCr!ACA>xX*D4Sq}REq!!rxqtB zyMutkg1aga5vYmE0Js3!nNHNa4`*kaYa-qjbU-tCtDAIqeK9bTQ1b)i|F>_G;OmD~ z7a+mQK@6_Y+?@AX!WdRr*h4w}RQ(m@OI7W3Dpyu>6_mTXyG6P+kE+KBX7l4$h%v+3 zMXYDFhP-zeXbpLqaG#8-#m_e-o_*PHy9~DlHpWZ-sYzGmv=Q};JWB!~_x@Mjto=K0 zvi*%WEx!FLZ^kJyK{OA~&N@M_m&f)x3J#t2>Rj6*2sE3wSCjjbORZBjX4B)UE%ZX_ zTKO8e7EBY(QOj!~feBwcesq}_rEDV&m3w};M@RIPVz&9<`hsKDnue>#B5y%V>6)+ub3vL0l01p8uad1t^>3C)a?d+jm z5tH=geVNFA!&Hj>FBA{(n*j*p3F(0D2oTW}+PujVIW@;QO8cEtmLt_0M5V3o_4O%J z>1{a=CBB;!Yw1{Mr`s%#w9txsfpNbzn-h^`rhe~@+7c}N>=>!BI`#Cpyc$K!C=at254Q?Z+4G@4gzAJkvK zyl-)*#-zR5m;!-+_7r%O-@gBV)X9bj`+<*DjIt`F{Yx8FiTy(Rs%Z|o_e!%i>Va>j zg1p0|p+{J2u=v}?krC>+Z@%6#5_lo?KUXPpukqAW{A5F+W!sM>rvL@AkA0{TgSjzk zE~$^l{G59a(DhgSx)tbH63#|rgQ-j&KdhZ&=fb~#A6|g3OJEo;o*?^iI3+@53g0K%qaqPlFnl%oh`T}pm-D)m_)43^$);SPTZ?i4yuWUnc4Ha zb}Y*Cib4s})#K+GSh(*A(oMYK%D)~5?KP~Wz9va&$2zM+=JQyo5uC-@6CxAXf1?8x zGS}>|TfKdFQ8NqpBJ}PM0)BD0xyC`1~Q7?0H`0E6}V)?=|A8w5DqS7_#ka2+=S`c=SG`{fGDA*tU%XalnN_=$_ay*{=d18=|SK`rA| zh_Wfs&eLrnclU*d%`mQ3VQ?24UrbWZns3A^sm~Ok>?f=WFZXn_ug)}! zJt*&Z|7y=bZk?04PmnJ4heF-keAuF5-&W4pRpeuLMpAb6aA*osq*TW!QDMIfA&&c; z=(`%59j)T7ev+Frkn}kb!Qb$HdU|?7PAAYIHw%@FuTC2u2_Y6s)KphLd!-1j0KATo z@v=PTqX)OH0*Bo6?Rs|%C7twsjI5*-E~%twwvx-V5{+J_l!gXM3w;Yd74eS{JyX6U zV1g#DCJ*8OhQg;H{bn8vYM1g2@#?^%AGxGN^;0+j`^z!hsJsBT5AVkF1A*2EOwq9@ ziI@Mxmg59qjDYhwIqQXX#t;pVj^AZ7KjQG{N*kJ;gBk%-2Cs007SQ6j3dBb-vlZBM zp-pH1u-fHIJk2>4v z6Qz`B3xD6w<{1d&`RiZ&O7tB3s34HXD@rF1;~R~7;;fG3iNeRW6J>+ihXejHta`tP z#UGp`atpX_;NegS1z?h}H+fw=@$>gj1C(vIjC6gok6i`5DCxYw0oE7XYZ6$nL--KG z*fKDH3&bqAy)#~*8x_wN*Sz2jk%=IKTTR#dO5#hU1Cfwxv{xaY;Z1w}rTggkZtJ0O z=V2*qF5uw6_Vy0@qoZdO-OZh8iAAm)oUcS7 zUcX!mR_-^X zd`85mQ6%E=D(x~$&r@hm=Uh;#h1$n1cS853mCp4oaxx0=jMKfNsK6E5{zrFAvn|y~mR+;$A_NE+$tZG^!v`h?;Z|b-UO-;L>8W$Fm?s&e z>BBfzRTxLvy(RMVGFvtX}AvjQ|g?QKr0H(#zx^g90+%6vuJsODFDu?l703a6mG zo%EPtD^52GyCww2n}aOz_Czqw2c+}Yp@UPQxZd90K9%0!TuT+5fJ9_T8O|-MDWD2F z_y4)qh$uT!~&=j%n3b!Pa5cD#+cb*ueBQ6LR2~@EGF8sD-d+^}l z=7~GdYkQ!F3XBBWs4Klo%&BFtE|V6(>!1$%Oj(+8e*hi^e3n42>&tcn-4xiocS-H3 zC=l|=BjT9Rk6$f!3Ru0iVPm&J%cZ3r2LJ zc?1C)C#X!%pgsP?C?8`KFgq3w|0sZ+xXul&seEjGYmuGmIAPNaf0s~&XbdIjrE5H8 zgTIF66xuX_VII9iBHi*^5j?g`isltZ55(Q-v--`s2|zKbxm;Ji0fhjVB31 ze&1ad-nCT~8*_nX`x?}Q(64)*l%PCJW+b}uu-uChKP0`~t!%Wr5WF(3J#)Fd@|asV zoJwp3bDKqGXYci9UQEZMleFKehl$R{GxHF`#aJ-^7634@n1VudJz{k4CS~5eQ2viP z>917V>+u7C5Z%e#aGhPH1 zWITTX64S-d*hb&>X^!paX&y1L&Z68;v?r=1hRx^JHNL>;D3JFOD1o`KRa9S9gI8 z1lJ;~j&EF8qrYVEb%CXCx6)Bk7rAx6-BN#cE5zTvLCqw5P~%l5FB_9@er=%_Xi z9_Eji?wq|Ivax}ijPR*kusD7027wx2YRH+HIq+1WkA>ChvULLSC#G9qMni+|cc*8j z9WTd=`T3}%fmjB7>3E70Z_V36(0PSXTY)iQ8&K8aKEsPeFVqaK!Jed{zNRW}b`9OA z^Er2$_gdFI6}~)uugCmPqm@I-nIrI_Xn2b}(HyqB$9j0}=>uZ}?+>5sgge-$(g z;RRBKYtN%$8u5VhO(pa~tJww|YB#`Wd{sOGRCmz6%Um zGAevQJ4jh{z{CW?{|8-dfKGpNpTDJo(EwJB!zw%DDL3DMfFTHnW!q!!W@`xKKPD}S zrCt|K&_Co&)ZMnOjgPZ#0waflo^TOSJK`^ zo=yXrAAJ2Cl%kbSwSwVHib^d8rwXw0fiK+ZyqUiGM#;8P5A0aA86H`{U!nkpf>AK8 zS>u|!wkGrc3}SZ3MnoK`S{^TBi&k@%golN-{$(X@IDhe64>+`}C@$QyQZM`j#^M5% z5q$m<`LK+}{HD1v&#$hGHJsVu^S8j#(5lW!a7u-IbiDK2spOxTd+^VC;Y2w_F`lZ! z08iq}JcksTnhK7kceNg&(|4!8{))$7xW0Frp&+NA0e8P4J|FSez<^loE`>)7hf-=R z?CA0LwIsvsA}|U9pB@38Vhb3@1hbdn-{nKqoZ9{jV+ulc+)783D4!7dYn2!2|9FF^ z3bu`UVKBy^_pzl|&=+5}%{ec?XEDpi$7nO_^A)^uAj<;nk{{Jut$P_GWwQqj9DF zC)gH=>no1b3gIE~1HmPlQ)QY_d`skinu*K_2M%8Jg8)}Tz9(KtSG%k*FLxxoY|^%z zzya~Q;2n#_CpM}On`3pU1muuvyA3T5hzrpeEI-F)d$0ehlHu~4I@5osfq$bi=7`1m_Wz~^j+z0s?(WfR0ihm!`f~tAf8m{a z@ZtF+7#a-%Z82be&=r$oMhq15fG!|DAep;rcyEFLvv3)V@pRNg^G3S}gF%6b?KPQZ zCe7zAfu$^O1J#r9@@tM6jn2e*`Ev4111;NgxnGi8ymQfHJU_v;D5wR!KPSmc*^r+5 z#+;-@CWpVH9U@b4)5kU~!j6%ELu2<2Y0I*<7JgKg5??67+FRzS%iT8%#Mbtcr(c++ zi3Z*kI%BJ8;A6taw`QE<=9tbCKUZ#bes*>_tKZv8aaK!B*qg5e1M>A-<&*jwmE6HO zTbhQIV5`7PvBNsMn>~y^bwNW?`CSO`sDYzhTnt92IU!F0UF z{Yph|P~F<{=S_U6RpVHl&Z-?8!Dem$jPsZfKJoqI7g1L!m^25|aI~+bvt=|--fb7T zIW2uJGL_YdY&UAo8M~X>^>p{k-Sw)sJ#O%AT<;OTrV*4CkOgiX_@8WOsPc3BfKA;v zVq^A4;=B6q8?+_9fL%e#Pr3ge|2fcuZ|LdNbUPyqor(3Kv(F}(x{|Jh@h5O$ggE_{ z%MTZl^9u2S79)H$0s3TQu)ksP%vTVMztt6Av5gIWwik$OJq{iLJq0G1lLmDdoKqUv z(FnO~MqTRU(py#+ZN=g1OfQR#@7dg zhbIEFomEEiCGPIKeG50>U&8kzIaL!03_0{BRr<8Id<;f-h-P-+wgfisNa6208^3mg z&A)S+pEa90Z2`8@6gMv)mC1z2QIDfa&$@PF~MR$|GO)I99R@zpIcuFERb$+n@2uYvAwua@J<5J;?z^*lwmcpa8|z zob}`E3IKKR&BhZdConw=s)h2K8VP$?3*5&P37Y}aQC)Wh?rtRT-B-Xei9dV9$ibg9 zm2$e{h5h|Id5slnOJ$WHkL6GMi>~dy)vLYsEEReL$jI=kL(nbI0lkTVNvZw+YwS$G zq3qv1K6WL8w-~+I2}O~jDf^xXE%qW5@>>6jv5jmEA!{Z3R!Wv+-`62aXpthjtb?KK z%bfeE|2bFhIsbFc|GK*B>Y93Hp5OD#^Si&_`}4gO;8z%-N#HtCuet2-2h#skQ&X!4 z`|IMnCh{ktUf60?Q7WWJhf!q`JQ@`kM_Bl#ECt*)&dCh+!JiqEnusy>(r z6ZPcGegLt>kBLgMW@<#JsWgg`{MO_z=Ig?8DxE(srJ|}jIyKeW#b8Ix%ER*j;B&qA zr756d?uQu(@LLv7@X(y13JDF>fO0!tCjzkpg)G2=4`)hM)zR5kY??QrKu0pl$NIEd zTN4DMBSU@3J^V@A%URoh?8)4(Q8-71EEjliu7!o?v{GhYDFnHfd#&tUsH5O%?Wm0t z3}4Q_1`D%EB)I7#;hCgFJn8}pl!6asXAMlZpwv`eE31qu-?o<76_TH^_ys#VoCT1w zKASUaa+01>0RaK5rv*5wJQk@?;*`jnBPyy;Pgu^prs(^SV5w*och?2)4appc#ic(^ zl4FNeXs-A^RaoG}+unX!ds!zQ>+k!DL1CM*Zl`RR4|=iy>ccNsn3~O{3NxNoSKRiJ zCe_f>rJt7Kk5?`sVG)Sv?Jt>Idfy`Dv)q==naLZNR<9I9AdLI8(rL9C+lgO4kp)F_ zwUI?+f2A)LPr~9?ixOdp(O{9TZ?TZuw~Ao1a45AaG$v0bdN1t~cvWOYIYIcrSvNzG z$)3FZJ!~)AAAeAj-E(%fhKUfN4+$io3!66c3@-Lj=kFzGV;vhPL2y!B(ur;un$A()hQ4j5qmr? zC~3Pf0o|kI?JZj$X#;&WYx?&KKBaVbboJ=Lm9cbokP8tr%6~H5n$nwNYaZYh)`rh+<`BMb+T2LfsFu|9Hxk{iMF7~ z(O4M*()|E`3_MEn0c?1n<2$6)ak`(Yngm`#>2jEBrtI?FOLQVW}6lFEbzL7 zfOJUjf!tTa8FM0-MSd-8>&%C2D%4eDPFX*wymiXwUwWJIbJjD_c`{5Nw_?fPtn={73O(^8zv9HOuSbT^ z+fSA>sAeM3@>h2ho42)g;BN-)Nwnsi87htFzqLG5AUn{YIFe8qO1|cEDeogYWGplw zYGYT@e|#mkrY&8ScRa;=@t)zpOh%54Eh_@7N_@zsLCH`Gse5}1MkXGMxGs0Zu9J!c z*Ei>!B|VpY8Ch5ebrjUI4|Na%`NFU<7WS9x!nS7{Mc!?4UloJ%M;KzXW8Wgd22TqB z04Uo_sUZ>E$Itw*KHDqz`1rNvV>H_?Gh>IZ*7`t-`?Jf$bCZmtGqbEOHE8eL6Et|3 zX0;FQZwrqd78IZK;e+s0K;2E2rR3lgG+}tv*zypCtQu@TMcG}WM8Vf}gf3zIOs!*y z3iJe&m6glqOVg1qu8rKX_V!o+P|D|VrhX+$&7{)0F8U6YTx zqK#A?YHUrVgHYXFc5V8nV&H3}6aE^y7f2F!~h&TTp>Z($^jVWSoTmzW^``Psc=LgTa zKr1Z+s}5Bwz?-XOy4jcSIMbo>+*wie_?7!|TK>3A-zP>-{mW{ekG}PCEt5}ex4Zb8Q+0p!2ZXJowL{Q#O^P&vpQq!08zC`at}FfN|t2d8+|tp2(r_8PTDh=26xK5RQCCOqbvH3boan@&Fh zkAEV0)B{Ikzld&i6%`j(I(Lo{b}Tu{V%WPLvI2f-ga+BU@H*5(lo8d?j^W_%n0O}> zxPy@#%3ibz96alp(0H2&k9GIj>|DXg9Wqo5#x;!j)qxBwEw7$iBB`qzH@lGC56C~L zVb0`YY-e69d%b_SVzG{Ci98hc&mh_2RcvW-NQHmx#-w>D(@iA)ZIuCA`v0CIEBHF~ zt>ZCrqNAguJ@zH>l9qDxbS#a?+isDZpZu8(&5HpKQryI`Qye2h-U~L1p+6Uc2ges$ zBY|YVN}J#aCT6?aQ-N$89QPU&c{_JC^<7xKyDwdOrt-445olzQ1l^IZ8{dHeiIh(W zO(L1BPYyVz_u9M8yjM5urnZ+M{8##{^0IpWXB?~F&R@fWn0WxFubI%*WJ|u+M+8Z5 zRW@hgUulAUXZ4Pl*HFWk52z6B$H#32^B@)im^4^L7w-%}^{S!KqSJQfjD7c1gqLe@ zifDJV*h`U+Yx3h`V^F7qK%IEA3HfU}Do-Lrr z{HFAC7a)_+uU*zg?e0RCt5cBWb@kw&t;gEAbq?^dQHu8R_Pbnx^vsQK%f5CR#zL=v zOV)iKyI=o(dGEL?|N9lUXS{WiuvCgWKlbl#)lsr4Gd}D`n$BSsawrtemQwY(YAs=n z2vvx`AJuqEgu0!bs0uw{q$mBaEm7aqFKkJR<){mH6}K7IiymfylWMA4cD--dT;tA) z7|Dw&-CRJRk$odU_mt&){|e5wZtWRK{-U{F7uN&cvg^)+3To=i){8pOO4mdCjlH_u zPg(HJairSy-GU3?IvVg+Y_S_IpQV(vKoIW}rk^3xr4i*^GYUiS^^m?9N$?xt0d)W2 zJAj&WeOK7c^Ya@X9UBn3^$#@nCMSQOYWw%){R-Y8b!eoT&WxKYFw9kk}+@y^gfg|pDhO-6?nEXKx>Y>nx12T7LGUdD^5=b`a*R(^Ui5~b8I|#$CIzZFcMylq*ujZp_8X;ScKF{%V~bkrmjHzt|J@nZw7b1md{MQQWxvZ)M6)P*-9t@l#JnIi{xNy%B5oOr~1{*3Z-lV6q zp^VM>3)s7(nJpR|#N!+3M;s3Ml;lklPZHYOxe@C<<~FL_t}5&79G?$MDm!{?Pz@lK zqen|c&!*R&gQbj#k-i(aGY=0&hq`Tpmljui&edF#Scnr@5CR%5W=;#ct^j}oXdMGb z-t?V+Ld-G3PHVO0RTBI}5$5;sa;~aW;#*_Ux$B!!WBLyo!t!Jt#CCiGnQXqB?7xDQGG=s|Cbt7lJMYz&?&f& zowL=TLy?vp@Q7V!1i%&&T0{gVh)escGmuS0Qj_3rAH=7~qwb zac{XL!+{|0@Z3ivFf?vDijKVbZ5%|5u3t?9EQRH$CK1r1M~rFkD2!A{*h9{VhbX={ zGwLVeK7~9K;WELCu*^TV<+4-`O}g)fHP|qbZ^1ujJWO(UUW!Cy0OU1=+@pW>AP%#Y z!be5MjsVtoZrNV782k_DepEF16B!2?ZFt|?okEV+Ef?G2pat97o37mwaic|;a`_xt zbV`}iF(~OF$&qvK9y_Hwd7#X4?$KT(p#=8~TpkSML1X6j47b395aapx?xoB`q8LOu zD^7Cy+&%^AA}F*opa$1cIAe(4WO{ey^FVd^Gg^2U!eLW9Cli)%L)#SqBSEx_JeKf> z77sb#Db!sK7zqLBIY7ykmUV*}4$|npBmfosMV&bqK?hSfJ-J#7(XT5oL8@|oydzCE zPXE0d!O~tN`3rOgNdv8Tq<`{zPolfMhzeC4NZ$Z;65R5%I4akXCK{xh0qK8~5;;xz z_0<}J$cg~6rf{dg$r?>ndCmxc!y`tzK@AFzRQ3yghv#d3pB@zK#4QzoM?|=2eWm{e zkbGXFpzoz_HyvWhgE)Z?fyr%JOyxOB=k2j03gVIXxAk?4V$?VJxzsw zWC(o^1V4jUfjfKU66W>5f%egY;4#LI7)z+8d&sHi##V6tHLKzLo9BEm5s;~&7Z zf*$u5O(qob{H-w8HTfbOe7^|DoPA~R^O9?^5qoME=UjddOdEZAVKDv+1h!Nybwtew!UkpYA09^sJud9iXc z2`hw~gx(bJ?CDT?fN81(309~Ea*h&z(~(l5XPpYup4%Ncq>tO$5%Qu><$xrz*+lkr zsV9(!dy!wB^1=NCEZk@L2LEJbK4=6*7*mRGij_JIJOD=yaw3Q@DVSP zoW5yx^##I?A`RWC+;I%aA;7WI1TrR10t3p1^)hV9w?=yo3F4JNcOtbk%{--dpkiJp4i$8~J$1}HI z^tNCehUq~~meJ0BV3Wn1BF|xh(9dNhvY@$vmc8X{Dak3ckPXHv6$0Y};oDDrT@SJzI||2ANz0lN5TP`rPxC0s8Jbw~JNzpJ^o9)wG@Lo;XYD z@uIFcbPFE8{a?-CE*Om7?m4h(R*lxI#$9$9=ZJ-CvRTVo8`kYu?J?PTP)A!^{jMC;3PP|X{4sP*VhRhA3NR~^LfvDDEpGcR^X zEOCN|X>5EqDvA~SGu-YlCNq817m>592RIpb;%TcX4Fqu7q&nP2x9Px!q(e=&3L!9} za)UC6?FS#@ZpdvkTa&+kr$JS3Zq8vhZcZ`wnXQb8%NwMWogVt|HODfsCgNRWgQDNI z$jc(|vf(H zgqJ~$VlkfpCX;20U>z;$E8cq_H3J&zJgo4rhXjxJ_QlfZ^qqG0B)hYtw|&nx#(E(P z#=A@n%jqb7P7dktUZS(#)}iL+X4LjVPH%>MkuKgdrbYsB0%76I=-2t-ZEd=6v@_70 z{n(N=g76TFygL065Ek`2{157(LE{knDy3hz9JU3J#n99czgC$v zGYQ-}0!#iGp>ZehHAv>kzy-#VsqY#!zD3Qy_g}JC#&v6&!&Z0yp$2tyM#j^nAGsEC4c{4--UIB{aq1!IrQoRoERvfDKjROs)* z%&qKx4%Yt6Z^bu0y^s-ev6)1nV1P+bR0IDAo~OMX76giN8LR0Yev$$e?kOJ9`S3wt z;!_j;+uq{-E@Jq|THEIA%K{`+%`Rr7ZPP^ExFu!R!}ryv<87afs=F+Bi}&s;IucXl zo!g7p6z+oxVO-=7w@Oxbygm4sE%MXWK#?bPFVj2jzm@mWr&J6Hv%%Bo1Q^Wt+gP|f zHG~-_!_3o{RUc2k6ofk83j@g@WiBfc5{4KYH?95U&ev83@2diLk+c--&Yy zrdf}F19Jo{0pSL83@1(E0~meO`?eUDscuPHuRR^gPPG^rT>&-9sYH0M=~iq_*(Io; za&z}hYlPpGnJ^6!g@RhM(}py(Bg_;#bG%@oKgdG?rT(z;#6oT6qfx0;^?DgSu z1+9~@I38oFr7r@sVA}@hD6ZXgN!Ub=pIJPbWhlTHKxT&7m@Xxd%sp;aLFy-qZv8V7?#b^|1ym!fK%uwe1|_ z7y&1Q#PvwwW(b@N*)i#oSV>t~2L#^#^Uada{CIR7UgPs2z;eO|cO6&$_pi#l02a<^ ltR?XO#{ZEI6+q$D`*T|?V>X literal 0 HcmV?d00001 diff --git a/doc/platform_phytium_pi.md b/doc/platform_phytium_pi.md new file mode 100644 index 0000000000..406d11a414 --- /dev/null +++ b/doc/platform_phytium_pi.md @@ -0,0 +1,32 @@ +# How to run ArceOS on phytium pi + +First, we need `ostool` to build and upload the image to the board. It also supports windows. + +```bash +cargo install ostool +``` + +We also need to connect the board to the computer with serial port, and connect netwire to the board. The host pc and the board should be in the same network. + +Then, we can run it easily. + +```bash +# cd arceos main dir. +ostool run uboot +``` + +![select](./figures/phytium_select_platform.png) + +Then, press `1` and `enter` to select phytium pi. + +![select](./figures/phytium_select_app.png) + +Then, select app you want to run. Item without `arceos-*` are not app and can not run. Here we select `arceos-helloworld` for test. + +![select](./figures/phytium_select_dtb.png) + +We can ignore select dtb step by pressing `enter` directly. ArceOS dose not support dtb yet. + +Then the cmdline will wait for you to put board power on or reset. + +You can modify config in `.project.toml` to change the default behavior. diff --git a/modules/axconfig/build.rs b/modules/axconfig/build.rs index e8a28b11e0..4737362331 100644 --- a/modules/axconfig/build.rs +++ b/modules/axconfig/build.rs @@ -127,24 +127,34 @@ fn gen_config_rs(config_path: &Path) -> Result> { writeln!(output, "pub const {var_name}: &str = \"{s}\";")?; } } - Value::Array(regions) => { - if key != "mmio-regions" && key != "virtio-mmio-regions" && key != "pci-ranges" - { - continue; + Value::Array(regions) => match key { + "cpu-id-list" => { + writeln!(output, "{comments}")?; + writeln!(output, "pub const {var_name}: &[usize] = &[")?; + for r in regions.iter() { + let r = r.as_str().unwrap(); + writeln!(output, "{},", r)?; + } + writeln!(output, "];")?; } - writeln!(output, "{comments}")?; - writeln!(output, "pub const {var_name}: &[(usize, usize)] = &[")?; - for r in regions.iter() { - let r = r.as_array().unwrap(); - writeln!( - output, - " ({}, {}),", - r.get(0).unwrap().as_str().unwrap(), - r.get(1).unwrap().as_str().unwrap() - )?; + "mmio-regions" | "virtio-mmio-regions" | "pci-ranges" => { + writeln!(output, "{comments}")?; + writeln!(output, "pub const {var_name}: &[(usize, usize)] = &[")?; + for r in regions.iter() { + let r = r.as_array().unwrap(); + writeln!( + output, + " ({}, {}),", + r.get(0).unwrap().as_str().unwrap(), + r.get(1).unwrap().as_str().unwrap() + )?; + } + writeln!(output, "];")?; } - writeln!(output, "];")?; - } + _ => { + continue; + } + }, _ => {} } } diff --git a/modules/axconfig/defconfig.toml b/modules/axconfig/defconfig.toml index 5bd110e701..7d9babb6f0 100644 --- a/modules/axconfig/defconfig.toml +++ b/modules/axconfig/defconfig.toml @@ -46,3 +46,6 @@ ticks-per-sec = "100" # Number of CPUs smp = "1" + +# CPU Hardware ID list +cpu-id-list = [] \ No newline at end of file diff --git a/modules/axhal/src/platform/aarch64_bsta1000b/mp.rs b/modules/axhal/src/platform/aarch64_bsta1000b/mp.rs index e5ee9bf9a7..4adf3d466a 100644 --- a/modules/axhal/src/platform/aarch64_bsta1000b/mp.rs +++ b/modules/axhal/src/platform/aarch64_bsta1000b/mp.rs @@ -5,6 +5,11 @@ pub const MAX_HARTS: usize = 8; /// CPU HWID from cpu device tree nodes with "reg" property pub const CPU_HWID: [usize; MAX_HARTS] = [0x00, 0x100, 0x200, 0x300, 0x400, 0x500, 0x600, 0x700]; +/// Converts the given CPU hardware ID to its logical ID. +pub fn cpu_hard_id_to_logic_id(hard_id: usize) -> usize { + hard_id +} + /// Starts the given secondary CPU with its boot stack. pub fn start_secondary_cpu(cpu_id: usize, stack_top: PhysAddr) { if cpu_id >= MAX_HARTS { diff --git a/modules/axhal/src/platform/aarch64_phytium_pi/mem.rs b/modules/axhal/src/platform/aarch64_phytium_pi/mem.rs new file mode 100644 index 0000000000..20726fb340 --- /dev/null +++ b/modules/axhal/src/platform/aarch64_phytium_pi/mem.rs @@ -0,0 +1,30 @@ +use crate::mem::*; +use page_table_entry::{aarch64::A64PTE, GenericPTE, MappingFlags}; + +/// Returns platform-specific memory regions. +pub(crate) fn platform_regions() -> impl Iterator { + crate::mem::default_free_regions().chain(crate::mem::default_mmio_regions()) +} + +pub(crate) unsafe fn init_boot_page_table( + boot_pt_l0: *mut [A64PTE; 512], + boot_pt_l1: *mut [A64PTE; 512], +) { + let boot_pt_l0 = &mut *boot_pt_l0; + let boot_pt_l1 = &mut *boot_pt_l1; + + // 0x0000_0000_0000 ~ 0x0080_0000_0000, table + boot_pt_l0[0] = A64PTE::new_table(pa!(boot_pt_l1.as_ptr() as usize)); + // 0x0000_0000_0000..0x0000_8000_0000, 1G block, device memory + boot_pt_l1[0] = A64PTE::new_page( + pa!(0), + MappingFlags::READ | MappingFlags::WRITE | MappingFlags::DEVICE, + true, + ); + // 0x0000_8000_0000..0x0000_C000_0000, 1G block, normal memory + boot_pt_l1[2] = A64PTE::new_page( + pa!(0x8000_0000), + MappingFlags::READ | MappingFlags::WRITE | MappingFlags::EXECUTE, + true, + ); +} diff --git a/modules/axhal/src/platform/aarch64_phytium_pi/mod.rs b/modules/axhal/src/platform/aarch64_phytium_pi/mod.rs new file mode 100644 index 0000000000..c7c7264d4c --- /dev/null +++ b/modules/axhal/src/platform/aarch64_phytium_pi/mod.rs @@ -0,0 +1,69 @@ +pub mod mem; + +#[cfg(feature = "smp")] +pub mod mp; + +#[cfg(feature = "irq")] +pub mod irq { + pub use crate::platform::aarch64_common::gic::*; +} + +pub mod console { + pub use crate::platform::aarch64_common::pl011::*; +} + +pub mod time { + pub use crate::platform::aarch64_common::generic_timer::*; +} + +pub mod misc { + pub fn terminate() -> ! { + info!("Shutting down..."); + loop { + crate::arch::halt(); + } + } +} + +extern "C" { + fn exception_vector_base(); + fn rust_main(cpu_id: usize, dtb: usize); + #[cfg(feature = "smp")] + fn rust_main_secondary(cpu_id: usize); +} + +pub(crate) unsafe extern "C" fn rust_entry(cpu_id: usize, dtb: usize) { + crate::mem::clear_bss(); + crate::arch::set_exception_vector_base(exception_vector_base as usize); + crate::arch::write_page_table_root0(0.into()); // disable low address access + crate::cpu::init_primary(cpu_id); + super::aarch64_common::pl011::init_early(); + super::aarch64_common::generic_timer::init_early(); + rust_main(cpu_id, dtb); +} + +#[cfg(feature = "smp")] +pub(crate) unsafe extern "C" fn rust_entry_secondary(cpu_id: usize) { + crate::arch::set_exception_vector_base(exception_vector_base as usize); + crate::arch::write_page_table_root0(0.into()); // disable low address access + crate::cpu::init_secondary(cpu_id); + rust_main_secondary(cpu_id); +} + +/// Initializes the platform devices for the primary CPU. +/// +/// For example, the interrupt controller and the timer. +pub fn platform_init() { + #[cfg(feature = "irq")] + super::aarch64_common::gic::init_primary(); + super::aarch64_common::generic_timer::init_percpu(); + super::aarch64_common::pl011::init(); +} + +/// Initializes the platform devices for secondary CPUs. +#[cfg(feature = "smp")] +pub fn platform_init_secondary() { + #[cfg(feature = "irq")] + super::aarch64_common::gic::init_secondary(); + super::aarch64_common::generic_timer::init_percpu(); +} diff --git a/modules/axhal/src/platform/aarch64_phytium_pi/mp.rs b/modules/axhal/src/platform/aarch64_phytium_pi/mp.rs new file mode 100644 index 0000000000..829b229180 --- /dev/null +++ b/modules/axhal/src/platform/aarch64_phytium_pi/mp.rs @@ -0,0 +1,28 @@ +use axconfig::CPU_ID_LIST; + +use crate::mem::{virt_to_phys, PhysAddr}; + +extern "C" { + fn _start_secondary(); +} + +pub fn cpu_hard_id_to_logic_id(hard_id: usize) -> usize { + if CPU_ID_LIST.is_empty() { + hard_id + } else { + CPU_ID_LIST.iter().position(|&x| x == hard_id).unwrap() + } +} + +/// Starts the given secondary CPU with its boot stack. +pub fn start_secondary_cpu(cpu_id: usize, stack_top: PhysAddr) { + extern "C" { + fn _start_secondary(); + } + let entry = virt_to_phys(va!(_start_secondary as usize)); + crate::platform::aarch64_common::psci::cpu_on( + CPU_ID_LIST[cpu_id], + entry.as_usize(), + stack_top.as_usize(), + ); +} diff --git a/modules/axhal/src/platform/aarch64_qemu_virt/mp.rs b/modules/axhal/src/platform/aarch64_qemu_virt/mp.rs index 5c3936dd11..406adf8c1e 100644 --- a/modules/axhal/src/platform/aarch64_qemu_virt/mp.rs +++ b/modules/axhal/src/platform/aarch64_qemu_virt/mp.rs @@ -8,3 +8,8 @@ pub fn start_secondary_cpu(cpu_id: usize, stack_top: PhysAddr) { let entry = virt_to_phys(va!(_start_secondary as usize)); crate::platform::aarch64_common::psci::cpu_on(cpu_id, entry.as_usize(), stack_top.as_usize()); } + +/// Converts the given CPU hardware ID to its logical ID. +pub fn cpu_hard_id_to_logic_id(hard_id: usize) -> usize { + hard_id +} diff --git a/modules/axhal/src/platform/aarch64_raspi/mp.rs b/modules/axhal/src/platform/aarch64_raspi/mp.rs index 8447daec8d..6a9c78c13c 100644 --- a/modules/axhal/src/platform/aarch64_raspi/mp.rs +++ b/modules/axhal/src/platform/aarch64_raspi/mp.rs @@ -40,3 +40,8 @@ pub fn start_secondary_cpu(cpu_id: usize, stack_top: PhysAddr) { } aarch64_cpu::asm::sev(); } + +/// Converts the given CPU hardware ID to its logical ID. +pub fn cpu_hard_id_to_logic_id(hard_id: usize) -> usize { + hard_id +} diff --git a/modules/axhal/src/platform/dummy/mod.rs b/modules/axhal/src/platform/dummy/mod.rs index e0d229ff3a..19d0464089 100644 --- a/modules/axhal/src/platform/dummy/mod.rs +++ b/modules/axhal/src/platform/dummy/mod.rs @@ -23,6 +23,9 @@ pub mod misc { #[cfg(feature = "smp")] pub mod mp { + pub fn cpu_hard_id_to_logic_id(hard_id: usize) -> usize { + 0 + } /// Starts the given secondary CPU with its boot stack. pub fn start_secondary_cpu(cpu_id: usize, stack_top: crate::mem::PhysAddr) {} } diff --git a/modules/axhal/src/platform/mod.rs b/modules/axhal/src/platform/mod.rs index a39151c47f..349aac9ae0 100644 --- a/modules/axhal/src/platform/mod.rs +++ b/modules/axhal/src/platform/mod.rs @@ -22,6 +22,9 @@ cfg_if::cfg_if! { } else if #[cfg(all(target_arch = "aarch64", platform_family = "aarch64-bsta1000b"))] { mod aarch64_bsta1000b; pub use self::aarch64_bsta1000b::*; + } else if #[cfg(all(target_arch = "aarch64", platform_family = "aarch64-phytium-pi"))] { + mod aarch64_phytium_pi; + pub use self::aarch64_phytium_pi::*; } else { mod dummy; pub use self::dummy::*; diff --git a/modules/axhal/src/platform/riscv64_qemu_virt/mp.rs b/modules/axhal/src/platform/riscv64_qemu_virt/mp.rs index ddcecca4d1..c45175c8a5 100644 --- a/modules/axhal/src/platform/riscv64_qemu_virt/mp.rs +++ b/modules/axhal/src/platform/riscv64_qemu_virt/mp.rs @@ -12,3 +12,8 @@ pub fn start_secondary_cpu(hartid: usize, stack_top: PhysAddr) { let entry = virt_to_phys(va!(_start_secondary as usize)); sbi_rt::hart_start(hartid, entry.as_usize(), stack_top.as_usize()); } + +/// Converts the given CPU hardware ID to its logical ID. +pub fn cpu_hard_id_to_logic_id(hard_id: usize) -> usize { + hard_id +} diff --git a/modules/axhal/src/platform/x86_pc/mp.rs b/modules/axhal/src/platform/x86_pc/mp.rs index fb194934d2..c91f5baca1 100644 --- a/modules/axhal/src/platform/x86_pc/mp.rs +++ b/modules/axhal/src/platform/x86_pc/mp.rs @@ -43,3 +43,8 @@ pub fn start_secondary_cpu(apic_id: usize, stack_top: PhysAddr) { busy_wait(Duration::from_micros(200)); // 200us unsafe { lapic.send_sipi(START_PAGE_IDX, apic_id) }; } + +/// Converts the given CPU hardware ID to its logical ID. +pub fn cpu_hard_id_to_logic_id(hard_id: usize) -> usize { + hard_id +} diff --git a/modules/axruntime/src/mp.rs b/modules/axruntime/src/mp.rs index 005d6be132..44d36eadb8 100644 --- a/modules/axruntime/src/mp.rs +++ b/modules/axruntime/src/mp.rs @@ -8,10 +8,11 @@ static mut SECONDARY_BOOT_STACK: [[u8; TASK_STACK_SIZE]; SMP - 1] = [[0; TASK_ST static ENTERED_CPUS: AtomicUsize = AtomicUsize::new(1); +#[allow(clippy::absurd_extreme_comparisons)] pub fn start_secondary_cpus(primary_cpu_id: usize) { let mut logic_cpu_id = 0; for i in 0..SMP { - if i != primary_cpu_id { + if i != axhal::mp::cpu_hard_id_to_logic_id(primary_cpu_id) && logic_cpu_id < SMP - 1 { let stack_top = virt_to_phys(VirtAddr::from(unsafe { SECONDARY_BOOT_STACK[logic_cpu_id].as_ptr_range().end as usize })); diff --git a/platforms/aarch64-phytium-pi.toml b/platforms/aarch64-phytium-pi.toml new file mode 100644 index 0000000000..546d50e8d8 --- /dev/null +++ b/platforms/aarch64-phytium-pi.toml @@ -0,0 +1,80 @@ +# Architecture identifier. +arch = "aarch64" +# Platform identifier. +platform = "aarch64-phytium-pi" +# Platform family. +family = "aarch64-phytium-pi" + +# Base address of the whole physical memory. +phys-memory-base = "0x8000_0000" +# Size of the whole physical memory. +phys-memory-size = "0x8000_0000" # 2G +# Base physical address of the kernel image. +kernel-base-paddr = "0x9000_0000" +# Base virtual address of the kernel image. +kernel-base-vaddr = "0xffff_0000_9000_0000" +# Linear mapping offset, for quick conversions between physical and virtual +# addresses. +phys-virt-offset = "0xffff_0000_0000_0000" +# Kernel address space base. +kernel-aspace-base = "0xffff_0000_0000_0000" +# Kernel address space size. +kernel-aspace-size = "0x0000_ffff_ffff_f000" +# MMIO regions with format (`base_paddr`, `size`). +mmio-regions = [ + ["0x2800_C000", "0x1000"], # UART 0 + ["0x2800_D000", "0x1000"], # UART 1 + ["0x2800_E000", "0x1000"], # UART 2 + ["0x2800_F000", "0x1000"], # UART 3 + + ["0x3000_0000", "0x800_0000"], # other devices + ["0x4000_0000", "0x1000_0000"], # Pcie ecam + + ["0x58000000", "0x2800_0000"], # 32-bit MMIO space + + ["0x2801_4000", "0x2000"], # MIO0 - I2C + ["0x2801_6000", "0x2000"], # MIO1 - I2C + ["0x2801_8000", "0x2000"], # MIO2 - I2C + ["0x2801_A000", "0x2000"], # MIO3 - I2C + ["0x2801_C000", "0x2000"], # MIO4 - I2C + + ["0x000_2803_4000", "0x1000"], # GPIO0 + ["0x000_2803_5000", "0x1000"], # GPIO1 + ["0x000_2803_6000", "0x1000"], # GPIO2 + ["0x000_2803_7000", "0x1000"], # GPIO3 + ["0x000_2803_8000", "0x1000"], # GPIO4 + ["0x000_2803_9000", "0x1000"], # GPIO5 +] + +# UART Address +uart-paddr = "0x2800_D000" +# UART Irq num +uart-irq = "24" + +# MIO0 I2C +MIO0 = "0x2801_4000" + +# PSCI +psci-method = "smc" + +# GICC Address +gicc-paddr = "0xFF84_2000" +# GICD Address +gicd-paddr = "0xFF84_1000" + +# Base physical address of the PCIe ECAM space. +pci-ecam-base = "0x40000000" +# End PCI bus number. +pci-bus-end = "0x2" +# PCI device memory ranges. +pci-ranges = [ + ["0x0", "0x50000000"], # PIO space + ["0x58000000", "0x80000000"], # 32-bit MMIO space + ["0x6_0000_0000", "0x6_4000_0000"], # 64-but MMIO space +] + +# Number of CPUs +smp = "4" + +# CPU Hardware ID list +cpu-id-list = ["0x0", "0x100", "0x200", "0x201"]