View | Details | Raw Unified | Return to bug 34952
Collapse All | Expand All

(-)a/drivers/ata/libahci.c (-22 lines)
Lines 561-587 void ahci_start_engine(struct ata_port *ap) Link Here
561
{
561
{
562
	void __iomem *port_mmio = ahci_port_base(ap);
562
	void __iomem *port_mmio = ahci_port_base(ap);
563
	u32 tmp;
563
	u32 tmp;
564
	u8 status;
565
566
	status = readl(port_mmio + PORT_TFDATA) & 0xFF;
567
568
	/*
569
	 * At end of section 10.1 of AHCI spec (rev 1.3), it states
570
	 * Software shall not set PxCMD.ST to 1 until it is determined
571
	 * that a functoinal device is present on the port as determined by
572
	 * PxTFD.STS.BSY=0, PxTFD.STS.DRQ=0 and PxSSTS.DET=3h
573
	 *
574
	 * Even though most AHCI host controllers work without this check,
575
	 * specific controller will fail under this condition
576
	 */
577
	if (status & (ATA_BUSY | ATA_DRQ))
578
		return;
579
	else {
580
		ahci_scr_read(&ap->link, SCR_STATUS, &tmp);
581
582
		if ((tmp & 0xf) != 0x3)
583
			return;
584
	}
585
564
586
	/* start DMA */
565
	/* start DMA */
587
	tmp = readl(port_mmio + PORT_CMD);
566
	tmp = readl(port_mmio + PORT_CMD);
588
- 

Return to bug 34952