On 01/26/16 10:40, Leif Lindholm wrote:
> On Tue, Jan 26, 2016 at 09:12:39AM +0000, Ryan Harkin wrote:
>>> However there seems to be
>>> some interference from "ArmPlatformPkg/Library/PlatformIntelBdsLib" that
>>> is supposed to connect PcdDefaultConInPaths and PcdDefaultConOutPaths.
>>> In order to experiment with F9, Roy massaged the last node of the
>>> terminal device path (for controlling the parsing of the escape
>>> sequences). But, some of those cases proved untestable.
>>>
>>> Unfortunately, I can't really help with
>>> "ArmPlatformPkg/Library/PlatformIntelBdsLib". ArmVirtPkg used that
>>> library instance as well originally, but I practically rewrote it
>>> separately for ArmVirtPkg, in SVN r16923 and r16924. Since then, the two
>>> instances have lived separate lives.
>>
>> Is this wise?  It looks like BDS history repeating itself :-/
> 
> Well, medium-term, I'd (optimally) like to see ArmVirtPkg split and go
> into OvmfPkg one end and ArmPkg the other.
> 
> But when Laszlo started out with ArmVirtPkg (before it indeed _was_
> ArmVirtPkg), he felt the need to make substantial changes to
> PlatformIntelBdsLib, and opted to do it separately.
> We should probably take some time to look into what different needs we
> may actually have on physical rather than virtual platforms, and how
> we can go back to sharing the majority of the code.

** The main goals with the divergence visible in console setup were:

- cut any ties with the ARM BDS

  (because, ArmPlatformPkg/Library/PlatformIntelBdsLib, despite being
  an instance of PlatformBdsLib, to be plugged into the Intel BDS
  driver, still uses ARM BDS related PCDs)

- make console detection dynamic

  (think USB keyboards, and VGA cards at non-fixed PCI addresses)

IIRC, I had also experienced issues with
"ArmPlatformPkg/Library/PlatformIntelBdsLib" whenever a virtual machine
would start up with a brand new (= empty) variable store. For a physical
host this practically never happens, for a virtual machine, it can
frequently happen (you lose the varstore file or decide to delete &
recreate it from scratch). I vaguely recall that in such cases the
serial console wouldn't work at the first startup. (By now I'm fuzzy on
this, sorry.)

Another example for the obscure console problems can be seen in SVN
r16912 (that patch predates the rewrite).

The mailing list thread can be found at

http://thread.gmane.org/gmane.comp.bios.tianocore.devel/12954

I do believe my "going separate ways" was justified. At that time
ArmPlatformPkg had no PCI support at all, but ArmVirtualizationPkg did.
Both the VGA and USB controllers (all types of them), emulated by QEMU,
were PCI-based. So dynamic console detection made no sense for FVP,
Foundation, let alone the physical ARM machines, that ArmPlatformPkg
targeted at the time.

... The device path of the serial console would not become dynamic; it
remained build-time static. I modified how it was represented though.
First, the ARM-related textual PCDs with the device path(s) in them were
an ARM BDS vestige. (See the first goal above.) Second, they are brittle
to configure for the end user; do we really want to construct
VenMsg(guid)-like strings manually? Typos are the norm, not the
exception. Third, parsing them into binary form in the code is a chore.
Because, do you do if there is indeed a typo and parsing fails?

I stand by my idea (of patch #3 in the above-linked series) to encode
the device path of the serial console with a fixed binary structure in
the code.

Later we would customize this for TTYTERM with SVN r17898. That would
still not require the user to edit device paths, just to pass a build
option.

Finally, the rewrite gave the virt PlatformBdsLib a much-needed
structural cleanup (in my opinion anyway). It is now as minimal as
possible, and every line in there comes with its own justification.
Which is not something I thought of the pre-rewrite code.


** Further features that only make sense for virtual machines (not an
exhaustive list, just what I can think of now immediately):

- direct kernel boot from QEMU's fw_cfg interface
  (see TryRunningQemuKernel() / "QemuKernel.c" / SVN r16578)

- controlling UEFI boot order from the QEMU command line
  (see SVN r16576, and the patches leading up to it)

... In fact, these last two features were implemented in one series,
chronologically *first*, and ultimately they are *the* reason for
splitting away from ArmPlatformPkg:

http://thread.gmane.org/gmane.comp.bios.tianocore.devel/11743/focus=11746


** Note that Ard and myself have not neglected keeping ArmPlatformPkg's
and ArmVirtPkg's PlatformBdsLibs in sync, whenever it made sense. (For
one, the Xen build of ArmVirtPkg still uses ArmPlatformPkg's
PlatformBdsLib!) For example, compare:

- SVN r17713
  ArmVirtPkg: signal EndOxDxe event in PlatformBsdInit

- SVN r18394
  ArmPlatformPkg: signal EndOfDxe event in PlatformBsdInit

  see also the discussion:
  http://thread.gmane.org/gmane.comp.bios.edk2.devel/1849/focus=1916


** As for splitting up ArmVirtPkg and distributing it between
ArmPlatformPkg and OvmfPkg -- I think ArmVirtPkg is already as minimal
as possible. It pulls in a large number of libraries and drivers from
both ArmPlatformPkg and OvmfPkg. Speaking of the QEMU build, it only has
three drivers of its own (HighMemDxe, PciHostBridgeDxe, VirtFdtDxe). It
does customize a larger number of library instances, but library
instances are meant just for that.

I'm not opposing this on principle, mind you, but I've been pretty
pleased with the current structure, so I'll have to see concrete ideas
to set my mind to a different track. :)

Thanks!
Laszlo

> 
> /
>     Leif
> 

_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to