|
I finally got a working PCMCIA subsystem on a Lombard and Pismo PowerBook with
both yaboot and BootX. Here is a short description of the necessary installation
steps:
* get BenH's latest kernel sources 2.2.17pre13-ben1 form http://ppclinux.apple.com/~benh/. If you boot with yaboot, apply the small patch below. It fixes the values of three registers in the CardBus bridge (secondary and subordinate bus, interrupt line to device pin routing) which are not set correctly by OpenFirmware. If you boot with BootX, the very early stages of MacOS seem to do this, so it is not necessary to apply the patch in this case (it does not do any harm, though). * get the PCMCIA package pcmcia-cs.25-Jul-00.tar.gz or later from ftp://pcmcia-cs.sourceforge.net/pub/pcmcia-cs/NEW/ and install it as usual. Due to a small bug, the latest stable release 3.1.19 does NOT work with the Pismo (but it does with the Lombard), as interrupts above 31 are not recognised. I think this will be fixed in (stable) 3.1.20. * edit /etc/pcmcia/config.opts and leave only these two lines uncommented:
include port 0x1000-0x1fff include memory 0x90000000-0x90ffffff With this configuration, I use an Adaptec SlimSCSI 1480A scsi CardBus card. I do not know if all other cards ard supported, YMMV. Have fun, Albrecht.
~~~~~~Patch follows here~~~~~~
--- linux-2.2.17pre13-ben1-orig/arch/ppc/kernel/pmac_pci.c Wed Jul 26 12:12:15 2000
+++ linux-2.2.17pre13-ben1-pcmcia/arch/ppc/kernel/pmac_pci.c Wed Jul 26 12:12:54 2000
@@ -741,6 +741,32 @@
} else
fix_intr(bp->node->child, dev);
}
+
+#define PCI_DEVICE_ID_TI_PCI1211 0xac1e
+/* Multifunction Routing Register */
+#define TI1211_MF_ROUTING 0x008c /* 32 bit */
+#define TI1211_EN_PCI_INTA 0x02 /* route PCI interrupts */
+ {
+ struct pci_dev *dev;
+
+ for(dev = pci_devices; dev; dev = dev->next)
+ {
+ if (((dev->class >> 8) == PCI_CLASS_BRIDGE_CARDBUS) &&
+ (dev->vendor == PCI_VENDOR_ID_TI) &&
+ (dev->device == PCI_DEVICE_ID_TI_PCI1211))
+ {
+ /* Lombard, Pismo */
+ printk("pcibios_fixup: fixing TI PCI1211 CardBus bridge.\n");
+
+ pcibios_write_config_dword (dev->bus->number, dev->devfn,
+ TI1211_MF_ROUTING, TI1211_EN_PCI_INTA);
+ pcibios_write_config_byte (dev->bus->number, dev->devfn,
+ PCI_SECONDARY_BUS, 1);
+ pcibios_write_config_byte (dev->bus->number, dev->devfn,
+ PCI_SUBORDINATE_BUS, 4);
+ }
+ }
+ }
}
__initfunc(
|