Re: Celleb cannot exit from ata_host_intr()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Akira Iguchi wrote:
> 
> I have a problem that our hardware (Celleb) cannot exit from
> ata_host_intr() when ATAPI DMA data read fails.
> 
> This PATA controller sets bit2 (ATA_DMA_INTR) of BMDMA status register
> after it finished DMA data read. If ATAPI DMA data read fails
> due to no CDROM, it doesn't transfer data and generates an interrupt.
> In this case, bit2 of BMDMA status register is not set.

This behavior is different from other adapters. For other adapters,
ATA_DMA_INTR bit of BMDMA status is set whenever the drive raises INTRQ.

> 
> libata ISR (ata_host_intr()) checks this bit by the following code:
> 
> 			/* if it's not our irq... */
> 			if (!(host_stat & ATA_DMA_INTR))
> 				goto idle_irq;
> 
> 
> Our driver always hits this check. As a result, ISR loops forever.
> I temporarily use libata by removing this check.
> 
> I wonder if this check is necessary. In drivers/ide, cdrom_decode_status()
> seems to check IDE STATUS register instead of BMDMA status register.
> If there is no problem, I hope this check will be removed.
> 

This check is needed to make sure it is "my irq". Otherwise we might
- incorrectly stop BMDMA if another PCI adapter raise the same shared irq 
- incorrectly read ALT_STATUS when DD0-DD15 being used for DMA transfer

Is the irq of Celleb IDE shared with other adapters?
If the irq is non-shared, could you check if the following code works
for Celleb:

			/* if it's not our irq... */
			if ((host_stat & ATA_DMA_ACTIVE) &&
			    !(host_stat & ATA_DMA_INTR))
				goto idle_irq;


--
albert


-
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html

[Index of Archives]     [Linux Filesystems]     [Linux SCSI]     [Linux RAID]     [Git]     [Kernel Newbies]     [Linux Newbie]     [Security]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Samba]     [Device Mapper]

  Powered by Linux