Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit fd6c29e3 authored by ashish kalra's avatar ashish kalra Committed by Jeff Garzik
Browse files

sata_fsl: Add asynchronous notification support



Enable device hot-plug support on Port multiplier fan-out ports

Signed-off-by: default avatarAshish Kalra <Ashish.Kalra@freescale.com>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent 10a9c969
Loading
Loading
Loading
Loading
+10 −8
Original line number Original line Diff line number Diff line
@@ -34,7 +34,7 @@ enum {


	SATA_FSL_HOST_FLAGS	= (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
	SATA_FSL_HOST_FLAGS	= (ATA_FLAG_SATA | ATA_FLAG_NO_LEGACY |
				ATA_FLAG_MMIO | ATA_FLAG_PIO_DMA |
				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_MAX_CMDS	= SATA_FSL_QUEUE_DEPTH,
	SATA_FSL_CMD_HDR_SIZE	= 16,	/* 4 DWORDS */
	SATA_FSL_CMD_HDR_SIZE	= 16,	/* 4 DWORDS */
@@ -132,7 +132,7 @@ enum {
	INT_ON_SINGL_DEVICE_ERR = (1 << 1),
	INT_ON_SINGL_DEVICE_ERR = (1 << 1),
	INT_ON_CMD_COMPLETE = 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,
	    INT_ON_PHYRDY_CHG | INT_ON_SINGL_DEVICE_ERR,


	/*
	/*
@@ -153,7 +153,7 @@ enum {
	IE_ON_CMD_COMPLETE = 1,
	IE_ON_CMD_COMPLETE = 1,


	DEFAULT_PORT_IRQ_ENABLE_MASK = IE_ON_FATAL_ERR | IE_ON_PHYRDY_CHG |
	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,
	    IE_ON_SINGL_DEVICE_ERR | IE_ON_CMD_COMPLETE,


	EXT_INDIRECT_SEG_PRD_FLAG = (1 << 31),
	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);
	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);
		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",
	DPRINTK("error_intr,hStat=0x%x,CE=0x%x,DE =0x%x,SErr=0x%x\n",
		hstatus, cereg, ioread32(hcr_base + DE), SError);
		hstatus, cereg, ioread32(hcr_base + DE), SError);
@@ -1007,6 +1006,10 @@ static void sata_fsl_error_intr(struct ata_port *ap)
		freeze = 1;
		freeze = 1;
	}
	}


	/* Handle SDB FIS receive & notify update */
	if (hstatus & INT_ON_SNOTIFY_UPDATE)
		sata_async_notification(ap);

	/* Handle PHYRDY change notification */
	/* Handle PHYRDY change notification */
	if (hstatus & INT_ON_PHYRDY_CHG) {
	if (hstatus & INT_ON_PHYRDY_CHG) {
		DPRINTK("SATA FSL: PHYRDY change indication\n");
		DPRINTK("SATA FSL: PHYRDY change indication\n");
@@ -1070,9 +1073,9 @@ static void sata_fsl_error_intr(struct ata_port *ap)
	}
	}


	/* record error info */
	/* record error info */
	if (qc) {
	if (qc)
		qc->err_mask |= err_mask;
		qc->err_mask |= err_mask;
	} else
	else
		ehi->err_mask |= err_mask;
		ehi->err_mask |= err_mask;


	ehi->action |= action;
	ehi->action |= action;
@@ -1103,7 +1106,6 @@ static void sata_fsl_host_intr(struct ata_port *ap)
	if (unlikely(SError & 0xFFFF0000)) {
	if (unlikely(SError & 0xFFFF0000)) {
		DPRINTK("serror @host_intr : 0x%x\n", SError);
		DPRINTK("serror @host_intr : 0x%x\n", SError);
		sata_fsl_error_intr(ap);
		sata_fsl_error_intr(ap);

	}
	}


	if (unlikely(hstatus & INT_ON_ERROR)) {
	if (unlikely(hstatus & INT_ON_ERROR)) {