All of lore.kernel.org
 help / color / mirror / Atom feed
* Implement the technote about promise/maxtor drives
@ 2007-01-31 17:12 Alan
  2007-02-02 16:49 ` Jeff Garzik
  2007-02-16  6:32 ` Albert Lee
  0 siblings, 2 replies; 6+ messages in thread
From: Alan @ 2007-01-31 17:12 UTC (permalink / raw)
  To: jeff, linux-ide

I don't have the hardware combination to test this one so would
appreciate people testing it before it goes anywhere further

diff -u --new-file --recursive --exclude-from /usr/src/exclude linux.vanilla-2.6.20-rc6-mm3/drivers/ata/pata_pdc2027x.c linux-2.6.20-rc6-mm3/drivers/ata/pata_pdc2027x.c
--- linux.vanilla-2.6.20-rc6-mm3/drivers/ata/pata_pdc2027x.c	2007-01-31 14:20:39.000000000 +0000
+++ linux-2.6.20-rc6-mm3/drivers/ata/pata_pdc2027x.c	2007-01-31 14:31:02.000000000 +0000
@@ -68,6 +68,7 @@
 static void pdc2027x_set_dmamode(struct ata_port *ap, struct ata_device *adev);
 static void pdc2027x_post_set_mode(struct ata_port *ap);
 static int pdc2027x_check_atapi_dma(struct ata_queued_cmd *qc);
+static unsigned long pdc2027x_mode_filter(const struct ata_port *ap, struct ata_device *adev, unsigned long mask);
 
 /*
  * ATA Timing Tables based on 133MHz controller clock.
@@ -146,6 +147,7 @@
 
 static struct ata_port_operations pdc2027x_pata100_ops = {
 	.port_disable		= ata_port_disable,
+	.mode_filter		= ata_pci_default_filter,
 
 	.tf_load		= ata_tf_load,
 	.tf_read		= ata_tf_read,
@@ -180,6 +182,7 @@
 	.set_piomode		= pdc2027x_set_piomode,
 	.set_dmamode		= pdc2027x_set_dmamode,
 	.post_set_mode		= pdc2027x_post_set_mode,
+	.mode_filter		= pdc2027x_mode_filter,
 
 	.tf_load		= ata_tf_load,
 	.tf_read		= ata_tf_read,
@@ -334,6 +337,33 @@
 }
 
 /**
+ *	pdc2720x_mode_filter	-	mode selection filter
+ *	@ap: ATA interface
+ *	@adev: ATA device
+ *
+ *	Block UDMA on devices that cause trouble with this controller.
+ */
+
+static unsigned long pdc2027x_mode_filter(const struct ata_port *ap, struct ata_device *adev, unsigned long mask)
+{
+	unsigned char model_num[ATA_ID_PROD_LEN + 1];
+	struct ata_device *pair = ata_dev_pair(adev);
+	
+	if (adev->class != ATA_DEV_ATA || adev->devno == 0 || pair == NULL)
+		return ata_pci_default_filter(ap, adev, mask);
+
+	/* Check for slave of a Maxtor at UDMA6 */
+	ata_id_c_string(pair->id, model_num, ATA_ID_PROD,
+			  ATA_ID_PROD_LEN + 1);
+	/* If the master is a maxtor in UDMA6 then the slave should not use UDMA 6 */
+	if(strstr(model_num, "Maxtor") == 0 && pair->dma_mode == XFER_UDMA_6)
+		mask &= ~ (1 << (6 + ATA_SHIFT_UDMA));
+	
+	return ata_pci_default_filter(ap, adev, mask);
+}
+
+
+/**
  *	pdc2027x_set_piomode - Initialize host controller PATA PIO timings
  *	@ap: Port to configure
  *	@adev: um

^ permalink raw reply	[flat|nested] 6+ messages in thread
* Re: Implement the technote about promise/maxtor drives
@ 2007-02-02 18:27 Mikael Pettersson
  0 siblings, 0 replies; 6+ messages in thread
From: Mikael Pettersson @ 2007-02-02 18:27 UTC (permalink / raw)
  To: alan, jeff; +Cc: linux-ide, mikpe

On Fri, 02 Feb 2007 11:49:17 -0500, Jeff Garzik wrote:
>Alan wrote:
>> I don't have the hardware combination to test this one so would
>> appreciate people testing it before it goes anywhere further
>
>I wonder if sata_promise PATA support needs this too?

Hmm, I saw Alan's post but ignored it because I assumed
it applied only to older HW. Can someone give me a pointer
to the technote?

I don't have any Maxtor disks for testing, alas.

/Mikael

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2007-02-17 17:59 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2007-01-31 17:12 Implement the technote about promise/maxtor drives Alan
2007-02-02 16:49 ` Jeff Garzik
2007-02-16  6:32 ` Albert Lee
2007-02-16  6:53   ` Albert Lee
2007-02-17 17:59     ` Eric D. Mudama
2007-02-02 18:27 Mikael Pettersson

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.