public inbox for devel@edk2.groups.io
 help / color / mirror / Atom feed
From: Daniil Egranov <daniil.egranov@arm.com>
To: Leif Lindholm <leif.lindholm@linaro.org>,
	Ryan Harkin <ryan.harkin@linaro.org>
Cc: "edk2-devel@lists.01.org" <edk2-devel@lists.01.org>
Subject: Re: [PATCH] ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe: Fixed crash on Juno R0
Date: Thu, 19 Jan 2017 19:34:58 -0600	[thread overview]
Message-ID: <bc6316d9-81ce-9de6-6794-4d9313d2f285@arm.com> (raw)
In-Reply-To: <20170119151307.GZ25883@bivouac.eciton.net>

Hi Leif, Ryan


On 01/19/2017 09:13 AM, Leif Lindholm wrote:
> On Thu, Jan 19, 2017 at 01:49:04PM +0000, Ryan Harkin wrote:
>> On 18 January 2017 at 23:27, Daniil Egranov <daniil.egranov@arm.com> wrote:
>>> The Marvell Yukon MAC address load supported only on Juno R1 and R2.
>>> It disabled for Juno R0 due to PCI issues on this board.
>>>
>>> Contributed-under: TianoCore Contribution Agreement 1.0
>>> Signed-off-by: Daniil Egranov <daniil.egranov@arm.com>
>> Tested-by: Ryan Harkin <ryan.harkin@linaro.org>
>>
>>> ---
>>>   ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c | 9 +++++++--
>>>   1 file changed, 7 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c
>>> index 47ff587..e9e6990 100644
>>> --- a/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c
>>> +++ b/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c
>>> @@ -378,6 +378,7 @@ OnEndOfDxe (
>>>     EFI_DEVICE_PATH_PROTOCOL* PciRootComplexDevicePath;
>>>     EFI_HANDLE                Handle;
>>>     EFI_STATUS                Status;
>>> +  UINT32                    JunoRevision;
>>>
>>>     //
>>>     // PCI Root Complex initialization
>>> @@ -393,8 +394,12 @@ OnEndOfDxe (
>>>     Status = gBS->ConnectController (Handle, NULL, PciRootComplexDevicePath, FALSE);
>>>     ASSERT_EFI_ERROR (Status);
>>>
>>> -  Status = ArmJunoSetNicMacAddress ();
>>> -  ASSERT_EFI_ERROR (Status);
>>> +  GetJunoRevision (JunoRevision);
>>> +
>>> +  if (JunoRevision != JUNO_REVISION_R0) {
>>> +    Status = ArmJunoSetNicMacAddress ();
>>> +    ASSERT_EFI_ERROR (Status);
>> This is just an FYI, but I stacked your patch on top of mainline, like this:
>>
>> 5f81f61  2017-01-18  ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe:
>> Fixed crash on Juno R0       [Daniil Egranov]
>> 19ca06b  2017-01-19  OvmfPkg: Remove superfluous return statements.
>>   [Thomas Huth]
>>
>> The first time I ran this, Juno R0 worked fine, but on R1 and R2, the
>> assert triggered:
>>
>> UEFI firmware (version 5f81f61 built at 11:56:52 on Jan 19 2017)
>> [snip]
>> ASSERT_EFI_ERROR (Status = Not Found)
>> ASSERT [ArmJunoDxe]
>> /linaro/platforms/uefi/edk2/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c(401):
>> !EFI_ERROR (Status)
>>
>> I worked out what is happening. And it's not to do with this patch.
>> It's another fall-out from the re-work you did to the previous patch.
>> It's also ultimately due to a bug the firmware.
>>
>> With the initial version of your "Set Marvell Yukon MAC address"
>> patch, this hang didn't happen. I suspect that was because your error
>> checking was weaker and certain PCIe failures didn't trigger the
>> assert.
>>
>> To reproduce the error with this commit:
>> 1) power on and boot R1 or R2 into Shell
>>    I do this by interrupting the boot by pressing ESCAPE and using the boot menu
>> 2) At the Shell prompt, run "reset -s" to shutdown
>> 3) At the ARM Boot Loader "Cmd>" prompt, run "reboot"
>> 4) the board will hang while booting UEFI, assuming the board firmware
>> doesn't die with constant messages like this:
>>
>>      ERROR: PCIe CSR read failed to respond
>>      ERROR: SMBus transaction not claimed
>>
>> Assuming the problem is firmware, not EDK2, what should we do about it?
> OK, so instinctively, my reaction was that "the reset -s bug is a
> system controller firmware bug and we shouldn't work around
> it". However, since it is actually disrupting Ryan's workflow, which
> frequently doesn't touch PCI at all, I think downgrading the ASSERT to
> an error message is a good idea short-term.
>
> Daniil - could you make that change please?
>
> /
>      Leif

I've been able to reproduce "PCIe CSR read failed to respond" and "SMBus 
transaction not claimed" errors on my Juno R2. I disabled Marvell Yukon 
driver (.dsc/.fdf) and removed ArmJunoDxe patch but still see the same 
error messages during the initial boot.

Testing motherboard interfaces (FPGA build 118)...
SRAM 32MB test: PASSED
LAN9118   test: PASSED
KMI1/2    test: PASSED
MMC       test: PASSED
PB/LEDs   test: PASSED
FPGA UART test: PASSED
ERROR: PCIe CSR read failed to respond
ERROR: SMBus transaction not claimed
ERROR: PCIe CSR read failed to respond
...

Once it went through reporting these errors, the UEFI starts loading but 
still fails in OnEndOfDxe():
ASSERT_EFI_ERROR (Status = Not Found)
ASSERT [ArmJunoDxe] 
/home/user/workspace/juno/uefi/edk2/ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe/ArmJunoDxe.c(110): 
!EFI_ERROR (Status)

This is the original ArmJunoDxe code:
   Status = gBS->ConnectController (Handle, NULL, 
PciRootComplexDevicePath, FALSE);
   ASSERT_EFI_ERROR (Status); <---- line 110

but it actually fails here first:
   Status = gBS->LocateDevicePath (&gEfiPciRootBridgeIoProtocolGuid,
                                   &PciRootComplexDevicePath,
                                   &Handle);

Ryan - could you try to remove Marvell patches and check if you also 
catching "PCIe .." and "SMBus .." errors without them and your build 
still fails with other ASSERTs related to PCI.

Leif - in my tests, if it fails with "PCIe .." and "SMBus ..", the UEFI 
PCI enumeration is completely corrupted.

These errors do not appear if board was reset with the nPBRESET button. 
It never fails with "reset -w" and "reset -c". I also loaded Debian and 
used the shutdown command from there and got the same "PCIe .." and 
"SMBus .." errors after "reboot" command from the "Cmd>" prompt.  
Possibly, the "reboot" command from the board shell prompt doesnot reset 
the board correctly so it looks like a firmware issue.

Thanks,
Daniil

>> Prior to your "Set Marvell Yukon MAC address" patch, or with the
>> earlier version, the board would boot anyway, but the Yukon device
>> would be missing.
>>
>> Now it dies.
>>
>> I don't know which is worse, but I think hanging is worse than an
>> ethernet port dropping out. Although hanging is a bit more obvious
>> that there's a problem...
>>
>>
>>> +  }
>>>   }
>>>
>>>   STATIC
>>> --
>>> 2.7.4
>>>
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.01.org
> https://lists.01.org/mailman/listinfo/edk2-devel



  reply	other threads:[~2017-01-20  1:35 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-01-18 23:27 [PATCH] ArmPlatformPkg/ArmJunoPkg/Drivers/ArmJunoDxe: Fixed crash on Juno R0 Daniil Egranov
2017-01-19 13:49 ` Ryan Harkin
2017-01-19 15:13   ` Leif Lindholm
2017-01-20  1:34     ` Daniil Egranov [this message]
2017-01-20 10:30       ` Ryan Harkin
2017-01-20 20:57         ` Daniil Egranov
2017-01-23 11:26           ` Ryan Harkin
2017-01-23 12:56           ` Ryan Harkin
2017-01-24  2:19             ` Daniil Egranov
2017-01-24 11:05               ` Ryan Harkin
2017-01-24 12:34                 ` Ryan Harkin

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-list from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=bc6316d9-81ce-9de6-6794-4d9313d2f285@arm.com \
    --to=devel@edk2.groups.io \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox