Messages in this thread Patch in this message | | | Date | Sat, 4 Dec 1999 12:05:12 +0100 | From | Martin Mares <> | Subject | Re: 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/
| |