On G5 machines, we remap the AGP port to bus number 0xf0. XFree

contains a hack that is unfixable at the moment for getting the
IO base which is hard coded to bus number 0 (AGP on earlier machines).
We work around this by passing the IO base of bus 0xf0 when asked
for bus 0 in pciconfig_iobase on those machines. Bus 0 is the HT
root and has no IOs, so that is safe.
parent c01da8ae
...@@ -1645,12 +1645,23 @@ pci_bus_to_phys(unsigned int ba, int busnr) ...@@ -1645,12 +1645,23 @@ pci_bus_to_phys(unsigned int ba, int busnr)
* Note that the returned IO or memory base is a physical address * Note that the returned IO or memory base is a physical address
*/ */
long long sys_pciconfig_iobase(long which, unsigned long bus, unsigned long devfn)
sys_pciconfig_iobase(long which, unsigned long bus, unsigned long devfn)
{ {
struct pci_controller* hose = pci_bus_to_hose(bus); struct pci_controller* hose;
long result = -EOPNOTSUPP; long result = -EOPNOTSUPP;
/* Argh ! Please forgive me for that hack, but that's the
* simplest way to get existing XFree to not lockup on some
* G5 machines... So when something asks for bus 0 io base
* (bus 0 is HT root), we return the AGP one instead.
*/
#ifdef CONFIG_PPC_PMAC
if (_machine == _MACH_Pmac && machine_is_compatible("MacRISC4"))
if (bus == 0)
bus = 0xf0;
#endif /* CONFIG_PPC_PMAC */
hose = pci_bus_to_hose(bus);
if (!hose) if (!hose)
return -ENODEV; return -ENODEV;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment