linux/arch/powerpc
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
..
boot [POWERPC] Fix mpc52xx fdt to use correct device_type for sound devices 2007-01-09 17:03:02 +11:00
configs [POWERPC] Add legacy iSeries to ppc64_defconfig 2007-01-09 17:03:02 +11:00
kernel [POWERPC] Remove bogus sanity check in pci -> OF node code 2007-01-22 21:27:35 +11:00
lib [POWERPC] Disallow kprobes on emulate_step and branch_taken 2006-11-01 15:14:12 +11:00
math-emu [POWERPC] ppc math-emu needs -fno-builtin-fabs for math.c and fabs.c 2006-09-26 15:24:35 +10:00
mm [POWERPC] Fix bogus BUG_ON() in in hugetlb_get_unmapped_area() 2007-01-09 17:03:01 +11:00
oprofile [POWERPC] ps3: multiplatform build fixes 2006-12-04 20:41:16 +11:00
platforms [POWERPC] Fix broken DMA on non-LPAR pSeries 2007-01-22 21:27:35 +11:00
sysdev [POWERPC] Fix cell's mmio nvram to properly parse device tree 2007-01-22 21:27:35 +11:00
xmon [POWERPC] Generic BUG for powerpc 2006-12-11 16:35:07 +11:00
.gitignore [POWERPC] Add files build to .gitignore 2006-12-04 20:41:29 +11:00
Kconfig [POWERPC] disable PReP and EFIKA during make oldconfig 2007-01-09 17:03:02 +11:00
Kconfig.debug [POWERPC] Allow CONFIG_BOOTX_TEXT on iSeries 2006-12-04 20:41:58 +11:00
Makefile [POWERPC] Create a "wrapper" script and use it in arch/powerpc/boot 2006-09-28 14:30:02 +10:00