Lines Matching +full:isa +full:- +full:extensions
1 // SPDX-License-Identifier: GPL-2.0-or-later
10 * Dynamic DMA mapping support, pSeries-specific parts, both SMP and LPAR.
21 #include <linux/dma-mapping.h>
32 #include <asm/pci-bridge.h>
36 #include <asm/ppc-pci.h>
65 INIT_LIST_HEAD_RCU(&tbl->it_group_list); in iommu_pseries_alloc_table()
66 kref_init(&tbl->it_kref); in iommu_pseries_alloc_table()
79 table_group->ops = &spapr_tce_table_group_ops; in iommu_pseries_alloc_group()
80 table_group->pgsizes = SZ_4K; in iommu_pseries_alloc_group()
83 table_group->tables[0] = iommu_pseries_alloc_table(node); in iommu_pseries_alloc_group()
84 if (table_group->tables[0]) in iommu_pseries_alloc_group()
98 if (table_group->group) { in iommu_pseries_free_group()
99 iommu_group_put(table_group->group); in iommu_pseries_free_group()
100 BUG_ON(table_group->group); in iommu_pseries_free_group()
104 /* Default DMA window table is at index 0, while DDW at 1. SR-IOV in iommu_pseries_free_group()
107 if (table_group->tables[0]) in iommu_pseries_free_group()
108 iommu_tce_table_put(table_group->tables[0]); in iommu_pseries_free_group()
110 if (table_group->tables[1]) in iommu_pseries_free_group()
111 iommu_tce_table_put(table_group->tables[1]); in iommu_pseries_free_group()
124 const unsigned long tceshift = tbl->it_page_shift; in tce_build_pSeries()
132 tcep = ((__be64 *)tbl->it_base) + index; in tce_build_pSeries()
134 while (npages--) { in tce_build_pSeries()
150 tcep = ((__be64 *)tbl->it_base) + index; in tce_free_pSeries()
152 while (npages--) in tce_free_pSeries()
160 tcep = ((__be64 *)tbl->it_base) + index; in tce_get_pseries()
184 while (npages--) { in tce_build_pSeriesLP()
191 (npages_start - (npages + 1))); in tce_build_pSeriesLP()
224 const unsigned long tceshift = tbl->it_page_shift; in tce_buildmulti_pSeriesLP()
227 return tce_build_pSeriesLP(tbl->it_index, tcenum, in tce_buildmulti_pSeriesLP()
244 return tce_build_pSeriesLP(tbl->it_index, tcenum, in tce_buildmulti_pSeriesLP()
269 rc = plpar_tce_put_indirect((u64)tbl->it_index, in tce_buildmulti_pSeriesLP()
274 npages -= limit; in tce_buildmulti_pSeriesLP()
283 (npages_start - (npages + limit))); in tce_buildmulti_pSeriesLP()
289 printk("\tindex = 0x%llx\n", (u64)tbl->it_index); in tce_buildmulti_pSeriesLP()
302 while (npages--) { in tce_free_pSeriesLP()
324 return tce_free_pSeriesLP(tbl->it_index, tcenum, in tce_freemulti_pSeriesLP()
325 tbl->it_page_shift, npages); in tce_freemulti_pSeriesLP()
330 rc = plpar_tce_stuff((u64)tbl->it_index, in tce_freemulti_pSeriesLP()
331 (u64)tcenum << tbl->it_page_shift, 0, limit); in tce_freemulti_pSeriesLP()
333 rpages -= limit; in tce_freemulti_pSeriesLP()
340 printk("\tindex = 0x%llx\n", (u64)tbl->it_index); in tce_freemulti_pSeriesLP()
351 rc = plpar_tce_get((u64)tbl->it_index, in tce_get_pSeriesLP()
352 (u64)tcenum << tbl->it_page_shift, &tce_ret); in tce_get_pSeriesLP()
356 printk("\tindex = 0x%llx\n", (u64)tbl->it_index); in tce_get_pSeriesLP()
408 tce_shift = be32_to_cpu(maprange->tce_shift); in tce_clearrange_multi_pSeriesLP()
414 num_tce += next & (tce_size - 1); in tce_clearrange_multi_pSeriesLP()
415 next &= ~(tce_size - 1); in tce_clearrange_multi_pSeriesLP()
418 num_tce |= tce_size - 1; in tce_clearrange_multi_pSeriesLP()
427 dma_offset = next + be64_to_cpu(maprange->dma_base); in tce_clearrange_multi_pSeriesLP()
429 rc = plpar_tce_stuff((u64)be32_to_cpu(maprange->liobn), in tce_clearrange_multi_pSeriesLP()
433 num_tce -= limit; in tce_clearrange_multi_pSeriesLP()
450 unsigned long tceshift = be32_to_cpu(maprange->tce_shift); in tce_setrange_multi_pSeriesLP()
452 be64_to_cpu(maprange->dma_base); in tce_setrange_multi_pSeriesLP()
457 return tce_build_pSeriesLP(be32_to_cpu(maprange->liobn), in tce_setrange_multi_pSeriesLP()
469 return -ENOMEM; in tce_setrange_multi_pSeriesLP()
476 liobn = (u64)be32_to_cpu(maprange->liobn); in tce_setrange_multi_pSeriesLP()
477 tce_shift = be32_to_cpu(maprange->tce_shift); in tce_setrange_multi_pSeriesLP()
483 num_tce += next & (tce_size - 1); in tce_setrange_multi_pSeriesLP()
484 next &= ~(tce_size - 1); in tce_setrange_multi_pSeriesLP()
487 num_tce |= tce_size - 1; in tce_setrange_multi_pSeriesLP()
497 dma_offset = next + be64_to_cpu(maprange->dma_base); in tce_setrange_multi_pSeriesLP()
509 num_tce -= limit; in tce_setrange_multi_pSeriesLP()
529 tbl->it_busno = busno; in iommu_table_setparms_common()
530 tbl->it_index = liobn; in iommu_table_setparms_common()
531 tbl->it_offset = win_addr >> page_shift; in iommu_table_setparms_common()
532 tbl->it_size = window_size >> page_shift; in iommu_table_setparms_common()
533 tbl->it_page_shift = page_shift; in iommu_table_setparms_common()
534 tbl->it_base = (unsigned long)base; in iommu_table_setparms_common()
535 tbl->it_blocksize = 16; in iommu_table_setparms_common()
536 tbl->it_type = TCE_PCI; in iommu_table_setparms_common()
537 tbl->it_ops = table_ops; in iommu_table_setparms_common()
551 if (phb->dma_window_base_cur + phb->dma_window_size > SZ_2G) { in iommu_table_setparms()
556 node = phb->dn; in iommu_table_setparms()
557 basep = of_get_property(node, "linux,tce-base", NULL); in iommu_table_setparms()
558 sizep = of_get_property(node, "linux,tce-size", NULL); in iommu_table_setparms()
565 iommu_table_setparms_common(tbl, phb->bus->number, 0, phb->dma_window_base_cur, in iommu_table_setparms()
566 phb->dma_window_size, IOMMU_PAGE_SHIFT_4K, in iommu_table_setparms()
570 memset((void *)tbl->it_base, 0, *sizep); in iommu_table_setparms()
572 phb->dma_window_base_cur += phb->dma_window_size; in iommu_table_setparms()
592 iommu_table_setparms_common(tbl, phb->bus->number, liobn, offset, size, IOMMU_PAGE_SHIFT_4K, NULL, in iommu_table_setparms_lpar()
596 table_group->tce32_start = offset; in iommu_table_setparms_lpar()
597 table_group->tce32_size = size; in iommu_table_setparms_lpar()
619 if (bus->self) { in pci_dma_bus_setup_pSeries()
621 * device-side of the bridge in iommu_dev_setup_pSeries(). in pci_dma_bus_setup_pSeries()
627 /* Check if the ISA bus on the system is under in pci_dma_bus_setup_pSeries()
630 isa_dn = isa_dn_orig = of_find_node_by_type(NULL, "isa"); in pci_dma_bus_setup_pSeries()
633 isa_dn = isa_dn->parent; in pci_dma_bus_setup_pSeries()
638 for (children = 0, tmp = dn->child; tmp; tmp = tmp->sibling) in pci_dma_bus_setup_pSeries()
646 * Keep 256MB aside for PHBs with ISA. in pci_dma_bus_setup_pSeries()
650 /* No ISA/IDE - just set window size and return */ in pci_dma_bus_setup_pSeries()
651 pci->phb->dma_window_size = 0x80000000ul; /* To be divided */ in pci_dma_bus_setup_pSeries()
653 while (pci->phb->dma_window_size * children > 0x80000000ul) in pci_dma_bus_setup_pSeries()
654 pci->phb->dma_window_size >>= 1; in pci_dma_bus_setup_pSeries()
655 pr_debug("No ISA/IDE, window size is 0x%llx\n", in pci_dma_bus_setup_pSeries()
656 pci->phb->dma_window_size); in pci_dma_bus_setup_pSeries()
657 pci->phb->dma_window_base_cur = 0; in pci_dma_bus_setup_pSeries()
662 /* If we have ISA, then we probably have an IDE in pci_dma_bus_setup_pSeries()
664 * skip the first 128MB to avoid stepping on ISA in pci_dma_bus_setup_pSeries()
667 pci->phb->dma_window_size = 0x8000000ul; in pci_dma_bus_setup_pSeries()
668 pci->phb->dma_window_base_cur = 0x8000000ul; in pci_dma_bus_setup_pSeries()
670 pci->table_group = iommu_pseries_alloc_group(pci->phb->node); in pci_dma_bus_setup_pSeries()
671 tbl = pci->table_group->tables[0]; in pci_dma_bus_setup_pSeries()
673 iommu_table_setparms(pci->phb, dn, tbl); in pci_dma_bus_setup_pSeries()
675 if (!iommu_init_table(tbl, pci->phb->node, 0, 0)) in pci_dma_bus_setup_pSeries()
679 pci->phb->dma_window_size = 0x80000000ul; in pci_dma_bus_setup_pSeries()
680 while (pci->phb->dma_window_size * children > 0x70000000ul) in pci_dma_bus_setup_pSeries()
681 pci->phb->dma_window_size >>= 1; in pci_dma_bus_setup_pSeries()
683 pr_debug("ISA/IDE, window size is 0x%llx\n", pci->phb->dma_window_size); in pci_dma_bus_setup_pSeries()
691 unsigned long ioba = (unsigned long) index << tbl->it_page_shift; in tce_exchange_pseries()
696 spin_lock_irqsave(&tbl->large_pool.lock, flags); in tce_exchange_pseries()
698 rc = plpar_tce_get((u64)tbl->it_index, ioba, &oldtce); in tce_exchange_pseries()
700 rc = plpar_tce_put((u64)tbl->it_index, ioba, newtce); in tce_exchange_pseries()
707 spin_unlock_irqrestore(&tbl->large_pool.lock, flags); in tce_exchange_pseries()
723 * Find nearest ibm,dma-window (default DMA window) or direct DMA window or
731 for ( ; dn && PCI_DN(dn); dn = dn->parent) { in pci_dma_find()
732 dw = of_get_property(dn, "ibm,dma-window", NULL); in pci_dma_find()
764 pr_debug(" no ibm,dma-window property !\n"); in pci_dma_bus_setup_pSeriesLP()
769 pdn, ppci->table_group); in pci_dma_bus_setup_pSeriesLP()
771 if (!ppci->table_group) { in pci_dma_bus_setup_pSeriesLP()
772 ppci->table_group = iommu_pseries_alloc_group(ppci->phb->node); in pci_dma_bus_setup_pSeriesLP()
773 tbl = ppci->table_group->tables[0]; in pci_dma_bus_setup_pSeriesLP()
775 iommu_table_setparms_lpar(ppci->phb, pdn, tbl, in pci_dma_bus_setup_pSeriesLP()
776 ppci->table_group, dma_window); in pci_dma_bus_setup_pSeriesLP()
778 if (!iommu_init_table(tbl, ppci->phb->node, 0, 0)) in pci_dma_bus_setup_pSeriesLP()
781 iommu_register_group(ppci->table_group, in pci_dma_bus_setup_pSeriesLP()
783 pr_debug(" created table: %p\n", ppci->table_group); in pci_dma_bus_setup_pSeriesLP()
795 dn = dev->dev.of_node; in pci_dma_dev_setup_pSeries()
801 if (!dev->bus->self) { in pci_dma_dev_setup_pSeries()
802 struct pci_controller *phb = PCI_DN(dn)->phb; in pci_dma_dev_setup_pSeries()
804 pr_debug(" --> first child, no bridge. Allocating iommu table.\n"); in pci_dma_dev_setup_pSeries()
805 PCI_DN(dn)->table_group = iommu_pseries_alloc_group(phb->node); in pci_dma_dev_setup_pSeries()
806 tbl = PCI_DN(dn)->table_group->tables[0]; in pci_dma_dev_setup_pSeries()
809 if (!iommu_init_table(tbl, phb->node, 0, 0)) in pci_dma_dev_setup_pSeries()
812 set_iommu_table_base(&dev->dev, tbl); in pci_dma_dev_setup_pSeries()
820 while (dn && PCI_DN(dn) && PCI_DN(dn)->table_group == NULL) in pci_dma_dev_setup_pSeries()
821 dn = dn->parent; in pci_dma_dev_setup_pSeries()
824 set_iommu_table_base(&dev->dev, in pci_dma_dev_setup_pSeries()
825 PCI_DN(dn)->table_group->tables[0]); in pci_dma_dev_setup_pSeries()
848 1ULL << (be32_to_cpu(dwp->window_shift) - PAGE_SHIFT), dwp); in clean_dma_window()
867 "%d to ibm,remove-pe-dma-window(%x) %llx\n", in __remove_dma_window()
871 "%d to ibm,remove-pe-dma-window(%x) %llx\n", in __remove_dma_window()
881 dwp = win->value; in remove_dma_window()
882 liobn = (u64)be32_to_cpu(dwp->liobn); in remove_dma_window()
896 return -EINVAL; in remove_ddw()
898 ret = of_property_read_u32_array(np, "ibm,ddw-applicable", in remove_ddw()
904 if (win->length >= sizeof(struct dynamic_dma_window_prop)) in remove_ddw()
926 if (window->device == pdn) { in find_existing_ddw()
927 dma64 = window->prop; in find_existing_ddw()
928 *dma_addr = be64_to_cpu(dma64->dma_base); in find_existing_ddw()
929 *window_shift = be32_to_cpu(dma64->window_shift); in find_existing_ddw()
948 window->device = pdn; in ddw_list_new_entry()
949 window->prop = dma64; in ddw_list_new_entry()
950 window->direct = false; in ddw_list_new_entry()
976 list_add(&window->list, &dma_win_list); in find_existing_ddw_windows_named()
994 * ddw_read_ext - Get the value of an DDW extension
999 * Checks if "ibm,ddw-extensions" exists for this node, and get the value
1005 * -EINVAL if the "ibm,ddw-extensions" does not exist,
1006 * -ENODATA if "ibm,ddw-extensions" does not have a value, and
1007 * -EOVERFLOW if "ibm,ddw-extensions" does not contain this extension.
1012 static const char propname[] = "ibm,ddw-extensions"; in ddw_read_ext()
1021 return -EOVERFLOW; in ddw_read_ext()
1040 * From LoPAR level 2.8, "ibm,ddw-extensions" index 3 can rule how many in query_ddw()
1041 * output parameters ibm,query-pe-dma-windows will have, ranging from in query_ddw()
1054 * dma-window property in query_ddw()
1058 buid = pdn->phb->buid; in query_ddw()
1059 cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8)); in query_ddw()
1066 query->windows_available = query_out[0]; in query_ddw()
1067 query->largest_available_block = query_out[1]; in query_ddw()
1068 query->page_size = query_out[2]; in query_ddw()
1069 query->migration_capable = query_out[3]; in query_ddw()
1072 query->windows_available = query_out[0]; in query_ddw()
1073 query->largest_available_block = ((u64)query_out[1] << 32) | in query_ddw()
1075 query->page_size = query_out[3]; in query_ddw()
1076 query->migration_capable = query_out[4]; in query_ddw()
1080 dev_info(&dev->dev, "ibm,query-pe-dma-windows(%x) %x %x %x returned %d, lb=%llx ps=%x wn=%d\n", in query_ddw()
1082 BUID_LO(buid), ret, query->largest_available_block, in query_ddw()
1083 query->page_size, query->windows_available); in query_ddw()
1102 * dma-window property in create_ddw()
1106 buid = pdn->phb->buid; in create_ddw()
1107 cfg_addr = ((pdn->busno << 16) | (pdn->devfn << 8)); in create_ddw()
1110 /* extra outputs are LIOBN and dma-addr (hi, lo) */ in create_ddw()
1115 dev_info(&dev->dev, in create_ddw()
1116 "ibm,create-pe-dma-window(%x) %x %x %x %x %x returned %d " in create_ddw()
1119 BUID_LO(buid), page_shift, window_shift, ret, create->liobn, in create_ddw()
1120 create->addr_hi, create->addr_lo); in create_ddw()
1151 * ibm,ddw-extensions, which carries the rtas token for
1152 * ibm,reset-pe-dma-windows.
1153 * That rtas-call can be used to restore the default DMA window for the device.
1169 buid = pdn->phb->buid; in reset_dma_window()
1170 cfg_addr = (pdn->busno << 16) | (pdn->devfn << 8); in reset_dma_window()
1175 dev_info(&dev->dev, in reset_dma_window()
1176 "ibm,reset-pe-dma-windows(%x) %x %x %x returned %d ", in reset_dma_window()
1181 /* Return largest page shift based on "IO Page Sizes" output of ibm,query-pe-dma-window. */
1184 /* Supported IO page-sizes according to LoPAR, note that 2M is out of order */ in iommu_get_page_shift()
1191 int i = ARRAY_SIZE(shift) - 1; in iommu_get_page_shift()
1195 * On LoPAR, ibm,query-pe-dma-window outputs "IO Page Sizes" using a bit field: in iommu_get_page_shift()
1196 * - bit 31 means 4k pages are supported, in iommu_get_page_shift()
1197 * - bit 30 means 64k pages are supported, and so on. in iommu_get_page_shift()
1200 for (; i >= 0 ; i--) { in iommu_get_page_shift()
1218 win64->name = kstrdup(propname, GFP_KERNEL); in ddw_property_create()
1220 win64->value = ddwprop; in ddw_property_create()
1221 win64->length = sizeof(*ddwprop); in ddw_property_create()
1222 if (!win64->name || !win64->value) { in ddw_property_create()
1223 kfree(win64->name); in ddw_property_create()
1224 kfree(win64->value); in ddw_property_create()
1229 ddwprop->liobn = cpu_to_be32(liobn); in ddw_property_create()
1230 ddwprop->dma_base = cpu_to_be64(dma_addr); in ddw_property_create()
1231 ddwprop->tce_shift = cpu_to_be32(page_shift); in ddw_property_create()
1232 ddwprop->window_shift = cpu_to_be32(window_shift); in ddw_property_create()
1240 * and record the dma-offset in the struct device.
1273 if (find_existing_ddw(pdn, &dev->dev.archdata.dma_offset, &len)) { in enable_ddw()
1281 * DMA window again, as it will race with in-flight operations in enable_ddw()
1286 if (fpdn->pdn == pdn) in enable_ddw()
1291 * the ibm,ddw-applicable property holds the tokens for: in enable_ddw()
1292 * ibm,query-pe-dma-window in enable_ddw()
1293 * ibm,create-pe-dma-window in enable_ddw()
1294 * ibm,remove-pe-dma-window in enable_ddw()
1298 ret = of_property_read_u32_array(pdn, "ibm,ddw-applicable", in enable_ddw()
1307 * of page sizes: supported and supported for migrate-dma. in enable_ddw()
1319 * for extensions presence. in enable_ddw()
1325 if (iommu_table_in_use(pci->table_group->tables[0])) { in enable_ddw()
1326 dev_warn(&dev->dev, "current IOMMU table in use, can't be replaced.\n"); in enable_ddw()
1330 default_win = of_find_property(pdn, "ibm,dma-window", NULL); in enable_ddw()
1348 dev_dbg(&dev->dev, "no free dynamic windows"); in enable_ddw()
1355 dev_dbg(&dev->dev, "no supported page size in mask %x", in enable_ddw()
1370 (1ULL << (MAX_PHYSMEM_BITS - page_shift))) in enable_ddw()
1373 dev_info(&dev->dev, "Skipping ibm,pmemory"); in enable_ddw()
1377 if (query.largest_available_block < (1ULL << (len - page_shift))) { in enable_ddw()
1378 dev_dbg(&dev->dev, in enable_ddw()
1379 "can't map partition max 0x%llx with %llu %llu-sized pages\n", in enable_ddw()
1397 dev_dbg(&dev->dev, "created tce table LIOBN 0x%x for %pOF\n", in enable_ddw()
1404 dev_info(&dev->dev, in enable_ddw()
1411 dev_err(&dev->dev, "unable to add DMA window property for %pOF: %d", in enable_ddw()
1416 window = ddw_list_new_entry(pdn, win64->value); in enable_ddw()
1421 window->direct = true; in enable_ddw()
1425 win64->value, tce_setrange_multi_pSeriesLP_walk); in enable_ddw()
1427 dev_info(&dev->dev, "failed to map DMA window for %pOF: %d\n", in enable_ddw()
1431 clean_dma_window(pdn, win64->value); in enable_ddw()
1439 window->direct = false; in enable_ddw()
1441 for (i = 0; i < ARRAY_SIZE(pci->phb->mem_resources); i++) { in enable_ddw()
1445 if ((pci->phb->mem_resources[i].flags & mask) == IORESOURCE_MEM) { in enable_ddw()
1446 start = pci->phb->mem_resources[i].start; in enable_ddw()
1447 end = pci->phb->mem_resources[i].end; in enable_ddw()
1453 newtbl = iommu_pseries_alloc_table(pci->phb->node); in enable_ddw()
1455 dev_dbg(&dev->dev, "couldn't create new IOMMU table\n"); in enable_ddw()
1459 iommu_table_setparms_common(newtbl, pci->phb->bus->number, create.liobn, win_addr, in enable_ddw()
1461 iommu_init_table(newtbl, pci->phb->node, start, end); in enable_ddw()
1463 pci->table_group->tables[1] = newtbl; in enable_ddw()
1465 set_iommu_table_base(&dev->dev, newtbl); in enable_ddw()
1469 iommu_tce_table_put(pci->table_group->tables[0]); in enable_ddw()
1470 pci->table_group->tables[0] = NULL; in enable_ddw()
1474 dev_info(&dev->dev, "Removed default DMA window for %pOF\n", pdn); in enable_ddw()
1478 list_add(&window->list, &dma_win_list); in enable_ddw()
1481 dev->dev.archdata.dma_offset = win_addr; in enable_ddw()
1491 kfree(win64->name); in enable_ddw()
1492 kfree(win64->value); in enable_ddw()
1506 fpdn->pdn = pdn; in enable_ddw()
1507 list_add(&fpdn->list, &failed_ddw_pdn_list); in enable_ddw()
1518 dev->dev.bus_dma_limit = dev->dev.archdata.dma_offset + (1ULL << len); in enable_ddw()
1533 * contain the dma-window properties per-device and not necessarily in pci_dma_dev_setup_pSeriesLP()
1535 * either hit a dma-window property, OR find a parent with a table in pci_dma_dev_setup_pSeriesLP()
1551 if (!pci->table_group) { in pci_dma_dev_setup_pSeriesLP()
1552 pci->table_group = iommu_pseries_alloc_group(pci->phb->node); in pci_dma_dev_setup_pSeriesLP()
1553 tbl = pci->table_group->tables[0]; in pci_dma_dev_setup_pSeriesLP()
1554 iommu_table_setparms_lpar(pci->phb, pdn, tbl, in pci_dma_dev_setup_pSeriesLP()
1555 pci->table_group, dma_window); in pci_dma_dev_setup_pSeriesLP()
1557 iommu_init_table(tbl, pci->phb->node, 0, 0); in pci_dma_dev_setup_pSeriesLP()
1558 iommu_register_group(pci->table_group, in pci_dma_dev_setup_pSeriesLP()
1559 pci_domain_nr(pci->phb->bus), 0); in pci_dma_dev_setup_pSeriesLP()
1560 pr_debug(" created table: %p\n", pci->table_group); in pci_dma_dev_setup_pSeriesLP()
1562 pr_debug(" found DMA window, table: %p\n", pci->table_group); in pci_dma_dev_setup_pSeriesLP()
1565 set_iommu_table_base(&dev->dev, pci->table_group->tables[0]); in pci_dma_dev_setup_pSeriesLP()
1566 iommu_add_device(pci->table_group, &dev->dev); in pci_dma_dev_setup_pSeriesLP()
1573 /* only attempt to use a new window if 64-bit DMA is requested */ in iommu_bypass_supported_pSeriesLP()
1577 dev_dbg(&pdev->dev, "node is %pOF\n", dn); in iommu_bypass_supported_pSeriesLP()
1580 * the device tree might contain the dma-window properties in iommu_bypass_supported_pSeriesLP()
1581 * per-device and not necessarily for the bus. So we need to in iommu_bypass_supported_pSeriesLP()
1582 * search upwards in the tree until we either hit a dma-window in iommu_bypass_supported_pSeriesLP()
1603 if (window->direct) { in iommu_mem_notifier()
1604 ret |= tce_setrange_multi_pSeriesLP(arg->start_pfn, in iommu_mem_notifier()
1605 arg->nr_pages, window->prop); in iommu_mem_notifier()
1615 if (window->direct) { in iommu_mem_notifier()
1616 ret |= tce_clearrange_multi_pSeriesLP(arg->start_pfn, in iommu_mem_notifier()
1617 arg->nr_pages, window->prop); in iommu_mem_notifier()
1640 struct device_node *np = rd->dn; in iommu_reconfig_notifier()
1648 * notifier again, which causes dead-lock on the in iommu_reconfig_notifier()
1649 * read-write semaphore of the notifier chain. So in iommu_reconfig_notifier()
1656 if (pci && pci->table_group) in iommu_reconfig_notifier()
1657 iommu_pseries_free_group(pci->table_group, in iommu_reconfig_notifier()
1658 np->full_name); in iommu_reconfig_notifier()
1662 if (window->device == np) { in iommu_reconfig_notifier()
1663 list_del(&window->list); in iommu_reconfig_notifier()
1684 if (of_chosen && of_get_property(of_chosen, "linux,iommu-off", NULL)) in iommu_init_early_pSeries()
1724 struct device_node *pdn, *dn = pdev->dev.of_node; in pSeries_pci_device_group()
1730 return ERR_PTR(-ENODEV); in pSeries_pci_device_group()
1733 if (!pci->table_group) in pSeries_pci_device_group()
1734 return ERR_PTR(-ENODEV); in pSeries_pci_device_group()
1736 grp = pci->table_group->group; in pSeries_pci_device_group()
1738 return ERR_PTR(-ENODEV); in pSeries_pci_device_group()