Hello all,

I'm having a problem that is platform specific, but perhaps more of a
generic problem.

When ARM's Juno board boots, not all devices are connected.  The first
boot creates the boot variables and sets their order, meaning that we
get the following list on the first attempt:

  EFI Misc Device
  EFI Misc Device 1
  EFI Internal Shell

Intel BDS then attempts to boot from one of the devices and ends up in
Shell.  After exiting Shell, the Intel BDS console GUI comes up.
Selecting the Boot Manager option shows more devices being connected
and the list becomes longer:

   EFI Misc Device
   EFI Misc Device 1
   EFI Internal Shell
   EFI Hard Drive
   EFI Network

Subsequent boots will never attempt to boot from Hard Drive or Network
because Shell will always succeed.  That is not good.

Leif has a patch in his working tree that solves this problem [1] by
making the platform call BdsLibConnectAll() at init time.  So now, the
first time boot order looks sane:

   EFI Misc Device
   EFI Misc Device 1
   EFI Hard Drive
   EFI Network
   EFI Internal Shell

However, then the board is booting, the "EFI Network" fails to boot
the first time and so the board drops back to Shell again:

  Warning: LAN9118 Driver in stopped state
  Link timeout in auto-negotiation.
  Lan9118: Auto Negociation not supported.
  EhcExecTransfer: transfer failed with 2
  EhcControlTransfer: error - Device Error, transfer - 2
  Buffer: EFI Hard Drive
  Booting EFI Misc Device
  Booting EFI Misc Device 1
  Booting EFI Hard Drive
  Booting EFI Network
  Warning: LAN9118 Driver not initialized
  Link timeout in auto-negotiation.
  Lan9118: Auto Negociation not supported.
  Booting EFI Internal Shell

Exiting Shell drops the user back to the Intel BDS UI.  Selecting
"Continue" then succeeds in booting from the EFI Network:

  Booting EFI Misc Device
  Booting EFI Misc Device 1
  Booting EFI Hard Drive
  Booting EFI Network
  ..MnpFreeTxBuf: Duplicated recycle report from SNP.
  MnpFreeTxBuf: Duplicated recycle report from SNP.
  [snip repeated SNP errors]

If I duplicate the call to BdsLibConnectAll() [2], then boot works as
expected.  On first boot, the boot order is created correctly and EFI
Network pulls down a file and boots it.

I'm assuming that the 2nd call is connecting things that didn't
connect the first time.  And from that, I suspect/guess that perhaps
they didn't connect due to either ordering or timing.

Is there a recommended way to set the order things are connected?  Is
it even possible to specify dependencies or order? And if so, how do
we work out what the order should be?

Regards,
Ryan.

[1] 
https://git.linaro.org/uefi/linaro-edk2.git/commitdiff/bfbd0ef1a182e1baa120f66ad2c6838ef48ff48c
[2] 
https://git.linaro.org/landing-teams/working/arm/edk2.git/commitdiff/25320ba4e447a843daaf7c603ec87afae3c2a120
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to