Skip to content

Commit

Permalink
Merge branch 'for-3.19-fixes' of git://git.kernel.org/pub/scm/linux/k…
Browse files Browse the repository at this point in the history
…ernel/git/tj/libata into for-3.20

Pull to receive the following two ahci_xgene fixes for the planned
xgene PMP support patches.

 5c0b8e0 ("ahci_xgene: Fix the endianess issue in APM X-Gene SoC AHCI SATA controller driver.")
 1102407 ("ahci_xgene: Fix the DMA state machine lockup for the ATA_CMD_PACKET PIO mode command.")

Signed-off-by: Tejun Heo <tj@kernel.org>
  • Loading branch information
Tejun Heo committed Jan 6, 2015
2 parents 0628ee7 + 36aae28 commit b84b25c
Show file tree
Hide file tree
Showing 2 changed files with 9 additions and 6 deletions.
14 changes: 8 additions & 6 deletions drivers/ata/ahci_xgene.c
Original file line number Diff line number Diff line change
Expand Up @@ -125,10 +125,11 @@ static int xgene_ahci_restart_engine(struct ata_port *ap)
* xgene_ahci_qc_issue - Issue commands to the device
* @qc: Command to issue
*
* Due to Hardware errata for IDENTIFY DEVICE command, the controller cannot
* clear the BSY bit after receiving the PIO setup FIS. This results in the dma
* state machine goes into the CMFatalErrorUpdate state and locks up. By
* restarting the dma engine, it removes the controller out of lock up state.
* Due to Hardware errata for IDENTIFY DEVICE command and PACKET
* command of ATAPI protocol set, the controller cannot clear the BSY bit
* after receiving the PIO setup FIS. This results in the DMA state machine
* going into the CMFatalErrorUpdate state and locks up. By restarting the
* DMA engine, it removes the controller out of lock up state.
*/
static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
{
Expand All @@ -137,7 +138,8 @@ static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
struct xgene_ahci_context *ctx = hpriv->plat_data;
int rc = 0;

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

rc = ahci_qc_issue(qc);
Expand Down Expand Up @@ -188,7 +190,7 @@ static unsigned int xgene_ahci_read_id(struct ata_device *dev,
*
* Clear reserved bit 8 (DEVSLP bit) as we don't support DEVSLP
*/
id[ATA_ID_FEATURE_SUPP] &= ~(1 << 8);
id[ATA_ID_FEATURE_SUPP] &= cpu_to_le16(~(1 << 8));

return 0;
}
Expand Down
1 change: 1 addition & 0 deletions drivers/ata/libata-eh.c
Original file line number Diff line number Diff line change
Expand Up @@ -2389,6 +2389,7 @@ const char *ata_get_cmd_descript(u8 command)

return NULL;
}
EXPORT_SYMBOL_GPL(ata_get_cmd_descript);

/**
* ata_eh_link_report - report error handling to user
Expand Down

0 comments on commit b84b25c

Please sign in to comment.