On Mon, 2009-11-30 at 17:19 -0700, Grant Grundler wrote:
Apologies for not threading the v2 patch into the original thread. The
prefetchable base register does support the upper32 bits and it does
work correctly. However per the pci-to-pci bridge spec, a little lower
on page 47, devices only supporting 32bit prefetchable ranges are to
implement the upper32 registers as read-only registers that return zero.
In the example above, -1 in the upper32 base simply means that base >
limit, which disables the range.
Further investigation shows that the MEM_64 resource flag is setup for
this range based on hardware capabilities, but then it gets removed in
pbus_size_mem() because we want to use the range to map a 32bit option
ROM. This leaves us entering pci_setup_bridge() with -1 in the upper32
base and the MEM_64 flag clear, so we never touch the upper32 base
register. I think this patch is still a simple, safe solution. Thanks,
Alex
--