Skip to content

Commit

Permalink
ahci_xgene: Fix the dma state machine lockup for the ATA_CMD_SMART PI…
Browse files Browse the repository at this point in the history
…O mode command.

This patch addresses the issue with ATA_CMD_SMART pio mode command for
enumeration and device detection with ATA devices.  The X-Gene AHCI
controller has an errata in which it cannot clear the BSY bit after
the PIO setup FIS. The dma state machine enters CMFatalErrorUpdate
state and locks up. It is the same issue as in the commit 2a0bdff
("ahci-xgene: fix the dma state machine lockup for the IDENTIFY DEVICE
PIO mode command").

For example :  without this patch it results in READ DMA command failure
as shown below :

 [  126.700072] ata2.00: exception Emask 0x0 SAct 0x0
		SErr 0x0 action 0x6 frozen
 [  126.707089] ata2.00: failed command: READ DMA
 [  126.711426] ata2.00: cmd c8/00:08:00:55:57/00:00:00:00:00/e1 tag 1
                dma 4096 in
 [  126.711426]  res 40/00:ff:00:00:00/00:00:00:00:00/40 Emask
		0x4 (timeout)
 [  126.725956] ata2.00: status: { DRDY }

Signed-off-by: Suman Tripathi <[email protected]>
Reported-by:   Mark Langsdorf <[email protected]>
Signed-off-by: Tejun Heo <[email protected]>
  • Loading branch information
suman-tripathi authored and htejun committed Feb 3, 2015
1 parent ce75145 commit 09c32aa
Showing 1 changed file with 2 additions and 1 deletion.
3 changes: 2 additions & 1 deletion drivers/ata/ahci_xgene.c
Original file line number Diff line number Diff line change
Expand Up @@ -139,7 +139,8 @@ static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
int rc = 0;

if (unlikely((ctx->last_cmd[ap->port_no] == ATA_CMD_ID_ATA) ||
(ctx->last_cmd[ap->port_no] == ATA_CMD_PACKET)))
(ctx->last_cmd[ap->port_no] == ATA_CMD_PACKET) ||
(ctx->last_cmd[ap->port_no] == ATA_CMD_SMART)))
xgene_ahci_restart_engine(ap);

rc = ahci_qc_issue(qc);
Expand Down

0 comments on commit 09c32aa

Please sign in to comment.