Lines Matching refs:ioda
122 phb->ioda.pe_array[pe_no].phb = phb;
123 phb->ioda.pe_array[pe_no].pe_number = pe_no;
124 phb->ioda.pe_array[pe_no].dma_setup_done = false;
137 return &phb->ioda.pe_array[pe_no];
142 if (!(pe_no >= 0 && pe_no < phb->ioda.total_pe_num)) {
148 mutex_lock(&phb->ioda.pe_alloc_mutex);
149 if (test_and_set_bit(pe_no, phb->ioda.pe_alloc))
152 mutex_unlock(&phb->ioda.pe_alloc_mutex);
162 mutex_lock(&phb->ioda.pe_alloc_mutex);
165 for (pe = phb->ioda.total_pe_num - 1; pe >= 0; pe--) {
166 if (test_bit(pe, phb->ioda.pe_alloc)) {
179 set_bit(i, phb->ioda.pe_alloc);
182 ret = &phb->ioda.pe_array[pe];
185 mutex_unlock(&phb->ioda.pe_alloc_mutex);
199 mutex_lock(&phb->ioda.pe_alloc_mutex);
200 clear_bit(pe_num, phb->ioda.pe_alloc);
201 mutex_unlock(&phb->ioda.pe_alloc_mutex);
214 phb->ioda.m64_bar_idx,
215 phb->ioda.m64_base,
217 phb->ioda.m64_size);
226 phb->ioda.m64_bar_idx,
238 if (phb->ioda.reserved_pe_idx == 0)
239 r->start += (2 * phb->ioda.m64_segsize);
240 else if (phb->ioda.reserved_pe_idx == (phb->ioda.total_pe_num - 1))
241 r->end -= (2 * phb->ioda.m64_segsize);
244 phb->ioda.reserved_pe_idx);
250 rc, desc, phb->ioda.m64_bar_idx);
253 phb->ioda.m64_bar_idx,
266 base = phb->ioda.m64_base;
267 sgsz = phb->ioda.m64_segsize;
295 unsigned long base, segsz = phb->ioda.m64_segsize;
298 base = phb->ioda.m64_base +
319 for (index = 0; index < phb->ioda.total_pe_num; index++) {
346 if (phb->ioda.reserved_pe_idx == 0)
347 r->start += (2 * phb->ioda.m64_segsize);
348 else if (phb->ioda.reserved_pe_idx == (phb->ioda.total_pe_num - 1))
349 r->end -= (2 * phb->ioda.m64_segsize);
352 phb->ioda.reserved_pe_idx, phb->hose->global_number);
391 size = ALIGN(phb->ioda.total_pe_num / 8, sizeof(unsigned long));
407 if (bitmap_empty(pe_alloc, phb->ioda.total_pe_num)) {
418 while ((i = find_next_bit(pe_alloc, phb->ioda.total_pe_num, i + 1)) <
419 phb->ioda.total_pe_num) {
420 pe = &phb->ioda.pe_array[i];
422 phb->ioda.m64_segmap[pe->pe_number] = pe->pe_number;
496 phb->ioda.m64_size = resource_size(res);
497 phb->ioda.m64_segsize = phb->ioda.m64_size / phb->ioda.total_pe_num;
498 phb->ioda.m64_base = pci_addr;
506 phb->ioda.m64_bar_alloc = (unsigned long)-1;
510 phb->ioda.m64_bar_idx = m64_range[0] + m64_range[1];
512 pr_info(" Using M64 #%d as default window\n", phb->ioda.m64_bar_idx);
516 clear_bit(i, &phb->ioda.m64_bar_alloc);
530 struct pnv_ioda_pe *pe = &phb->ioda.pe_array[pe_no];
574 pe = &phb->ioda.pe_array[pe_no];
616 if (pe_no < 0 || pe_no >= phb->ioda.total_pe_num)
623 pe = &phb->ioda.pe_array[pe_no];
672 int pe_number = phb->ioda.pe_rmap[bdfn];
677 return &phb->ioda.pe_array[pe_number];
689 return &phb->ioda.pe_array[pdn->pe_number];
784 parent = &phb->ioda.pe_array[pdn->pe_number];
872 phb->ioda.pe_rmap[rid] = IODA_INVALID_PE;
954 phb->ioda.pe_rmap[rid] = pe->pe_number;
1029 mutex_lock(&phb->ioda.pe_list_mutex);
1030 list_add_tail(&pe->list, &phb->ioda.pe_list);
1031 mutex_unlock(&phb->ioda.pe_list_mutex);
1051 pe_num = phb->ioda.pe_rmap[bus->number << 8];
1053 pe = &phb->ioda.pe_array[pe_num];
1059 pe = &phb->ioda.pe_array[phb->ioda.root_pe_idx];
1097 list_add_tail(&pe->list, &phb->ioda.pe_list);
1129 for (pe_num = 0; pe_num < phb->ioda.total_pe_num; pe_num++) {
1130 pe = &phb->ioda.pe_array[pe_num];
1145 phb->ioda.pe_rmap[rid] = pe->pe_number;
1199 list_for_each_entry(pe, &phb->ioda.pe_list, list)
1350 pe = &phb->ioda.pe_array[pdn->pe_number];
1677 segs = (weight * phb->ioda.dma32_count) / total_weight;
1688 for (base = 0; base <= phb->ioda.dma32_count - segs; base++) {
1690 if (phb->ioda.dma32_segmap[i] ==
1755 phb->ioda.dma32_segmap[i] = pe->pe_number;
1929 if (window_size > pe->phb->ioda.m32_pci_base) {
1930 res_start = pe->phb->ioda.m32_pci_base >> tbl->it_page_shift;
2087 phb->ioda.m32_pci_base);
2091 pe->table_group.tce32_size = phb->ioda.m32_pci_base;
2112 ioda.irq_chip);
2139 if (!phb->ioda.irq_chip_init) {
2146 phb->ioda.irq_chip_init = 1;
2147 phb->ioda.irq_chip = *ichip;
2148 phb->ioda.irq_chip.irq_eoi = pnv_ioda2_msi_eoi;
2150 irq_set_chip(virq, &phb->ioda.irq_chip);
2268 region.start = res->start - phb->ioda.io_pci_base;
2269 region.end = res->end - phb->ioda.io_pci_base;
2270 index = region.start / phb->ioda.io_segsize;
2272 while (index < phb->ioda.total_pe_num &&
2274 phb->ioda.io_segmap[index] = pe->pe_number;
2283 region.start += phb->ioda.io_segsize;
2290 phb->ioda.m32_pci_base;
2293 phb->ioda.m32_pci_base;
2294 index = region.start / phb->ioda.m32_segsize;
2296 while (index < phb->ioda.total_pe_num &&
2298 phb->ioda.m32_segmap[index] = pe->pe_number;
2307 region.start += phb->ioda.m32_segsize;
2372 for (pe_num = 0; pe_num < phb->ioda.total_pe_num; pe_num++) {
2373 struct pnv_ioda_pe *pe = &phb->ioda.pe_array[pe_num];
2375 if (!test_bit(pe_num, phb->ioda.pe_alloc))
2502 if (phb->ioda.m64_segsize && pnv_pci_is_m64_flags(type))
2503 return phb->ioda.m64_segsize;
2505 return phb->ioda.m32_segsize;
2507 return phb->ioda.io_segsize;
2544 phb->ioda.m64_segsize)
2655 for (idx = 0; idx < phb->ioda.dma32_count; idx++) {
2656 if (phb->ioda.dma32_segmap[idx] != pe->pe_number)
2667 phb->ioda.dma32_segmap[idx] = IODA_INVALID_PE;
2725 for (idx = 0; idx < phb->ioda.total_pe_num; idx++) {
2730 phb->ioda.reserved_pe_idx, win, 0, idx);
2746 phb->ioda.io_segmap);
2748 phb->ioda.m32_segmap);
2752 phb->ioda.m32_segmap);
2763 mutex_lock(&phb->ioda.pe_list_mutex);
2765 mutex_unlock(&phb->ioda.pe_list_mutex);
2797 if (phb->ioda.root_pe_idx == pe->pe_number)
2834 pe = &phb->ioda.pe_array[pdn->pe_number];
2864 list_for_each_entry(pe, &phb->ioda.pe_list, list) {
2968 mutex_init(&phb->ioda.pe_alloc_mutex);
3006 phb->ioda.total_pe_num = 1;
3009 phb->ioda.total_pe_num = be32_to_cpup(prop32);
3012 phb->ioda.reserved_pe_idx = be32_to_cpup(prop32);
3015 for (segno = 0; segno < ARRAY_SIZE(phb->ioda.pe_rmap); segno++)
3016 phb->ioda.pe_rmap[segno] = IODA_INVALID_PE;
3021 phb->ioda.m32_size = resource_size(&hose->mem_resources[0]);
3023 phb->ioda.m32_size += 0x10000;
3025 phb->ioda.m32_segsize = phb->ioda.m32_size / phb->ioda.total_pe_num;
3026 phb->ioda.m32_pci_base = hose->mem_resources[0].start - hose->mem_offset[0];
3027 phb->ioda.io_size = hose->pci_io_size;
3028 phb->ioda.io_segsize = phb->ioda.io_size / phb->ioda.total_pe_num;
3029 phb->ioda.io_pci_base = 0; /* XXX calculate this ? */
3032 phb->ioda.dma32_count = phb->ioda.m32_pci_base /
3036 size = ALIGN(max_t(unsigned, phb->ioda.total_pe_num, 8) / 8,
3039 size += phb->ioda.total_pe_num * sizeof(phb->ioda.m64_segmap[0]);
3041 size += phb->ioda.total_pe_num * sizeof(phb->ioda.m32_segmap[0]);
3044 size += phb->ioda.total_pe_num * sizeof(phb->ioda.io_segmap[0]);
3046 size += phb->ioda.dma32_count *
3047 sizeof(phb->ioda.dma32_segmap[0]);
3050 size += phb->ioda.total_pe_num * sizeof(struct pnv_ioda_pe);
3054 phb->ioda.pe_alloc = aux;
3055 phb->ioda.m64_segmap = aux + m64map_off;
3056 phb->ioda.m32_segmap = aux + m32map_off;
3057 for (segno = 0; segno < phb->ioda.total_pe_num; segno++) {
3058 phb->ioda.m64_segmap[segno] = IODA_INVALID_PE;
3059 phb->ioda.m32_segmap[segno] = IODA_INVALID_PE;
3062 phb->ioda.io_segmap = aux + iomap_off;
3063 for (segno = 0; segno < phb->ioda.total_pe_num; segno++)
3064 phb->ioda.io_segmap[segno] = IODA_INVALID_PE;
3066 phb->ioda.dma32_segmap = aux + dma32map_off;
3067 for (segno = 0; segno < phb->ioda.dma32_count; segno++)
3068 phb->ioda.dma32_segmap[segno] = IODA_INVALID_PE;
3070 phb->ioda.pe_array = aux + pemap_off;
3077 pnv_ioda_reserve_pe(phb, phb->ioda.reserved_pe_idx);
3078 if (phb->ioda.reserved_pe_idx == 0) {
3079 phb->ioda.root_pe_idx = 1;
3080 pnv_ioda_reserve_pe(phb, phb->ioda.root_pe_idx);
3081 } else if (phb->ioda.reserved_pe_idx == (phb->ioda.total_pe_num - 1)) {
3082 phb->ioda.root_pe_idx = phb->ioda.reserved_pe_idx - 1;
3083 pnv_ioda_reserve_pe(phb, phb->ioda.root_pe_idx);
3087 phb->ioda.root_pe_idx = root_pe->pe_number;
3090 INIT_LIST_HEAD(&phb->ioda.pe_list);
3091 mutex_init(&phb->ioda.pe_list_mutex);
3094 phb->ioda.dma32_count = phb->ioda.m32_pci_base /
3107 phb->ioda.total_pe_num, phb->ioda.reserved_pe_idx,
3108 phb->ioda.m32_size, phb->ioda.m32_segsize);
3109 if (phb->ioda.m64_size)
3111 phb->ioda.m64_size, phb->ioda.m64_segsize);
3112 if (phb->ioda.io_size)
3114 phb->ioda.io_size, phb->ioda.io_segsize);
3228 if (of_device_is_compatible(phbn, "ibm,ioda-phb"))