The following reply was made to PR kernel/6631; it has been noted by GNATS.

From: Mark Kettenis <mark.kette...@xs4all.nl>
To: and...@afresh1.com
Cc: gn...@openbsd.org
Subject: Re: kernel/6631: DDB during boot on Dell Dimension E521
Date: Thu, 9 Jun 2011 23:13:09 +0200 (CEST)

 > Date: Thu, 9 Jun 2011 12:50:55 -0700
 > From: Andrew Fresh <and...@afresh1.com>
 > 
 > On Thu, Jun 09, 2011 at 09:26:04PM +0200, Mark Kettenis wrote:
 > > Can you send me pcidump -vxx output for that machine?
 > 
 > Sure can.
 >
 >  0:0:5: NVIDIA C51 Memory
 >      0x0000: Vendor ID: 10de Product ID: 02ff
 >      0x0004: Command: 0006 Status ID: 00b0
 >      0x0008: Class: 05 Subclass: 00 Interface: 00 Revision: a2
 >      0x000c: BIST: 00 Header Type: 80 Latency Timer: 00 Cache Line Size: 00
 >      0x0010: BAR empty (00000000)
 >      0x0014: BAR empty (00000000)
 >      0x0018: BAR empty (00000000)
 >      0x001c: BAR empty (00000000)
 >      0x0020: BAR empty (00000000)
 >      0x0024: BAR empty (00000000)
 >      0x0028: Cardbus CIS: 00000000
 >      0x002c: Subsystem Vendor ID: 10de Product ID: 02ff
 >      0x0030: Expansion ROM Base Address: 00000000
 >      0x0038: 00000000
 >      0x003c: Interrupt Pin: 00 Line: ff Min Gnt: 00 Max Lat: 00
 >      0x0044: Capability 0x00: Reserved
 >      0x0000: 02ff10de 00b00006 050000a2 00800000
 >      0x0010: 00000000 00000000 00000000 00000000
 >      0x0020: 00000000 00000000 00000000 02ff10de
 >      0x0030: 00000000 00000044 00000000 000000ff
 >      0x0040: 00000017 00fefe00 00fefe00 00fefe00
 
 That PCI device has a broken Capabilities List.  Can you try the diff
 below?
 
 Index: pci.c
 ===================================================================
 RCS file: /cvs/src/sys/dev/pci/pci.c,v
 retrieving revision 1.92
 diff -u -p -r1.92 pci.c
 --- pci.c      30 May 2011 19:09:46 -0000      1.92
 +++ pci.c      9 Jun 2011 21:10:22 -0000
 @@ -564,10 +564,13 @@ pci_get_capability(pci_chipset_tag_t pc,
  
        ofs = PCI_CAPLIST_PTR(pci_conf_read(pc, tag, ofs));
        while (ofs != 0) {
 -#ifdef DIAGNOSTIC
 +              /*
 +               * Some devices, like parts of the NVIDIA C51 chipset,
 +               * have a broken Capabilities List.  So we need to do
 +               * a sanity check here.
 +               */
                if ((ofs & 3) || (ofs < 0x40))
 -                      panic("pci_get_capability");
 -#endif
 +                      return (0);
                reg = pci_conf_read(pc, tag, ofs);
                if (PCI_CAPLIST_CAP(reg) == capid) {
                        if (offset)

Reply via email to