Regarding this, don't you think there's also need to check PxTFD for error
in the case D2H is received?
On Friday, August 22, 2014, Tian, Feng <feng.t...@intel.com> wrote:
> Good to me.
>
> Reviewed-by: Feng Tian <feng.t...@intel.com <javascript:;>>
>
> -----Original Message-----
> From: reza.jel...@tuhh.de <javascript:;> [mailto:reza.jel...@tuhh.de
> <javascript:;>]
> Sent: Thursday, August 21, 2014 17:56
> To: edk2-devel@lists.sourceforge.net <javascript:;>
> Cc: ag...@suse.de <javascript:;>
> Subject: [edk2] [PATCH v2 1/6] MdeModulePkg: Check D2H register status in
> AhciPioTransfer
>
> From: Reza Jelveh <reza.jel...@tuhh.de <javascript:;>>
>
> Some AHCI controllers such as the Marvel 9230 controllers do not send PIO
> Setup FIS when the PIO data-in command is completed. Instead they just send
> a D2H FIS.
>
> To accomodate for this possibility the status code of the D2H FIS is
> checked.
>
> Contributed-under: TianoCore Contribution Agreement 1.0
> Signed-off-by: Reza Jelveh <reza.jel...@tuhh.de <javascript:;>>
> ---
> MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c | 14 ++++++++++++--
> MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h | 3 +++
> 2 files changed, 15 insertions(+), 2 deletions(-)
>
> diff --git a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c
> b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.c
> index 7fc7a28..487f516 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,8 +805,17 @@ 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;
> - break;
> + D2HStatus = *(volatile UINT8 *) (Offset +
> + EFI_AHCI_D2H_FIS_STATUS_OFFSET);
> +
> + if ((D2HStatus & EFI_AHCI_D2H_FIS_ERR) != 0) {
> + Status = EFI_DEVICE_ERROR;
> + break;
> + }
> +
> + PrdCount = *(volatile UINT32 *)
> (&(AhciRegisters->AhciCmdList[0].AhciCmdPrdbc));
> + if (PrdCount == DataCount) {
> + break;
> + }
> }
>
> //
> diff --git a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h
> b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h
> index 485b647..9fe1fb3 100644
> --- a/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h
> +++ b/MdeModulePkg/Bus/Ata/AtaAtapiPassThru/AhciMode.h
> @@ -78,12 +78,15 @@ typedef union {
> #define EFI_AHCI_FIS_SET_DEVICE_LENGTH 8
>
> #define EFI_AHCI_D2H_FIS_OFFSET 0x40
> +#define EFI_AHCI_D2H_FIS_STATUS_OFFSET 0x02
> +#define EFI_AHCI_D2H_FIS_ERR BIT0
> #define EFI_AHCI_DMA_FIS_OFFSET 0x00
> #define EFI_AHCI_PIO_FIS_OFFSET 0x20
> #define EFI_AHCI_SDB_FIS_OFFSET 0x58
> #define EFI_AHCI_FIS_TYPE_MASK 0xFF
> #define EFI_AHCI_U_FIS_OFFSET 0x60
>
> +
> //
> // Port register
> //
> --
> 1.9.2
>
>
>
> ------------------------------------------------------------------------------
> Slashdot TV.
> Video for Nerds. Stuff that matters.
> http://tv.slashdot.org/
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net <javascript:;>
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>
>
> ------------------------------------------------------------------------------
> Slashdot TV.
> Video for Nerds. Stuff that matters.
> http://tv.slashdot.org/
> _______________________________________________
> edk2-devel mailing list
> edk2-devel@lists.sourceforge.net <javascript:;>
> https://lists.sourceforge.net/lists/listinfo/edk2-devel
>
------------------------------------------------------------------------------
Slashdot TV.
Video for Nerds. Stuff that matters.
http://tv.slashdot.org/
_______________________________________________
edk2-devel mailing list
edk2-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/edk2-devel