Lines Matching refs:ioda
122 phb->ioda.pe_array[pe_no].phb = phb; in pnv_ioda_init_pe()
123 phb->ioda.pe_array[pe_no].pe_number = pe_no; in pnv_ioda_init_pe()
124 phb->ioda.pe_array[pe_no].dma_setup_done = false; in pnv_ioda_init_pe()
137 return &phb->ioda.pe_array[pe_no]; in pnv_ioda_init_pe()
142 if (!(pe_no >= 0 && pe_no < phb->ioda.total_pe_num)) { in pnv_ioda_reserve_pe()
148 mutex_lock(&phb->ioda.pe_alloc_mutex); in pnv_ioda_reserve_pe()
149 if (test_and_set_bit(pe_no, phb->ioda.pe_alloc)) in pnv_ioda_reserve_pe()
152 mutex_unlock(&phb->ioda.pe_alloc_mutex); in pnv_ioda_reserve_pe()
162 mutex_lock(&phb->ioda.pe_alloc_mutex); in pnv_ioda_alloc_pe()
165 for (pe = phb->ioda.total_pe_num - 1; pe >= 0; pe--) { in pnv_ioda_alloc_pe()
166 if (test_bit(pe, phb->ioda.pe_alloc)) { in pnv_ioda_alloc_pe()
179 set_bit(i, phb->ioda.pe_alloc); in pnv_ioda_alloc_pe()
182 ret = &phb->ioda.pe_array[pe]; in pnv_ioda_alloc_pe()
185 mutex_unlock(&phb->ioda.pe_alloc_mutex); in pnv_ioda_alloc_pe()
199 mutex_lock(&phb->ioda.pe_alloc_mutex); in pnv_ioda_free_pe()
200 clear_bit(pe_num, phb->ioda.pe_alloc); in pnv_ioda_free_pe()
201 mutex_unlock(&phb->ioda.pe_alloc_mutex); in pnv_ioda_free_pe()
214 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
215 phb->ioda.m64_base, in pnv_ioda2_init_m64()
217 phb->ioda.m64_size); in pnv_ioda2_init_m64()
226 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
238 if (phb->ioda.reserved_pe_idx == 0) in pnv_ioda2_init_m64()
239 r->start += (2 * phb->ioda.m64_segsize); in pnv_ioda2_init_m64()
240 else if (phb->ioda.reserved_pe_idx == (phb->ioda.total_pe_num - 1)) in pnv_ioda2_init_m64()
241 r->end -= (2 * phb->ioda.m64_segsize); in pnv_ioda2_init_m64()
244 phb->ioda.reserved_pe_idx); in pnv_ioda2_init_m64()
250 rc, desc, phb->ioda.m64_bar_idx); in pnv_ioda2_init_m64()
253 phb->ioda.m64_bar_idx, in pnv_ioda2_init_m64()
266 base = phb->ioda.m64_base; in pnv_ioda_reserve_dev_m64_pe()
267 sgsz = phb->ioda.m64_segsize; in pnv_ioda_reserve_dev_m64_pe()
295 unsigned long base, segsz = phb->ioda.m64_segsize; in pnv_ioda1_init_m64()
298 base = phb->ioda.m64_base + in pnv_ioda1_init_m64()
319 for (index = 0; index < phb->ioda.total_pe_num; index++) { in pnv_ioda1_init_m64()
346 if (phb->ioda.reserved_pe_idx == 0) in pnv_ioda1_init_m64()
347 r->start += (2 * phb->ioda.m64_segsize); in pnv_ioda1_init_m64()
348 else if (phb->ioda.reserved_pe_idx == (phb->ioda.total_pe_num - 1)) in pnv_ioda1_init_m64()
349 r->end -= (2 * phb->ioda.m64_segsize); in pnv_ioda1_init_m64()
352 phb->ioda.reserved_pe_idx, phb->hose->global_number); in pnv_ioda1_init_m64()
391 size = ALIGN(phb->ioda.total_pe_num / 8, sizeof(unsigned long)); in pnv_ioda_pick_m64_pe()
407 if (bitmap_empty(pe_alloc, phb->ioda.total_pe_num)) { in pnv_ioda_pick_m64_pe()
418 while ((i = find_next_bit(pe_alloc, phb->ioda.total_pe_num, i + 1)) < in pnv_ioda_pick_m64_pe()
419 phb->ioda.total_pe_num) { in pnv_ioda_pick_m64_pe()
420 pe = &phb->ioda.pe_array[i]; in pnv_ioda_pick_m64_pe()
422 phb->ioda.m64_segmap[pe->pe_number] = pe->pe_number; in pnv_ioda_pick_m64_pe()
496 phb->ioda.m64_size = resource_size(res); in pnv_ioda_parse_m64_window()
497 phb->ioda.m64_segsize = phb->ioda.m64_size / phb->ioda.total_pe_num; in pnv_ioda_parse_m64_window()
498 phb->ioda.m64_base = pci_addr; in pnv_ioda_parse_m64_window()
506 phb->ioda.m64_bar_alloc = (unsigned long)-1; in pnv_ioda_parse_m64_window()
510 phb->ioda.m64_bar_idx = m64_range[0] + m64_range[1]; in pnv_ioda_parse_m64_window()
512 pr_info(" Using M64 #%d as default window\n", phb->ioda.m64_bar_idx); in pnv_ioda_parse_m64_window()
516 clear_bit(i, &phb->ioda.m64_bar_alloc); in pnv_ioda_parse_m64_window()
530 struct pnv_ioda_pe *pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_freeze_pe()
574 pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_unfreeze_pe()
616 if (pe_no < 0 || pe_no >= phb->ioda.total_pe_num) in pnv_ioda_get_pe_state()
623 pe = &phb->ioda.pe_array[pe_no]; in pnv_ioda_get_pe_state()
672 int pe_number = phb->ioda.pe_rmap[bdfn]; in pnv_pci_bdfn_to_pe()
677 return &phb->ioda.pe_array[pe_number]; in pnv_pci_bdfn_to_pe()
689 return &phb->ioda.pe_array[pdn->pe_number]; in pnv_ioda_get_pe()
784 parent = &phb->ioda.pe_array[pdn->pe_number]; in pnv_ioda_set_peltv()
872 phb->ioda.pe_rmap[rid] = IODA_INVALID_PE; in pnv_ioda_deconfigure_pe()
954 phb->ioda.pe_rmap[rid] = pe->pe_number; in pnv_ioda_configure_pe()
1029 mutex_lock(&phb->ioda.pe_list_mutex); in pnv_ioda_setup_dev_PE()
1030 list_add_tail(&pe->list, &phb->ioda.pe_list); in pnv_ioda_setup_dev_PE()
1031 mutex_unlock(&phb->ioda.pe_list_mutex); in pnv_ioda_setup_dev_PE()
1051 pe_num = phb->ioda.pe_rmap[bus->number << 8]; in pnv_ioda_setup_bus_PE()
1053 pe = &phb->ioda.pe_array[pe_num]; in pnv_ioda_setup_bus_PE()
1059 pe = &phb->ioda.pe_array[phb->ioda.root_pe_idx]; in pnv_ioda_setup_bus_PE()
1097 list_add_tail(&pe->list, &phb->ioda.pe_list); in pnv_ioda_setup_bus_PE()
1129 for (pe_num = 0; pe_num < phb->ioda.total_pe_num; pe_num++) { in pnv_ioda_setup_npu_PE()
1130 pe = &phb->ioda.pe_array[pe_num]; in pnv_ioda_setup_npu_PE()
1145 phb->ioda.pe_rmap[rid] = pe->pe_number; in pnv_ioda_setup_npu_PE()
1199 list_for_each_entry(pe, &phb->ioda.pe_list, list) in pnv_pci_ioda_setup_nvlink()
1350 pe = &phb->ioda.pe_array[pdn->pe_number]; in pnv_pci_ioda_iommu_bypass_supported()
1677 segs = (weight * phb->ioda.dma32_count) / total_weight; in pnv_pci_ioda1_setup_dma_pe()
1688 for (base = 0; base <= phb->ioda.dma32_count - segs; base++) { in pnv_pci_ioda1_setup_dma_pe()
1690 if (phb->ioda.dma32_segmap[i] == in pnv_pci_ioda1_setup_dma_pe()
1755 phb->ioda.dma32_segmap[i] = pe->pe_number; in pnv_pci_ioda1_setup_dma_pe()
1929 if (window_size > pe->phb->ioda.m32_pci_base) { in pnv_pci_ioda2_setup_default_config()
1930 res_start = pe->phb->ioda.m32_pci_base >> tbl->it_page_shift; in pnv_pci_ioda2_setup_default_config()
2087 phb->ioda.m32_pci_base); in pnv_pci_ioda2_setup_dma_pe()
2091 pe->table_group.tce32_size = phb->ioda.m32_pci_base; in pnv_pci_ioda2_setup_dma_pe()
2112 ioda.irq_chip); in pnv_opal_pci_msi_eoi()
2139 if (!phb->ioda.irq_chip_init) { in pnv_set_msi_irq_chip()
2146 phb->ioda.irq_chip_init = 1; in pnv_set_msi_irq_chip()
2147 phb->ioda.irq_chip = *ichip; in pnv_set_msi_irq_chip()
2148 phb->ioda.irq_chip.irq_eoi = pnv_ioda2_msi_eoi; in pnv_set_msi_irq_chip()
2150 irq_set_chip(virq, &phb->ioda.irq_chip); in pnv_set_msi_irq_chip()
2267 region.start = res->start - phb->ioda.io_pci_base; in pnv_ioda_setup_pe_res()
2268 region.end = res->end - phb->ioda.io_pci_base; in pnv_ioda_setup_pe_res()
2269 index = region.start / phb->ioda.io_segsize; in pnv_ioda_setup_pe_res()
2271 while (index < phb->ioda.total_pe_num && in pnv_ioda_setup_pe_res()
2273 phb->ioda.io_segmap[index] = pe->pe_number; in pnv_ioda_setup_pe_res()
2282 region.start += phb->ioda.io_segsize; in pnv_ioda_setup_pe_res()
2289 phb->ioda.m32_pci_base; in pnv_ioda_setup_pe_res()
2292 phb->ioda.m32_pci_base; in pnv_ioda_setup_pe_res()
2293 index = region.start / phb->ioda.m32_segsize; in pnv_ioda_setup_pe_res()
2295 while (index < phb->ioda.total_pe_num && in pnv_ioda_setup_pe_res()
2297 phb->ioda.m32_segmap[index] = pe->pe_number; in pnv_ioda_setup_pe_res()
2306 region.start += phb->ioda.m32_segsize; in pnv_ioda_setup_pe_res()
2371 for (pe_num = 0; pe_num < phb->ioda.total_pe_num; pe_num++) { in pnv_pci_ioda_pe_dump()
2372 struct pnv_ioda_pe *pe = &phb->ioda.pe_array[pe_num]; in pnv_pci_ioda_pe_dump()
2374 if (!test_bit(pe_num, phb->ioda.pe_alloc)) in pnv_pci_ioda_pe_dump()
2501 if (phb->ioda.m64_segsize && pnv_pci_is_m64_flags(type)) in pnv_pci_window_alignment()
2502 return phb->ioda.m64_segsize; in pnv_pci_window_alignment()
2504 return phb->ioda.m32_segsize; in pnv_pci_window_alignment()
2506 return phb->ioda.io_segsize; in pnv_pci_window_alignment()
2543 phb->ioda.m64_segsize) in pnv_pci_fixup_bridge_resources()
2654 for (idx = 0; idx < phb->ioda.dma32_count; idx++) { in pnv_pci_ioda1_unset_window()
2655 if (phb->ioda.dma32_segmap[idx] != pe->pe_number) in pnv_pci_ioda1_unset_window()
2666 phb->ioda.dma32_segmap[idx] = IODA_INVALID_PE; in pnv_pci_ioda1_unset_window()
2724 for (idx = 0; idx < phb->ioda.total_pe_num; idx++) { in pnv_ioda_free_pe_seg()
2729 phb->ioda.reserved_pe_idx, win, 0, idx); in pnv_ioda_free_pe_seg()
2745 phb->ioda.io_segmap); in pnv_ioda_release_pe_seg()
2747 phb->ioda.m32_segmap); in pnv_ioda_release_pe_seg()
2751 phb->ioda.m32_segmap); in pnv_ioda_release_pe_seg()
2762 mutex_lock(&phb->ioda.pe_list_mutex); in pnv_ioda_release_pe()
2764 mutex_unlock(&phb->ioda.pe_list_mutex); in pnv_ioda_release_pe()
2796 if (phb->ioda.root_pe_idx == pe->pe_number) in pnv_ioda_release_pe()
2833 pe = &phb->ioda.pe_array[pdn->pe_number]; in pnv_pci_release_device()
2863 list_for_each_entry(pe, &phb->ioda.pe_list, list) { in pnv_pci_ioda_dma_bus_setup()
2967 mutex_init(&phb->ioda.pe_alloc_mutex); in pnv_pci_init_ioda_phb()
3005 phb->ioda.total_pe_num = 1; in pnv_pci_init_ioda_phb()
3008 phb->ioda.total_pe_num = be32_to_cpup(prop32); in pnv_pci_init_ioda_phb()
3011 phb->ioda.reserved_pe_idx = be32_to_cpup(prop32); in pnv_pci_init_ioda_phb()
3014 for (segno = 0; segno < ARRAY_SIZE(phb->ioda.pe_rmap); segno++) in pnv_pci_init_ioda_phb()
3015 phb->ioda.pe_rmap[segno] = IODA_INVALID_PE; in pnv_pci_init_ioda_phb()
3020 phb->ioda.m32_size = resource_size(&hose->mem_resources[0]); in pnv_pci_init_ioda_phb()
3022 phb->ioda.m32_size += 0x10000; in pnv_pci_init_ioda_phb()
3024 phb->ioda.m32_segsize = phb->ioda.m32_size / phb->ioda.total_pe_num; in pnv_pci_init_ioda_phb()
3025 phb->ioda.m32_pci_base = hose->mem_resources[0].start - hose->mem_offset[0]; in pnv_pci_init_ioda_phb()
3026 phb->ioda.io_size = hose->pci_io_size; in pnv_pci_init_ioda_phb()
3027 phb->ioda.io_segsize = phb->ioda.io_size / phb->ioda.total_pe_num; in pnv_pci_init_ioda_phb()
3028 phb->ioda.io_pci_base = 0; /* XXX calculate this ? */ in pnv_pci_init_ioda_phb()
3031 phb->ioda.dma32_count = phb->ioda.m32_pci_base / in pnv_pci_init_ioda_phb()
3035 size = ALIGN(max_t(unsigned, phb->ioda.total_pe_num, 8) / 8, in pnv_pci_init_ioda_phb()
3038 size += phb->ioda.total_pe_num * sizeof(phb->ioda.m64_segmap[0]); in pnv_pci_init_ioda_phb()
3040 size += phb->ioda.total_pe_num * sizeof(phb->ioda.m32_segmap[0]); in pnv_pci_init_ioda_phb()
3043 size += phb->ioda.total_pe_num * sizeof(phb->ioda.io_segmap[0]); in pnv_pci_init_ioda_phb()
3045 size += phb->ioda.dma32_count * in pnv_pci_init_ioda_phb()
3046 sizeof(phb->ioda.dma32_segmap[0]); in pnv_pci_init_ioda_phb()
3049 size += phb->ioda.total_pe_num * sizeof(struct pnv_ioda_pe); in pnv_pci_init_ioda_phb()
3053 phb->ioda.pe_alloc = aux; in pnv_pci_init_ioda_phb()
3054 phb->ioda.m64_segmap = aux + m64map_off; in pnv_pci_init_ioda_phb()
3055 phb->ioda.m32_segmap = aux + m32map_off; in pnv_pci_init_ioda_phb()
3056 for (segno = 0; segno < phb->ioda.total_pe_num; segno++) { in pnv_pci_init_ioda_phb()
3057 phb->ioda.m64_segmap[segno] = IODA_INVALID_PE; in pnv_pci_init_ioda_phb()
3058 phb->ioda.m32_segmap[segno] = IODA_INVALID_PE; in pnv_pci_init_ioda_phb()
3061 phb->ioda.io_segmap = aux + iomap_off; in pnv_pci_init_ioda_phb()
3062 for (segno = 0; segno < phb->ioda.total_pe_num; segno++) in pnv_pci_init_ioda_phb()
3063 phb->ioda.io_segmap[segno] = IODA_INVALID_PE; in pnv_pci_init_ioda_phb()
3065 phb->ioda.dma32_segmap = aux + dma32map_off; in pnv_pci_init_ioda_phb()
3066 for (segno = 0; segno < phb->ioda.dma32_count; segno++) in pnv_pci_init_ioda_phb()
3067 phb->ioda.dma32_segmap[segno] = IODA_INVALID_PE; in pnv_pci_init_ioda_phb()
3069 phb->ioda.pe_array = aux + pemap_off; in pnv_pci_init_ioda_phb()
3076 pnv_ioda_reserve_pe(phb, phb->ioda.reserved_pe_idx); in pnv_pci_init_ioda_phb()
3077 if (phb->ioda.reserved_pe_idx == 0) { in pnv_pci_init_ioda_phb()
3078 phb->ioda.root_pe_idx = 1; in pnv_pci_init_ioda_phb()
3079 pnv_ioda_reserve_pe(phb, phb->ioda.root_pe_idx); in pnv_pci_init_ioda_phb()
3080 } else if (phb->ioda.reserved_pe_idx == (phb->ioda.total_pe_num - 1)) { in pnv_pci_init_ioda_phb()
3081 phb->ioda.root_pe_idx = phb->ioda.reserved_pe_idx - 1; in pnv_pci_init_ioda_phb()
3082 pnv_ioda_reserve_pe(phb, phb->ioda.root_pe_idx); in pnv_pci_init_ioda_phb()
3086 phb->ioda.root_pe_idx = root_pe->pe_number; in pnv_pci_init_ioda_phb()
3089 INIT_LIST_HEAD(&phb->ioda.pe_list); in pnv_pci_init_ioda_phb()
3090 mutex_init(&phb->ioda.pe_list_mutex); in pnv_pci_init_ioda_phb()
3093 phb->ioda.dma32_count = phb->ioda.m32_pci_base / in pnv_pci_init_ioda_phb()
3106 phb->ioda.total_pe_num, phb->ioda.reserved_pe_idx, in pnv_pci_init_ioda_phb()
3107 phb->ioda.m32_size, phb->ioda.m32_segsize); in pnv_pci_init_ioda_phb()
3108 if (phb->ioda.m64_size) in pnv_pci_init_ioda_phb()
3110 phb->ioda.m64_size, phb->ioda.m64_segsize); in pnv_pci_init_ioda_phb()
3111 if (phb->ioda.io_size) in pnv_pci_init_ioda_phb()
3113 phb->ioda.io_size, phb->ioda.io_segsize); in pnv_pci_init_ioda_phb()