On 9 February 2016 at 20:23, Ryan Harkin <ryan.har...@linaro.org> wrote:
> Add a PCD for the link negotiation timeout so the platform can over-ride
> the default value.
>
> The code previously did 2000 iterations of the loop with a 2us stall, so
> the code has been changed subtly to set the number of iterations equal
> to the PCD value divided by the stall time.
>
> Since the stall time has not changed, the default PCD value is set at
> 4000 so the original behaviour is not changed.
>
> The problems were discovered when the ARM Juno Development Platform used
> 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.
>
> The default PCD value does not work for Juno.  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 <ryan.har...@linaro.org>

Reviewed-by: Ard Biesheuvel <ard.biesheu...@linaro.org>

> ---
>  EmbeddedPkg/EmbeddedPkg.dec                     | 1 +
>  EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.inf   | 1 +
>  EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c | 2 +-
>  3 files changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/EmbeddedPkg/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
> index f557527..cd0d96f 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|4000|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/Lan9118DxeUtil.c 
> b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c
> index 2ef1ecb..c57c7ce 100644
> --- a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c
> +++ b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118DxeUtil.c
> @@ -586,7 +586,7 @@ AutoNegotiate (
>    // Check that link is up first
>    if ((PhyStatus & PHYSTS_LINK_STS) == 0) {
>      // Wait until it is up or until Time Out
> -    TimeOut = 2000;
> +    TimeOut = FixedPcdGet32 (PcdLan9118DefaultNegotiationTimeout) / 
> LAN9118_STALL;
>      while ((IndirectPHYRead32 (PHY_INDEX_BASIC_STATUS) & PHYSTS_LINK_STS) == 
> 0) {
>        MemoryFence();
>        gBS->Stall (LAN9118_STALL);
> --
> 2.1.4
>
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.01.org
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to