diff options
author | Paul Mackerras <paulus@samba.org> | 2007-05-07 23:37:51 -0400 |
---|---|---|
committer | Paul Mackerras <paulus@samba.org> | 2007-05-07 23:37:51 -0400 |
commit | 02bbc0f09c90cefdb2837605c96a66c5ce4ba2e1 (patch) | |
tree | 04ef573cd4de095c500c9fc3477f4278c0b36300 /arch/sparc64/kernel/pci_iommu.c | |
parent | 7487a2245b8841c77ba9db406cf99a483b9334e9 (diff) | |
parent | 5b94f675f57e4ff16c8fda09088d7480a84dcd91 (diff) |
Merge branch 'linux-2.6'
Diffstat (limited to 'arch/sparc64/kernel/pci_iommu.c')
-rw-r--r-- | arch/sparc64/kernel/pci_iommu.c | 22 |
1 files changed, 13 insertions, 9 deletions
diff --git a/arch/sparc64/kernel/pci_iommu.c b/arch/sparc64/kernel/pci_iommu.c index 66712772f494..9e405cbbcb0d 100644 --- a/arch/sparc64/kernel/pci_iommu.c +++ b/arch/sparc64/kernel/pci_iommu.c | |||
@@ -37,17 +37,21 @@ | |||
37 | /* Must be invoked under the IOMMU lock. */ | 37 | /* Must be invoked under the IOMMU lock. */ |
38 | static void __iommu_flushall(struct iommu *iommu) | 38 | static void __iommu_flushall(struct iommu *iommu) |
39 | { | 39 | { |
40 | unsigned long tag; | 40 | if (iommu->iommu_flushinv) { |
41 | int entry; | 41 | pci_iommu_write(iommu->iommu_flushinv, ~(u64)0); |
42 | } else { | ||
43 | unsigned long tag; | ||
44 | int entry; | ||
42 | 45 | ||
43 | tag = iommu->iommu_flush + (0xa580UL - 0x0210UL); | 46 | tag = iommu->iommu_flush + (0xa580UL - 0x0210UL); |
44 | for (entry = 0; entry < 16; entry++) { | 47 | for (entry = 0; entry < 16; entry++) { |
45 | pci_iommu_write(tag, 0); | 48 | pci_iommu_write(tag, 0); |
46 | tag += 8; | 49 | tag += 8; |
47 | } | 50 | } |
48 | 51 | ||
49 | /* Ensure completion of previous PIO writes. */ | 52 | /* Ensure completion of previous PIO writes. */ |
50 | (void) pci_iommu_read(iommu->write_complete_reg); | 53 | (void) pci_iommu_read(iommu->write_complete_reg); |
54 | } | ||
51 | } | 55 | } |
52 | 56 | ||
53 | #define IOPTE_CONSISTENT(CTX) \ | 57 | #define IOPTE_CONSISTENT(CTX) \ |