Lines Matching refs:ioda

128 	if (!(pe_no >= 0 && pe_no < phb->ioda.total_pe)) {  in pnv_ioda_reserve_pe()
134 if (test_and_set_bit(pe_no, phb->ioda.pe_alloc)) { in pnv_ioda_reserve_pe()
140 phb->ioda.pe_array[pe_no].phb = phb; in pnv_ioda_reserve_pe()
141 phb->ioda.pe_array[pe_no].pe_number = pe_no; in pnv_ioda_reserve_pe()
149 pe = find_next_zero_bit(phb->ioda.pe_alloc, in pnv_ioda_alloc_pe()
150 phb->ioda.total_pe, 0); in pnv_ioda_alloc_pe()
151 if (pe >= phb->ioda.total_pe) in pnv_ioda_alloc_pe()
153 } while(test_and_set_bit(pe, phb->ioda.pe_alloc)); in pnv_ioda_alloc_pe()
155 phb->ioda.pe_array[pe].phb = phb; in pnv_ioda_alloc_pe()
156 phb->ioda.pe_array[pe].pe_number = pe; in pnv_ioda_alloc_pe()
162 WARN_ON(phb->ioda.pe_array[pe].pdev); in pnv_ioda_free_pe()
164 memset(&phb->ioda.pe_array[pe], 0, sizeof(struct pnv_ioda_pe)); in pnv_ioda_free_pe()
165 clear_bit(pe, phb->ioda.pe_alloc); in pnv_ioda_free_pe()
178 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
179 phb->ioda.m64_base, in pnv_ioda2_init_m64()
181 phb->ioda.m64_size); in pnv_ioda2_init_m64()
190 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
198 set_bit(phb->ioda.m64_bar_idx, &phb->ioda.m64_bar_alloc); in pnv_ioda2_init_m64()
205 if (phb->ioda.reserved_pe == 0) in pnv_ioda2_init_m64()
206 r->start += phb->ioda.m64_segsize; in pnv_ioda2_init_m64()
207 else if (phb->ioda.reserved_pe == (phb->ioda.total_pe - 1)) in pnv_ioda2_init_m64()
208 r->end -= phb->ioda.m64_segsize; in pnv_ioda2_init_m64()
211 phb->ioda.reserved_pe); in pnv_ioda2_init_m64()
217 rc, desc, phb->ioda.m64_bar_idx); in pnv_ioda2_init_m64()
220 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
227 resource_size_t sgsz = phb->ioda.m64_segsize; in pnv_ioda2_reserve_m64_pe()
244 base = (r->start - phb->ioda.m64_base) / sgsz; in pnv_ioda2_reserve_m64_pe()
254 resource_size_t segsz = phb->ioda.m64_segsize; in pnv_ioda2_pick_m64_pe()
281 size = _ALIGN_UP(phb->ioda.total_pe / 8, sizeof(unsigned long)); in pnv_ioda2_pick_m64_pe()
293 start = (r->start - phb->ioda.m64_base) / segsz; in pnv_ioda2_pick_m64_pe()
313 start = (r->start - phb->ioda.m64_base) / segsz; in pnv_ioda2_pick_m64_pe()
324 if (bitmap_empty(pe_alloc, phb->ioda.total_pe)) { in pnv_ioda2_pick_m64_pe()
336 while ((i = find_next_bit(pe_alloc, phb->ioda.total_pe, i + 1)) < in pnv_ioda2_pick_m64_pe()
337 phb->ioda.total_pe) { in pnv_ioda2_pick_m64_pe()
338 pe = &phb->ioda.pe_array[i]; in pnv_ioda2_pick_m64_pe()
388 phb->ioda.m64_size = resource_size(res); in pnv_ioda_parse_m64_window()
389 phb->ioda.m64_segsize = phb->ioda.m64_size / phb->ioda.total_pe; in pnv_ioda_parse_m64_window()
390 phb->ioda.m64_base = pci_addr; in pnv_ioda_parse_m64_window()
396 phb->ioda.m64_bar_idx = 15; in pnv_ioda_parse_m64_window()
404 struct pnv_ioda_pe *pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_freeze_pe()
448 pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_unfreeze_pe()
490 if (pe_no < 0 || pe_no >= phb->ioda.total_pe) in pnv_ioda_get_pe_state()
497 pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_get_pe_state()
558 return &phb->ioda.pe_array[pdn->pe_number]; in pnv_ioda_get_pe()
654 parent = &phb->ioda.pe_array[pdn->pe_number]; in pnv_ioda_set_peltv()
713 phb->ioda.pe_rmap[rid] = 0; in pnv_ioda_deconfigure_pe()
810 phb->ioda.pe_rmap[rid] = pe->pe_number; in pnv_ioda_configure_pe()
843 list_for_each_entry(lpe, &phb->ioda.pe_dma_list, dma_link) { in pnv_ioda_link_pe_by_weight()
849 list_add_tail(&pe->dma_link, &phb->ioda.pe_dma_list); in pnv_ioda_link_pe_by_weight()
983 pe = &phb->ioda.pe_array[pe_num];
1008 phb->ioda.dma_weight += pe->dma_weight;
1009 phb->ioda.dma_pe_count++;
1065 pe = &phb->ioda.pe_array[pe_num]; in pnv_ioda_setup_bus_PE()
1097 list_add_tail(&pe->list, &phb->ioda.pe_list); in pnv_ioda_setup_bus_PE()
1103 phb->ioda.dma_weight += pe->dma_weight; in pnv_ioda_setup_bus_PE()
1104 phb->ioda.dma_pe_count++; in pnv_ioda_setup_bus_PE()
1171 clear_bit(pdn->m64_wins[i][j], &phb->ioda.m64_bar_alloc); in pnv_pci_vf_release_m64()
1224 win = find_next_zero_bit(&phb->ioda.m64_bar_alloc, in pnv_pci_vf_assign_m64()
1225 phb->ioda.m64_bar_idx + 1, 0); in pnv_pci_vf_assign_m64()
1227 if (win >= phb->ioda.m64_bar_idx + 1) in pnv_pci_vf_assign_m64()
1229 } while (test_and_set_bit(win, &phb->ioda.m64_bar_alloc)); in pnv_pci_vf_assign_m64()
1365 list_for_each_entry_safe(pe, pe_n, &phb->ioda.pe_list, list) { in pnv_ioda_release_vf_PE()
1372 mutex_lock(&phb->ioda.pe_list_mutex); in pnv_ioda_release_vf_PE()
1374 mutex_unlock(&phb->ioda.pe_list_mutex); in pnv_ioda_release_vf_PE()
1409 bitmap_clear(phb->ioda.pe_alloc, pdn->offset, num_vfs); in pnv_pci_sriov_disable()
1439 pe = &phb->ioda.pe_array[pe_num]; in pnv_ioda_setup_vf_PE()
1468 mutex_lock(&phb->ioda.pe_list_mutex); in pnv_ioda_setup_vf_PE()
1469 list_add_tail(&pe->list, &phb->ioda.pe_list); in pnv_ioda_setup_vf_PE()
1470 mutex_unlock(&phb->ioda.pe_list_mutex); in pnv_ioda_setup_vf_PE()
1522 mutex_lock(&phb->ioda.pe_alloc_mutex); in pnv_pci_sriov_enable()
1524 phb->ioda.pe_alloc, phb->ioda.total_pe, in pnv_pci_sriov_enable()
1526 if (pdn->offset >= phb->ioda.total_pe) { in pnv_pci_sriov_enable()
1527 mutex_unlock(&phb->ioda.pe_alloc_mutex); in pnv_pci_sriov_enable()
1532 bitmap_set(phb->ioda.pe_alloc, pdn->offset, num_vfs); in pnv_pci_sriov_enable()
1534 mutex_unlock(&phb->ioda.pe_alloc_mutex); in pnv_pci_sriov_enable()
1561 bitmap_clear(phb->ioda.pe_alloc, pdn->offset, num_vfs); in pnv_pci_sriov_enable()
1599 pe = &phb->ioda.pe_array[pdn->pe_number]; in pnv_pci_ioda_dma_dev_setup()
1615 pe = &phb->ioda.pe_array[pdn->pe_number]; in pnv_pci_ioda_dma_set_mask()
1644 pe = &phb->ioda.pe_array[pdn->pe_number]; in pnv_pci_ioda_dma_get_required_mask()
1932 end = (1 << ilog2(phb->ioda.m32_pci_base)); in pnv_pci_ioda2_setup_dma_pe()
2016 if (phb->ioda.dma_pe_count > phb->ioda.tce32_count) in pnv_ioda_setup_dma()
2019 residual = phb->ioda.tce32_count - in pnv_ioda_setup_dma()
2020 phb->ioda.dma_pe_count; in pnv_ioda_setup_dma()
2023 hose->global_number, phb->ioda.tce32_count); in pnv_ioda_setup_dma()
2025 phb->ioda.dma_pe_count, phb->ioda.dma_weight); in pnv_ioda_setup_dma()
2031 remaining = phb->ioda.tce32_count; in pnv_ioda_setup_dma()
2032 tw = phb->ioda.dma_weight; in pnv_ioda_setup_dma()
2034 list_for_each_entry(pe, &phb->ioda.pe_dma_list, dma_link) { in pnv_ioda_setup_dma()
2074 ioda.irq_chip); in pnv_ioda2_msi_eoi()
2092 if (!phb->ioda.irq_chip_init) { in set_msi_irq_chip()
2099 phb->ioda.irq_chip_init = 1; in set_msi_irq_chip()
2100 phb->ioda.irq_chip = *ichip; in set_msi_irq_chip()
2101 phb->ioda.irq_chip.irq_eoi = pnv_ioda2_msi_eoi; in set_msi_irq_chip()
2103 irq_set_chip(virq, &phb->ioda.irq_chip); in set_msi_irq_chip()
2374 mul = phb->ioda.total_pe; in pnv_pci_ioda_fixup_iov_resources()
2446 region.start = res->start - phb->ioda.io_pci_base; in pnv_ioda_setup_pe_seg()
2447 region.end = res->end - phb->ioda.io_pci_base; in pnv_ioda_setup_pe_seg()
2448 index = region.start / phb->ioda.io_segsize; in pnv_ioda_setup_pe_seg()
2450 while (index < phb->ioda.total_pe && in pnv_ioda_setup_pe_seg()
2452 phb->ioda.io_segmap[index] = pe->pe_number; in pnv_ioda_setup_pe_seg()
2462 region.start += phb->ioda.io_segsize; in pnv_ioda_setup_pe_seg()
2469 phb->ioda.m32_pci_base; in pnv_ioda_setup_pe_seg()
2472 phb->ioda.m32_pci_base; in pnv_ioda_setup_pe_seg()
2473 index = region.start / phb->ioda.m32_segsize; in pnv_ioda_setup_pe_seg()
2475 while (index < phb->ioda.total_pe && in pnv_ioda_setup_pe_seg()
2477 phb->ioda.m32_segmap[index] = pe->pe_number; in pnv_ioda_setup_pe_seg()
2487 region.start += phb->ioda.m32_segsize; in pnv_ioda_setup_pe_seg()
2502 list_for_each_entry(pe, &phb->ioda.pe_list, list) { in pnv_pci_ioda_setup_seg()
2587 if (phb->ioda.m64_segsize && in pnv_pci_window_alignment()
2589 return phb->ioda.m64_segsize; in pnv_pci_window_alignment()
2591 return phb->ioda.m32_segsize; in pnv_pci_window_alignment()
2593 return phb->ioda.io_segsize; in pnv_pci_window_alignment()
2642 return phb->ioda.pe_rmap[(bus->number << 8) | devfn]; in pnv_ioda_bdfn_to_pe()
2699 mutex_init(&phb->ioda.pe_alloc_mutex); in pnv_pci_init_ioda_phb()
2718 phb->ioda.total_pe = 1; in pnv_pci_init_ioda_phb()
2721 phb->ioda.total_pe = be32_to_cpup(prop32); in pnv_pci_init_ioda_phb()
2724 phb->ioda.reserved_pe = be32_to_cpup(prop32); in pnv_pci_init_ioda_phb()
2729 phb->ioda.m32_size = resource_size(&hose->mem_resources[0]); in pnv_pci_init_ioda_phb()
2731 phb->ioda.m32_size += 0x10000; in pnv_pci_init_ioda_phb()
2733 phb->ioda.m32_segsize = phb->ioda.m32_size / phb->ioda.total_pe; in pnv_pci_init_ioda_phb()
2734 phb->ioda.m32_pci_base = hose->mem_resources[0].start - hose->mem_offset[0]; in pnv_pci_init_ioda_phb()
2735 phb->ioda.io_size = hose->pci_io_size; in pnv_pci_init_ioda_phb()
2736 phb->ioda.io_segsize = phb->ioda.io_size / phb->ioda.total_pe; in pnv_pci_init_ioda_phb()
2737 phb->ioda.io_pci_base = 0; /* XXX calculate this ? */ in pnv_pci_init_ioda_phb()
2740 size = _ALIGN_UP(phb->ioda.total_pe / 8, sizeof(unsigned long)); in pnv_pci_init_ioda_phb()
2742 size += phb->ioda.total_pe * sizeof(phb->ioda.m32_segmap[0]); in pnv_pci_init_ioda_phb()
2745 size += phb->ioda.total_pe * sizeof(phb->ioda.io_segmap[0]); in pnv_pci_init_ioda_phb()
2748 size += phb->ioda.total_pe * sizeof(struct pnv_ioda_pe); in pnv_pci_init_ioda_phb()
2750 phb->ioda.pe_alloc = aux; in pnv_pci_init_ioda_phb()
2751 phb->ioda.m32_segmap = aux + m32map_off; in pnv_pci_init_ioda_phb()
2753 phb->ioda.io_segmap = aux + iomap_off; in pnv_pci_init_ioda_phb()
2754 phb->ioda.pe_array = aux + pemap_off; in pnv_pci_init_ioda_phb()
2755 set_bit(phb->ioda.reserved_pe, phb->ioda.pe_alloc); in pnv_pci_init_ioda_phb()
2757 INIT_LIST_HEAD(&phb->ioda.pe_dma_list); in pnv_pci_init_ioda_phb()
2758 INIT_LIST_HEAD(&phb->ioda.pe_list); in pnv_pci_init_ioda_phb()
2759 mutex_init(&phb->ioda.pe_list_mutex); in pnv_pci_init_ioda_phb()
2762 phb->ioda.tce32_count = phb->ioda.m32_pci_base >> 28; in pnv_pci_init_ioda_phb()
2774 phb->ioda.total_pe, phb->ioda.reserved_pe, in pnv_pci_init_ioda_phb()
2775 phb->ioda.m32_size, phb->ioda.m32_segsize); in pnv_pci_init_ioda_phb()
2776 if (phb->ioda.m64_size) in pnv_pci_init_ioda_phb()
2778 phb->ioda.m64_size, phb->ioda.m64_segsize); in pnv_pci_init_ioda_phb()
2779 if (phb->ioda.io_size) in pnv_pci_init_ioda_phb()
2781 phb->ioda.io_size, phb->ioda.io_segsize); in pnv_pci_init_ioda_phb()