Date: Tue, 25 Jan 2005 12:28:23 -0500 From: Jung-uk Kim <jkim@niksun.com> To: freebsd-amd64@freebsd.org Subject: Compaq R3000 Cardbus fix (and rant) Message-ID: <200501251228.23539.jkim@niksun.com>
next in thread | raw e-mail | index | archive | help
--Boundary-00=_3Go9BQtDESJF92S Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline This brain-damaged laptop has lots of issues. :-( One of the problems is Cardbus. The culprit is BIOS which forgot to set subordinate bus number for a PCI-to-PCI bridge. For more info, please read: http://bugzilla.kernel.org/show_bug.cgi?id=2944 Since we cannot possitively identify BIOS version in FreeBSD/amd64, work-around is setting it manually or flipping '#if 0' to '#if 1' at the first chunk of the attached patch (yeah, I know this is really ugly). To set it manually, type: pciconf -w -b pci0:10:0 0x1a 0x0a as root. The second problem is src/sys/dev/pci/pci_pci.c complains the I/O range is unsupported. The attachment fixes the second problem. Be careful! You *must* correct the subordinate bus number before inseting a card. Enjoy, Jung-uk Kim * PS: Can anybody tell me why it doesn't set `ok' to 1 after the correction? * PS: Does anybody know how to deal with this insane nForce3 APIC? Using atpic and ACPI, we get ATA timeouts, NIC watchdog timeouts, frozen statclock (i. e., rtc stops generating periodic interrupts), etc. It's just keeps on losing interrupts... I know you guys said 'stay away from it' many times but this is what I got. :-( --Boundary-00=_3Go9BQtDESJF92S Content-Type: text/plain; charset="us-ascii"; name="r3000z-cardbus.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="r3000z-cardbus.diff" --- src/sys/dev/pci/pci_pci.c.orig Thu Jul 1 03:46:28 2004 +++ src/sys/dev/pci/pci_pci.c Sat Jan 22 01:21:50 2005 @@ -185,6 +185,12 @@ case 0x060513d7: /* Toshiba ???? */ sc->flags |= PCIB_SUBTRACTIVE; break; + +#if 0 + case 0x00dd10de: /* XXX: Compaq R3000 */ + pci_write_config(dev, PCIR_SUBBUS_1, 0xa, 1); + break; +#endif } /* @@ -319,6 +319,8 @@ start = sc->iobase; if (end > sc->iolimit) end = sc->iolimit; + if (start <= end) + ok = 1; } } else { ok = 1; --Boundary-00=_3Go9BQtDESJF92S--
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200501251228.23539.jkim>