Loongson 2F IDE/ATA broken with lemote2f_defconfig

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

 



Hi,

Commit 7ff7a5b1bfff ("MIPS: lemote2f_defconfig: Convert to use libata
PATA drivers") switched from IDE to libata PATA on Loongson 2F, but
neither PATA_AMD or PATA_CS5536 work well on this platform compared
to the AMD74XX IDE driver.

During the ATA init/probe there is interrupt storm from irq 14, and
majority of system boots end up with "nobody cared... IRQ disabled".
So the result is a very slow disk access.

It seems that the interrupt gets crazy after the port freeze done early
during the init, and for whatever reason it cannot be cleared.

With the below workaround I was able to boot the system normally. I
guess that rather than going back to old IDE driver, we should just try
to make pata_cs5536 work (and forget PATA AMD on this board)...?

A.

...

diff --git a/drivers/ata/pata_cs5536.c b/drivers/ata/pata_cs5536.c
index dc1255294628..71e485547ee8 100644
--- a/drivers/ata/pata_cs5536.c
+++ b/drivers/ata/pata_cs5536.c
@@ -229,6 +229,16 @@ static void cs5536_set_dmamode(struct ata_port *ap, struct ata_device *adev)
 	cs5536_write(pdev, ETC, etc);
 }
 
+static void cs5536_noop_freeze(struct ata_port *ap)
+{
+	/*
+	 * Some CS5536 controllers result in a screaming interrupt if ATA_NIEN
+	 * is manipulated. Leave it alone and just clear pending IRQ.
+	 */
+	ap->ops->sff_check_status(ap);
+	ata_bmdma_irq_clear(ap);
+}
+
 static struct scsi_host_template cs5536_sht = {
 	ATA_BMDMA_SHT(DRV_NAME),
 };
@@ -238,6 +248,7 @@ static struct ata_port_operations cs5536_port_ops = {
 	.cable_detect		= cs5536_cable_detect,
 	.set_piomode		= cs5536_set_piomode,
 	.set_dmamode		= cs5536_set_dmamode,
+	.freeze			= cs5536_noop_freeze,
 };
 
 /**



[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