Hi, Reza That's the problem.
For PIO DATA-OUT command protocol, D2H either indicates that the transfer was completed or that's an error occurred. But for PIO DATA-IN command protocol, I don't see such sentence from SATA 2.6 spec. If the transfer has been completed, why the loop doesn't jump out when SETUP FIS received and expected data size was transferred? So there is only one possibility: more data transfer required but D2H received here. How could we return now? Doesn't it cause data lost? Thanks Feng -----Original Message----- From: Reza Jelveh [mailto:[email protected]] Sent: Friday, August 08, 2014 3:34 AM To: Tian, Feng Cc: [email protected]; [email protected] Subject: Re: [edk2] [PATCH 2/2] MdeModulePkg: Check D2H register status in AhciPioTransfer 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 ------------------------------------------------------------------------------ Want fast and easy access to all the code in your enterprise? Index and search up to 200,000 lines of code with a free copy of Black Duck Code Sight - the same software that powers the world's largest code search on Ohloh, the Black Duck Open Hub! Try it now. http://p.sf.net/sfu/bds _______________________________________________ edk2-devel mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/edk2-devel
