|
@@ -34,7 +34,7 @@ enum {
|
|
|
|
|
|
SATA_FSL_HOST_FLAGS = (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
|
|
|
ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
|
|
|
- ATA_FLAG_PMP | ATA_FLAG_NCQ),
|
|
|
+ ATA_FLAG_PMP | ATA_FLAG_NCQ | ATA_FLAG_AN),
|
|
|
|
|
|
SATA_FSL_MAX_CMDS = SATA_FSL_QUEUE_DEPTH,
|
|
|
SATA_FSL_CMD_HDR_SIZE = 16, /* 4 DWORDS */
|
|
@@ -132,7 +132,7 @@ enum {
|
|
|
INT_ON_SINGL_DEVICE_ERR = (1 << 1),
|
|
|
INT_ON_CMD_COMPLETE = 1,
|
|
|
|
|
|
- INT_ON_ERROR = INT_ON_FATAL_ERR |
|
|
|
+ INT_ON_ERROR = INT_ON_FATAL_ERR | INT_ON_SNOTIFY_UPDATE |
|
|
|
INT_ON_PHYRDY_CHG | INT_ON_SINGL_DEVICE_ERR,
|
|
|
|
|
|
/*
|
|
@@ -153,7 +153,7 @@ enum {
|
|
|
IE_ON_CMD_COMPLETE = 1,
|
|
|
|
|
|
DEFAULT_PORT_IRQ_ENABLE_MASK = IE_ON_FATAL_ERR | IE_ON_PHYRDY_CHG |
|
|
|
- IE_ON_SIGNATURE_UPDATE |
|
|
|
+ IE_ON_SIGNATURE_UPDATE | IE_ON_SNOTIFY_UPDATE |
|
|
|
IE_ON_SINGL_DEVICE_ERR | IE_ON_CMD_COMPLETE,
|
|
|
|
|
|
EXT_INDIRECT_SEG_PRD_FLAG = (1 << 31),
|
|
@@ -992,9 +992,8 @@ static void sata_fsl_error_intr(struct ata_port *ap)
|
|
|
*/
|
|
|
|
|
|
sata_fsl_scr_read(&ap->link, SCR_ERROR, &SError);
|
|
|
- if (unlikely(SError & 0xFFFF0000)) {
|
|
|
+ if (unlikely(SError & 0xFFFF0000))
|
|
|
sata_fsl_scr_write(&ap->link, SCR_ERROR, SError);
|
|
|
- }
|
|
|
|
|
|
DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n",
|
|
|
hstatus, cereg, ioread32(hcr_base + DE), SError);
|
|
@@ -1007,6 +1006,10 @@ static void sata_fsl_error_intr(struct ata_port *ap)
|
|
|
freeze = 1;
|
|
|
}
|
|
|
|
|
|
+ /* Handle SDB FIS receive & notify update */
|
|
|
+ if (hstatus & INT_ON_SNOTIFY_UPDATE)
|
|
|
+ sata_async_notification(ap);
|
|
|
+
|
|
|
/* Handle PHYRDY change notification */
|
|
|
if (hstatus & INT_ON_PHYRDY_CHG) {
|
|
|
DPRINTK("SATA FSL: PHYRDY change indication\n");
|
|
@@ -1070,9 +1073,9 @@ static void sata_fsl_error_intr(struct ata_port *ap)
|
|
|
}
|
|
|
|
|
|
/* record error info */
|
|
|
- if (qc) {
|
|
|
+ if (qc)
|
|
|
qc->err_mask |= err_mask;
|
|
|
- } else
|
|
|
+ else
|
|
|
ehi->err_mask |= err_mask;
|
|
|
|
|
|
ehi->action |= action;
|
|
@@ -1103,7 +1106,6 @@ static void sata_fsl_host_intr(struct ata_port *ap)
|
|
|
if (unlikely(SError & 0xFFFF0000)) {
|
|
|
DPRINTK("serror @host_intr : 0x%x\n", SError);
|
|
|
sata_fsl_error_intr(ap);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
if (unlikely(hstatus & INT_ON_ERROR)) {
|