Re: I need a hardware wizard... I have been beating my head on thewall..

From: Paulo Marques
Date: Fri Jan 28 2005 - 16:08:55 EST


David Sims wrote:
On Thu, 27 Jan 2005, Jeff Garzik wrote:
David Sims wrote:

[...]
You can insert the module in a running kernel and after barking as
follows (once for each disk attached) it runs just fine.

Basically nobody has ever had hardware to test sata_vsc with that hardware. We should probably remove the PCI ID until an engineer can fix it...

Hi again,

I am willing to make this hardware available to any engineer that wants
to help me solve this problem.... and I will do whatever I can to make it
an easy job... Please help me...

Well, I don't consider myself a hardware wizard, but at least I'm an engineer, so I decided to give it a go :)

It seems that the driver is not acknowledging the interrupt from the controller. It would be nice to know what kind of interrupt is triggering this.

Could you run the attached patch and show the output from dmesg?

--
Paulo Marques - www.grupopie.com

All that is necessary for the triumph of evil is that good men do nothing.
Edmund Burke (1729 - 1797)
--- sata_vsc.c.orig 2005-01-28 12:23:47.000000000 +0000
+++ sata_vsc.c 2005-01-28 20:51:13.993868526 +0000
@@ -160,12 +160,17 @@ irqreturn_t vsc_sata_interrupt (int irq,
struct ata_host_set *host_set = dev_instance;
unsigned int i;
unsigned int handled = 0;
+ static int int_count = 0;
u32 int_status;

spin_lock(&host_set->lock);

int_status = readl(host_set->mmio_base + VSC_SATA_INT_STAT_OFFSET);

+ int_count++;
+ if (int_count > 1000 && int_count <= 1020)
+ printk("vsc_sata int status: %08x\n", int_status);
+
for (i = 0; i < host_set->n_ports; i++) {
if (int_status & ((u32) 0xFF << (8 * i))) {
struct ata_port *ap;