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

Commit a2c91a88 authored by Jeff Garzik's avatar Jeff Garzik
Browse files

[libata sata_mv] handle lack of hardware nIEN support

Handle errata (it was unintentional on this h/w, whereas its intentional
on others) whereby the nIEN bit in Device Control is ignored, leading to
a situation where a hardware interrupt completes the qc before the
polling code has a chance to.

This will get fixed The Right Way(tm) once Albert Lee's irq-pio
branch is merged, as the more natural PIO method on this hardware is
interrupt-driven.
parent 22374677
Loading
Loading
Loading
Loading
+6 −1
Original line number Original line Diff line number Diff line
@@ -1219,6 +1219,10 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
			handled++;
			handled++;
		}
		}


		if (ap &&
		    (ap->flags & (ATA_FLAG_PORT_DISABLED | ATA_FLAG_NOINTR)))
			continue;

		err_mask = ac_err_mask(ata_status);
		err_mask = ac_err_mask(ata_status);


		shift = port << 1;		/* (port * 2) */
		shift = port << 1;		/* (port * 2) */
@@ -1237,6 +1241,7 @@ static void mv_host_intr(struct ata_host_set *host_set, u32 relevant,
				VPRINTK("port %u IRQ found for qc, "
				VPRINTK("port %u IRQ found for qc, "
					"ata_status 0x%x\n", port,ata_status);
					"ata_status 0x%x\n", port,ata_status);
				/* mark qc status appropriately */
				/* mark qc status appropriately */
				if (!(qc->tf.ctl & ATA_NIEN))
					ata_qc_complete(qc, err_mask);
					ata_qc_complete(qc, err_mask);
			}
			}
		}
		}