On 07/08/14 01:15, Tian, Feng wrote: > I suppose it should be inside to support an entire read transfer if the D2H > is received and the error bit of status register is 0.
Hey Feng, No, the break needs to stay outside, because the D2H either indicates that the transfer was completed or that an error occured. Either way at that point it's done and should break, not wait/sleep. Why do you think it shouldn't break there? > -----Original Message----- > From: [email protected] [mailto:[email protected]] > Sent: Thursday, August 07, 2014 00:16 > To: [email protected] > Cc: [email protected] > Subject: [edk2] [PATCH 2/2] MdeModulePkg: Check D2H register status in > AhciPioTransfer > > From: Reza Jelveh <[email protected]> > > Several Ahci controllers including Qemu and several ARM devices send device > commands such as identify asynchronously, which leads to the D2H register > being set. > > AtaAtapiPassThru interprets a D2H regardless of the status code as error > therefore failing to detect and enable ahci mode. > > Contributed-under: TianoCore Contribution Agreement 1.0 > Signed-off-by: Reza Jelveh <[email protected]> > --- > MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c | 8 +++++++- > MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h | 2 ++ > 2 files changed, 9 insertions(+), 1 deletion(-) > > diff --git a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c > b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c > index 7fc7a28..c19de1d 100644 > --- a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c > +++ b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c > @@ -703,6 +703,7 @@ AhciPioTransfer ( > EFI_AHCI_COMMAND_LIST CmdList; > UINT32 PortTfd; > UINT32 PrdCount; > + UINT8 D2HStatus; > BOOLEAN InfiniteWait; > > if (Timeout == 0) { > @@ -804,7 +805,12 @@ AhciPioTransfer ( > Offset = FisBaseAddr + EFI_AHCI_D2H_FIS_OFFSET; > Status = AhciCheckMemSet (Offset, EFI_AHCI_FIS_TYPE_MASK, > EFI_AHCI_FIS_REGISTER_D2H, NULL); > if (!EFI_ERROR (Status)) { > - Status = EFI_DEVICE_ERROR; > + D2HStatus = ((UINT8 *)(UINTN)(FisBaseAddr + > + EFI_AHCI_D2H_FIS_OFFSET))[2]; > + > + if (D2HStatus & EFI_AHCI_FIS_STATUS_ERROR) { > + Status = EFI_DEVICE_ERROR; > + } > + > break; > } > > diff --git a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h > b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h > index 485b647..3eb0260 100644 > --- a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h > +++ b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h > @@ -84,6 +84,8 @@ typedef union { > #define EFI_AHCI_FIS_TYPE_MASK 0xFF > #define EFI_AHCI_U_FIS_OFFSET 0x60 > > +#define EFI_AHCI_FIS_STATUS_ERROR 0x01 > + > // > // Port register > // > -- > 1.9.2 > > > ------------------------------------------------------------------------------ > Infragistics Professional > Build stunning WinForms apps today! > Reboot your WinForms applications with our WinForms controls. > Build a bridge from your legacy apps to the future. > http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/edk2-devel > > ------------------------------------------------------------------------------ > Infragistics Professional > Build stunning WinForms apps today! > Reboot your WinForms applications with our WinForms controls. > Build a bridge from your legacy apps to the future. > http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk > _______________________________________________ > edk2-devel mailing list > [email protected] > https://lists.sourceforge.net/lists/listinfo/edk2-devel -- Reza Jelveh | @rjzzleep | reza.jelveh.me ------------------------------------------------------------------------------ Infragistics Professional Build stunning WinForms apps today! Reboot your WinForms applications with our WinForms controls. Build a bridge from your legacy apps to the future. http://pubads.g.doubleclick.net/gampad/clk?id=153845071&iu=/4140/ostg.clktrk _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
