Re: weird PCI class/type combination

Martin Mares (mj@ucw.cz)
Sat, 4 Dec 1999 12:05:12 +0100


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/