On 9 February 2016 at 12:41, Ryan Harkin <[email protected]> wrote:
> Add a PCD for the link negotiation timeout so the platform can over-ride
> the default value.
>
> When the ARM Juno Development Platform uses the "EFI Network" option
> with then LAN9118 driver, it 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 errors]
>
> Discussion on the edk2-devel mailing list [1] prompted Laszlo Ersek to
> suggest the time taken for the NIC to negotiate was causing a problem.
> He suggested the solution contained in this patch to provide a PCD
> configurable by the platform.
>
> Setting the PCD to a larger value works for Juno R0, R1 and R2.
>
> [1] http://article.gmane.org/gmane.comp.bios.edk2.devel/7341
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Ryan Harkin <[email protected]>

Reviewed-by: Ard Biesheuvel <[email protected]>

> ---
>  EmbeddedPkg/EmbeddedPkg.dec                     | 1 +
>  EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.inf   | 1 +
>  EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h     | 2 --
>  EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c | 2 +-
>  4 files changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
> index f557527..2ede469 100644
> --- a/EmbeddedPkg/EmbeddedPkg.dec
> +++ b/EmbeddedPkg/EmbeddedPkg.dec
> @@ -145,6 +145,7 @@ [PcdsFixedAtBuild.common]
>    # LAN9118 Ethernet Driver PCDs
>    gEmbeddedTokenSpaceGuid.PcdLan9118DxeBaseAddress|0x0|UINT32|0x00000025
>    gEmbeddedTokenSpaceGuid.PcdLan9118DefaultMacAddress|0x0|UINT64|0x00000026
> +  
> gEmbeddedTokenSpaceGuid.PcdLan9118DefaultNegotiationTimeout|2|UINT32|0x00000027
>
>    #
>    # Android FastBoot
> diff --git a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.inf 
> b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.inf
> index 9e5f98b..3c2246f 100644
> --- a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.inf
> +++ b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.inf
> @@ -51,6 +51,7 @@ [Protocols]
>  [FixedPcd]
>    gEmbeddedTokenSpaceGuid.PcdLan9118DxeBaseAddress
>    gEmbeddedTokenSpaceGuid.PcdLan9118DefaultMacAddress
> +  gEmbeddedTokenSpaceGuid.PcdLan9118DefaultNegotiationTimeout
>
>  [Depex]
>    TRUE
> diff --git a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h 
> b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h
> index cc883e8..4d73f40 100644
> --- a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h
> +++ b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h
> @@ -38,8 +38,6 @@
>  #include "Lan9118DxeUtil.h"
>  #include "Lan9118DxeHw.h"
>
> -#define LAN9118_STALL     2
> -
>  #define LAN9118_DEFAULT_MAC_ADDRL     0x00F70200
>  #define LAN9118_DEFAULT_MAC_ADDRH     0x00009040
>
> diff --git a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c 
> b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c
> index 8398c10..66d2b4b 100644
> --- a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c
> +++ b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c
> @@ -586,7 +586,7 @@ AutoNegotiate (
>      TimeOut = 2000;
>      while ((IndirectPHYRead32 (PHY_INDEX_BASIC_STATUS) & PHYSTS_LINK_STS) == 
> 0) {
>        MemoryFence();
> -      gBS->Stall (LAN9118_STALL);
> +      gBS->Stall ( FixedPcdGet32 (PcdLan9118DefaultNegotiationTimeout) );
>        TimeOut--;
>        if (!TimeOut) {
>          DEBUG ((EFI_D_ERROR, "Link timeout in auto-negotiation.\n"));
> --
> 2.1.4
>
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to