Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at v3.8 1133 lines 34 kB view raw
1/* 2 * Copyright 2010 Ben Herrenschmidt, IBM Corporation 3 * 4 * This program is free software; you can redistribute it and/or 5 * modify it under the terms of the GNU General Public License 6 * as published by the Free Software Foundation; either version 7 * 2 of the License, or (at your option) any later version. 8 */ 9 10#define DEBUG 11 12#include <linux/kernel.h> 13#include <linux/pci.h> 14#include <linux/delay.h> 15#include <linux/string.h> 16#include <linux/init.h> 17#include <linux/bootmem.h> 18#include <linux/irq.h> 19#include <linux/interrupt.h> 20#include <linux/debugfs.h> 21 22#include <asm/sections.h> 23#include <asm/io.h> 24#include <asm/prom.h> 25#include <asm/pci-bridge.h> 26#include <asm/machdep.h> 27#include <asm/ppc-pci.h> 28#include <asm/iommu.h> 29#include <asm/io-workarounds.h> 30#include <asm/debug.h> 31 32#include "wsp.h" 33#include "wsp_pci.h" 34#include "msi.h" 35 36 37/* Max number of TVTs for one table. Only 32-bit tables can use 38 * multiple TVTs and so the max currently supported is thus 8 39 * since only 2G of DMA space is supported 40 */ 41#define MAX_TABLE_TVT_COUNT 8 42 43struct wsp_dma_table { 44 struct list_head link; 45 struct iommu_table table; 46 struct wsp_phb *phb; 47 struct page *tces[MAX_TABLE_TVT_COUNT]; 48}; 49 50/* We support DMA regions from 0...2G in 32bit space (no support for 51 * 64-bit DMA just yet). Each device gets a separate TCE table (TVT 52 * entry) with validation enabled (though not supported by SimiCS 53 * just yet). 54 * 55 * To simplify things, we divide this 2G space into N regions based 56 * on the constant below which could be turned into a tunable eventually 57 * 58 * We then assign dynamically those regions to devices as they show up. 59 * 60 * We use a bitmap as an allocator for these. 61 * 62 * Tables are allocated/created dynamically as devices are discovered, 63 * multiple TVT entries are used if needed 64 * 65 * When 64-bit DMA support is added we should simply use a separate set 66 * of larger regions (the HW supports 64 TVT entries). We can 67 * additionally create a bypass region in 64-bit space for performances 68 * though that would have a cost in term of security. 69 * 70 * If you set NUM_DMA32_REGIONS to 1, then a single table is shared 71 * for all devices and bus/dev/fn validation is disabled 72 * 73 * Note that a DMA32 region cannot be smaller than 256M so the max 74 * supported here for now is 8. We don't yet support sharing regions 75 * between multiple devices so the max number of devices supported 76 * is MAX_TABLE_TVT_COUNT. 77 */ 78#define NUM_DMA32_REGIONS 1 79 80struct wsp_phb { 81 struct pci_controller *hose; 82 83 /* Lock controlling access to the list of dma tables. 84 * It does -not- protect against dma_* operations on 85 * those tables, those should be stopped before an entry 86 * is removed from the list. 87 * 88 * The lock is also used for error handling operations 89 */ 90 spinlock_t lock; 91 struct list_head dma_tables; 92 unsigned long dma32_map; 93 unsigned long dma32_base; 94 unsigned int dma32_num_regions; 95 unsigned long dma32_region_size; 96 97 /* Debugfs stuff */ 98 struct dentry *ddir; 99 100 struct list_head all; 101}; 102static LIST_HEAD(wsp_phbs); 103 104//#define cfg_debug(fmt...) pr_debug(fmt) 105#define cfg_debug(fmt...) 106 107 108static int wsp_pcie_read_config(struct pci_bus *bus, unsigned int devfn, 109 int offset, int len, u32 *val) 110{ 111 struct pci_controller *hose; 112 int suboff; 113 u64 addr; 114 115 hose = pci_bus_to_host(bus); 116 if (hose == NULL) 117 return PCIBIOS_DEVICE_NOT_FOUND; 118 if (offset >= 0x1000) 119 return PCIBIOS_BAD_REGISTER_NUMBER; 120 addr = PCIE_REG_CA_ENABLE | 121 ((u64)bus->number) << PCIE_REG_CA_BUS_SHIFT | 122 ((u64)devfn) << PCIE_REG_CA_FUNC_SHIFT | 123 ((u64)offset & ~3) << PCIE_REG_CA_REG_SHIFT; 124 suboff = offset & 3; 125 126 /* 127 * Note: the caller has already checked that offset is 128 * suitably aligned and that len is 1, 2 or 4. 129 */ 130 131 switch (len) { 132 case 1: 133 addr |= (0x8ul >> suboff) << PCIE_REG_CA_BE_SHIFT; 134 out_be64(hose->cfg_data + PCIE_REG_CONFIG_ADDRESS, addr); 135 *val = (in_le32(hose->cfg_data + PCIE_REG_CONFIG_DATA) 136 >> (suboff << 3)) & 0xff; 137 cfg_debug("read 1 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%02x\n", 138 bus->number, devfn >> 3, devfn & 7, 139 offset, suboff, addr, *val); 140 break; 141 case 2: 142 addr |= (0xcul >> suboff) << PCIE_REG_CA_BE_SHIFT; 143 out_be64(hose->cfg_data + PCIE_REG_CONFIG_ADDRESS, addr); 144 *val = (in_le32(hose->cfg_data + PCIE_REG_CONFIG_DATA) 145 >> (suboff << 3)) & 0xffff; 146 cfg_debug("read 2 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%04x\n", 147 bus->number, devfn >> 3, devfn & 7, 148 offset, suboff, addr, *val); 149 break; 150 default: 151 addr |= 0xful << PCIE_REG_CA_BE_SHIFT; 152 out_be64(hose->cfg_data + PCIE_REG_CONFIG_ADDRESS, addr); 153 *val = in_le32(hose->cfg_data + PCIE_REG_CONFIG_DATA); 154 cfg_debug("read 4 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%08x\n", 155 bus->number, devfn >> 3, devfn & 7, 156 offset, suboff, addr, *val); 157 break; 158 } 159 return PCIBIOS_SUCCESSFUL; 160} 161 162static int wsp_pcie_write_config(struct pci_bus *bus, unsigned int devfn, 163 int offset, int len, u32 val) 164{ 165 struct pci_controller *hose; 166 int suboff; 167 u64 addr; 168 169 hose = pci_bus_to_host(bus); 170 if (hose == NULL) 171 return PCIBIOS_DEVICE_NOT_FOUND; 172 if (offset >= 0x1000) 173 return PCIBIOS_BAD_REGISTER_NUMBER; 174 addr = PCIE_REG_CA_ENABLE | 175 ((u64)bus->number) << PCIE_REG_CA_BUS_SHIFT | 176 ((u64)devfn) << PCIE_REG_CA_FUNC_SHIFT | 177 ((u64)offset & ~3) << PCIE_REG_CA_REG_SHIFT; 178 suboff = offset & 3; 179 180 /* 181 * Note: the caller has already checked that offset is 182 * suitably aligned and that len is 1, 2 or 4. 183 */ 184 switch (len) { 185 case 1: 186 addr |= (0x8ul >> suboff) << PCIE_REG_CA_BE_SHIFT; 187 val <<= suboff << 3; 188 out_be64(hose->cfg_data + PCIE_REG_CONFIG_ADDRESS, addr); 189 out_le32(hose->cfg_data + PCIE_REG_CONFIG_DATA, val); 190 cfg_debug("write 1 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%02x\n", 191 bus->number, devfn >> 3, devfn & 7, 192 offset, suboff, addr, val); 193 break; 194 case 2: 195 addr |= (0xcul >> suboff) << PCIE_REG_CA_BE_SHIFT; 196 val <<= suboff << 3; 197 out_be64(hose->cfg_data + PCIE_REG_CONFIG_ADDRESS, addr); 198 out_le32(hose->cfg_data + PCIE_REG_CONFIG_DATA, val); 199 cfg_debug("write 2 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%04x\n", 200 bus->number, devfn >> 3, devfn & 7, 201 offset, suboff, addr, val); 202 break; 203 default: 204 addr |= 0xful << PCIE_REG_CA_BE_SHIFT; 205 out_be64(hose->cfg_data + PCIE_REG_CONFIG_ADDRESS, addr); 206 out_le32(hose->cfg_data + PCIE_REG_CONFIG_DATA, val); 207 cfg_debug("write 4 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%08x\n", 208 bus->number, devfn >> 3, devfn & 7, 209 offset, suboff, addr, val); 210 break; 211 } 212 return PCIBIOS_SUCCESSFUL; 213} 214 215static struct pci_ops wsp_pcie_pci_ops = 216{ 217 .read = wsp_pcie_read_config, 218 .write = wsp_pcie_write_config, 219}; 220 221#define TCE_SHIFT 12 222#define TCE_PAGE_SIZE (1 << TCE_SHIFT) 223#define TCE_PCI_WRITE 0x2 /* write from PCI allowed */ 224#define TCE_PCI_READ 0x1 /* read from PCI allowed */ 225#define TCE_RPN_MASK 0x3fffffffffful /* 42-bit RPN (4K pages) */ 226#define TCE_RPN_SHIFT 12 227 228//#define dma_debug(fmt...) pr_debug(fmt) 229#define dma_debug(fmt...) 230 231static int tce_build_wsp(struct iommu_table *tbl, long index, long npages, 232 unsigned long uaddr, enum dma_data_direction direction, 233 struct dma_attrs *attrs) 234{ 235 struct wsp_dma_table *ptbl = container_of(tbl, 236 struct wsp_dma_table, 237 table); 238 u64 proto_tce; 239 u64 *tcep; 240 u64 rpn; 241 242 proto_tce = TCE_PCI_READ; 243#ifdef CONFIG_WSP_DD1_WORKAROUND_DD1_TCE_BUGS 244 proto_tce |= TCE_PCI_WRITE; 245#else 246 if (direction != DMA_TO_DEVICE) 247 proto_tce |= TCE_PCI_WRITE; 248#endif 249 250 /* XXX Make this faster by factoring out the page address for 251 * within a TCE table 252 */ 253 while (npages--) { 254 /* We don't use it->base as the table can be scattered */ 255 tcep = (u64 *)page_address(ptbl->tces[index >> 16]); 256 tcep += (index & 0xffff); 257 258 /* can't move this out since we might cross LMB boundary */ 259 rpn = __pa(uaddr) >> TCE_SHIFT; 260 *tcep = proto_tce | (rpn & TCE_RPN_MASK) << TCE_RPN_SHIFT; 261 262 dma_debug("[DMA] TCE %p set to 0x%016llx (dma addr: 0x%lx)\n", 263 tcep, *tcep, (tbl->it_offset + index) << IOMMU_PAGE_SHIFT); 264 265 uaddr += TCE_PAGE_SIZE; 266 index++; 267 } 268 return 0; 269} 270 271static void tce_free_wsp(struct iommu_table *tbl, long index, long npages) 272{ 273 struct wsp_dma_table *ptbl = container_of(tbl, 274 struct wsp_dma_table, 275 table); 276#ifndef CONFIG_WSP_DD1_WORKAROUND_DD1_TCE_BUGS 277 struct pci_controller *hose = ptbl->phb->hose; 278#endif 279 u64 *tcep; 280 281 /* XXX Make this faster by factoring out the page address for 282 * within a TCE table. Also use line-kill option to kill multiple 283 * TCEs at once 284 */ 285 while (npages--) { 286 /* We don't use it->base as the table can be scattered */ 287 tcep = (u64 *)page_address(ptbl->tces[index >> 16]); 288 tcep += (index & 0xffff); 289 dma_debug("[DMA] TCE %p cleared\n", tcep); 290 *tcep = 0; 291#ifndef CONFIG_WSP_DD1_WORKAROUND_DD1_TCE_BUGS 292 /* Don't write there since it would pollute other MMIO accesses */ 293 out_be64(hose->cfg_data + PCIE_REG_TCE_KILL, 294 PCIE_REG_TCEKILL_SINGLE | PCIE_REG_TCEKILL_PS_4K | 295 (__pa(tcep) & PCIE_REG_TCEKILL_ADDR_MASK)); 296#endif 297 index++; 298 } 299} 300 301static struct wsp_dma_table *wsp_pci_create_dma32_table(struct wsp_phb *phb, 302 unsigned int region, 303 struct pci_dev *validate) 304{ 305 struct pci_controller *hose = phb->hose; 306 unsigned long size = phb->dma32_region_size; 307 unsigned long addr = phb->dma32_region_size * region + phb->dma32_base; 308 struct wsp_dma_table *tbl; 309 int tvts_per_table, i, tvt, nid; 310 unsigned long flags; 311 312 nid = of_node_to_nid(phb->hose->dn); 313 314 /* Calculate how many TVTs are needed */ 315 tvts_per_table = size / 0x10000000; 316 if (tvts_per_table == 0) 317 tvts_per_table = 1; 318 319 /* Calculate the base TVT index. We know all tables have the same 320 * size so we just do a simple multiply here 321 */ 322 tvt = region * tvts_per_table; 323 324 pr_debug(" Region : %d\n", region); 325 pr_debug(" DMA range : 0x%08lx..0x%08lx\n", addr, addr + size - 1); 326 pr_debug(" Number of TVTs : %d\n", tvts_per_table); 327 pr_debug(" Base TVT : %d\n", tvt); 328 pr_debug(" Node : %d\n", nid); 329 330 tbl = kzalloc_node(sizeof(struct wsp_dma_table), GFP_KERNEL, nid); 331 if (!tbl) 332 return ERR_PTR(-ENOMEM); 333 tbl->phb = phb; 334 335 /* Create as many TVTs as needed, each represents 256M at most */ 336 for (i = 0; i < tvts_per_table; i++) { 337 u64 tvt_data1, tvt_data0; 338 339 /* Allocate table. We use a 4K TCE size for now always so 340 * one table is always 8 * (258M / 4K) == 512K 341 */ 342 tbl->tces[i] = alloc_pages_node(nid, GFP_KERNEL, get_order(0x80000)); 343 if (tbl->tces[i] == NULL) 344 goto fail; 345 memset(page_address(tbl->tces[i]), 0, 0x80000); 346 347 pr_debug(" TCE table %d at : %p\n", i, page_address(tbl->tces[i])); 348 349 /* Table size. We currently set it to be the whole 256M region */ 350 tvt_data0 = 2ull << IODA_TVT0_TCE_TABLE_SIZE_SHIFT; 351 /* IO page size set to 4K */ 352 tvt_data1 = 1ull << IODA_TVT1_IO_PAGE_SIZE_SHIFT; 353 /* Shift in the address */ 354 tvt_data0 |= __pa(page_address(tbl->tces[i])) << IODA_TVT0_TTA_SHIFT; 355 356 /* Validation stuff. We only validate fully bus/dev/fn for now 357 * one day maybe we can group devices but that isn't the case 358 * at the moment 359 */ 360 if (validate) { 361 tvt_data0 |= IODA_TVT0_BUSNUM_VALID_MASK; 362 tvt_data0 |= validate->bus->number; 363 tvt_data1 |= IODA_TVT1_DEVNUM_VALID; 364 tvt_data1 |= ((u64)PCI_SLOT(validate->devfn)) 365 << IODA_TVT1_DEVNUM_VALUE_SHIFT; 366 tvt_data1 |= IODA_TVT1_FUNCNUM_VALID; 367 tvt_data1 |= ((u64)PCI_FUNC(validate->devfn)) 368 << IODA_TVT1_FUNCNUM_VALUE_SHIFT; 369 } 370 371 /* XX PE number is always 0 for now */ 372 373 /* Program the values using the PHB lock */ 374 spin_lock_irqsave(&phb->lock, flags); 375 out_be64(hose->cfg_data + PCIE_REG_IODA_ADDR, 376 (tvt + i) | PCIE_REG_IODA_AD_TBL_TVT); 377 out_be64(hose->cfg_data + PCIE_REG_IODA_DATA1, tvt_data1); 378 out_be64(hose->cfg_data + PCIE_REG_IODA_DATA0, tvt_data0); 379 spin_unlock_irqrestore(&phb->lock, flags); 380 } 381 382 /* Init bits and pieces */ 383 tbl->table.it_blocksize = 16; 384 tbl->table.it_offset = addr >> IOMMU_PAGE_SHIFT; 385 tbl->table.it_size = size >> IOMMU_PAGE_SHIFT; 386 387 /* 388 * It's already blank but we clear it anyway. 389 * Consider an aditiona interface that makes cleaing optional 390 */ 391 iommu_init_table(&tbl->table, nid); 392 393 list_add(&tbl->link, &phb->dma_tables); 394 return tbl; 395 396 fail: 397 pr_debug(" Failed to allocate a 256M TCE table !\n"); 398 for (i = 0; i < tvts_per_table; i++) 399 if (tbl->tces[i]) 400 __free_pages(tbl->tces[i], get_order(0x80000)); 401 kfree(tbl); 402 return ERR_PTR(-ENOMEM); 403} 404 405static void wsp_pci_dma_dev_setup(struct pci_dev *pdev) 406{ 407 struct dev_archdata *archdata = &pdev->dev.archdata; 408 struct pci_controller *hose = pci_bus_to_host(pdev->bus); 409 struct wsp_phb *phb = hose->private_data; 410 struct wsp_dma_table *table = NULL; 411 unsigned long flags; 412 int i; 413 414 /* Don't assign an iommu table to a bridge */ 415 if (pdev->hdr_type == PCI_HEADER_TYPE_BRIDGE) 416 return; 417 418 pr_debug("%s: Setting up DMA...\n", pci_name(pdev)); 419 420 spin_lock_irqsave(&phb->lock, flags); 421 422 /* If only one region, check if it already exist */ 423 if (phb->dma32_num_regions == 1) { 424 spin_unlock_irqrestore(&phb->lock, flags); 425 if (list_empty(&phb->dma_tables)) 426 table = wsp_pci_create_dma32_table(phb, 0, NULL); 427 else 428 table = list_first_entry(&phb->dma_tables, 429 struct wsp_dma_table, 430 link); 431 } else { 432 /* else find a free region */ 433 for (i = 0; i < phb->dma32_num_regions && !table; i++) { 434 if (__test_and_set_bit(i, &phb->dma32_map)) 435 continue; 436 spin_unlock_irqrestore(&phb->lock, flags); 437 table = wsp_pci_create_dma32_table(phb, i, pdev); 438 } 439 } 440 441 /* Check if we got an error */ 442 if (IS_ERR(table)) { 443 pr_err("%s: Failed to create DMA table, err %ld !\n", 444 pci_name(pdev), PTR_ERR(table)); 445 return; 446 } 447 448 /* Or a valid table */ 449 if (table) { 450 pr_info("%s: Setup iommu: 32-bit DMA region 0x%08lx..0x%08lx\n", 451 pci_name(pdev), 452 table->table.it_offset << IOMMU_PAGE_SHIFT, 453 (table->table.it_offset << IOMMU_PAGE_SHIFT) 454 + phb->dma32_region_size - 1); 455 archdata->dma_data.iommu_table_base = &table->table; 456 return; 457 } 458 459 /* Or no room */ 460 spin_unlock_irqrestore(&phb->lock, flags); 461 pr_err("%s: Out of DMA space !\n", pci_name(pdev)); 462} 463 464static void __init wsp_pcie_configure_hw(struct pci_controller *hose) 465{ 466 u64 val; 467 int i; 468 469#define DUMP_REG(x) \ 470 pr_debug("%-30s : 0x%016llx\n", #x, in_be64(hose->cfg_data + x)) 471 472 /* 473 * Some WSP variants has a bogus class code by default in the PCI-E 474 * root complex's built-in P2P bridge 475 */ 476 val = in_be64(hose->cfg_data + PCIE_REG_SYS_CFG1); 477 pr_debug("PCI-E SYS_CFG1 : 0x%llx\n", val); 478 out_be64(hose->cfg_data + PCIE_REG_SYS_CFG1, 479 (val & ~PCIE_REG_SYS_CFG1_CLASS_CODE) | (PCI_CLASS_BRIDGE_PCI << 8)); 480 pr_debug("PCI-E SYS_CFG1 : 0x%llx\n", in_be64(hose->cfg_data + PCIE_REG_SYS_CFG1)); 481 482#ifdef CONFIG_WSP_DD1_WORKAROUND_DD1_TCE_BUGS 483 /* XXX Disable TCE caching, it doesn't work on DD1 */ 484 out_be64(hose->cfg_data + 0xe50, 485 in_be64(hose->cfg_data + 0xe50) | (3ull << 62)); 486 printk("PCI-E DEBUG CONTROL 5 = 0x%llx\n", in_be64(hose->cfg_data + 0xe50)); 487#endif 488 489 /* Configure M32A and IO. IO is hard wired to be 1M for now */ 490 out_be64(hose->cfg_data + PCIE_REG_IO_BASE_ADDR, hose->io_base_phys); 491 out_be64(hose->cfg_data + PCIE_REG_IO_BASE_MASK, 492 (~(hose->io_resource.end - hose->io_resource.start)) & 493 0x3fffffff000ul); 494 out_be64(hose->cfg_data + PCIE_REG_IO_START_ADDR, 0 | 1); 495 496 out_be64(hose->cfg_data + PCIE_REG_M32A_BASE_ADDR, 497 hose->mem_resources[0].start); 498 printk("Want to write to M32A_BASE_MASK : 0x%llx\n", 499 (~(hose->mem_resources[0].end - 500 hose->mem_resources[0].start)) & 0x3ffffff0000ul); 501 out_be64(hose->cfg_data + PCIE_REG_M32A_BASE_MASK, 502 (~(hose->mem_resources[0].end - 503 hose->mem_resources[0].start)) & 0x3ffffff0000ul); 504 out_be64(hose->cfg_data + PCIE_REG_M32A_START_ADDR, 505 (hose->mem_resources[0].start - hose->pci_mem_offset) | 1); 506 507 /* Clear all TVT entries 508 * 509 * XX Might get TVT count from device-tree 510 */ 511 for (i = 0; i < IODA_TVT_COUNT; i++) { 512 out_be64(hose->cfg_data + PCIE_REG_IODA_ADDR, 513 PCIE_REG_IODA_AD_TBL_TVT | i); 514 out_be64(hose->cfg_data + PCIE_REG_IODA_DATA1, 0); 515 out_be64(hose->cfg_data + PCIE_REG_IODA_DATA0, 0); 516 } 517 518 /* Kill the TCE cache */ 519 out_be64(hose->cfg_data + PCIE_REG_PHB_CONFIG, 520 in_be64(hose->cfg_data + PCIE_REG_PHB_CONFIG) | 521 PCIE_REG_PHBC_64B_TCE_EN); 522 523 /* Enable 32 & 64-bit MSIs, IO space and M32A */ 524 val = PCIE_REG_PHBC_32BIT_MSI_EN | 525 PCIE_REG_PHBC_IO_EN | 526 PCIE_REG_PHBC_64BIT_MSI_EN | 527 PCIE_REG_PHBC_M32A_EN; 528 if (iommu_is_off) 529 val |= PCIE_REG_PHBC_DMA_XLATE_BYPASS; 530 pr_debug("Will write config: 0x%llx\n", val); 531 out_be64(hose->cfg_data + PCIE_REG_PHB_CONFIG, val); 532 533 /* Enable error reporting */ 534 out_be64(hose->cfg_data + 0xe00, 535 in_be64(hose->cfg_data + 0xe00) | 0x0008000000000000ull); 536 537 /* Mask an error that's generated when doing config space probe 538 * 539 * XXX Maybe we should only mask it around config space cycles... that or 540 * ignore it when we know we had a config space cycle recently ? 541 */ 542 out_be64(hose->cfg_data + PCIE_REG_DMA_ERR_STATUS_MASK, 0x8000000000000000ull); 543 out_be64(hose->cfg_data + PCIE_REG_DMA_ERR1_STATUS_MASK, 0x8000000000000000ull); 544 545 /* Enable UTL errors, for now, all of them got to UTL irq 1 546 * 547 * We similarily mask one UTL error caused apparently during normal 548 * probing. We also mask the link up error 549 */ 550 out_be64(hose->cfg_data + PCIE_UTL_SYS_BUS_AGENT_ERR_SEV, 0); 551 out_be64(hose->cfg_data + PCIE_UTL_RC_ERR_SEVERITY, 0); 552 out_be64(hose->cfg_data + PCIE_UTL_PCIE_PORT_ERROR_SEV, 0); 553 out_be64(hose->cfg_data + PCIE_UTL_SYS_BUS_AGENT_IRQ_EN, 0xffffffff00000000ull); 554 out_be64(hose->cfg_data + PCIE_UTL_PCIE_PORT_IRQ_EN, 0xff5fffff00000000ull); 555 out_be64(hose->cfg_data + PCIE_UTL_EP_ERR_IRQ_EN, 0xffffffff00000000ull); 556 557 DUMP_REG(PCIE_REG_IO_BASE_ADDR); 558 DUMP_REG(PCIE_REG_IO_BASE_MASK); 559 DUMP_REG(PCIE_REG_IO_START_ADDR); 560 DUMP_REG(PCIE_REG_M32A_BASE_ADDR); 561 DUMP_REG(PCIE_REG_M32A_BASE_MASK); 562 DUMP_REG(PCIE_REG_M32A_START_ADDR); 563 DUMP_REG(PCIE_REG_M32B_BASE_ADDR); 564 DUMP_REG(PCIE_REG_M32B_BASE_MASK); 565 DUMP_REG(PCIE_REG_M32B_START_ADDR); 566 DUMP_REG(PCIE_REG_M64_BASE_ADDR); 567 DUMP_REG(PCIE_REG_M64_BASE_MASK); 568 DUMP_REG(PCIE_REG_M64_START_ADDR); 569 DUMP_REG(PCIE_REG_PHB_CONFIG); 570} 571 572static void wsp_pci_wait_io_idle(struct wsp_phb *phb, unsigned long port) 573{ 574 u64 val; 575 int i; 576 577 for (i = 0; i < 10000; i++) { 578 val = in_be64(phb->hose->cfg_data + 0xe08); 579 if ((val & 0x1900000000000000ull) == 0x0100000000000000ull) 580 return; 581 udelay(1); 582 } 583 pr_warning("PCI IO timeout on domain %d port 0x%lx\n", 584 phb->hose->global_number, port); 585} 586 587#define DEF_PCI_AC_RET_pio(name, ret, at, al, aa) \ 588static ret wsp_pci_##name at \ 589{ \ 590 struct iowa_bus *bus; \ 591 struct wsp_phb *phb; \ 592 unsigned long flags; \ 593 ret rval; \ 594 bus = iowa_pio_find_bus(aa); \ 595 WARN_ON(!bus); \ 596 phb = bus->private; \ 597 spin_lock_irqsave(&phb->lock, flags); \ 598 wsp_pci_wait_io_idle(phb, aa); \ 599 rval = __do_##name al; \ 600 spin_unlock_irqrestore(&phb->lock, flags); \ 601 return rval; \ 602} 603 604#define DEF_PCI_AC_NORET_pio(name, at, al, aa) \ 605static void wsp_pci_##name at \ 606{ \ 607 struct iowa_bus *bus; \ 608 struct wsp_phb *phb; \ 609 unsigned long flags; \ 610 bus = iowa_pio_find_bus(aa); \ 611 WARN_ON(!bus); \ 612 phb = bus->private; \ 613 spin_lock_irqsave(&phb->lock, flags); \ 614 wsp_pci_wait_io_idle(phb, aa); \ 615 __do_##name al; \ 616 spin_unlock_irqrestore(&phb->lock, flags); \ 617} 618 619#define DEF_PCI_AC_RET_mem(name, ret, at, al, aa) 620#define DEF_PCI_AC_NORET_mem(name, at, al, aa) 621 622#define DEF_PCI_AC_RET(name, ret, at, al, space, aa) \ 623 DEF_PCI_AC_RET_##space(name, ret, at, al, aa) 624 625#define DEF_PCI_AC_NORET(name, at, al, space, aa) \ 626 DEF_PCI_AC_NORET_##space(name, at, al, aa) \ 627 628 629#include <asm/io-defs.h> 630 631#undef DEF_PCI_AC_RET 632#undef DEF_PCI_AC_NORET 633 634static struct ppc_pci_io wsp_pci_iops = { 635 .inb = wsp_pci_inb, 636 .inw = wsp_pci_inw, 637 .inl = wsp_pci_inl, 638 .outb = wsp_pci_outb, 639 .outw = wsp_pci_outw, 640 .outl = wsp_pci_outl, 641 .insb = wsp_pci_insb, 642 .insw = wsp_pci_insw, 643 .insl = wsp_pci_insl, 644 .outsb = wsp_pci_outsb, 645 .outsw = wsp_pci_outsw, 646 .outsl = wsp_pci_outsl, 647}; 648 649static int __init wsp_setup_one_phb(struct device_node *np) 650{ 651 struct pci_controller *hose; 652 struct wsp_phb *phb; 653 654 pr_info("PCI: Setting up PCIe host bridge 0x%s\n", np->full_name); 655 656 phb = zalloc_maybe_bootmem(sizeof(struct wsp_phb), GFP_KERNEL); 657 if (!phb) 658 return -ENOMEM; 659 hose = pcibios_alloc_controller(np); 660 if (!hose) { 661 /* Can't really free the phb */ 662 return -ENOMEM; 663 } 664 hose->private_data = phb; 665 phb->hose = hose; 666 667 INIT_LIST_HEAD(&phb->dma_tables); 668 spin_lock_init(&phb->lock); 669 670 /* XXX Use bus-range property ? */ 671 hose->first_busno = 0; 672 hose->last_busno = 0xff; 673 674 /* We use cfg_data as the address for the whole bridge MMIO space 675 */ 676 hose->cfg_data = of_iomap(hose->dn, 0); 677 678 pr_debug("PCIe registers mapped at 0x%p\n", hose->cfg_data); 679 680 /* Get the ranges of the device-tree */ 681 pci_process_bridge_OF_ranges(hose, np, 0); 682 683 /* XXX Force re-assigning of everything for now */ 684 pci_add_flags(PCI_REASSIGN_ALL_BUS | PCI_REASSIGN_ALL_RSRC | 685 PCI_ENABLE_PROC_DOMAINS); 686 687 /* Calculate how the TCE space is divided */ 688 phb->dma32_base = 0; 689 phb->dma32_num_regions = NUM_DMA32_REGIONS; 690 if (phb->dma32_num_regions > MAX_TABLE_TVT_COUNT) { 691 pr_warning("IOMMU: Clamped to %d DMA32 regions\n", 692 MAX_TABLE_TVT_COUNT); 693 phb->dma32_num_regions = MAX_TABLE_TVT_COUNT; 694 } 695 phb->dma32_region_size = 0x80000000 / phb->dma32_num_regions; 696 697 BUG_ON(!is_power_of_2(phb->dma32_region_size)); 698 699 /* Setup config ops */ 700 hose->ops = &wsp_pcie_pci_ops; 701 702 /* Configure the HW */ 703 wsp_pcie_configure_hw(hose); 704 705 /* Instanciate IO workarounds */ 706 iowa_register_bus(hose, &wsp_pci_iops, NULL, phb); 707#ifdef CONFIG_PCI_MSI 708 wsp_setup_phb_msi(hose); 709#endif 710 711 /* Add to global list */ 712 list_add(&phb->all, &wsp_phbs); 713 714 return 0; 715} 716 717void __init wsp_setup_pci(void) 718{ 719 struct device_node *np; 720 int rc; 721 722 /* Find host bridges */ 723 for_each_compatible_node(np, "pciex", PCIE_COMPATIBLE) { 724 rc = wsp_setup_one_phb(np); 725 if (rc) 726 pr_err("Failed to setup PCIe bridge %s, rc=%d\n", 727 np->full_name, rc); 728 } 729 730 /* Establish device-tree linkage */ 731 pci_devs_phb_init(); 732 733 /* Set DMA ops to use TCEs */ 734 if (iommu_is_off) { 735 pr_info("PCI-E: Disabled TCEs, using direct DMA\n"); 736 set_pci_dma_ops(&dma_direct_ops); 737 } else { 738 ppc_md.pci_dma_dev_setup = wsp_pci_dma_dev_setup; 739 ppc_md.tce_build = tce_build_wsp; 740 ppc_md.tce_free = tce_free_wsp; 741 set_pci_dma_ops(&dma_iommu_ops); 742 } 743} 744 745#define err_debug(fmt...) pr_debug(fmt) 746//#define err_debug(fmt...) 747 748static int __init wsp_pci_get_err_irq_no_dt(struct device_node *np) 749{ 750 const u32 *prop; 751 int hw_irq; 752 753 /* Ok, no interrupts property, let's try to find our child P2P */ 754 np = of_get_next_child(np, NULL); 755 if (np == NULL) 756 return 0; 757 758 /* Grab it's interrupt map */ 759 prop = of_get_property(np, "interrupt-map", NULL); 760 if (prop == NULL) 761 return 0; 762 763 /* Grab one of the interrupts in there, keep the low 4 bits */ 764 hw_irq = prop[5] & 0xf; 765 766 /* 0..4 for PHB 0 and 5..9 for PHB 1 */ 767 if (hw_irq < 5) 768 hw_irq = 4; 769 else 770 hw_irq = 9; 771 hw_irq |= prop[5] & ~0xf; 772 773 err_debug("PCI: Using 0x%x as error IRQ for %s\n", 774 hw_irq, np->parent->full_name); 775 return irq_create_mapping(NULL, hw_irq); 776} 777 778static const struct { 779 u32 offset; 780 const char *name; 781} wsp_pci_regs[] = { 782#define DREG(x) { PCIE_REG_##x, #x } 783#define DUTL(x) { PCIE_UTL_##x, "UTL_" #x } 784 /* Architected registers except CONFIG_ and IODA 785 * to avoid side effects 786 */ 787 DREG(DMA_CHAN_STATUS), 788 DREG(CPU_LOADSTORE_STATUS), 789 DREG(LOCK0), 790 DREG(LOCK1), 791 DREG(PHB_CONFIG), 792 DREG(IO_BASE_ADDR), 793 DREG(IO_BASE_MASK), 794 DREG(IO_START_ADDR), 795 DREG(M32A_BASE_ADDR), 796 DREG(M32A_BASE_MASK), 797 DREG(M32A_START_ADDR), 798 DREG(M32B_BASE_ADDR), 799 DREG(M32B_BASE_MASK), 800 DREG(M32B_START_ADDR), 801 DREG(M64_BASE_ADDR), 802 DREG(M64_BASE_MASK), 803 DREG(M64_START_ADDR), 804 DREG(TCE_KILL), 805 DREG(LOCK2), 806 DREG(PHB_GEN_CAP), 807 DREG(PHB_TCE_CAP), 808 DREG(PHB_IRQ_CAP), 809 DREG(PHB_EEH_CAP), 810 DREG(PAPR_ERR_INJ_CONTROL), 811 DREG(PAPR_ERR_INJ_ADDR), 812 DREG(PAPR_ERR_INJ_MASK), 813 814 /* UTL core regs */ 815 DUTL(SYS_BUS_CONTROL), 816 DUTL(STATUS), 817 DUTL(SYS_BUS_AGENT_STATUS), 818 DUTL(SYS_BUS_AGENT_ERR_SEV), 819 DUTL(SYS_BUS_AGENT_IRQ_EN), 820 DUTL(SYS_BUS_BURST_SZ_CONF), 821 DUTL(REVISION_ID), 822 DUTL(OUT_POST_HDR_BUF_ALLOC), 823 DUTL(OUT_POST_DAT_BUF_ALLOC), 824 DUTL(IN_POST_HDR_BUF_ALLOC), 825 DUTL(IN_POST_DAT_BUF_ALLOC), 826 DUTL(OUT_NP_BUF_ALLOC), 827 DUTL(IN_NP_BUF_ALLOC), 828 DUTL(PCIE_TAGS_ALLOC), 829 DUTL(GBIF_READ_TAGS_ALLOC), 830 831 DUTL(PCIE_PORT_CONTROL), 832 DUTL(PCIE_PORT_STATUS), 833 DUTL(PCIE_PORT_ERROR_SEV), 834 DUTL(PCIE_PORT_IRQ_EN), 835 DUTL(RC_STATUS), 836 DUTL(RC_ERR_SEVERITY), 837 DUTL(RC_IRQ_EN), 838 DUTL(EP_STATUS), 839 DUTL(EP_ERR_SEVERITY), 840 DUTL(EP_ERR_IRQ_EN), 841 DUTL(PCI_PM_CTRL1), 842 DUTL(PCI_PM_CTRL2), 843 844 /* PCIe stack regs */ 845 DREG(SYSTEM_CONFIG1), 846 DREG(SYSTEM_CONFIG2), 847 DREG(EP_SYSTEM_CONFIG), 848 DREG(EP_FLR), 849 DREG(EP_BAR_CONFIG), 850 DREG(LINK_CONFIG), 851 DREG(PM_CONFIG), 852 DREG(DLP_CONTROL), 853 DREG(DLP_STATUS), 854 DREG(ERR_REPORT_CONTROL), 855 DREG(SLOT_CONTROL1), 856 DREG(SLOT_CONTROL2), 857 DREG(UTL_CONFIG), 858 DREG(BUFFERS_CONFIG), 859 DREG(ERROR_INJECT), 860 DREG(SRIOV_CONFIG), 861 DREG(PF0_SRIOV_STATUS), 862 DREG(PF1_SRIOV_STATUS), 863 DREG(PORT_NUMBER), 864 DREG(POR_SYSTEM_CONFIG), 865 866 /* Internal logic regs */ 867 DREG(PHB_VERSION), 868 DREG(RESET), 869 DREG(PHB_CONTROL), 870 DREG(PHB_TIMEOUT_CONTROL1), 871 DREG(PHB_QUIESCE_DMA), 872 DREG(PHB_DMA_READ_TAG_ACTV), 873 DREG(PHB_TCE_READ_TAG_ACTV), 874 875 /* FIR registers */ 876 DREG(LEM_FIR_ACCUM), 877 DREG(LEM_FIR_AND_MASK), 878 DREG(LEM_FIR_OR_MASK), 879 DREG(LEM_ACTION0), 880 DREG(LEM_ACTION1), 881 DREG(LEM_ERROR_MASK), 882 DREG(LEM_ERROR_AND_MASK), 883 DREG(LEM_ERROR_OR_MASK), 884 885 /* Error traps registers */ 886 DREG(PHB_ERR_STATUS), 887 DREG(PHB_ERR_STATUS), 888 DREG(PHB_ERR1_STATUS), 889 DREG(PHB_ERR_INJECT), 890 DREG(PHB_ERR_LEM_ENABLE), 891 DREG(PHB_ERR_IRQ_ENABLE), 892 DREG(PHB_ERR_FREEZE_ENABLE), 893 DREG(PHB_ERR_SIDE_ENABLE), 894 DREG(PHB_ERR_LOG_0), 895 DREG(PHB_ERR_LOG_1), 896 DREG(PHB_ERR_STATUS_MASK), 897 DREG(PHB_ERR1_STATUS_MASK), 898 DREG(MMIO_ERR_STATUS), 899 DREG(MMIO_ERR1_STATUS), 900 DREG(MMIO_ERR_INJECT), 901 DREG(MMIO_ERR_LEM_ENABLE), 902 DREG(MMIO_ERR_IRQ_ENABLE), 903 DREG(MMIO_ERR_FREEZE_ENABLE), 904 DREG(MMIO_ERR_SIDE_ENABLE), 905 DREG(MMIO_ERR_LOG_0), 906 DREG(MMIO_ERR_LOG_1), 907 DREG(MMIO_ERR_STATUS_MASK), 908 DREG(MMIO_ERR1_STATUS_MASK), 909 DREG(DMA_ERR_STATUS), 910 DREG(DMA_ERR1_STATUS), 911 DREG(DMA_ERR_INJECT), 912 DREG(DMA_ERR_LEM_ENABLE), 913 DREG(DMA_ERR_IRQ_ENABLE), 914 DREG(DMA_ERR_FREEZE_ENABLE), 915 DREG(DMA_ERR_SIDE_ENABLE), 916 DREG(DMA_ERR_LOG_0), 917 DREG(DMA_ERR_LOG_1), 918 DREG(DMA_ERR_STATUS_MASK), 919 DREG(DMA_ERR1_STATUS_MASK), 920 921 /* Debug and Trace registers */ 922 DREG(PHB_DEBUG_CONTROL0), 923 DREG(PHB_DEBUG_STATUS0), 924 DREG(PHB_DEBUG_CONTROL1), 925 DREG(PHB_DEBUG_STATUS1), 926 DREG(PHB_DEBUG_CONTROL2), 927 DREG(PHB_DEBUG_STATUS2), 928 DREG(PHB_DEBUG_CONTROL3), 929 DREG(PHB_DEBUG_STATUS3), 930 DREG(PHB_DEBUG_CONTROL4), 931 DREG(PHB_DEBUG_STATUS4), 932 DREG(PHB_DEBUG_CONTROL5), 933 DREG(PHB_DEBUG_STATUS5), 934 935 /* Don't seem to exist ... 936 DREG(PHB_DEBUG_CONTROL6), 937 DREG(PHB_DEBUG_STATUS6), 938 */ 939}; 940 941static int wsp_pci_regs_show(struct seq_file *m, void *private) 942{ 943 struct wsp_phb *phb = m->private; 944 struct pci_controller *hose = phb->hose; 945 int i; 946 947 for (i = 0; i < ARRAY_SIZE(wsp_pci_regs); i++) { 948 /* Skip write-only regs */ 949 if (wsp_pci_regs[i].offset == 0xc08 || 950 wsp_pci_regs[i].offset == 0xc10 || 951 wsp_pci_regs[i].offset == 0xc38 || 952 wsp_pci_regs[i].offset == 0xc40) 953 continue; 954 seq_printf(m, "0x%03x: 0x%016llx %s\n", 955 wsp_pci_regs[i].offset, 956 in_be64(hose->cfg_data + wsp_pci_regs[i].offset), 957 wsp_pci_regs[i].name); 958 } 959 return 0; 960} 961 962static int wsp_pci_regs_open(struct inode *inode, struct file *file) 963{ 964 return single_open(file, wsp_pci_regs_show, inode->i_private); 965} 966 967static const struct file_operations wsp_pci_regs_fops = { 968 .open = wsp_pci_regs_open, 969 .read = seq_read, 970 .llseek = seq_lseek, 971 .release = single_release, 972}; 973 974static int wsp_pci_reg_set(void *data, u64 val) 975{ 976 out_be64((void __iomem *)data, val); 977 return 0; 978} 979 980static int wsp_pci_reg_get(void *data, u64 *val) 981{ 982 *val = in_be64((void __iomem *)data); 983 return 0; 984} 985 986DEFINE_SIMPLE_ATTRIBUTE(wsp_pci_reg_fops, wsp_pci_reg_get, wsp_pci_reg_set, "0x%llx\n"); 987 988static irqreturn_t wsp_pci_err_irq(int irq, void *dev_id) 989{ 990 struct wsp_phb *phb = dev_id; 991 struct pci_controller *hose = phb->hose; 992 irqreturn_t handled = IRQ_NONE; 993 struct wsp_pcie_err_log_data ed; 994 995 pr_err("PCI: Error interrupt on %s (PHB %d)\n", 996 hose->dn->full_name, hose->global_number); 997 again: 998 memset(&ed, 0, sizeof(ed)); 999 1000 /* Read and clear UTL errors */ 1001 ed.utl_sys_err = in_be64(hose->cfg_data + PCIE_UTL_SYS_BUS_AGENT_STATUS); 1002 if (ed.utl_sys_err) 1003 out_be64(hose->cfg_data + PCIE_UTL_SYS_BUS_AGENT_STATUS, ed.utl_sys_err); 1004 ed.utl_port_err = in_be64(hose->cfg_data + PCIE_UTL_PCIE_PORT_STATUS); 1005 if (ed.utl_port_err) 1006 out_be64(hose->cfg_data + PCIE_UTL_PCIE_PORT_STATUS, ed.utl_port_err); 1007 ed.utl_rc_err = in_be64(hose->cfg_data + PCIE_UTL_RC_STATUS); 1008 if (ed.utl_rc_err) 1009 out_be64(hose->cfg_data + PCIE_UTL_RC_STATUS, ed.utl_rc_err); 1010 1011 /* Read and clear main trap errors */ 1012 ed.phb_err = in_be64(hose->cfg_data + PCIE_REG_PHB_ERR_STATUS); 1013 if (ed.phb_err) { 1014 ed.phb_err1 = in_be64(hose->cfg_data + PCIE_REG_PHB_ERR1_STATUS); 1015 ed.phb_log0 = in_be64(hose->cfg_data + PCIE_REG_PHB_ERR_LOG_0); 1016 ed.phb_log1 = in_be64(hose->cfg_data + PCIE_REG_PHB_ERR_LOG_1); 1017 out_be64(hose->cfg_data + PCIE_REG_PHB_ERR1_STATUS, 0); 1018 out_be64(hose->cfg_data + PCIE_REG_PHB_ERR_STATUS, 0); 1019 } 1020 ed.mmio_err = in_be64(hose->cfg_data + PCIE_REG_MMIO_ERR_STATUS); 1021 if (ed.mmio_err) { 1022 ed.mmio_err1 = in_be64(hose->cfg_data + PCIE_REG_MMIO_ERR1_STATUS); 1023 ed.mmio_log0 = in_be64(hose->cfg_data + PCIE_REG_MMIO_ERR_LOG_0); 1024 ed.mmio_log1 = in_be64(hose->cfg_data + PCIE_REG_MMIO_ERR_LOG_1); 1025 out_be64(hose->cfg_data + PCIE_REG_MMIO_ERR1_STATUS, 0); 1026 out_be64(hose->cfg_data + PCIE_REG_MMIO_ERR_STATUS, 0); 1027 } 1028 ed.dma_err = in_be64(hose->cfg_data + PCIE_REG_DMA_ERR_STATUS); 1029 if (ed.dma_err) { 1030 ed.dma_err1 = in_be64(hose->cfg_data + PCIE_REG_DMA_ERR1_STATUS); 1031 ed.dma_log0 = in_be64(hose->cfg_data + PCIE_REG_DMA_ERR_LOG_0); 1032 ed.dma_log1 = in_be64(hose->cfg_data + PCIE_REG_DMA_ERR_LOG_1); 1033 out_be64(hose->cfg_data + PCIE_REG_DMA_ERR1_STATUS, 0); 1034 out_be64(hose->cfg_data + PCIE_REG_DMA_ERR_STATUS, 0); 1035 } 1036 1037 /* Now print things out */ 1038 if (ed.phb_err) { 1039 pr_err(" PHB Error Status : 0x%016llx\n", ed.phb_err); 1040 pr_err(" PHB First Error Status: 0x%016llx\n", ed.phb_err1); 1041 pr_err(" PHB Error Log 0 : 0x%016llx\n", ed.phb_log0); 1042 pr_err(" PHB Error Log 1 : 0x%016llx\n", ed.phb_log1); 1043 } 1044 if (ed.mmio_err) { 1045 pr_err(" MMIO Error Status : 0x%016llx\n", ed.mmio_err); 1046 pr_err(" MMIO First Error Status: 0x%016llx\n", ed.mmio_err1); 1047 pr_err(" MMIO Error Log 0 : 0x%016llx\n", ed.mmio_log0); 1048 pr_err(" MMIO Error Log 1 : 0x%016llx\n", ed.mmio_log1); 1049 } 1050 if (ed.dma_err) { 1051 pr_err(" DMA Error Status : 0x%016llx\n", ed.dma_err); 1052 pr_err(" DMA First Error Status: 0x%016llx\n", ed.dma_err1); 1053 pr_err(" DMA Error Log 0 : 0x%016llx\n", ed.dma_log0); 1054 pr_err(" DMA Error Log 1 : 0x%016llx\n", ed.dma_log1); 1055 } 1056 if (ed.utl_sys_err) 1057 pr_err(" UTL Sys Error Status : 0x%016llx\n", ed.utl_sys_err); 1058 if (ed.utl_port_err) 1059 pr_err(" UTL Port Error Status : 0x%016llx\n", ed.utl_port_err); 1060 if (ed.utl_rc_err) 1061 pr_err(" UTL RC Error Status : 0x%016llx\n", ed.utl_rc_err); 1062 1063 /* Interrupts are caused by the error traps. If we had any error there 1064 * we loop again in case the UTL buffered some new stuff between 1065 * going there and going to the traps 1066 */ 1067 if (ed.dma_err || ed.mmio_err || ed.phb_err) { 1068 handled = IRQ_HANDLED; 1069 goto again; 1070 } 1071 return handled; 1072} 1073 1074static void __init wsp_setup_pci_err_reporting(struct wsp_phb *phb) 1075{ 1076 struct pci_controller *hose = phb->hose; 1077 int err_irq, i, rc; 1078 char fname[16]; 1079 1080 /* Create a debugfs file for that PHB */ 1081 sprintf(fname, "phb%d", phb->hose->global_number); 1082 phb->ddir = debugfs_create_dir(fname, powerpc_debugfs_root); 1083 1084 /* Some useful debug output */ 1085 if (phb->ddir) { 1086 struct dentry *d = debugfs_create_dir("regs", phb->ddir); 1087 char tmp[64]; 1088 1089 for (i = 0; i < ARRAY_SIZE(wsp_pci_regs); i++) { 1090 sprintf(tmp, "%03x_%s", wsp_pci_regs[i].offset, 1091 wsp_pci_regs[i].name); 1092 debugfs_create_file(tmp, 0600, d, 1093 hose->cfg_data + wsp_pci_regs[i].offset, 1094 &wsp_pci_reg_fops); 1095 } 1096 debugfs_create_file("all_regs", 0600, phb->ddir, phb, &wsp_pci_regs_fops); 1097 } 1098 1099 /* Find the IRQ number for that PHB */ 1100 err_irq = irq_of_parse_and_map(hose->dn, 0); 1101 if (err_irq == 0) 1102 /* XXX Error IRQ lacking from device-tree */ 1103 err_irq = wsp_pci_get_err_irq_no_dt(hose->dn); 1104 if (err_irq == 0) { 1105 pr_err("PCI: Failed to fetch error interrupt for %s\n", 1106 hose->dn->full_name); 1107 return; 1108 } 1109 /* Request it */ 1110 rc = request_irq(err_irq, wsp_pci_err_irq, 0, "wsp_pci error", phb); 1111 if (rc) { 1112 pr_err("PCI: Failed to request interrupt for %s\n", 1113 hose->dn->full_name); 1114 } 1115 /* Enable interrupts for all errors for now */ 1116 out_be64(hose->cfg_data + PCIE_REG_PHB_ERR_IRQ_ENABLE, 0xffffffffffffffffull); 1117 out_be64(hose->cfg_data + PCIE_REG_MMIO_ERR_IRQ_ENABLE, 0xffffffffffffffffull); 1118 out_be64(hose->cfg_data + PCIE_REG_DMA_ERR_IRQ_ENABLE, 0xffffffffffffffffull); 1119} 1120 1121/* 1122 * This is called later to hookup with the error interrupt 1123 */ 1124static int __init wsp_setup_pci_late(void) 1125{ 1126 struct wsp_phb *phb; 1127 1128 list_for_each_entry(phb, &wsp_phbs, all) 1129 wsp_setup_pci_err_reporting(phb); 1130 1131 return 0; 1132} 1133arch_initcall(wsp_setup_pci_late);