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

Paulo Marques
2005-01-28T20:59:17Z

[-- Attachment #1: Type: text/plain, Size: 1058 bytes --]

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)

[-- Attachment #2: patch --]
[-- Type: text/plain, Size: 655 bytes --]

--- 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;