On 08/04/15 14:40, Ard Biesheuvel wrote:
ARM BDS support in ArmVirtQemu has been broken since SVN r17969
(ArmPkg/BdsLib: Remove Linux loader from BdsLib) dated July 14th.
Instead of fixing this, let's get rid of the ARM BDS and LinuxLoader
altogether: they violate both the UEFI spec and the arm64 Linux boot
protocol, and lack the level of integration with the QEMU command
line that the Intel BDS has when running under ArmVirtPkg or OvmfPkg.
Contributed-under: TianoCore Contribution Agreement 1.0
Signed-off-by: Ard Biesheuvel ard.biesheu...@linaro.org
---
Note that this supersedes 'ArmVirtPkg: align ARM BDS build with LinuxLoader
changes' that I sent out earlier today. After having discussed the matter on
IRC (#linaro-enterprise) with leiflindholm and lersek, it turns out we all
agree that the best course of action is to drop the ARM BDS entirely.
ArmVirtPkg/ArmVirtQemu.dsc | 17 +
ArmVirtPkg/ArmVirtQemu.fdf | 6 --
2 files changed, 1 insertion(+), 22 deletions(-)
diff --git a/ArmVirtPkg/ArmVirtQemu.dsc b/ArmVirtPkg/ArmVirtQemu.dsc
index c199cac72cfd..528d13e6aece 100644
--- a/ArmVirtPkg/ArmVirtQemu.dsc
+++ b/ArmVirtPkg/ArmVirtQemu.dsc
@@ -57,13 +57,11 @@ [LibraryClasses.common]
TimerLib|ArmPkg/Library/ArmArchTimerLib/ArmArchTimerLib.inf
NorFlashPlatformLib|ArmVirtPkg/Library/NorFlashQemuLib/NorFlashQemuLib.inf
-!if $(INTEL_BDS) == TRUE
CapsuleLib|MdeModulePkg/Library/DxeCapsuleLibNull/DxeCapsuleLibNull.inf
GenericBdsLib|IntelFrameworkModulePkg/Library/GenericBdsLib/GenericBdsLib.inf
PlatformBdsLib|ArmVirtPkg/Library/PlatformIntelBdsLib/PlatformIntelBdsLib.inf
CustomizedDisplayLib|MdeModulePkg/Library/CustomizedDisplayLib/CustomizedDisplayLib.inf
QemuBootOrderLib|OvmfPkg/Library/QemuBootOrderLib/QemuBootOrderLib.inf
-!endif
[LibraryClasses.common.UEFI_DRIVER]
UefiScsiLib|MdePkg/Library/UefiScsiLib/UefiScsiLib.inf
@@ -128,14 +126,7 @@ [PcdsFixedAtBuild.common]
gEfiMdePkgTokenSpaceGuid.PcdUartDefaultBaudRate|38400
#
- # ARM OS Loader
- #
- gArmPlatformTokenSpaceGuid.PcdDefaultBootDescription|LLinux (EFI stub) on
virtio31:hd0:part0
-
gArmPlatformTokenSpaceGuid.PcdDefaultBootDevicePath|LVenHw(837DCA9E-E874-4D82-B29A-23FE0E23D1E2,003E000A)/HD(1,MBR,0x,0x3F,0x19FC0)/Image
- gArmPlatformTokenSpaceGuid.PcdDefaultBootArgument|root=/dev/vda2
console=ttyAMA0 earlycon uefi_debug
-
- #
- # Settings for ARM BDS -- use the serial console (ConIn ConOut).
+ # Settings for BDS -- use the serial console (ConIn ConOut).
#
!if $(TTY_TERMINAL) == TRUE
gArmPlatformTokenSpaceGuid.PcdDefaultConOutPaths|LVenHw(D3987D4B-971A-435F-8CAF-4967EB627241)/Uart(38400,8,N,1)/VenMsg(7D916D80-5BB1-458C-A48F-E25FDD51EF94)
The patch is good, but incomplete. You should remove more PCDs.
I built ArmVirtQemu.dsc with and without INTEL_BDS. I instructed the
build utility to write a report file for both builds, and then diffed
the report files (the section entitled Platform Configuration Database
Report). Clearly the token space that we care about now is
gArmPlatformTokenSpaceGuid and gArmTokenSpaceGuid.
The build report classifies the PCD settings that are not just plainly
inherited from whichever .dec file:
*P - Platform scoped PCD override in DSC file
*F - Platform scoped PCD override in FDF file
*M - Module scoped PCD override
So we are looking for differences where a *P, *F, or *M disappears, from
under the above two token spaces. (Disappearances of PCDs that we just
used to inherit need no action.)
... Except when the explicit setting we have under ArmVirtPkg matches
the default value from the .dec, because then *P is not added. So we do
have to look at *all* differences in these two token spaces, and
cross-ref them individually against our files.
For gArmPlatformTokenSpaceGuid, this means:
- PcdBdsLinuxSupport
- PcdFirmwareVendor
- PcdDefaultBootDescription
- PcdDefaultBootDevicePath
- PcdDefaultBootArgument
- PcdDefaultConInPaths
- PcdDefaultConOutPaths
For gArmTokenSpaceGuid:
- PcdMaxTftpFileSize
Matches:
ArmVirtPkg/ArmVirt.dsc.inc:282:
gArmPlatformTokenSpaceGuid.PcdFirmwareVendor|ARM Virtualization Platform
ArmVirtPkg/ArmVirtQemu.dsc:102:
gArmPlatformTokenSpaceGuid.PcdFirmwareVendor|QEMU
ArmVirtPkg/ArmVirtQemu.dsc:133:
gArmPlatformTokenSpaceGuid.PcdDefaultBootDescription|LLinux (EFI stub) on
virtio31:hd0:part0
ArmVirtPkg/ArmVirtQemu.dsc:134:
gArmPlatformTokenSpaceGuid.PcdDefaultBootDevicePath|LVenHw(837DCA9E-E874-4D82-B29A-23FE0E23D1E2,003E000A)/HD(1,MBR,0x,0x3F,0x19FC0)/Image
ArmVirtPkg/ArmVirtQemu.dsc:135:
gArmPlatformTokenSpaceGuid.PcdDefaultBootArgument|root=/dev/vda2
console=ttyAMA0 earlycon uefi_debug
ArmVirtPkg/ArmVirtQemu.dsc:141:
gArmPlatformTokenSpaceGuid.PcdDefaultConOutPaths|LVenHw(D3987D4B-971A-435F-8CAF-4967EB627241)/Uart(38400,8,N,1)/VenMsg(7D916D80-5BB1-458C-A48F-E25FDD51EF94)
ArmVirtPkg/ArmVirtQemu.dsc:142: