Message ID | 20240617083639.379608-1-marcin.juszkiewicz@linaro.org |
---|---|
State | New |
Headers | show |
Series | [1/1] BootLogoLib: align logo coords to be even | expand |
On Mon, 17 Jun 2024 at 10:37, Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> wrote: > > If we draw logo at odd coords then BootLogoLib goes into exception and > boot process ends: > > Synchronous Exception at 0x00000101FB943E48 > PC 0x0101FB943E48 (0x0101FB93F000+0x00004E48) [ 0] QemuVideoDxe.dll > PC 0x0101FB943314 (0x0101FB93F000+0x00004314) [ 0] QemuVideoDxe.dll > PC 0x0101FB92F798 (0x0101FB92D000+0x00002798) [ 1] ConSplitterDxe.dll > PC 0x0101FBA96BC4 (0x0101FBA8E000+0x00008BC4) [ 2] BdsDxe.dll > PC 0x0101FF7FDF50 (0x0101FF7F3000+0x0000AF50) [ 3] DxeCore.dll > > This change resizes logo from 193x58 to 194x58px to make it's sizes > even. And if coords are odd then they are bumped a bit to make things > work. > > Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> This should be fixed in the SBSA firmware - unaligned accesses are fine on arm64 as long as they don't target device memory. So this likely implies that the framebuffer is mapped with device attributes while it should be mapped normal-non-cacheable. > --- > .../Library/BootLogoLib/BootLogoLib.c | 4 ++++ > MdeModulePkg/Logo/Logo.bmp | Bin 12446 -> 34010 bytes > 2 files changed, 4 insertions(+) > > diff --git a/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c b/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c > index 478ec2d40e2b..3b7b5f3146e8 100644 > --- a/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c > +++ b/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c > @@ -205,6 +205,10 @@ BootLogoEnableLogo ( > DestX += OffsetX; > DestY += OffsetY; > > + // align logo to even coords > + if (DestX % 2 != 0) DestX++; > + if (DestY % 2 != 0) DestY++; > + > if ((DestX >= 0) && (DestY >= 0)) { > if (GraphicsOutput != NULL) { > Status = GraphicsOutput->Blt ( > diff --git a/MdeModulePkg/Logo/Logo.bmp b/MdeModulePkg/Logo/Logo.bmp > index 3e85229e17595ba1f9c59e13692a4f8362ebc850..136345a56ac44e3ea8d3c91114b5a2676dc90e2a 100644 > GIT binary patch > literal 34010 > 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 > F{{z+$A|L<& > > literal 12446 > zcmeHMU5F!D6+ZQMQ-58RRHZ7Z$xXUa>FQLcQ|aldo@8dy&Z?;R;QAo!gNTUWq9BWc > zFusVQ4+<(i$Udzg?1O^rn;?Rqpn@O>3cf7*ATFZdips9*I<qq!Irmm2m2}VSPBSap > zIA3>9XKqy`_q*Tu&N=t?J0Jh{Wnh@f00{v66acORfB-5R|HPPIXAsy0SS%I*Pb}bF > zjsU;=^{?Q2-~1{(`<2hbaSh<PUoPM`KmQ3l_3mr%iywX;Ui|Z);E7=y-v9Llyzu+y > z;mP>~+$R_C*$=!2UU~T?`0;b!f$_}+eE4txPv3kBKJ)n7;mc2c2%h=EO?di83;5b6 > zKML>I0{HC<3;5ad3%L2+1^nRIZ^7L=ci<l{{uMs<%mQBc+X6oK!N=jnmlkmQ)-8DT > zm4Cr&w{OE2Kk@{;a%%xE|MTzgmp}diZhUD0CnqPcI5~lr{=I<r(JlDKr#}w=xxIkf > zcNTE>?p?U`>Z@?)F5b6*yC)0y)O&Bho!4H2#R-nxg%jld2#@dxkMIZ&1G%QnHLb<| > z0Xg@V05uFlH{_V6(hAdYni{ELM23;3{k<efX81juCDVs7qX);FP=eotk_>!X(==^9 > zpKEgs+(1zR1%HB|FR7}k>iDCp{m5d_Rm-xDhht}nH;IFk-k+C7MGh*85NNF>7zYkH > z=v&C4KtHk!%QB3S5~bF0e~L0Bj+4yBC5MCif98Xt6Q1!z<uh7D#OX68;GfAsR+LQ+ > z@>~njju(eUIFh3vb=}!eQf5;~6{C~;h9ZYj+RhC%1liJcL%9rz5&^iXtAjF@Q#Eva > zOIAT?`?_pE7>9iTHy-&BxUmdLI|V%s5?QiFev)f#NevxkCR^$#NL)2llH6VK(nz6$ > zcuEHaXU`DyEsUd5hq0T5x+&+L;)R}T>$Vm6$2Z(L07zOVmWgGib3OLkc{qZ(s`%3U > z21H&8kjuFYrZHFLj!I;6BxP<UYm#K@wgk}WSe=Gs>Y6GM*)iRQI|^G$><6~2DQ&|} > zY~2gvupLUaWJW6vb0X3*oYrGWM>B8~epqsdgD8@<wvuQKuQS(eOY!%nx)+9yq^WkC > zSspY(%}8yz0}V-5B<%pkwrYSc`!aY@Lk)AqvprjC#AevCWV6$dkRdp8C2KcSUyIeO > z9lN8@9;>ZR2wFRj>{&zhMsb*j(p=S66skI8XK*N#SdXP~OEyy1ZqHRu@l-D~^>%PP > zbv-#ANpm%KGs!gOp{>htsHIxy$NC&#>}hk|m-DufsamLvJe}rkIoCB=b3<GAbbwp| > zXeg#?%bIG3o<5h`p{**TJhtpWlT68WJvUZ5zHaOG-im}q>B<l5o@N?w5*r+XmJxLt > zvhDenZ@0(oxvdVTZVOUV*Nm3tyVN)1P_tFZYvpsh<H-PHI|T^!(Cai>typvYC|7kk > z&>E?4hHWk11L(+LnTBuYQU?@WvEyjus<vi@nk`E$d(?^(*=~%(xh*S%?>-nXmP$u# > zaKKoS8HtU&G?whf$kbCyO0B)fnK{vT=1g5LZ*(NP-*+II!^k%FW&p<t3}=1Z`;5J| > zuedr4XOIksGoDutz&Qp;j;Br^0DRl`6aeSO!2w)8c$>2au?q>li}N;^CXfsP2ce&U > z)L6;DbU;vXGnTjx2zf(?$dY7PO)V?6tm8e$!OZH+Qr%UPL}EEFf=I9K&j6s0rA4wT > zAAJg`s!Paa1<P2yUPtvpsRI@1h9BIZbi?V~ni@vR3*GUstZ=jAekEuBFVUi6hB{<o > zh8!9NS`BcKf{ek$bYPX5p&y|D><8;~$-!~ntUCRWaJhnq^p+0~p&tZ+&%Og}^W4xy > zgf5hAo+ViuQTkRx&e}YN7KFUb3$WLNGI+2;AHUV6y@q_*<h7P<9!scDZSxq1ev%~1 > z$}&unqSYQo<0zT|z%ZGO`*47bIR6N2%S)T@MdN6UIkt+UUBrHM2(BIO?(QC5Eyk`M > z?(dhc5&NeffNGnEHeTU02gx)|rTjcOGqC}JnPO*zP_Lu*8>Xp^!D(b>hu<Zep2>5d > z!R{hvu9wdPT<vW&1w?&NyHXDC*S6|7G`Y0PhI;j;&@C@QZP3K4&8^;Y2$9cMLR8vq > z<qQrgp(H3D4hRt~07oMfcOQgg$OY@MM@UhCWI_pR&Gd}jLMWl_LL=x+7y+EHAWVvR > z?k)#~CYxtX5QK8V``hIcg0NlA15s(WH+5LGsyd4$iHa2tlx7xyOhjttveFg_mU{_% > z3PNK32{I80>Y!$n5<3qXA`wZ<y;ZB@-0PFc1Xot5vxy#}F!inN0sD<ZHKD%bz$i?% > z2aIQxgnv&RN>3v=2U6jn5ah5oCp2U6VYQHr!8sH<C`3dZ`W_LfG6Oh}Y$6i2q3I%p > zdTn?A=xB%0sqX;5won%)_~H=fJGl;UX{7^7Qm^6a)R1<m4(hPt(14IN796KJsHb(9 > zX@q(XTlFXtDK_<En^twejSmq?&Xtiek=kf;T+6M}%saU3TL4#@f>7r^U^n#Ebl4IE > z;SzrvWH#V05tUd%KNP*TtjJJ_r9uZ<@dMWZMnt4-%RrqvWRrtJD8^DwSdcNql!_5R > z57+dN4*@V$>RmQk%o2J+9ph!?2aK~x@x--SclXM*<>M6&Ob12+|9L|?fRquD60bE1 > z^fsZ{x(-DwH3;#_T^IUCg6f(w4A>f966yjA7690(v!!17p^Ns}9^lttu)RGfZ$uqd > zX{oW&fpJ)Qn(MF@ON9;~**xW-r3)Q4Jl$^*y5!(8O)zK#jQbM3L2c&>h6wjI0PL0= > z%E;eYB_)Q*W97r^I^4fLoXG)Zs^9Q3N^vh$`l0kRWw~`-2TCQj$jwzKmB27Bmlvlz > zsKycsgW$jFRX^Mt2h$bUU1#}WY)R4#`ol;KZOUWGBh=<apvbK`j~|AZiedy^p^hHj > z1iGZmnP`N<58NW?hi0$W?RC3dBwOAH06J^&I3UFa4|_bxl5T8%!nzJceF!s=6t&kU > zBG0XqihQG(^W3Tvk&O7eshLPx+|p-ocnm|Hhu9G&t}f3@P43=-P%j;i_NnAnIlyx~ > z?DYbLr6Qdl=c(m+*9vQ~RB*5|LQQE3(AP7OddI9jh}6>^ICeA2qU(lDMVcD`LmWZM > zUCc3MW~~6%x7oV}&}F$7czqDIdc8r7oBGlbzz!=OmB-kw8G-4vTGmc;SgX^ervpN% > zsI^*lMtKz&+muq0d73R!%Ikuf5s{c$3%RgLkA^K4d<{of1BB)ltKIAd3@L^Qv%DZQ > zClgl0s~G{yT8Y=;pi)XV`z4t9lpWV%+oWN&8{33>tUscZ%y~{#?ea`l<V_>awRA7y > z(sr$Tgl#EC2?wj!$f3?%j0LZ-b=gdnSeCWTHt!4_s=Y?oYQ?-Km3%uhv&_^&b_$Sm > zTCGqT@ey9a0g|whWm)F=#hC!6{U-i}mjiQ7ldbIa-k@2p*XxrWQUa)LO$ObGP_Ga0 > z^3ElGv9_MmDmuJ=ELH0C8pf$%l>KOdsgbT9Y)lPfHE^X_&5kUDmH~ckXJ=>Gi*xL* > z26lIL)(HS`KNKCt+LocBgM<5*$kC}td?$)<&jYHW$Yt?82YMJ5lkVYlfTJ#R!D^TA > zz<47%C|PEjnTh8gnaP3s2YTPbqSpcMy_;JD-b$~z<3Uk5MY?A!`P{Vx6HWo-fcuB@ > zW3>lb_SEM^MTdLFl46>kXL_gr`{kJ??lak5^!&KmV_O}}GTTMNeNNy}Mqvj9s%>7y > z54iu|0Nd|ZZaE+JcY3v6Z)MnXVoitp*SNPVru`Mx|8sFLHVphLEq+yxk}njB<7<Ws > zHSr1<hk{6D_(H+p60pPg3pMcyxCAL9Q5n8aSn7~k7nVa|g$wQJLI?JzsS6cA6)+vR > n9WE>fgDJoxszU8T0cT%$;=<<Er5~(|8%t|F-y=N2|1<sze|om+ > > -- > 2.45.1 >
W dniu 17.06.2024 o 10:39, Ard Biesheuvel pisze: >> If we draw logo at odd coords then BootLogoLib goes into exception and >> boot process ends: >> >> Synchronous Exception at 0x00000101FB943E48 >> PC 0x0101FB943E48 (0x0101FB93F000+0x00004E48) [ 0] QemuVideoDxe.dll >> PC 0x0101FB943314 (0x0101FB93F000+0x00004314) [ 0] QemuVideoDxe.dll >> PC 0x0101FB92F798 (0x0101FB92D000+0x00002798) [ 1] ConSplitterDxe.dll >> PC 0x0101FBA96BC4 (0x0101FBA8E000+0x00008BC4) [ 2] BdsDxe.dll >> PC 0x0101FF7FDF50 (0x0101FF7F3000+0x0000AF50) [ 3] DxeCore.dll >> >> This change resizes logo from 193x58 to 194x58px to make it's sizes >> even. And if coords are odd then they are bumped a bit to make things >> work. >> >> Signed-off-by: Marcin Juszkiewicz<marcin.juszkiewicz@linaro.org> > This should be fixed in the SBSA firmware One coffee was not enough so I sent it to QEMU devel instead of EDK2 devel mailing list... > unaligned accesses are fine on arm64 as long as they don't target > device memory. So this likely implies that the framebuffer is > mapped with device attributes while it should be mapped > normal-non-cacheable. OK, so need to go through QEMU source now.
diff --git a/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c b/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c index 478ec2d40e2b..3b7b5f3146e8 100644 --- a/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c +++ b/MdeModulePkg/Library/BootLogoLib/BootLogoLib.c @@ -205,6 +205,10 @@ BootLogoEnableLogo ( DestX += OffsetX; DestY += OffsetY; + // align logo to even coords + if (DestX % 2 != 0) DestX++; + if (DestY % 2 != 0) DestY++; + if ((DestX >= 0) && (DestY >= 0)) { if (GraphicsOutput != NULL) { Status = GraphicsOutput->Blt (
If we draw logo at odd coords then BootLogoLib goes into exception and boot process ends: Synchronous Exception at 0x00000101FB943E48 PC 0x0101FB943E48 (0x0101FB93F000+0x00004E48) [ 0] QemuVideoDxe.dll PC 0x0101FB943314 (0x0101FB93F000+0x00004314) [ 0] QemuVideoDxe.dll PC 0x0101FB92F798 (0x0101FB92D000+0x00002798) [ 1] ConSplitterDxe.dll PC 0x0101FBA96BC4 (0x0101FBA8E000+0x00008BC4) [ 2] BdsDxe.dll PC 0x0101FF7FDF50 (0x0101FF7F3000+0x0000AF50) [ 3] DxeCore.dll This change resizes logo from 193x58 to 194x58px to make it's sizes even. And if coords are odd then they are bumped a bit to make things work. Signed-off-by: Marcin Juszkiewicz <marcin.juszkiewicz@linaro.org> --- .../Library/BootLogoLib/BootLogoLib.c | 4 ++++ MdeModulePkg/Logo/Logo.bmp | Bin 12446 -> 34010 bytes 2 files changed, 4 insertions(+) diff --git a/MdeModulePkg/Logo/Logo.bmp b/MdeModulePkg/Logo/Logo.bmp index 3e85229e17595ba1f9c59e13692a4f8362ebc850..136345a56ac44e3ea8d3c91114b5a2676dc90e2a 100644 GIT binary patch literal 34010 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 F{{z+$A|L<& literal 12446 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