2 * Copyright 2010 Ben Herrenschmidt, IBM Corporation
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.
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>
22 #include <asm/sections.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>
36 /* Max number of TVTs for one table. Only 32-bit tables can use
37 * multiple TVTs and so the max currently supported is thus 8
38 * since only 2G of DMA space is supported
40 #define MAX_TABLE_TVT_COUNT 8
42 struct wsp_dma_table
{
43 struct list_head link
;
44 struct iommu_table table
;
46 struct page
*tces
[MAX_TABLE_TVT_COUNT
];
49 /* We support DMA regions from 0...2G in 32bit space (no support for
50 * 64-bit DMA just yet). Each device gets a separate TCE table (TVT
51 * entry) with validation enabled (though not supported by SimiCS
54 * To simplify things, we divide this 2G space into N regions based
55 * on the constant below which could be turned into a tunable eventually
57 * We then assign dynamically those regions to devices as they show up.
59 * We use a bitmap as an allocator for these.
61 * Tables are allocated/created dynamically as devices are discovered,
62 * multiple TVT entries are used if needed
64 * When 64-bit DMA support is added we should simply use a separate set
65 * of larger regions (the HW supports 64 TVT entries). We can
66 * additionally create a bypass region in 64-bit space for performances
67 * though that would have a cost in term of security.
69 * If you set NUM_DMA32_REGIONS to 1, then a single table is shared
70 * for all devices and bus/dev/fn validation is disabled
72 * Note that a DMA32 region cannot be smaller than 256M so the max
73 * supported here for now is 8. We don't yet support sharing regions
74 * between multiple devices so the max number of devices supported
75 * is MAX_TABLE_TVT_COUNT.
77 #define NUM_DMA32_REGIONS 1
80 struct pci_controller
*hose
;
82 /* Lock controlling access to the list of dma tables.
83 * It does -not- protect against dma_* operations on
84 * those tables, those should be stopped before an entry
85 * is removed from the list.
87 * The lock is also used for error handling operations
90 struct list_head dma_tables
;
91 unsigned long dma32_map
;
92 unsigned long dma32_base
;
93 unsigned int dma32_num_regions
;
94 unsigned long dma32_region_size
;
101 static LIST_HEAD(wsp_phbs
);
103 //#define cfg_debug(fmt...) pr_debug(fmt)
104 #define cfg_debug(fmt...)
107 static int wsp_pcie_read_config(struct pci_bus
*bus
, unsigned int devfn
,
108 int offset
, int len
, u32
*val
)
110 struct pci_controller
*hose
;
114 hose
= pci_bus_to_host(bus
);
116 return PCIBIOS_DEVICE_NOT_FOUND
;
117 if (offset
>= 0x1000)
118 return PCIBIOS_BAD_REGISTER_NUMBER
;
119 addr
= PCIE_REG_CA_ENABLE
|
120 ((u64
)bus
->number
) << PCIE_REG_CA_BUS_SHIFT
|
121 ((u64
)devfn
) << PCIE_REG_CA_FUNC_SHIFT
|
122 ((u64
)offset
& ~3) << PCIE_REG_CA_REG_SHIFT
;
126 * Note: the caller has already checked that offset is
127 * suitably aligned and that len is 1, 2 or 4.
132 addr
|= (0x8ul
>> suboff
) << PCIE_REG_CA_BE_SHIFT
;
133 out_be64(hose
->cfg_data
+ PCIE_REG_CONFIG_ADDRESS
, addr
);
134 *val
= (in_le32(hose
->cfg_data
+ PCIE_REG_CONFIG_DATA
)
135 >> (suboff
<< 3)) & 0xff;
136 cfg_debug("read 1 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%02x\n",
137 bus
->number
, devfn
>> 3, devfn
& 7,
138 offset
, suboff
, addr
, *val
);
141 addr
|= (0xcul
>> suboff
) << PCIE_REG_CA_BE_SHIFT
;
142 out_be64(hose
->cfg_data
+ PCIE_REG_CONFIG_ADDRESS
, addr
);
143 *val
= (in_le32(hose
->cfg_data
+ PCIE_REG_CONFIG_DATA
)
144 >> (suboff
<< 3)) & 0xffff;
145 cfg_debug("read 2 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%04x\n",
146 bus
->number
, devfn
>> 3, devfn
& 7,
147 offset
, suboff
, addr
, *val
);
150 addr
|= 0xful
<< PCIE_REG_CA_BE_SHIFT
;
151 out_be64(hose
->cfg_data
+ PCIE_REG_CONFIG_ADDRESS
, addr
);
152 *val
= in_le32(hose
->cfg_data
+ PCIE_REG_CONFIG_DATA
);
153 cfg_debug("read 4 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%08x\n",
154 bus
->number
, devfn
>> 3, devfn
& 7,
155 offset
, suboff
, addr
, *val
);
158 return PCIBIOS_SUCCESSFUL
;
161 static int wsp_pcie_write_config(struct pci_bus
*bus
, unsigned int devfn
,
162 int offset
, int len
, u32 val
)
164 struct pci_controller
*hose
;
168 hose
= pci_bus_to_host(bus
);
170 return PCIBIOS_DEVICE_NOT_FOUND
;
171 if (offset
>= 0x1000)
172 return PCIBIOS_BAD_REGISTER_NUMBER
;
173 addr
= PCIE_REG_CA_ENABLE
|
174 ((u64
)bus
->number
) << PCIE_REG_CA_BUS_SHIFT
|
175 ((u64
)devfn
) << PCIE_REG_CA_FUNC_SHIFT
|
176 ((u64
)offset
& ~3) << PCIE_REG_CA_REG_SHIFT
;
180 * Note: the caller has already checked that offset is
181 * suitably aligned and that len is 1, 2 or 4.
185 addr
|= (0x8ul
>> suboff
) << PCIE_REG_CA_BE_SHIFT
;
187 out_be64(hose
->cfg_data
+ PCIE_REG_CONFIG_ADDRESS
, addr
);
188 out_le32(hose
->cfg_data
+ PCIE_REG_CONFIG_DATA
, val
);
189 cfg_debug("write 1 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%02x\n",
190 bus
->number
, devfn
>> 3, devfn
& 7,
191 offset
, suboff
, addr
, val
);
194 addr
|= (0xcul
>> suboff
) << PCIE_REG_CA_BE_SHIFT
;
196 out_be64(hose
->cfg_data
+ PCIE_REG_CONFIG_ADDRESS
, addr
);
197 out_le32(hose
->cfg_data
+ PCIE_REG_CONFIG_DATA
, val
);
198 cfg_debug("write 2 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%04x\n",
199 bus
->number
, devfn
>> 3, devfn
& 7,
200 offset
, suboff
, addr
, val
);
203 addr
|= 0xful
<< PCIE_REG_CA_BE_SHIFT
;
204 out_be64(hose
->cfg_data
+ PCIE_REG_CONFIG_ADDRESS
, addr
);
205 out_le32(hose
->cfg_data
+ PCIE_REG_CONFIG_DATA
, val
);
206 cfg_debug("write 4 %02x:%02x:%02x + %02x/%x addr=0x%llx val=%08x\n",
207 bus
->number
, devfn
>> 3, devfn
& 7,
208 offset
, suboff
, addr
, val
);
211 return PCIBIOS_SUCCESSFUL
;
214 static struct pci_ops wsp_pcie_pci_ops
=
216 .read
= wsp_pcie_read_config
,
217 .write
= wsp_pcie_write_config
,
221 #define TCE_PAGE_SIZE (1 << TCE_SHIFT)
222 #define TCE_PCI_WRITE 0x2 /* write from PCI allowed */
223 #define TCE_PCI_READ 0x1 /* read from PCI allowed */
224 #define TCE_RPN_MASK 0x3fffffffffful /* 42-bit RPN (4K pages) */
225 #define TCE_RPN_SHIFT 12
227 //#define dma_debug(fmt...) pr_debug(fmt)
228 #define dma_debug(fmt...)
230 static int tce_build_wsp(struct iommu_table
*tbl
, long index
, long npages
,
231 unsigned long uaddr
, enum dma_data_direction direction
,
232 struct dma_attrs
*attrs
)
234 struct wsp_dma_table
*ptbl
= container_of(tbl
,
235 struct wsp_dma_table
,
241 proto_tce
= TCE_PCI_READ
;
242 #ifdef CONFIG_WSP_DD1_WORKAROUND_DD1_TCE_BUGS
243 proto_tce
|= TCE_PCI_WRITE
;
245 if (direction
!= DMA_TO_DEVICE
)
246 proto_tce
|= TCE_PCI_WRITE
;
249 /* XXX Make this faster by factoring out the page address for
253 /* We don't use it->base as the table can be scattered */
254 tcep
= (u64
*)page_address(ptbl
->tces
[index
>> 16]);
255 tcep
+= (index
& 0xffff);
257 /* can't move this out since we might cross LMB boundary */
258 rpn
= __pa(uaddr
) >> TCE_SHIFT
;
259 *tcep
= proto_tce
| (rpn
& TCE_RPN_MASK
) << TCE_RPN_SHIFT
;
261 dma_debug("[DMA] TCE %p set to 0x%016llx (dma addr: 0x%lx)\n",
262 tcep
, *tcep
, (tbl
->it_offset
+ index
) << IOMMU_PAGE_SHIFT
);
264 uaddr
+= TCE_PAGE_SIZE
;
270 static void tce_free_wsp(struct iommu_table
*tbl
, long index
, long npages
)
272 struct wsp_dma_table
*ptbl
= container_of(tbl
,
273 struct wsp_dma_table
,
275 #ifndef CONFIG_WSP_DD1_WORKAROUND_DD1_TCE_BUGS
276 struct pci_controller
*hose
= ptbl
->phb
->hose
;
280 /* XXX Make this faster by factoring out the page address for
281 * within a TCE table. Also use line-kill option to kill multiple
285 /* We don't use it->base as the table can be scattered */
286 tcep
= (u64
*)page_address(ptbl
->tces
[index
>> 16]);
287 tcep
+= (index
& 0xffff);
288 dma_debug("[DMA] TCE %p cleared\n", tcep
);
290 #ifndef CONFIG_WSP_DD1_WORKAROUND_DD1_TCE_BUGS
291 /* Don't write there since it would pollute other MMIO accesses */
292 out_be64(hose
->cfg_data
+ PCIE_REG_TCE_KILL
,
293 PCIE_REG_TCEKILL_SINGLE
| PCIE_REG_TCEKILL_PS_4K
|
294 (__pa(tcep
) & PCIE_REG_TCEKILL_ADDR_MASK
));
300 static struct wsp_dma_table
*wsp_pci_create_dma32_table(struct wsp_phb
*phb
,
302 struct pci_dev
*validate
)
304 struct pci_controller
*hose
= phb
->hose
;
305 unsigned long size
= phb
->dma32_region_size
;
306 unsigned long addr
= phb
->dma32_region_size
* region
+ phb
->dma32_base
;
307 struct wsp_dma_table
*tbl
;
308 int tvts_per_table
, i
, tvt
, nid
;
311 nid
= of_node_to_nid(phb
->hose
->dn
);
313 /* Calculate how many TVTs are needed */
314 tvts_per_table
= size
/ 0x10000000;
315 if (tvts_per_table
== 0)
318 /* Calculate the base TVT index. We know all tables have the same
319 * size so we just do a simple multiply here
321 tvt
= region
* tvts_per_table
;
323 pr_debug(" Region : %d\n", region
);
324 pr_debug(" DMA range : 0x%08lx..0x%08lx\n", addr
, addr
+ size
- 1);
325 pr_debug(" Number of TVTs : %d\n", tvts_per_table
);
326 pr_debug(" Base TVT : %d\n", tvt
);
327 pr_debug(" Node : %d\n", nid
);
329 tbl
= kzalloc_node(sizeof(struct wsp_dma_table
), GFP_KERNEL
, nid
);
331 return ERR_PTR(-ENOMEM
);
334 /* Create as many TVTs as needed, each represents 256M at most */
335 for (i
= 0; i
< tvts_per_table
; i
++) {
336 u64 tvt_data1
, tvt_data0
;
338 /* Allocate table. We use a 4K TCE size for now always so
339 * one table is always 8 * (258M / 4K) == 512K
341 tbl
->tces
[i
] = alloc_pages_node(nid
, GFP_KERNEL
, get_order(0x80000));
342 if (tbl
->tces
[i
] == NULL
)
344 memset(page_address(tbl
->tces
[i
]), 0, 0x80000);
346 pr_debug(" TCE table %d at : %p\n", i
, page_address(tbl
->tces
[i
]));
348 /* Table size. We currently set it to be the whole 256M region */
349 tvt_data0
= 2ull << IODA_TVT0_TCE_TABLE_SIZE_SHIFT
;
350 /* IO page size set to 4K */
351 tvt_data1
= 1ull << IODA_TVT1_IO_PAGE_SIZE_SHIFT
;
352 /* Shift in the address */
353 tvt_data0
|= __pa(page_address(tbl
->tces
[i
])) << IODA_TVT0_TTA_SHIFT
;
355 /* Validation stuff. We only validate fully bus/dev/fn for now
356 * one day maybe we can group devices but that isn't the case
360 tvt_data0
|= IODA_TVT0_BUSNUM_VALID_MASK
;
361 tvt_data0
|= validate
->bus
->number
;
362 tvt_data1
|= IODA_TVT1_DEVNUM_VALID
;
363 tvt_data1
|= ((u64
)PCI_SLOT(validate
->devfn
))
364 << IODA_TVT1_DEVNUM_VALUE_SHIFT
;
365 tvt_data1
|= IODA_TVT1_FUNCNUM_VALID
;
366 tvt_data1
|= ((u64
)PCI_FUNC(validate
->devfn
))
367 << IODA_TVT1_FUNCNUM_VALUE_SHIFT
;
370 /* XX PE number is always 0 for now */
372 /* Program the values using the PHB lock */
373 spin_lock_irqsave(&phb
->lock
, flags
);
374 out_be64(hose
->cfg_data
+ PCIE_REG_IODA_ADDR
,
375 (tvt
+ i
) | PCIE_REG_IODA_AD_TBL_TVT
);
376 out_be64(hose
->cfg_data
+ PCIE_REG_IODA_DATA1
, tvt_data1
);
377 out_be64(hose
->cfg_data
+ PCIE_REG_IODA_DATA0
, tvt_data0
);
378 spin_unlock_irqrestore(&phb
->lock
, flags
);
381 /* Init bits and pieces */
382 tbl
->table
.it_blocksize
= 16;
383 tbl
->table
.it_offset
= addr
>> IOMMU_PAGE_SHIFT
;
384 tbl
->table
.it_size
= size
>> IOMMU_PAGE_SHIFT
;
387 * It's already blank but we clear it anyway.
388 * Consider an aditiona interface that makes cleaing optional
390 iommu_init_table(&tbl
->table
, nid
);
392 list_add(&tbl
->link
, &phb
->dma_tables
);
396 pr_debug(" Failed to allocate a 256M TCE table !\n");
397 for (i
= 0; i
< tvts_per_table
; i
++)
399 __free_pages(tbl
->tces
[i
], get_order(0x80000));
401 return ERR_PTR(-ENOMEM
);
404 static void __devinit
wsp_pci_dma_dev_setup(struct pci_dev
*pdev
)
406 struct dev_archdata
*archdata
= &pdev
->dev
.archdata
;
407 struct pci_controller
*hose
= pci_bus_to_host(pdev
->bus
);
408 struct wsp_phb
*phb
= hose
->private_data
;
409 struct wsp_dma_table
*table
= NULL
;
413 /* Don't assign an iommu table to a bridge */
414 if (pdev
->hdr_type
== PCI_HEADER_TYPE_BRIDGE
)
417 pr_debug("%s: Setting up DMA...\n", pci_name(pdev
));
419 spin_lock_irqsave(&phb
->lock
, flags
);
421 /* If only one region, check if it already exist */
422 if (phb
->dma32_num_regions
== 1) {
423 spin_unlock_irqrestore(&phb
->lock
, flags
);
424 if (list_empty(&phb
->dma_tables
))
425 table
= wsp_pci_create_dma32_table(phb
, 0, NULL
);
427 table
= list_first_entry(&phb
->dma_tables
,
428 struct wsp_dma_table
,
431 /* else find a free region */
432 for (i
= 0; i
< phb
->dma32_num_regions
&& !table
; i
++) {
433 if (__test_and_set_bit(i
, &phb
->dma32_map
))
435 spin_unlock_irqrestore(&phb
->lock
, flags
);
436 table
= wsp_pci_create_dma32_table(phb
, i
, pdev
);
440 /* Check if we got an error */
442 pr_err("%s: Failed to create DMA table, err %ld !\n",
443 pci_name(pdev
), PTR_ERR(table
));
447 /* Or a valid table */
449 pr_info("%s: Setup iommu: 32-bit DMA region 0x%08lx..0x%08lx\n",
451 table
->table
.it_offset
<< IOMMU_PAGE_SHIFT
,
452 (table
->table
.it_offset
<< IOMMU_PAGE_SHIFT
)
453 + phb
->dma32_region_size
- 1);
454 archdata
->dma_data
.iommu_table_base
= &table
->table
;
459 spin_unlock_irqrestore(&phb
->lock
, flags
);
460 pr_err("%s: Out of DMA space !\n", pci_name(pdev
));
463 static void __init
wsp_pcie_configure_hw(struct pci_controller
*hose
)
468 #define DUMP_REG(x) \
469 pr_debug("%-30s : 0x%016llx\n", #x, in_be64(hose->cfg_data + x))
472 * Some WSP variants has a bogus class code by default in the PCI-E
473 * root complex's built-in P2P bridge
475 val
= in_be64(hose
->cfg_data
+ PCIE_REG_SYS_CFG1
);
476 pr_debug("PCI-E SYS_CFG1 : 0x%llx\n", val
);
477 out_be64(hose
->cfg_data
+ PCIE_REG_SYS_CFG1
,
478 (val
& ~PCIE_REG_SYS_CFG1_CLASS_CODE
) | (PCI_CLASS_BRIDGE_PCI
<< 8));
479 pr_debug("PCI-E SYS_CFG1 : 0x%llx\n", in_be64(hose
->cfg_data
+ PCIE_REG_SYS_CFG1
));
481 #ifdef CONFIG_WSP_DD1_WORKAROUND_DD1_TCE_BUGS
482 /* XXX Disable TCE caching, it doesn't work on DD1 */
483 out_be64(hose
->cfg_data
+ 0xe50,
484 in_be64(hose
->cfg_data
+ 0xe50) | (3ull << 62));
485 printk("PCI-E DEBUG CONTROL 5 = 0x%llx\n", in_be64(hose
->cfg_data
+ 0xe50));
488 /* Configure M32A and IO. IO is hard wired to be 1M for now */
489 out_be64(hose
->cfg_data
+ PCIE_REG_IO_BASE_ADDR
, hose
->io_base_phys
);
490 out_be64(hose
->cfg_data
+ PCIE_REG_IO_BASE_MASK
,
491 (~(hose
->io_resource
.end
- hose
->io_resource
.start
)) &
493 out_be64(hose
->cfg_data
+ PCIE_REG_IO_START_ADDR
, 0 | 1);
495 out_be64(hose
->cfg_data
+ PCIE_REG_M32A_BASE_ADDR
,
496 hose
->mem_resources
[0].start
);
497 printk("Want to write to M32A_BASE_MASK : 0x%llx\n",
498 (~(hose
->mem_resources
[0].end
-
499 hose
->mem_resources
[0].start
)) & 0x3ffffff0000ul
);
500 out_be64(hose
->cfg_data
+ PCIE_REG_M32A_BASE_MASK
,
501 (~(hose
->mem_resources
[0].end
-
502 hose
->mem_resources
[0].start
)) & 0x3ffffff0000ul
);
503 out_be64(hose
->cfg_data
+ PCIE_REG_M32A_START_ADDR
,
504 (hose
->mem_resources
[0].start
- hose
->pci_mem_offset
) | 1);
506 /* Clear all TVT entries
508 * XX Might get TVT count from device-tree
510 for (i
= 0; i
< IODA_TVT_COUNT
; i
++) {
511 out_be64(hose
->cfg_data
+ PCIE_REG_IODA_ADDR
,
512 PCIE_REG_IODA_AD_TBL_TVT
| i
);
513 out_be64(hose
->cfg_data
+ PCIE_REG_IODA_DATA1
, 0);
514 out_be64(hose
->cfg_data
+ PCIE_REG_IODA_DATA0
, 0);
517 /* Kill the TCE cache */
518 out_be64(hose
->cfg_data
+ PCIE_REG_PHB_CONFIG
,
519 in_be64(hose
->cfg_data
+ PCIE_REG_PHB_CONFIG
) |
520 PCIE_REG_PHBC_64B_TCE_EN
);
522 /* Enable 32 & 64-bit MSIs, IO space and M32A */
523 val
= PCIE_REG_PHBC_32BIT_MSI_EN
|
524 PCIE_REG_PHBC_IO_EN
|
525 PCIE_REG_PHBC_64BIT_MSI_EN
|
526 PCIE_REG_PHBC_M32A_EN
;
528 val
|= PCIE_REG_PHBC_DMA_XLATE_BYPASS
;
529 pr_debug("Will write config: 0x%llx\n", val
);
530 out_be64(hose
->cfg_data
+ PCIE_REG_PHB_CONFIG
, val
);
532 /* Enable error reporting */
533 out_be64(hose
->cfg_data
+ 0xe00,
534 in_be64(hose
->cfg_data
+ 0xe00) | 0x0008000000000000ull
);
536 /* Mask an error that's generated when doing config space probe
538 * XXX Maybe we should only mask it around config space cycles... that or
539 * ignore it when we know we had a config space cycle recently ?
541 out_be64(hose
->cfg_data
+ PCIE_REG_DMA_ERR_STATUS_MASK
, 0x8000000000000000ull
);
542 out_be64(hose
->cfg_data
+ PCIE_REG_DMA_ERR1_STATUS_MASK
, 0x8000000000000000ull
);
544 /* Enable UTL errors, for now, all of them got to UTL irq 1
546 * We similarily mask one UTL error caused apparently during normal
547 * probing. We also mask the link up error
549 out_be64(hose
->cfg_data
+ PCIE_UTL_SYS_BUS_AGENT_ERR_SEV
, 0);
550 out_be64(hose
->cfg_data
+ PCIE_UTL_RC_ERR_SEVERITY
, 0);
551 out_be64(hose
->cfg_data
+ PCIE_UTL_PCIE_PORT_ERROR_SEV
, 0);
552 out_be64(hose
->cfg_data
+ PCIE_UTL_SYS_BUS_AGENT_IRQ_EN
, 0xffffffff00000000ull
);
553 out_be64(hose
->cfg_data
+ PCIE_UTL_PCIE_PORT_IRQ_EN
, 0xff5fffff00000000ull
);
554 out_be64(hose
->cfg_data
+ PCIE_UTL_EP_ERR_IRQ_EN
, 0xffffffff00000000ull
);
556 DUMP_REG(PCIE_REG_IO_BASE_ADDR
);
557 DUMP_REG(PCIE_REG_IO_BASE_MASK
);
558 DUMP_REG(PCIE_REG_IO_START_ADDR
);
559 DUMP_REG(PCIE_REG_M32A_BASE_ADDR
);
560 DUMP_REG(PCIE_REG_M32A_BASE_MASK
);
561 DUMP_REG(PCIE_REG_M32A_START_ADDR
);
562 DUMP_REG(PCIE_REG_M32B_BASE_ADDR
);
563 DUMP_REG(PCIE_REG_M32B_BASE_MASK
);
564 DUMP_REG(PCIE_REG_M32B_START_ADDR
);
565 DUMP_REG(PCIE_REG_M64_BASE_ADDR
);
566 DUMP_REG(PCIE_REG_M64_BASE_MASK
);
567 DUMP_REG(PCIE_REG_M64_START_ADDR
);
568 DUMP_REG(PCIE_REG_PHB_CONFIG
);
571 static void wsp_pci_wait_io_idle(struct wsp_phb
*phb
, unsigned long port
)
576 for (i
= 0; i
< 10000; i
++) {
577 val
= in_be64(phb
->hose
->cfg_data
+ 0xe08);
578 if ((val
& 0x1900000000000000ull
) == 0x0100000000000000ull
)
582 pr_warning("PCI IO timeout on domain %d port 0x%lx\n",
583 phb
->hose
->global_number
, port
);
586 #define DEF_PCI_AC_RET_pio(name, ret, at, al, aa) \
587 static ret wsp_pci_##name at \
589 struct iowa_bus *bus; \
590 struct wsp_phb *phb; \
591 unsigned long flags; \
593 bus = iowa_pio_find_bus(aa); \
595 phb = bus->private; \
596 spin_lock_irqsave(&phb->lock, flags); \
597 wsp_pci_wait_io_idle(phb, aa); \
598 rval = __do_##name al; \
599 spin_unlock_irqrestore(&phb->lock, flags); \
603 #define DEF_PCI_AC_NORET_pio(name, at, al, aa) \
604 static void wsp_pci_##name at \
606 struct iowa_bus *bus; \
607 struct wsp_phb *phb; \
608 unsigned long flags; \
609 bus = iowa_pio_find_bus(aa); \
611 phb = bus->private; \
612 spin_lock_irqsave(&phb->lock, flags); \
613 wsp_pci_wait_io_idle(phb, aa); \
615 spin_unlock_irqrestore(&phb->lock, flags); \
618 #define DEF_PCI_AC_RET_mem(name, ret, at, al, aa)
619 #define DEF_PCI_AC_NORET_mem(name, at, al, aa)
621 #define DEF_PCI_AC_RET(name, ret, at, al, space, aa) \
622 DEF_PCI_AC_RET_##space(name, ret, at, al, aa)
624 #define DEF_PCI_AC_NORET(name, at, al, space, aa) \
625 DEF_PCI_AC_NORET_##space(name, at, al, aa) \
628 #include <asm/io-defs.h>
630 #undef DEF_PCI_AC_RET
631 #undef DEF_PCI_AC_NORET
633 static struct ppc_pci_io wsp_pci_iops
= {
637 .outb
= wsp_pci_outb
,
638 .outw
= wsp_pci_outw
,
639 .outl
= wsp_pci_outl
,
640 .insb
= wsp_pci_insb
,
641 .insw
= wsp_pci_insw
,
642 .insl
= wsp_pci_insl
,
643 .outsb
= wsp_pci_outsb
,
644 .outsw
= wsp_pci_outsw
,
645 .outsl
= wsp_pci_outsl
,
648 static int __init
wsp_setup_one_phb(struct device_node
*np
)
650 struct pci_controller
*hose
;
653 pr_info("PCI: Setting up PCIe host bridge 0x%s\n", np
->full_name
);
655 phb
= zalloc_maybe_bootmem(sizeof(struct wsp_phb
), GFP_KERNEL
);
658 hose
= pcibios_alloc_controller(np
);
660 /* Can't really free the phb */
663 hose
->private_data
= phb
;
666 INIT_LIST_HEAD(&phb
->dma_tables
);
667 spin_lock_init(&phb
->lock
);
669 /* XXX Use bus-range property ? */
670 hose
->first_busno
= 0;
671 hose
->last_busno
= 0xff;
673 /* We use cfg_data as the address for the whole bridge MMIO space
675 hose
->cfg_data
= of_iomap(hose
->dn
, 0);
677 pr_debug("PCIe registers mapped at 0x%p\n", hose
->cfg_data
);
679 /* Get the ranges of the device-tree */
680 pci_process_bridge_OF_ranges(hose
, np
, 0);
682 /* XXX Force re-assigning of everything for now */
683 pci_add_flags(PCI_REASSIGN_ALL_BUS
| PCI_REASSIGN_ALL_RSRC
|
684 PCI_ENABLE_PROC_DOMAINS
);
687 /* Calculate how the TCE space is divided */
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
;
695 phb
->dma32_region_size
= 0x80000000 / phb
->dma32_num_regions
;
697 BUG_ON(!is_power_of_2(phb
->dma32_region_size
));
699 /* Setup config ops */
700 hose
->ops
= &wsp_pcie_pci_ops
;
702 /* Configure the HW */
703 wsp_pcie_configure_hw(hose
);
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
);
711 /* Add to global list */
712 list_add(&phb
->all
, &wsp_phbs
);
717 void __init
wsp_setup_pci(void)
719 struct device_node
*np
;
722 /* Find host bridges */
723 for_each_compatible_node(np
, "pciex", PCIE_COMPATIBLE
) {
724 rc
= wsp_setup_one_phb(np
);
726 pr_err("Failed to setup PCIe bridge %s, rc=%d\n",
730 /* Establish device-tree linkage */
733 /* Set DMA ops to use TCEs */
735 pr_info("PCI-E: Disabled TCEs, using direct DMA\n");
736 set_pci_dma_ops(&dma_direct_ops
);
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
);
745 #define err_debug(fmt...) pr_debug(fmt)
746 //#define err_debug(fmt...)
748 static int __init
wsp_pci_get_err_irq_no_dt(struct device_node
*np
)
753 /* Ok, no interrupts property, let's try to find our child P2P */
754 np
= of_get_next_child(np
, NULL
);
758 /* Grab it's interrupt map */
759 prop
= of_get_property(np
, "interrupt-map", NULL
);
763 /* Grab one of the interrupts in there, keep the low 4 bits */
764 hw_irq
= prop
[5] & 0xf;
766 /* 0..4 for PHB 0 and 5..9 for PHB 1 */
771 hw_irq
|= prop
[5] & ~0xf;
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
);
778 static const struct {
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
787 DREG(DMA_CHAN_STATUS
),
788 DREG(CPU_LOADSTORE_STATUS
),
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
),
803 DREG(M64_START_ADDR
),
810 DREG(PAPR_ERR_INJ_CONTROL
),
811 DREG(PAPR_ERR_INJ_ADDR
),
812 DREG(PAPR_ERR_INJ_MASK
),
815 DUTL(SYS_BUS_CONTROL
),
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
),
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
),
831 DUTL(PCIE_PORT_CONTROL
),
832 DUTL(PCIE_PORT_STATUS
),
833 DUTL(PCIE_PORT_ERROR_SEV
),
834 DUTL(PCIE_PORT_IRQ_EN
),
836 DUTL(RC_ERR_SEVERITY
),
839 DUTL(EP_ERR_SEVERITY
),
844 /* PCIe stack regs */
845 DREG(SYSTEM_CONFIG1
),
846 DREG(SYSTEM_CONFIG2
),
847 DREG(EP_SYSTEM_CONFIG
),
854 DREG(ERR_REPORT_CONTROL
),
858 DREG(BUFFERS_CONFIG
),
861 DREG(PF0_SRIOV_STATUS
),
862 DREG(PF1_SRIOV_STATUS
),
864 DREG(POR_SYSTEM_CONFIG
),
866 /* Internal logic regs */
870 DREG(PHB_TIMEOUT_CONTROL1
),
871 DREG(PHB_QUIESCE_DMA
),
872 DREG(PHB_DMA_READ_TAG_ACTV
),
873 DREG(PHB_TCE_READ_TAG_ACTV
),
877 DREG(LEM_FIR_AND_MASK
),
878 DREG(LEM_FIR_OR_MASK
),
881 DREG(LEM_ERROR_MASK
),
882 DREG(LEM_ERROR_AND_MASK
),
883 DREG(LEM_ERROR_OR_MASK
),
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
),
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
),
918 DREG(DMA_ERR_STATUS_MASK
),
919 DREG(DMA_ERR1_STATUS_MASK
),
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
),
935 /* Don't seem to exist ...
936 DREG(PHB_DEBUG_CONTROL6),
937 DREG(PHB_DEBUG_STATUS6),
941 static int wsp_pci_regs_show(struct seq_file
*m
, void *private)
943 struct wsp_phb
*phb
= m
->private;
944 struct pci_controller
*hose
= phb
->hose
;
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)
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
);
962 static int wsp_pci_regs_open(struct inode
*inode
, struct file
*file
)
964 return single_open(file
, wsp_pci_regs_show
, inode
->i_private
);
967 static const struct file_operations wsp_pci_regs_fops
= {
968 .open
= wsp_pci_regs_open
,
971 .release
= single_release
,
974 static int wsp_pci_reg_set(void *data
, u64 val
)
976 out_be64((void __iomem
*)data
, val
);
980 static int wsp_pci_reg_get(void *data
, u64
*val
)
982 *val
= in_be64((void __iomem
*)data
);
986 DEFINE_SIMPLE_ATTRIBUTE(wsp_pci_reg_fops
, wsp_pci_reg_get
, wsp_pci_reg_set
, "0x%llx\n");
988 static irqreturn_t
wsp_pci_err_irq(int irq
, void *dev_id
)
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
;
995 pr_err("PCI: Error interrupt on %s (PHB %d)\n",
996 hose
->dn
->full_name
, hose
->global_number
);
998 memset(&ed
, 0, sizeof(ed
));
1000 /* Read and clear UTL errors */
1001 ed
.utl_sys_err
= in_be64(hose
->cfg_data
+ PCIE_UTL_SYS_BUS_AGENT_STATUS
);
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
);
1009 out_be64(hose
->cfg_data
+ PCIE_UTL_RC_STATUS
, ed
.utl_rc_err
);
1011 /* Read and clear main trap errors */
1012 ed
.phb_err
= in_be64(hose
->cfg_data
+ PCIE_REG_PHB_ERR_STATUS
);
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);
1020 ed
.mmio_err
= in_be64(hose
->cfg_data
+ PCIE_REG_MMIO_ERR_STATUS
);
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);
1028 ed
.dma_err
= in_be64(hose
->cfg_data
+ PCIE_REG_DMA_ERR_STATUS
);
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);
1037 /* Now print things out */
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
);
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
);
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
);
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
);
1061 pr_err(" UTL RC Error Status : 0x%016llx\n", ed
.utl_rc_err
);
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
1067 if (ed
.dma_err
|| ed
.mmio_err
|| ed
.phb_err
) {
1068 handled
= IRQ_HANDLED
;
1074 static void __init
wsp_setup_pci_err_reporting(struct wsp_phb
*phb
)
1076 struct pci_controller
*hose
= phb
->hose
;
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
);
1084 /* Some useful debug output */
1086 struct dentry
*d
= debugfs_create_dir("regs", phb
->ddir
);
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
,
1096 debugfs_create_file("all_regs", 0600, phb
->ddir
, phb
, &wsp_pci_regs_fops
);
1099 /* Find the IRQ number for that PHB */
1100 err_irq
= irq_of_parse_and_map(hose
->dn
, 0);
1102 /* XXX Error IRQ lacking from device-tree */
1103 err_irq
= wsp_pci_get_err_irq_no_dt(hose
->dn
);
1105 pr_err("PCI: Failed to fetch error interrupt for %s\n",
1106 hose
->dn
->full_name
);
1110 rc
= request_irq(err_irq
, wsp_pci_err_irq
, 0, "wsp_pci error", phb
);
1112 pr_err("PCI: Failed to request interrupt for %s\n",
1113 hose
->dn
->full_name
);
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
);
1122 * This is called later to hookup with the error interrupt
1124 static int __init
wsp_setup_pci_late(void)
1126 struct wsp_phb
*phb
;
1128 list_for_each_entry(phb
, &wsp_phbs
, all
)
1129 wsp_setup_pci_err_reporting(phb
);
1133 arch_initcall(wsp_setup_pci_late
);