Commit b84b25cb authored by Tejun Heo's avatar Tejun Heo

Merge branch 'for-3.19-fixes' of...

Merge branch 'for-3.19-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata into for-3.20

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

 5c0b8e0d ("ahci_xgene: Fix the endianess issue in APM X-Gene SoC AHCI SATA controller driver.")
 1102407b ("ahci_xgene: Fix the DMA state machine lockup for the ATA_CMD_PACKET PIO mode command.")
Signed-off-by: default avatarTejun Heo <tj@kernel.org>
parents 0628ee7c 36aae28e
...@@ -125,10 +125,11 @@ static int xgene_ahci_restart_engine(struct ata_port *ap) ...@@ -125,10 +125,11 @@ static int xgene_ahci_restart_engine(struct ata_port *ap)
* xgene_ahci_qc_issue - Issue commands to the device * xgene_ahci_qc_issue - Issue commands to the device
* @qc: Command to issue * @qc: Command to issue
* *
* Due to Hardware errata for IDENTIFY DEVICE command, the controller cannot * Due to Hardware errata for IDENTIFY DEVICE command and PACKET
* clear the BSY bit after receiving the PIO setup FIS. This results in the dma * command of ATAPI protocol set, the controller cannot clear the BSY bit
* state machine goes into the CMFatalErrorUpdate state and locks up. By * after receiving the PIO setup FIS. This results in the DMA state machine
* restarting the dma engine, it removes the controller out of lock up state. * 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) static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
{ {
...@@ -137,7 +138,8 @@ static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc) ...@@ -137,7 +138,8 @@ static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)
struct xgene_ahci_context *ctx = hpriv->plat_data; struct xgene_ahci_context *ctx = hpriv->plat_data;
int rc = 0; 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); xgene_ahci_restart_engine(ap);
rc = ahci_qc_issue(qc); rc = ahci_qc_issue(qc);
...@@ -188,7 +190,7 @@ static unsigned int xgene_ahci_read_id(struct ata_device *dev, ...@@ -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 * 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; return 0;
} }
......
...@@ -2389,6 +2389,7 @@ const char *ata_get_cmd_descript(u8 command) ...@@ -2389,6 +2389,7 @@ const char *ata_get_cmd_descript(u8 command)
return NULL; return NULL;
} }
EXPORT_SYMBOL_GPL(ata_get_cmd_descript);
/** /**
* ata_eh_link_report - report error handling to user * ata_eh_link_report - report error handling to user
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment