From: Michael Brown <mbr...@fensystems.co.uk> There are multiple points in the existing code that take the UINT32 value returned by Wait4Bit and return it directly as an EFI_STATUS value. If Wait4Bit fails, this will result in a spurious EFI_STATUS value of 0x1 (EFI_WARN_UNKNOWN_GLYPH) being returned to the caller. A caller treating any non-zero value as an error will see this as a failure, but a caller using the EFI_ERROR macro will incorrectly see it as a success.
Fix by defining the return type of Wait4Bit as EFI_STATUS and ensuring that a valid EFI_STATUS value is always returned. Signed-off-by: Michael Brown <mbr...@fensystems.co.uk> Signed-off-by: Pete Batard <p...@akeo.ie> --- Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c b/Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c index 59120b9d8564..c1e1229f858e 100644 --- a/Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c +++ b/Platform/RaspberryPi/RPi3/Drivers/DwUsbHostDxe/DwUsbHostDxe.c @@ -53,7 +53,7 @@ DwCoreInit ( IN EFI_EVENT Timeout ); -UINT32 +EFI_STATUS Wait4Bit ( IN EFI_EVENT Timeout, IN UINT32 Reg, @@ -70,14 +70,14 @@ Wait4Bit ( } if ((Value & Mask) == Mask) { - return 0; + return EFI_SUCCESS; } } while (EFI_ERROR (gBS->CheckEvent (Timeout))); DEBUG ((DEBUG_ERROR, "Wait4Bit: %a timeout (reg:0x%x, value:0x%x, mask:0x%x)\n", Set ? "set" : "clear", Reg, Set ? Value : ~Value, Mask)); - return 1; + return EFI_TIMEOUT; } CHANNEL_HALT_REASON @@ -91,13 +91,14 @@ Wait4Chhltd ( IN SPLIT_CONTROL *Split ) { - INT32 Ret; + EFI_STATUS Status; UINT32 Hcint, Hctsiz; UINT32 HcintCompHltAck = DWC2_HCINT_XFERCOMP; MicroSecondDelay (100); - Ret = Wait4Bit (Timeout, DwHc->DwUsbBase + HCINT (Channel), DWC2_HCINT_CHHLTD, 1); - if (Ret) { + Status = Wait4Bit (Timeout, DwHc->DwUsbBase + HCINT (Channel), + DWC2_HCINT_CHHLTD, 1); + if (EFI_ERROR (Status)) { DEBUG ((DEBUG_ERROR, "Channel %u did not halt\n", Channel)); return XFER_NOT_HALTED; } @@ -204,7 +205,7 @@ DwCoreReset ( IN EFI_EVENT Timeout ) { - UINT32 Status; + EFI_STATUS Status; Status = Wait4Bit (Timeout, DwHc->DwUsbBase + GRSTCTL, DWC2_GRSTCTL_AHBIDLE, 1); if (Status) { @@ -1261,7 +1262,7 @@ DwFlushTxFifo ( IN INT32 Num ) { - UINT32 Status; + EFI_STATUS Status; MmioWrite32 (DwHc->DwUsbBase + GRSTCTL, DWC2_GRSTCTL_TXFFLSH | (Num << DWC2_GRSTCTL_TXFNUM_OFFSET)); @@ -1279,7 +1280,7 @@ DwFlushRxFifo ( IN EFI_EVENT Timeout ) { - UINT32 Status; + EFI_STATUS Status; MmioWrite32 (DwHc->DwUsbBase + GRSTCTL, DWC2_GRSTCTL_RXFFLSH); -- 2.21.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#43878): https://edk2.groups.io/g/devel/message/43878 Mute This Topic: https://groups.io/mt/32502332/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-