Patchwork sata_mv 0000:03:06.0: PCI ERROR; PCI IRQ cause=0x30000040

login
register
mail settings
Submitter Mark Lord
Date Oct. 9, 2009, 3:07 a.m.
Message ID <4ACEA8FB.4060901@rtr.ca>
Download mbox | patch
Permalink /patch/35551/
State Not Applicable
Delegated to: David Miller
Headers show

Comments

Mark Lord - Oct. 9, 2009, 3:07 a.m.
Bernie Innocenti wrote:
>
> I want to try reducing the frequency of the PCI-X bus, but the BIOS does
> not seem to provide a setting for it.  Is there another way?
..

Nothing that's easy.

Here.. apply this patch, and post the output after you reboot with it.


--
To unsubscribe from this list: send the line "unsubscribe linux-ide" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Mark Lord - Oct. 9, 2009, 3:16 a.m.
Mark Lord wrote:
> Bernie Innocenti wrote:
>>
>> I want to try reducing the frequency of the PCI-X bus, but the BIOS does
>> not seem to provide a setting for it.  Is there another way?
> ..
> 
> Nothing that's easy.
..

Adding to that:  there is a register on the chip,
which software could use to override the normal auto-detected
PCI mode (bus speed) for the chip.  This could be used to,
say, select 100Mhz or 66Mhz, or even 33Mhz operation.

BUT.. the register is autodetected from the bus at power-on,
and so if software wants to override that (by rewriting the reg),
it will also need to reset the PCI bus afterward.

Which requires knowing how to reset a PCI bridge,
something I don't know about.

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

Patch

--- 2.6.31/drivers/ata/sata_mv.c.orig	2009-08-21 22:16:05.000000000 -0400
+++ linux/drivers/ata/sata_mv.c	2009-10-08 23:05:37.392203506 -0400
@@ -3738,6 +3738,12 @@ 
 			hp_flags |= MV_HP_ERRATA_60X1B2;
 			break;
 		case 0x9:
+		{
+			struct mv_host_priv *hpriv = host->private_data;
+			void __iomem *mmio = hpriv->base;
+			printk(KERN_INFO "sata_mv: pcix_mode=%d\n", mv_in_pcix_mode(host));
+			printk(KERN_INFO "sata_mv: MV_PCI_COMMAND=%08x\n", readl(mmio + MV_PCI_COMMAND);
+		}
 			hp_flags |= MV_HP_ERRATA_60X1C0;
 			break;
 		default: