diff options
| -rw-r--r-- | arch/x86/kernel/pci-calgary_64.c | 54 |
1 files changed, 2 insertions, 52 deletions
diff --git a/arch/x86/kernel/pci-calgary_64.c b/arch/x86/kernel/pci-calgary_64.c index 755c21e906f3..971a3bec47a8 100644 --- a/arch/x86/kernel/pci-calgary_64.c +++ b/arch/x86/kernel/pci-calgary_64.c | |||
| @@ -186,37 +186,6 @@ static struct cal_chipset_ops calioc2_chip_ops = { | |||
| 186 | 186 | ||
| 187 | static struct calgary_bus_info bus_info[MAX_PHB_BUS_NUM] = { { NULL, 0, 0 }, }; | 187 | static struct calgary_bus_info bus_info[MAX_PHB_BUS_NUM] = { { NULL, 0, 0 }, }; |
| 188 | 188 | ||
| 189 | /* enable this to stress test the chip's TCE cache */ | ||
| 190 | #ifdef CONFIG_IOMMU_DEBUG | ||
| 191 | static int debugging = 1; | ||
| 192 | |||
| 193 | static inline unsigned long verify_bit_range(unsigned long* bitmap, | ||
| 194 | int expected, unsigned long start, unsigned long end) | ||
| 195 | { | ||
| 196 | unsigned long idx = start; | ||
| 197 | |||
| 198 | BUG_ON(start >= end); | ||
| 199 | |||
| 200 | while (idx < end) { | ||
| 201 | if (!!test_bit(idx, bitmap) != expected) | ||
| 202 | return idx; | ||
| 203 | ++idx; | ||
| 204 | } | ||
| 205 | |||
| 206 | /* all bits have the expected value */ | ||
| 207 | return ~0UL; | ||
| 208 | } | ||
| 209 | #else /* debugging is disabled */ | ||
| 210 | static int debugging; | ||
| 211 | |||
| 212 | static inline unsigned long verify_bit_range(unsigned long* bitmap, | ||
| 213 | int expected, unsigned long start, unsigned long end) | ||
| 214 | { | ||
| 215 | return ~0UL; | ||
| 216 | } | ||
| 217 | |||
| 218 | #endif /* CONFIG_IOMMU_DEBUG */ | ||
| 219 | |||
| 220 | static inline int translation_enabled(struct iommu_table *tbl) | 189 | static inline int translation_enabled(struct iommu_table *tbl) |
| 221 | { | 190 | { |
| 222 | /* only PHBs with translation enabled have an IOMMU table */ | 191 | /* only PHBs with translation enabled have an IOMMU table */ |
| @@ -228,7 +197,6 @@ static void iommu_range_reserve(struct iommu_table *tbl, | |||
| 228 | { | 197 | { |
| 229 | unsigned long index; | 198 | unsigned long index; |
| 230 | unsigned long end; | 199 | unsigned long end; |
| 231 | unsigned long badbit; | ||
| 232 | unsigned long flags; | 200 | unsigned long flags; |
| 233 | 201 | ||
| 234 | index = start_addr >> PAGE_SHIFT; | 202 | index = start_addr >> PAGE_SHIFT; |
| @@ -243,14 +211,6 @@ static void iommu_range_reserve(struct iommu_table *tbl, | |||
| 243 | 211 | ||
| 244 | spin_lock_irqsave(&tbl->it_lock, flags); | 212 | spin_lock_irqsave(&tbl->it_lock, flags); |
| 245 | 213 | ||
| 246 | badbit = verify_bit_range(tbl->it_map, 0, index, end); | ||
| 247 | if (badbit != ~0UL) { | ||
| 248 | if (printk_ratelimit()) | ||
| 249 | printk(KERN_ERR "Calgary: entry already allocated at " | ||
| 250 | "0x%lx tbl %p dma 0x%lx npages %u\n", | ||
| 251 | badbit, tbl, start_addr, npages); | ||
| 252 | } | ||
| 253 | |||
| 254 | iommu_area_reserve(tbl->it_map, index, npages); | 214 | iommu_area_reserve(tbl->it_map, index, npages); |
| 255 | 215 | ||
| 256 | spin_unlock_irqrestore(&tbl->it_lock, flags); | 216 | spin_unlock_irqrestore(&tbl->it_lock, flags); |
| @@ -326,7 +286,6 @@ static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, | |||
| 326 | unsigned int npages) | 286 | unsigned int npages) |
| 327 | { | 287 | { |
| 328 | unsigned long entry; | 288 | unsigned long entry; |
| 329 | unsigned long badbit; | ||
| 330 | unsigned long badend; | 289 | unsigned long badend; |
| 331 | unsigned long flags; | 290 | unsigned long flags; |
| 332 | 291 | ||
| @@ -346,14 +305,6 @@ static void iommu_free(struct iommu_table *tbl, dma_addr_t dma_addr, | |||
| 346 | 305 | ||
| 347 | spin_lock_irqsave(&tbl->it_lock, flags); | 306 | spin_lock_irqsave(&tbl->it_lock, flags); |
| 348 | 307 | ||
| 349 | badbit = verify_bit_range(tbl->it_map, 1, entry, entry + npages); | ||
| 350 | if (badbit != ~0UL) { | ||
| 351 | if (printk_ratelimit()) | ||
| 352 | printk(KERN_ERR "Calgary: bit is off at 0x%lx " | ||
| 353 | "tbl %p dma 0x%Lx entry 0x%lx npages %u\n", | ||
| 354 | badbit, tbl, dma_addr, entry, npages); | ||
| 355 | } | ||
| 356 | |||
| 357 | iommu_area_free(tbl->it_map, entry, npages); | 308 | iommu_area_free(tbl->it_map, entry, npages); |
| 358 | 309 | ||
| 359 | spin_unlock_irqrestore(&tbl->it_lock, flags); | 310 | spin_unlock_irqrestore(&tbl->it_lock, flags); |
| @@ -1488,9 +1439,8 @@ void __init detect_calgary(void) | |||
| 1488 | iommu_detected = 1; | 1439 | iommu_detected = 1; |
| 1489 | calgary_detected = 1; | 1440 | calgary_detected = 1; |
| 1490 | printk(KERN_INFO "PCI-DMA: Calgary IOMMU detected.\n"); | 1441 | printk(KERN_INFO "PCI-DMA: Calgary IOMMU detected.\n"); |
| 1491 | printk(KERN_INFO "PCI-DMA: Calgary TCE table spec is %d, " | 1442 | printk(KERN_INFO "PCI-DMA: Calgary TCE table spec is %d\n", |
| 1492 | "CONFIG_IOMMU_DEBUG is %s.\n", specified_table_size, | 1443 | specified_table_size); |
| 1493 | debugging ? "enabled" : "disabled"); | ||
| 1494 | 1444 | ||
| 1495 | /* swiotlb for devices that aren't behind the Calgary. */ | 1445 | /* swiotlb for devices that aren't behind the Calgary. */ |
| 1496 | if (max_pfn > MAX_DMA32_PFN) | 1446 | if (max_pfn > MAX_DMA32_PFN) |
