Lines Matching refs:ioda
137 if (!(pe_no >= 0 && pe_no < phb->ioda.total_pe)) { in pnv_ioda_reserve_pe()
143 if (test_and_set_bit(pe_no, phb->ioda.pe_alloc)) in pnv_ioda_reserve_pe()
147 phb->ioda.pe_array[pe_no].phb = phb; in pnv_ioda_reserve_pe()
148 phb->ioda.pe_array[pe_no].pe_number = pe_no; in pnv_ioda_reserve_pe()
156 pe = find_next_zero_bit(phb->ioda.pe_alloc, in pnv_ioda_alloc_pe()
157 phb->ioda.total_pe, 0); in pnv_ioda_alloc_pe()
158 if (pe >= phb->ioda.total_pe) in pnv_ioda_alloc_pe()
160 } while(test_and_set_bit(pe, phb->ioda.pe_alloc)); in pnv_ioda_alloc_pe()
162 phb->ioda.pe_array[pe].phb = phb; in pnv_ioda_alloc_pe()
163 phb->ioda.pe_array[pe].pe_number = pe; in pnv_ioda_alloc_pe()
169 WARN_ON(phb->ioda.pe_array[pe].pdev); in pnv_ioda_free_pe()
171 memset(&phb->ioda.pe_array[pe], 0, sizeof(struct pnv_ioda_pe)); in pnv_ioda_free_pe()
172 clear_bit(pe, phb->ioda.pe_alloc); in pnv_ioda_free_pe()
185 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
186 phb->ioda.m64_base, in pnv_ioda2_init_m64()
188 phb->ioda.m64_size); in pnv_ioda2_init_m64()
197 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
205 set_bit(phb->ioda.m64_bar_idx, &phb->ioda.m64_bar_alloc); in pnv_ioda2_init_m64()
212 if (phb->ioda.reserved_pe == 0) in pnv_ioda2_init_m64()
213 r->start += phb->ioda.m64_segsize; in pnv_ioda2_init_m64()
214 else if (phb->ioda.reserved_pe == (phb->ioda.total_pe - 1)) in pnv_ioda2_init_m64()
215 r->end -= phb->ioda.m64_segsize; in pnv_ioda2_init_m64()
218 phb->ioda.reserved_pe); in pnv_ioda2_init_m64()
224 rc, desc, phb->ioda.m64_bar_idx); in pnv_ioda2_init_m64()
227 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
241 base = phb->ioda.m64_base; in pnv_ioda2_reserve_dev_m64_pe()
242 sgsz = phb->ioda.m64_segsize; in pnv_ioda2_reserve_dev_m64_pe()
287 size = _ALIGN_UP(phb->ioda.total_pe / 8, sizeof(unsigned long)); in pnv_ioda2_pick_m64_pe()
303 if (bitmap_empty(pe_alloc, phb->ioda.total_pe)) { in pnv_ioda2_pick_m64_pe()
314 while ((i = find_next_bit(pe_alloc, phb->ioda.total_pe, i + 1)) < in pnv_ioda2_pick_m64_pe()
315 phb->ioda.total_pe) { in pnv_ioda2_pick_m64_pe()
316 pe = &phb->ioda.pe_array[i]; in pnv_ioda2_pick_m64_pe()
366 phb->ioda.m64_size = resource_size(res); in pnv_ioda_parse_m64_window()
367 phb->ioda.m64_segsize = phb->ioda.m64_size / phb->ioda.total_pe; in pnv_ioda_parse_m64_window()
368 phb->ioda.m64_base = pci_addr; in pnv_ioda_parse_m64_window()
374 phb->ioda.m64_bar_idx = 15; in pnv_ioda_parse_m64_window()
382 struct pnv_ioda_pe *pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_freeze_pe()
426 pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_unfreeze_pe()
468 if (pe_no < 0 || pe_no >= phb->ioda.total_pe) in pnv_ioda_get_pe_state()
475 pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_get_pe_state()
536 return &phb->ioda.pe_array[pdn->pe_number]; in pnv_ioda_get_pe()
632 parent = &phb->ioda.pe_array[pdn->pe_number]; in pnv_ioda_set_peltv()
691 phb->ioda.pe_rmap[rid] = 0; in pnv_ioda_deconfigure_pe()
788 phb->ioda.pe_rmap[rid] = pe->pe_number; in pnv_ioda_configure_pe()
821 list_for_each_entry(lpe, &phb->ioda.pe_dma_list, dma_link) { in pnv_ioda_link_pe_by_weight()
827 list_add_tail(&pe->dma_link, &phb->ioda.pe_dma_list); in pnv_ioda_link_pe_by_weight()
962 pe = &phb->ioda.pe_array[pe_num];
987 phb->ioda.dma_weight += pe->dma_weight;
988 phb->ioda.dma_pe_count++;
1044 pe = &phb->ioda.pe_array[pe_num]; in pnv_ioda_setup_bus_PE()
1072 list_add_tail(&pe->list, &phb->ioda.pe_list); in pnv_ioda_setup_bus_PE()
1078 phb->ioda.dma_weight += pe->dma_weight; in pnv_ioda_setup_bus_PE()
1079 phb->ioda.dma_pe_count++; in pnv_ioda_setup_bus_PE()
1146 clear_bit(pdn->m64_wins[i][j], &phb->ioda.m64_bar_alloc); in pnv_pci_vf_release_m64()
1199 win = find_next_zero_bit(&phb->ioda.m64_bar_alloc, in pnv_pci_vf_assign_m64()
1200 phb->ioda.m64_bar_idx + 1, 0); in pnv_pci_vf_assign_m64()
1202 if (win >= phb->ioda.m64_bar_idx + 1) in pnv_pci_vf_assign_m64()
1204 } while (test_and_set_bit(win, &phb->ioda.m64_bar_alloc)); in pnv_pci_vf_assign_m64()
1331 list_for_each_entry_safe(pe, pe_n, &phb->ioda.pe_list, list) { in pnv_ioda_release_vf_PE()
1338 mutex_lock(&phb->ioda.pe_list_mutex); in pnv_ioda_release_vf_PE()
1340 mutex_unlock(&phb->ioda.pe_list_mutex); in pnv_ioda_release_vf_PE()
1375 bitmap_clear(phb->ioda.pe_alloc, pdn->offset, num_vfs); in pnv_pci_sriov_disable()
1405 pe = &phb->ioda.pe_array[pe_num]; in pnv_ioda_setup_vf_PE()
1430 mutex_lock(&phb->ioda.pe_list_mutex); in pnv_ioda_setup_vf_PE()
1431 list_add_tail(&pe->list, &phb->ioda.pe_list); in pnv_ioda_setup_vf_PE()
1432 mutex_unlock(&phb->ioda.pe_list_mutex); in pnv_ioda_setup_vf_PE()
1484 mutex_lock(&phb->ioda.pe_alloc_mutex); in pnv_pci_sriov_enable()
1486 phb->ioda.pe_alloc, phb->ioda.total_pe, in pnv_pci_sriov_enable()
1488 if (pdn->offset >= phb->ioda.total_pe) { in pnv_pci_sriov_enable()
1489 mutex_unlock(&phb->ioda.pe_alloc_mutex); in pnv_pci_sriov_enable()
1494 bitmap_set(phb->ioda.pe_alloc, pdn->offset, num_vfs); in pnv_pci_sriov_enable()
1496 mutex_unlock(&phb->ioda.pe_alloc_mutex); in pnv_pci_sriov_enable()
1523 bitmap_clear(phb->ioda.pe_alloc, pdn->offset, num_vfs); in pnv_pci_sriov_enable()
1561 pe = &phb->ioda.pe_array[pdn->pe_number]; in pnv_pci_ioda_dma_dev_setup()
1585 pe = &phb->ioda.pe_array[pdn->pe_number]; in pnv_pci_ioda_dma_set_mask()
1613 pe = &phb->ioda.pe_array[pdn->pe_number]; in pnv_pci_ioda_dma_get_required_mask()
1649 (__be64 __iomem *)pe->phb->ioda.tce_inval_reg_phys : in pnv_pci_ioda1_tce_invalidate()
1650 pe->phb->ioda.tce_inval_reg; in pnv_pci_ioda1_tce_invalidate()
1744 if (!phb->ioda.tce_inval_reg) in pnv_pci_ioda2_tce_invalidate_entire()
1748 __raw_writeq(cpu_to_be64(val), phb->ioda.tce_inval_reg); in pnv_pci_ioda2_tce_invalidate_entire()
1786 (__be64 __iomem *)pe->phb->ioda.tce_inval_reg_phys : in pnv_pci_ioda2_tce_invalidate()
1787 pe->phb->ioda.tce_inval_reg; in pnv_pci_ioda2_tce_invalidate()
1910 if (phb->ioda.tce_inval_reg) in pnv_pci_ioda_setup_dma_pe()
2039 if (pe->phb->ioda.tce_inval_reg) in pnv_pci_ioda2_create_table()
2090 if (pe->phb->ioda.tce_inval_reg) in pnv_pci_ioda2_setup_default_config()
2202 phb->ioda.tce_inval_reg_phys = be64_to_cpup(swinvp); in pnv_pci_ioda_setup_opal_tce_kill()
2203 phb->ioda.tce_inval_reg = ioremap(phb->ioda.tce_inval_reg_phys, 8); in pnv_pci_ioda_setup_opal_tce_kill()
2359 phb->ioda.m32_pci_base); in pnv_pci_ioda2_setup_dma_pe()
2363 pe->table_group.tce32_size = phb->ioda.m32_pci_base; in pnv_pci_ioda2_setup_dma_pe()
2396 if (phb->ioda.dma_pe_count > phb->ioda.tce32_count) in pnv_ioda_setup_dma()
2399 residual = phb->ioda.tce32_count - in pnv_ioda_setup_dma()
2400 phb->ioda.dma_pe_count; in pnv_ioda_setup_dma()
2403 hose->global_number, phb->ioda.tce32_count); in pnv_ioda_setup_dma()
2405 phb->ioda.dma_pe_count, phb->ioda.dma_weight); in pnv_ioda_setup_dma()
2413 remaining = phb->ioda.tce32_count; in pnv_ioda_setup_dma()
2414 tw = phb->ioda.dma_weight; in pnv_ioda_setup_dma()
2416 list_for_each_entry(pe, &phb->ioda.pe_dma_list, dma_link) { in pnv_ioda_setup_dma()
2456 ioda.irq_chip); in pnv_ioda2_msi_eoi()
2474 if (!phb->ioda.irq_chip_init) { in set_msi_irq_chip()
2481 phb->ioda.irq_chip_init = 1; in set_msi_irq_chip()
2482 phb->ioda.irq_chip = *ichip; in set_msi_irq_chip()
2483 phb->ioda.irq_chip.irq_eoi = pnv_ioda2_msi_eoi; in set_msi_irq_chip()
2485 irq_set_chip(virq, &phb->ioda.irq_chip); in set_msi_irq_chip()
2756 mul = phb->ioda.total_pe; in pnv_pci_ioda_fixup_iov_resources()
2828 region.start = res->start - phb->ioda.io_pci_base; in pnv_ioda_setup_pe_seg()
2829 region.end = res->end - phb->ioda.io_pci_base; in pnv_ioda_setup_pe_seg()
2830 index = region.start / phb->ioda.io_segsize; in pnv_ioda_setup_pe_seg()
2832 while (index < phb->ioda.total_pe && in pnv_ioda_setup_pe_seg()
2834 phb->ioda.io_segmap[index] = pe->pe_number; in pnv_ioda_setup_pe_seg()
2844 region.start += phb->ioda.io_segsize; in pnv_ioda_setup_pe_seg()
2851 phb->ioda.m32_pci_base; in pnv_ioda_setup_pe_seg()
2854 phb->ioda.m32_pci_base; in pnv_ioda_setup_pe_seg()
2855 index = region.start / phb->ioda.m32_segsize; in pnv_ioda_setup_pe_seg()
2857 while (index < phb->ioda.total_pe && in pnv_ioda_setup_pe_seg()
2859 phb->ioda.m32_segmap[index] = pe->pe_number; in pnv_ioda_setup_pe_seg()
2869 region.start += phb->ioda.m32_segsize; in pnv_ioda_setup_pe_seg()
2884 list_for_each_entry(pe, &phb->ioda.pe_list, list) { in pnv_pci_ioda_setup_seg()
2969 if (phb->ioda.m64_segsize && in pnv_pci_window_alignment()
2971 return phb->ioda.m64_segsize; in pnv_pci_window_alignment()
2973 return phb->ioda.m32_segsize; in pnv_pci_window_alignment()
2975 return phb->ioda.io_segsize; in pnv_pci_window_alignment()
3024 return phb->ioda.pe_rmap[(bus->number << 8) | devfn]; in pnv_ioda_bdfn_to_pe()
3098 mutex_init(&phb->ioda.pe_alloc_mutex); in pnv_pci_init_ioda_phb()
3117 phb->ioda.total_pe = 1; in pnv_pci_init_ioda_phb()
3120 phb->ioda.total_pe = be32_to_cpup(prop32); in pnv_pci_init_ioda_phb()
3123 phb->ioda.reserved_pe = be32_to_cpup(prop32); in pnv_pci_init_ioda_phb()
3128 phb->ioda.m32_size = resource_size(&hose->mem_resources[0]); in pnv_pci_init_ioda_phb()
3130 phb->ioda.m32_size += 0x10000; in pnv_pci_init_ioda_phb()
3132 phb->ioda.m32_segsize = phb->ioda.m32_size / phb->ioda.total_pe; in pnv_pci_init_ioda_phb()
3133 phb->ioda.m32_pci_base = hose->mem_resources[0].start - hose->mem_offset[0]; in pnv_pci_init_ioda_phb()
3134 phb->ioda.io_size = hose->pci_io_size; in pnv_pci_init_ioda_phb()
3135 phb->ioda.io_segsize = phb->ioda.io_size / phb->ioda.total_pe; in pnv_pci_init_ioda_phb()
3136 phb->ioda.io_pci_base = 0; /* XXX calculate this ? */ in pnv_pci_init_ioda_phb()
3139 size = _ALIGN_UP(phb->ioda.total_pe / 8, sizeof(unsigned long)); in pnv_pci_init_ioda_phb()
3141 size += phb->ioda.total_pe * sizeof(phb->ioda.m32_segmap[0]); in pnv_pci_init_ioda_phb()
3144 size += phb->ioda.total_pe * sizeof(phb->ioda.io_segmap[0]); in pnv_pci_init_ioda_phb()
3147 size += phb->ioda.total_pe * sizeof(struct pnv_ioda_pe); in pnv_pci_init_ioda_phb()
3149 phb->ioda.pe_alloc = aux; in pnv_pci_init_ioda_phb()
3150 phb->ioda.m32_segmap = aux + m32map_off; in pnv_pci_init_ioda_phb()
3152 phb->ioda.io_segmap = aux + iomap_off; in pnv_pci_init_ioda_phb()
3153 phb->ioda.pe_array = aux + pemap_off; in pnv_pci_init_ioda_phb()
3154 set_bit(phb->ioda.reserved_pe, phb->ioda.pe_alloc); in pnv_pci_init_ioda_phb()
3156 INIT_LIST_HEAD(&phb->ioda.pe_dma_list); in pnv_pci_init_ioda_phb()
3157 INIT_LIST_HEAD(&phb->ioda.pe_list); in pnv_pci_init_ioda_phb()
3158 mutex_init(&phb->ioda.pe_list_mutex); in pnv_pci_init_ioda_phb()
3161 phb->ioda.tce32_count = phb->ioda.m32_pci_base >> 28; in pnv_pci_init_ioda_phb()
3173 phb->ioda.total_pe, phb->ioda.reserved_pe, in pnv_pci_init_ioda_phb()
3174 phb->ioda.m32_size, phb->ioda.m32_segsize); in pnv_pci_init_ioda_phb()
3175 if (phb->ioda.m64_size) in pnv_pci_init_ioda_phb()
3177 phb->ioda.m64_size, phb->ioda.m64_segsize); in pnv_pci_init_ioda_phb()
3178 if (phb->ioda.io_size) in pnv_pci_init_ioda_phb()
3180 phb->ioda.io_size, phb->ioda.io_segsize); in pnv_pci_init_ioda_phb()