Skip to contentSkip to conversation

Prometheus PCI Driver

DISCUSSION Geert Uytterhoeven 1 participant 1 message Jan 28, 2002 1 message not in the archive

lore
Share & tools
lore

A message that is not in the archive (sent off-list or not yet received): 038401c1a784$4eb019d0$9865fea9@WORK

#1 lore raw

[ Note for the non-APUS readers: The Prometheus is a Zorro-PCI bridge for
Amiga ]

Quoted 5 lines · Adam Kowalczyk

So far so good on the 2.4.17 version of the Prometheus PCI driver. I'm down to one message during the PCI initialization that I'm not too sure of what it means. I'm not sure what the following is telling me:

Quoted 1 line

PCI: Cannot allocate resource region 1 of PCI bridge 0

So the PCI bus init code couldn't add the bus resource to the resource tree (i.e. that region was already occupied).

Quoted 5 lines

If I take a look at /proc/iomem, there are clearly entries for the resource that I've set up for the PCI memory and entries for the Voodoo 3 card show up as well. Similarly, /proc/ioports shows the I/O port listing for the Voodoo 3 I/O port. Here is the dmesg file for reference. Any ideas what the message means?

Can you post the contents of /proc/iomem and /proc/ioports as well? And lspci -vv?

I guess the Prometheus bus resources show up in /proc/ioports but not in /proc/iomem?

Quoted 7 lines
Quoted 7 lines

Zorro: Probing AutoConfig expansion devices: 4 devices
Start: 0x40000000 End: 0x5fffffff
Prometheus PCI bridge detected.
About to do a zorro_request_device()
I made it here!
prom_setup_pci_ptrs: PCI mem resource requested About to perform ioremap().

Quoted 8 lines
Quoted 8 lines

ioremap: 400f0000 (00010000) -> c8000000
Check out this Data 0xc8000000
About to leave prom_pci_setup_ptrs()
PCI: Probing PCI hardware
About to INIT_LIST_HEAD
Inside prom_pcibios_fixup_bus()
PCI: Cannot allocate resource region 1 of PCI bridge 0
PCI: resource is 40100000..5fffffff (200), parent c01e9c38

That's the PCI memory space of the Prometheus?
(http://prometheus.amiga.pl/developer.html is refusing connections right now, so I can't verify).

The error message is printed in pcibios_allocate_bus_resources() (arch/ppc/kernel/pci.c). That routine tries to find the parent resources for the resources of your PCI host bridge.

Did you fill in bus->parent?

- If no (I guess so), the code will use &iomem_resource as the parent resource. Then request_resource() will fail because the Zorro part of the Prometheus already has requested that region (you should see the Zorro part in /proc/iomem).

- If yes (very unlikely), pci_find_parent_resource() did not find a correct resource to use as a parent for the region 40100000..5fffffff.

So you should tell the bus setup code that your bus parent is the Prometheus Zorro device. Unfortunately that's not as simple as it sounds, since bus->parent is of type struct pci_bus *, which is not compatible with the Zorro bus ;-(

The problem is that the PCI code assumes that PCI busses always hang off of nothing (i.e. the CPU) or other PCI busses, while in the Prometheus' case we don't have a PCI host bridge (bus->parent is NULL) or a PCI-PCI bridge (bus->parent is non-NULL), but a Zorro-PCI bridge. (Once we'll have had the generic device driver framework rewrite, I guess that'll be fixed)

I think the best solution is to copy the pcibios_allocate_bus_resources() code to your Prometheus driver and modify it to always use &ioport_resource as the parent resource for PCI I/O resources, and zorro_dev.resource of the Prometheus Zorro device for PCI memory resources.

It might still break other code that assumes bus->parent contains something valid, though. But since it works for normal PCI host bridges where bus->parent is NULL as well, I think everything will be fine.

Question: Are there any other machines where the PCI subsystem doesn't hang off of the CPU, but of some other sufficiently intelligent bus (so VESA Local Bus doesn't count)?

Quoted 4 lines
Quoted 4 lines

PCI:00:01.0: Resource 0: 42000000-43ffffff (f=200) PCI:00:01.0: Resource 1: 44000000-45ffffff (f=1208) PCI:00:01.0: Resource 2: 40000000-400000ff (f=101)
PCI: Switching off ROM of 00:01.0

So your PCI devices are found and hooked up in the resource tree.

Quoted 6 lines
Quoted 6 lines

ioremap: 42000000 (01000000) -> c801e000
ioremap: 44000000 (01000000) -> c901f000
ioremap: 40000000 (00001000) -> ca020000
fb: Voodoo3 memory = 16384K
Console: switching to colour frame buffer device 100x37
fb0: 3Dfx Voodoo3 frame buffer device

And the Voodoo3 is working! Very nice!

Gr{oetje,eeting}s,

Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected]

In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that.
-- Linus Torvalds