Re: AHCI - remove probing of ata2

From: Tejun Heo
Date: Mon Feb 12 2007 - 01:45:18 EST


Hello, Paul.

Paul Rolland wrote:
This looks like the problems that hopefully the patches
from Tejun and
from Mark Lord cured (the delay after reset and the task file clear)
Any chance I can find this patch(es) and try them ?
Also, I've seen a :

ata1: Spurious SDB FIS during NCQ issue=0x0 SAct=0x7ff8001f
FIS=004040a1:00040000

What's this ? Is it really bad or just a warning ???
It's one Tejun stuck logging in for in order to investigate further.
OK, will wait a little bit ;)

You have a Maxtor connected to that port, right? That's caused by firmware bug. Future kernels will consider that condition as protocol violation and blacklist the drive such that NCQ is not used on it. I think it can be dangerous on rare corner/error cases but there hasn't been any actual report of problems caused by that, so no need to worry about it too much. If it bothers you, you can turn NCQ off using sysfs node. Take a look at FAQ section of http://linux-ata.org

In the meantime, I've been trying 2.6.20-rc7.
Things are not better, except that the ata2 probing failing results in
no /dev/sdd being allocated, thus it changes all the naming afterwards.

Slightly OT, but it's generally a good idea to use LABELs to access filesystems. With so many ports and EH dynamics including hotplug, it's much more difficult to keep device names persistent and remember them.

So, 2.6.20-rc7 results are :
- ata2 probing still very long and delaying boot a lot,

That's sil4726's config device acting weird. When reset as a normal device (not PMP device), sil4726 acts as a normal ATA device which is used to configure how the chip behaves. Unfortunately, the emulation seems to contain some flaws and cause lots of delays as you've seen. I'm attaching a patch to clear TF before IDENTIFY which fixes similar IDENTIFY failures on buggy ATAPI devices.

- Jmicron PATA still not working, and doesn't even detect the DVD-ROM on
the port.

This problem is likely to be fixed by clearing TF before IDENTIFY.

So, please test the attached patch and report the result.

--
tejun
diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index 667acd2..d6fcf0a 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -1478,7 +1478,16 @@ int ata_dev_read_id(struct ata_device *dev, unsigned int *p_class,
}

tf.protocol = ATA_PROT_PIO;
- tf.flags |= ATA_TFLAG_POLLING; /* for polling presence detection */
+
+ /* Some devices choke if TF registers contain garbage. Make
+ * sure those are properly initialized.
+ */
+ tf.flags |= ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
+
+ /* Device presence detection is unreliable on some
+ * controllers. Always poll IDENTIFY if available.
+ */
+ tf.flags |= ATA_TFLAG_POLLING;

err_mask = ata_exec_internal(dev, &tf, NULL, DMA_FROM_DEVICE,
id, sizeof(id[0]) * ATA_ID_WORDS);