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

Reply via email to