From parag@pinhead.parag.codegen.com Thu Sep 9 10:37:20 1999 Return-Path: Received: from pinhead.parag.codegen.com (207-44-235-154.CodeGen.COM [207.44.235.154]) by hub.freebsd.org (Postfix) with ESMTP id EF21515708 for ; Thu, 9 Sep 1999 10:37:19 -0700 (PDT) (envelope-from parag@pinhead.parag.codegen.com) Received: from pinhead.parag.codegen.com (parag@localhost.parag.codegen.com [127.0.0.1]) by pinhead.parag.codegen.com (8.9.3/8.9.3) with ESMTP id KAA23207 for ; Thu, 9 Sep 1999 10:37:04 -0700 (PDT) (envelope-from parag@pinhead.parag.codegen.com) Message-Id: <23203.936898624@pinhead.parag.codegen.com> Date: Thu, 09 Sep 1999 10:37:04 -0700 From: Parag Patel Sender: parag@pinhead.parag.codegen.com To: freebsd-gnats-submit@freebsd.org Subject: >Number: 13667 >Category: kern >Synopsis: >Confidential: no >Severity: serious >Priority: medium >Responsible: gnats-admin >State: closed >Quarter: >Keywords: >Date-Required: >Class: sw-bug >Submitter-Id: current-users >Arrival-Date: Thu Sep 9 10:40:03 PDT 1999 >Closed-Date: Sun Sep 12 14:36:31 PDT 1999 >Last-Modified: Wed Oct 26 06:17:44 GMT 2005 >Originator: >Release: >Organization: >Environment: >Description: Here's a better fix. Turns out that this 4xPPro box has two "Orion" chips in it, and the code that picks off the number of subordinate buses returns 255 for whatever reason. The fix is copied from the fixbushigh_450nx() routine into the fixbushigh_orion() routine, which appears to have the same problem. The fix could be made generic and moved out of both bushigh routines if there are no systems out there with 255 subordinate buses. The magic number 255 may mean different things to different chipsets so I settled for this Orion-specific fix. -- Parag Patel *** /sys/pci/pcisupport.c Sat Sep 4 04:02:49 1999 - --- pcisupport.c Wed Sep 8 12:03:00 1999 *************** *** 129,134 **** - --- 129,149 ---- { tag->secondarybus = pci_cfgread(tag, 0x4a, 1); tag->subordinatebus = pci_cfgread(tag, 0x4b, 1); + + if (tag->subordinatebus == 255) { + printf("fixbushigh_orion: bogus highest PCI bus %d", + tag->subordinatebus); + #ifdef NBUS + tag->subordinatebus = NBUS - 2; + #else + tag->subordinatebus = 10; + #endif + printf(", reduced to %d\n", tag->subordinatebus); + } + + if (bootverbose) + printf("fixbushigh_orion: subordinatebus is %d\n", + tag->subordinatebus); } static void >How-To-Repeat: >Fix: >Release-Note: >Audit-Trail: State-Changed-From-To: open->closed State-Changed-By: steve State-Changed-When: Sun Sep 12 14:36:31 PDT 1999 State-Changed-Why: Followup to another PR (13546). >Unformatted: