On 8 February 2016 at 19:36, Laszlo Ersek <[email protected]> wrote:
> 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. :)
>

Again!?!?  At least this time it was a typo rather than me actually
not knowing how to spell it.  Not that it helps.

> (Thanks for the credit though :))
>

Thanks for the idea!


> (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.
>

Of course, that makes sense.  Even more so as I've been trying to get
TC2 (32-bit) working without any luck.  It's a different problem in
TC2, mind you.


> (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.
>

Yeah, I thought I'd tune down it a bit before submitting a Juno patch
to OpenPlatformPkg.

I'll change the commit message to be more vague when I submit v2.


> Thanks!
> Laszlo "sneaky name" Ersek

Thanks,
Ryan "gammy hands" Harkin
_______________________________________________
edk2-devel mailing list
[email protected]
https://lists.01.org/mailman/listinfo/edk2-devel

Reply via email to