>It seemmed to work fine for us too, but if there is a possibility
>of some problem it's probably worth working around "properly". It
>only takes about 4 lines of code. (Unless someone can say this
>is definitely harmless in the SMP case)

Ok, here's the proper 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.

Better?  Anyone out there with 255 Orion chips in their system?


        -- 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


To Unsubscribe: send mail to majord...@freebsd.org
with "unsubscribe freebsd-hackers" in the body of the message

Reply via email to