linux/arch/powerpc/platforms
Linas Vepstas 77319254f1 [POWERPC] Fix broken DMA on non-LPAR pSeries
It appears that the iommu table address is never stored, and thus
never found, on non-lpar systems. Thus, for example, during boot:

<7>[   93.067916] PCI: Scanning bus 0001:41
<7>[   93.068542] PCI: Found 0001:41:01.0 [8086/100f] 000200 00
<7>[   93.068550] PCI: Calling quirk c0000000007822e0 for 0001:41:01.0
<7>[   93.069815] PCI: Fixups for bus 0001:41
<4>[   93.070167] iommu: Device 0001:41:01.0 has no iommu table
<7>[   93.070251] PCI: Bus scan for 0001:41 returning with max=41

No iommu table? How can that be? Well, circa line 471 of
arch/powerpc/platforms/pseries/iommu.c we see the code:

   while (dn && PCI_DN(dn) && PCI_DN(dn)->iommu_table == NULL)
      dn = dn->parent;

and a few lines later is the surprising print statement about
the missing table.  Seems that this loop ran unto the end, never
once finding a non-null PCI_DN(dn)->iommu_table.

The problem can be found a few lines earlier: it sems that the
value of PCI_DN(dn)->iommu_table is never ever set. Thus, the
patch sets it.

The patch was tested on a Power4 system running in full system
partition mode, which is where I saw the problem. It works; I've
not done any wider testing. Had a brief discussion on this on irc.

Signed-off-by: Linas Vepstas <linas@austin.ibm.com>
Acked-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Paul Mackerras <paulus@samba.org>
2007-01-22 21:27:35 +11:00
..
4xx kconfig: Standardize "depends" -> "depends on" in Kconfig files 2006-12-12 20:04:19 +01:00
8xx powerpc: Merge enough to start building in arch/powerpc. 2005-09-26 16:04:21 +10:00
52xx [POWERPC] 52xx: Don't use device_initcall to probe of_platform_bus 2007-01-09 17:03:02 +11:00
82xx [POWERPC] Make pci_read_irq_line the default 2006-12-04 16:00:04 +11:00
83xx [POWERPC] Remove ppc_md.pci_map_irq & ppc_swizzle for ARCH=powerpc 2006-12-04 16:00:14 +11:00
85xx [POWERPC] Remove ioremap64 and fixup_bigphys_addr 2006-12-04 20:39:04 +11:00
86xx [POWERPC] Make pci_read_irq_line the default 2006-12-04 16:00:04 +11:00
apus powerpc: Merge enough to start building in arch/powerpc. 2005-09-26 16:04:21 +10:00
cell [POWERPC] spufs: fix assignment of node numbers 2006-12-19 15:35:39 +01:00
chrp [POWERPC] Merge 32 and 64 bits asm-powerpc/io.h 2006-12-04 20:39:05 +11:00
embedded6xx kconfig: Standardize "depends" -> "depends on" in Kconfig files 2006-12-12 20:04:19 +01:00
iseries [POWERPC] iSeries: fix setup initcall 2007-01-09 17:03:03 +11:00
maple [POWERPC] Fix unbalanced uses of of_node_put 2007-01-09 17:03:01 +11:00
pasemi [POWERPC] Fix unbalanced uses of of_node_put 2007-01-09 17:03:01 +11:00
powermac WorkQueue: Fix up arch-specific work items where possible 2006-12-05 19:36:26 +00:00
prep powerpc: Merge enough to start building in arch/powerpc. 2005-09-26 16:04:21 +10:00
ps3 [POWERPC] ps3: Add vuart support 2006-12-11 13:49:53 +11:00
pseries [POWERPC] Fix broken DMA on non-LPAR pSeries 2007-01-22 21:27:35 +11:00
Makefile [POWERPC] Probe Efika platform before CHRP. 2006-12-20 16:37:48 +11:00