Re: In Search of "Michel Lanners" (Re:(PowerPC Linux PCI HELL))

From: Michel Lanners (mlan@cpu.lu)
Date: Thu Sep 14 2000 - 13:18:41 EST


I'm here ;-)

On 13 Sep, this message from Andre Hedrick echoed through cyberspace:
> Bogus Patch :-(

Not my patch :-))

> This is what I did also but more brut force with verification of IO's and
> it still craps out..

I have added device enabling in PPC PCI fixup code for PowerMacs. But
Martin and Geert tought me that that's not the 'right way' to do it.
Anyway, see below...

> On Wed, 13 Sep 2000, Daniel Jacobowitz wrote:
>> > My new PPC G3 (7600/132) toy is not allowing IO's on PCI cards to come
>> > alive.

Hehe. Exactly my machine ;-)

>> > Basically I can not get the IO's active, regardless of BIOS on the card.

The explanation is that PowerMac firmware (OpenFirmware, that is) will
not enable any PCI device it doesn't know. Resources get assigned ok,
but that's it.

>> I'm going to bet you need to look at Michel Lanners' (did I spell that
>> right this time?) PCI patches.

Yes, spelled right. Thanks ;-)

>> diff -ur merging-bk/drivers/block/ide-pci.c work-bk/drivers/block/ide-pci.c
>> --- merging-bk/drivers/block/ide-pci.c Tue Apr 4 22:19:16 2000
>> +++ work-bk/drivers/block/ide-pci.c Thu Mar 9 15:33:25 2000
>> @@ -468,6 +468,15 @@
>> printk("%s: error accessing PCI regs\n", d->name);
>> return;
>> }
>> +#ifdef __powerpc__
>> + if (!(pcicmd & PCI_COMMAND_IO)) { /* is device disabled? */
>> + pci_write_config_word(dev, PCI_COMMAND, pcicmd | PCI_COMMAND_IO);
>> + if (pci_read_config_word(dev, PCI_COMMAND, &pcicmd)) {
>> + printk("%s: error accessing PCI regs\n", d->name);
>> + return;
>> + }
>> + }
>> +#endif

This patch should basically be correct. In essence, that's what's done
elsewhere as well, be it in my patches or with pci_enable_device().

Oh, wait... you've got problems accessing _IO_ space? That's a different
matter altogether. Let me explain: On PowerPC, there's no such thing as
an IO space, or dedicated IO instructions. The memory model is flat.
Now, in order to support IO space on the PCI bus, that IO space is
simply mapped to a memory region by the bus bridge, which also takes
care of generating IO cycles on the bus.

This mapping of IO space to the regular memory space is not transparent,
i.e. adresses are translated. That's what the _IO_BASE is for. Now, I
don't remember exactly, but in order to get the Promise going in my box,
I got rid of _IO_BASE, and rather fixed the struct pci_dev of the
Promise to point its IO regions at the translated space. Again, I'm not
sure what the exact problem was when not doing that, or whether with
recent 2.4 PPC kernels, that's still necessary.

Anyway, either look for yourself in the direction of IO space
remappings, or have a look at the PCI patches on my site, which include
the IO space stuff:

http://www.cpu.lu/~mlan/linux/dev/pci.html

Have fun!

Michel

-------------------------------------------------------------------------
Michel Lanners | " Read Philosophy. Study Art.
23, Rue Paul Henkes | Ask Questions. Make Mistakes.
L-1710 Luxembourg |
email mlan@cpu.lu |
http://www.cpu.lu/~mlan | Learn Always. "

-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
Please read the FAQ at http://www.tux.org/lkml/



This archive was generated by hypermail 2b29 : Fri Sep 15 2000 - 21:00:24 EST