On 02/08/16 18:59, Ryan Harkin wrote:
> Add a PCD for the default 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 Laszo 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 2000 seems to work 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]>
> ---
>  EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h   | 2 +-
>  EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.inf | 1 +
>  EmbeddedPkg/EmbeddedPkg.dec                   | 1 +
>  3 files changed, 3 insertions(+), 1 deletion(-)
> 
> diff --git a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h 
> b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h
> index cc883e8..e5318da 100644
> --- a/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h
> +++ b/EmbeddedPkg/Drivers/Lan9118Dxe/Lan9118Dxe.h
> @@ -38,7 +38,7 @@
>  #include "Lan9118DxeUtil.h"
>  #include "Lan9118DxeHw.h"
>  
> -#define LAN9118_STALL     2
> +#define LAN9118_STALL     (FixedPcdGet64 
> (PcdLan9118DefaultNegotiationTimeout))
>  
>  #define LAN9118_DEFAULT_MAC_ADDRL     0x00F70200
>  #define LAN9118_DEFAULT_MAC_ADDRH     0x00009040
> 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/EmbeddedPkg.dec b/EmbeddedPkg/EmbeddedPkg.dec
> index f557527..338bdd0 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|UINT64|0x00000027
>  
>    #
>    # Android FastBoot
> 

(1) There's a serious problem with this patch.

You made a typo in my name. :)

(Thanks for the credit though :))

(2) I noticed LAN9118_STALL is used in a bunch of places in this driver.
Since those all use the same macro, I think it makes sense to set the
macro from a PCD for all of them too. So that's good.

(3) gBS->Stall() takes a UINTN. I propose to make the PCD UINT32, in
order to match 32-bit builds better.

(4) 2000 looks like a pretty big value, which may not be appropriate for
all uses of LAN9118_STALL. OTOH that value is only mentioned in the
commit message, it's not a code change. So that's fine too I think.

Thanks!
Laszlo "sneaky name" Ersek

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

Reply via email to