Date: Fri, 13 Sep 2019 23:48:36 +0200 From: Heinrich Schuchardt <xypron.glpk@gmx.de> To: Emmanuel Vadot <manu@freebsd.org> Cc: Emmanuel Vadot <manu@bidouilliste.com>, Alexander Graf <agraf@csgraf.de>, U-Boot Mailing List <u-boot@lists.denx.de>, freebsd-bugs@freebsd.org, Alexander Graf <agraf@csgraf.de>, AKASHI Takahiro <takahiro.akashi@linaro.org> Subject: [BUG] FreeBSD cannot boot with U-Boot patch efi_loader: parameter checks BLOCK_IO_PROTOCOL Message-ID: <c588c5f7-bce2-bad0-44a0-c2a90498a920@gmx.de>
next in thread | raw e-mail | index | archive | help
Hello Emmanuel, booting current FreeBSD fails since patch f59f0825e8b9fdeb8abe43ffd10c5119ca1a032f efi_loader: parameter checks BLOCK_IO_PROTOCOL The reason is that the buffer used by FreeBSD to read is not block aligned= . The UEFI spec requires that EFI_BLOCK_IO_PROTOCOL.ReadBlocks() returns EFI_INVALID_PARAMETER if the buffer is not properly aligned (i.e. is not a multiple of EFI_BLOCK_IO_MEDIA.IoAlign) FreeBSD does not guarantee this alignment, e.g. efi_disk_read_blocks() is called with buffer 00000000995b08d0 which is not aligned to a multiple of 512. FreeBSD function efipart_readwrite writes this error message: efipart_readwrite: rw=3D1, blk=3D62333952 size=3D1 status=3D2 The problem can be traced back to the FreeBSD line: stand/efi/libefi/efipart.c(1043) efipart_realstrategy(): blkbuf =3D malloc(blkio->Media->BlockSize); U-Boot does not yet implement the EFI_DISK_IO_PROTOCOL which is a wrapper for the EFI_BLOCK_IO_PROTOCOL allowing unaligned access. malloc() could be replaced in FreeBSD by AllocatePages() which returns a 4096 byte aligned memory block. Best regards Heinrich
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?c588c5f7-bce2-bad0-44a0-c2a90498a920>