lkml.org 
[lkml]   [1999]   [Dec]   [4]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
Patch in this message
/
Date
From
SubjectRe: weird PCI class/type combination
Hello,

> I recently purchased a FIC-VA503+ motherboard. When booting linux,
> i noticed that message:
>
> Dorsul kernel: PCI: 00:3b [1106/3040/000604] has unknown header type 00,
> ignoring.
>
> When i read the datasheets of the MVP3 chipset, i found that it was
> the ACPI device. For this device, the type is readonly and set to 0. The
> class is 0x0000 by default, but can be changed. So i suspect that the
> BIOS
> set it to 0x0604.
> By forcing the class in pci.c before the switch in pci_scan_bus,
> i could use lscpi (version 2.1) to dump that device, and i got:
>
> 00:07.3 PCI bridge: VIA Technologies, Inc. VT82C586B ACPI (rev 10)
> !!! Header type 00 doesn't match class code 0604
> 00: 06 11 40 30 00 00 80 02 10 00 04 06 00 00 00 00
> 10: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 20: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
> 30: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>
>
> So i have two question:
> - what class should it be ?
> - i'm toying with the idea of some kind of pci quirk, is it a
> good idea ?

Thanks for your bug report.

This is certainly a BIOS bug. This patch against 2.3.29 (probably applicable
aginst 2.2 kernels as well) should work around it.

Have a nice fortnight
--
Martin `MJ' Mares <mj@ucw.cz> http://atrey.karlin.mff.cuni.cz/~mj/
Faculty of Math and Physics, Charles University, Prague, Czech Rep., Earth
"Whoa...I did a 'cp /vmlinuz /dev/audio' and I think I heard God..."


--- drivers/pci/pci.c.mj Sat Dec 4 12:03:08 1999
+++ drivers/pci/pci.c Sat Dec 4 12:03:08 1999
@@ -491,13 +491,16 @@
pci_read_config_word(dev, PCI_CB_SUBSYSTEM_ID, &dev->subsystem_device);
break;
default: /* unknown header */
- bad:
printk(KERN_ERR "PCI: device %s has unknown header type %02x, ignoring.\n",
dev->slot_name, hdr_type);
continue;
+ bad:
+ printk(KERN_ERR "PCI: %s: class %x doesn't match header type %02x. Ignoring class.\n",
+ dev->slot_name, class, hdr_type);
+ dev->class = PCI_CLASS_NOT_DEFINED;
}

- DBG("PCI: %02x:%02x [%04x/%04x]\n", bus->number, dev->devfn, dev->vendor, dev->device);
+ DBG("PCI: %02x:%02x [%04x/%04x] %06x %02x\n", bus->number, dev->devfn, dev->vendor, dev->device, class, hdr_type);

/*
* Put it into the global PCI device chain. It's used to
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.rutgers.edu
Please read the FAQ at http://www.tux.org/lkml/

\
 
 \ /
  Last update: 2005-03-22 13:55    [W:0.026 / U:0.564 seconds]
©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site