/openbmc/qemu/hw/pci-host/ |
H A D | pnv_phb4.c | 25 #define phb_error(phb, fmt, ...) \ argument 27 (phb)->chip_id, (phb)->phb_id, ## __VA_ARGS__) 33 static PCIDevice *pnv_phb4_find_cfg_dev(PnvPHB4 *phb) in pnv_phb4_find_cfg_dev() argument 35 PCIHostState *pci = PCI_HOST_BRIDGE(phb->phb_base); in pnv_phb4_find_cfg_dev() 36 uint64_t addr = phb->regs[PHB_CONFIG_ADDRESS >> 3]; in pnv_phb4_find_cfg_dev() 56 static void pnv_phb4_config_write(PnvPHB4 *phb, unsigned off, in pnv_phb4_config_write() argument 62 pdev = pnv_phb4_find_cfg_dev(phb); in pnv_phb4_config_write() 66 cfg_addr = (phb->regs[PHB_CONFIG_ADDRESS >> 3] >> 32) & 0xffc; in pnv_phb4_config_write() 91 static uint64_t pnv_phb4_config_read(PnvPHB4 *phb, unsigned off, in pnv_phb4_config_read() argument 98 pdev = pnv_phb4_find_cfg_dev(phb); in pnv_phb4_config_read() [all …]
|
H A D | pnv_phb3.c | 25 #define phb3_error(phb, fmt, ...) \ argument 27 (phb)->chip_id, (phb)->phb_id, ## __VA_ARGS__) 29 static PCIDevice *pnv_phb3_find_cfg_dev(PnvPHB3 *phb) in pnv_phb3_find_cfg_dev() argument 31 PCIHostState *pci = PCI_HOST_BRIDGE(phb->phb_base); in pnv_phb3_find_cfg_dev() 32 uint64_t addr = phb->regs[PHB_CONFIG_ADDRESS >> 3]; in pnv_phb3_find_cfg_dev() 48 static void pnv_phb3_config_write(PnvPHB3 *phb, unsigned off, in pnv_phb3_config_write() argument 54 pdev = pnv_phb3_find_cfg_dev(phb); in pnv_phb3_config_write() 58 cfg_addr = (phb->regs[PHB_CONFIG_ADDRESS >> 3] >> 32) & 0xffc; in pnv_phb3_config_write() 83 static uint64_t pnv_phb3_config_read(PnvPHB3 *phb, unsigned off, in pnv_phb3_config_read() argument 90 pdev = pnv_phb3_find_cfg_dev(phb); in pnv_phb3_config_read() [all …]
|
H A D | pnv_phb.c | 65 static Object *pnv_phb_user_get_parent(PnvChip *chip, PnvPHB *phb, Error **errp) in pnv_phb_user_get_parent() argument 67 if (phb->version == 3) { in pnv_phb_user_get_parent() 68 return OBJECT(pnv_chip_add_phb(chip, phb)); in pnv_phb_user_get_parent() 70 return OBJECT(pnv_pec_add_phb(chip, phb, errp)); in pnv_phb_user_get_parent() 80 static bool pnv_phb_user_device_init(PnvPHB *phb, Error **errp) in pnv_phb_user_device_init() argument 83 PnvChip *chip = pnv_get_chip(pnv, phb->chip_id); in pnv_phb_user_device_init() 87 error_setg(errp, "invalid chip id: %d", phb->chip_id); in pnv_phb_user_device_init() 91 parent = pnv_phb_user_get_parent(chip, phb, errp); in pnv_phb_user_device_init() 102 OBJECT(phb), phb->phb_id, errp)) { in pnv_phb_user_device_init() 111 PnvPHB *phb = PNV_PHB(dev); in pnv_phb_realize() local [all …]
|
H A D | pnv_phb3_pbcq.c | 25 (pbcq)->phb->chip_id, (pbcq)->phb->phb_id, ## __VA_ARGS__) 52 return pnv_phb3_reg_read(pbcq->phb, in pnv_pbcq_spci_xscom_read() 86 pnv_phb3_update_regions(pbcq->phb); in pnv_pbcq_update_map() 118 pnv_phb3_update_regions(pbcq->phb); in pnv_pbcq_update_map() 148 pnv_phb3_remap_irqs(pbcq->phb); in pnv_pbcq_nest_xscom_write() 153 pnv_phb3_remap_irqs(pbcq->phb); in pnv_pbcq_nest_xscom_write() 157 pnv_phb3_remap_irqs(pbcq->phb); in pnv_pbcq_nest_xscom_write() 196 pnv_phb3_reg_write(pbcq->phb, pbcq->spci_regs[PBCQ_SPCI_ASB_ADDR], in pnv_pbcq_spci_xscom_write() 241 PnvPHB3 *phb = pbcq->phb; in pnv_pbcq_default_bars() local 243 mm0 = 0x3d00000000000ull + 0x4000000000ull * phb->chip_id + in pnv_pbcq_default_bars() [all …]
|
H A D | pnv_phb3_msi.c | 20 static uint64_t phb3_msi_ive_addr(PnvPHB3 *phb, int srcno) in phb3_msi_ive_addr() argument 22 uint64_t ivtbar = phb->regs[PHB_IVT_BAR >> 3]; in phb3_msi_ive_addr() 23 uint64_t phbctl = phb->regs[PHB_CONTROL >> 3]; in phb3_msi_ive_addr() 45 static bool phb3_msi_read_ive(PnvPHB3 *phb, int srcno, uint64_t *out_ive) in phb3_msi_read_ive() argument 49 ive_addr = phb3_msi_ive_addr(phb, srcno); in phb3_msi_read_ive() 70 ive_addr = phb3_msi_ive_addr(msi->phb, srcno); in phb3_msi_set_p() 87 ive_addr = phb3_msi_ive_addr(msi->phb, srcno); in phb3_msi_set_q() 105 if (!phb3_msi_read_ive(msi->phb, srcno, &ive)) { in phb3_msi_try_send() 170 if (!phb3_msi_read_ive(msi->phb, src, &ive)) { in pnv_phb3_msi_send() 190 msi->phb->regs[PHB_FFI_LOCK >> 3] = 0; in pnv_phb3_msi_ffi() [all …]
|
H A D | grackle.c | 53 PCIHostState *phb = PCI_HOST_BRIDGE(dev); in grackle_realize() local 55 phb->bus = pci_register_root_bus(dev, NULL, in grackle_realize() 63 pci_create_simple(phb->bus, 0, "grackle"); in grackle_realize() 70 PCIHostState *phb = PCI_HOST_BRIDGE(obj); in grackle_init() local 79 memory_region_init_io(&phb->conf_mem, obj, &pci_host_conf_le_ops, in grackle_init() 81 memory_region_init_io(&phb->data_mem, obj, &pci_host_data_le_ops, in grackle_init() 84 sysbus_init_mmio(sbd, &phb->conf_mem); in grackle_init() 85 sysbus_init_mmio(sbd, &phb->data_mem); in grackle_init()
|
/openbmc/linux/arch/powerpc/platforms/powernv/ |
H A D | pci-ioda.c | 116 static struct pnv_ioda_pe *pnv_ioda_init_pe(struct pnv_phb *phb, int pe_no) in pnv_ioda_init_pe() argument 120 phb->ioda.pe_array[pe_no].phb = phb; in pnv_ioda_init_pe() 121 phb->ioda.pe_array[pe_no].pe_number = pe_no; in pnv_ioda_init_pe() 122 phb->ioda.pe_array[pe_no].dma_setup_done = false; in pnv_ioda_init_pe() 129 rc = opal_pci_eeh_freeze_clear(phb->opal_id, pe_no, in pnv_ioda_init_pe() 133 __func__, rc, phb->hose->global_number, pe_no); in pnv_ioda_init_pe() 135 return &phb->ioda.pe_array[pe_no]; in pnv_ioda_init_pe() 138 static void pnv_ioda_reserve_pe(struct pnv_phb *phb, int pe_no) in pnv_ioda_reserve_pe() argument 140 if (!(pe_no >= 0 && pe_no < phb->ioda.total_pe_num)) { in pnv_ioda_reserve_pe() 142 __func__, pe_no, phb->hose->global_number); in pnv_ioda_reserve_pe() [all …]
|
H A D | eeh-powernv.c | 109 struct pnv_phb *phb = hose->private_data; in pnv_eeh_dbgfs_set() local 111 out_be64(phb->regs + offset, val); in pnv_eeh_dbgfs_set() 118 struct pnv_phb *phb = hose->private_data; in pnv_eeh_dbgfs_get() local 120 *val = in_be64(phb->regs + offset); in pnv_eeh_dbgfs_get() 149 struct pnv_phb *phb; in pnv_eeh_enable_phbs() local 152 phb = hose->private_data; in pnv_eeh_enable_phbs() 159 phb->flags |= PNV_PHB_FLAG_EEH; in pnv_eeh_enable_phbs() 161 phb->flags &= ~PNV_PHB_FLAG_EEH; in pnv_eeh_enable_phbs() 176 struct pnv_phb *phb; in pnv_eeh_post_init() local 204 phb = hose->private_data; in pnv_eeh_post_init() [all …]
|
H A D | pci-sriov.c | 145 struct pnv_phb *phb = pci_bus_to_pnvhb(pdev->bus); in pnv_pci_ioda_fixup_iov_resources() local 156 mul = phb->ioda.total_pe_num; in pnv_pci_ioda_fixup_iov_resources() 180 if (vf_bar_sz > (phb->ioda.m64_segsize >> 2)) { in pnv_pci_ioda_fixup_iov_resources() 251 struct pnv_phb *phb = pci_bus_to_pnvhb(pdev->bus); in pnv_pci_iov_resource_alignment() local 281 return phb->ioda.total_pe_num * align; in pnv_pci_iov_resource_alignment() 287 struct pnv_phb *phb; in pnv_pci_vf_release_m64() local 290 phb = pci_bus_to_pnvhb(pdev->bus); in pnv_pci_vf_release_m64() 294 opal_pci_phb_mmio_enable(phb->opal_id, in pnv_pci_vf_release_m64() 299 clear_bit(window_id, &phb->ioda.m64_bar_alloc); in pnv_pci_vf_release_m64() 311 static int64_t pnv_ioda_map_m64_segmented(struct pnv_phb *phb, in pnv_ioda_map_m64_segmented() argument [all …]
|
H A D | pci-cxl.c | 16 struct pnv_phb *phb = hose->private_data; in pnv_phb_to_cxl_mode() local 26 rc = opal_pci_set_phb_cxl_mode(phb->opal_id, mode, pe->pe_number); in pnv_phb_to_cxl_mode() 42 struct pnv_phb *phb = hose->private_data; in pnv_cxl_alloc_hwirqs() local 43 int hwirq = msi_bitmap_alloc_hwirqs(&phb->msi_bmp, num); in pnv_cxl_alloc_hwirqs() 50 return phb->msi_base + hwirq; in pnv_cxl_alloc_hwirqs() 57 struct pnv_phb *phb = hose->private_data; in pnv_cxl_release_hwirqs() local 59 msi_bitmap_free_hwirqs(&phb->msi_bmp, hwirq - phb->msi_base, num); in pnv_cxl_release_hwirqs() 67 struct pnv_phb *phb = hose->private_data; in pnv_cxl_release_hwirq_ranges() local 76 hwirq = irqs->offset[i] - phb->msi_base; in pnv_cxl_release_hwirq_ranges() 77 msi_bitmap_free_hwirqs(&phb->msi_bmp, hwirq, in pnv_cxl_release_hwirq_ranges() [all …]
|
H A D | pci.c | 488 static void pnv_pci_handle_eeh_config(struct pnv_phb *phb, u32 pe_no) in pnv_pci_handle_eeh_config() argument 493 spin_lock_irqsave(&phb->lock, flags); in pnv_pci_handle_eeh_config() 496 rc = opal_pci_get_phb_diag_data2(phb->opal_id, phb->diag_data, in pnv_pci_handle_eeh_config() 497 phb->diag_data_size); in pnv_pci_handle_eeh_config() 501 if (phb->unfreeze_pe) { in pnv_pci_handle_eeh_config() 502 ret = phb->unfreeze_pe(phb, in pnv_pci_handle_eeh_config() 506 rc = opal_pci_eeh_freeze_clear(phb->opal_id, in pnv_pci_handle_eeh_config() 512 __func__, rc, phb->hose->global_number, in pnv_pci_handle_eeh_config() 525 pnv_pci_dump_phb_diag_data(phb->hose, phb->diag_data); in pnv_pci_handle_eeh_config() 527 spin_unlock_irqrestore(&phb->lock, flags); in pnv_pci_handle_eeh_config() [all …]
|
H A D | pci.h | 57 struct pnv_phb *phb; member 126 int (*init_m64)(struct pnv_phb *phb); 127 int (*get_pe_state)(struct pnv_phb *phb, int pe_no); 128 void (*freeze_pe)(struct pnv_phb *phb, int pe_no); 129 int (*unfreeze_pe)(struct pnv_phb *phb, int pe_no, int opt); 187 static inline bool pnv_pci_is_m64(struct pnv_phb *phb, struct resource *r) in pnv_pci_is_m64() argument 196 return (r->start >= phb->ioda.m64_base && in pnv_pci_is_m64() 197 r->start < (phb->ioda.m64_base + phb->ioda.m64_size)); in pnv_pci_is_m64() 207 int pnv_ioda_configure_pe(struct pnv_phb *phb, struct pnv_ioda_pe *pe); 208 int pnv_ioda_deconfigure_pe(struct pnv_phb *phb, struct pnv_ioda_pe *pe); [all …]
|
/openbmc/linux/drivers/misc/cxl/ |
H A D | vphb.c | 30 struct pci_controller *phb; in cxl_pci_enable_device_hook() local 34 phb = pci_bus_to_host(dev->bus); in cxl_pci_enable_device_hook() 35 afu = (struct cxl_afu *)phb->private_data; in cxl_pci_enable_device_hook() 82 struct pci_controller *phb = bus ? pci_bus_to_host(bus) : NULL; in pci_bus_to_afu() local 84 return phb ? phb->private_data : NULL; in pci_bus_to_afu() 204 struct pci_controller *phb; in cxl_pci_vphb_add() local 230 phb = pcibios_alloc_controller(vphb_dn); in cxl_pci_vphb_add() 231 if (!phb) in cxl_pci_vphb_add() 235 phb->parent = parent; in cxl_pci_vphb_add() 238 phb->ops = &cxl_pcie_pci_ops; in cxl_pci_vphb_add() [all …]
|
/openbmc/linux/arch/powerpc/platforms/pseries/ |
H A D | pci_dlpar.c | 23 struct pci_controller *phb; in init_phb_dynamic() local 27 phb = pcibios_alloc_controller(dn); in init_phb_dynamic() 28 if (!phb) in init_phb_dynamic() 30 rtas_setup_phb(phb); in init_phb_dynamic() 31 pci_process_bridge_OF_ranges(phb, dn, 0); in init_phb_dynamic() 32 phb->controller_ops = pseries_pci_controller_ops; in init_phb_dynamic() 34 pci_devs_phb_init_dynamic(phb); in init_phb_dynamic() 36 pseries_msi_allocate_domains(phb); in init_phb_dynamic() 38 ppc_iommu_register_device(phb); in init_phb_dynamic() 41 eeh_phb_pe_create(phb); in init_phb_dynamic() [all …]
|
H A D | eeh_pseries.c | 104 struct pci_controller *phb = pdn->phb; in pseries_eeh_get_pe_config_addr() local 113 config_addr, BUID_HI(phb->buid), in pseries_eeh_get_pe_config_addr() 114 BUID_LO(phb->buid), 1); in pseries_eeh_get_pe_config_addr() 120 config_addr, BUID_HI(phb->buid), in pseries_eeh_get_pe_config_addr() 121 BUID_LO(phb->buid), 0); in pseries_eeh_get_pe_config_addr() 124 __func__, phb->global_number, config_addr); in pseries_eeh_get_pe_config_addr() 133 config_addr, BUID_HI(phb->buid), in pseries_eeh_get_pe_config_addr() 134 BUID_LO(phb->buid), 0); in pseries_eeh_get_pe_config_addr() 137 __func__, phb->global_number, config_addr); in pseries_eeh_get_pe_config_addr() 162 static int pseries_eeh_phb_reset(struct pci_controller *phb, int config_addr, int option) in pseries_eeh_phb_reset() argument [all …]
|
H A D | msi.c | 39 buid = pdn->phb->buid; in rtas_change_msi() 100 buid = pdn->phb->buid; in rtas_query_irq_number() 556 struct pci_controller *phb = domain->host_data; in pseries_irq_domain_alloc() local 570 phb->dn, virq, hwirq, nr_irqs); in pseries_irq_domain_alloc() 593 struct pci_controller *phb = irq_data_get_irq_chip_data(d); in pseries_irq_domain_free() local 595 pr_debug("%s bridge %pOF %d #%d\n", __func__, phb->dn, virq, nr_irqs); in pseries_irq_domain_free() 605 static int __pseries_msi_allocate_domains(struct pci_controller *phb, in __pseries_msi_allocate_domains() argument 610 phb->fwnode = irq_domain_alloc_named_id_fwnode("pSeries-MSI", in __pseries_msi_allocate_domains() 611 phb->global_number); in __pseries_msi_allocate_domains() 612 if (!phb->fwnode) in __pseries_msi_allocate_domains() [all …]
|
/openbmc/linux/arch/powerpc/kernel/ |
H A D | of_platform.c | 35 struct pci_controller *phb; in of_pci_phb_probe() local 44 phb = pcibios_alloc_controller(dev->dev.of_node); in of_pci_phb_probe() 45 if (!phb) in of_pci_phb_probe() 49 phb->parent = &dev->dev; in of_pci_phb_probe() 52 if (ppc_md.pci_setup_phb(phb)) { in of_pci_phb_probe() 53 pcibios_free_controller(phb); in of_pci_phb_probe() 58 pci_process_bridge_OF_ranges(phb, dev->dev.of_node, 0); in of_pci_phb_probe() 61 pci_devs_phb_init_dynamic(phb); in of_pci_phb_probe() 64 eeh_phb_pe_create(phb); in of_pci_phb_probe() 67 pcibios_scan_phb(phb); in of_pci_phb_probe() [all …]
|
H A D | msi.c | 14 struct pci_controller *phb = pci_bus_to_host(dev->bus); in arch_setup_msi_irqs() local 16 if (!phb->controller_ops.setup_msi_irqs || in arch_setup_msi_irqs() 17 !phb->controller_ops.teardown_msi_irqs) { in arch_setup_msi_irqs() 26 return phb->controller_ops.setup_msi_irqs(dev, nvec, type); in arch_setup_msi_irqs() 31 struct pci_controller *phb = pci_bus_to_host(dev->bus); in arch_teardown_msi_irqs() local 37 if (phb->controller_ops.teardown_msi_irqs) in arch_teardown_msi_irqs() 38 phb->controller_ops.teardown_msi_irqs(dev); in arch_teardown_msi_irqs()
|
H A D | pci-hotplug.c | 43 if (!pdn || !pdn->phb || !pdn->phb->bus) in pci_find_bus_by_node() 46 return find_bus_among_children(pdn->phb->bus, dn); in pci_find_bus_by_node() 58 struct pci_controller *phb = pci_bus_to_host(dev->bus); in pcibios_release_device() local 61 if (phb->controller_ops.release_device) in pcibios_release_device() 62 phb->controller_ops.release_device(dev); in pcibios_release_device() 111 struct pci_controller *phb; in pci_hp_add_devices() local 114 phb = pci_bus_to_host(bus); in pci_hp_add_devices() 117 if (phb->controller_ops.probe_mode) in pci_hp_add_devices() 118 mode = phb->controller_ops.probe_mode(bus); in pci_hp_add_devices()
|
H A D | rtas_pci.c | 63 buid = pdn->phb->buid; in rtas_read_config() 114 buid = pdn->phb->buid; in rtas_write_config() 200 unsigned long get_phb_buid(struct device_node *phb) in get_phb_buid() argument 206 if (of_address_to_resource(phb, 0, &r)) in get_phb_buid() 212 struct pci_controller *phb) in phb_set_bus_ranges() argument 222 phb->first_busno = be32_to_cpu(bus_range[0]); in phb_set_bus_ranges() 223 phb->last_busno = be32_to_cpu(bus_range[1]); in phb_set_bus_ranges() 228 int rtas_setup_phb(struct pci_controller *phb) in rtas_setup_phb() argument 230 struct device_node *dev = phb->dn; in rtas_setup_phb() 235 if (phb_set_bus_ranges(dev, phb)) in rtas_setup_phb() [all …]
|
H A D | io-workarounds.c | 35 struct pci_controller *phb = bus->phb; in iowa_pci_find() local 38 vstart = (unsigned long)phb->io_base_virt; in iowa_pci_find() 39 vend = vstart + phb->pci_io_size - 1; in iowa_pci_find() 46 res = &phb->mem_resources[j]; in iowa_pci_find() 170 void iowa_register_bus(struct pci_controller *phb, struct ppc_pci_io *ops, in iowa_register_bus() argument 174 struct device_node *np = phb->dn; in iowa_register_bus() 185 bus->phb = phb; in iowa_register_bus()
|
H A D | pci-common.c | 126 struct pci_controller *phb; in pcibios_alloc_controller() local 128 phb = kzalloc(sizeof(struct pci_controller), GFP_KERNEL); in pcibios_alloc_controller() 129 if (phb == NULL) in pcibios_alloc_controller() 132 phb->global_number = get_phb_number(dev); in pcibios_alloc_controller() 135 list_add_tail(&phb->list_node, &hose_list); in pcibios_alloc_controller() 138 phb->dn = of_node_get(dev); in pcibios_alloc_controller() 139 phb->is_dynamic = slab_is_available(); in pcibios_alloc_controller() 147 PHB_SET_NODE(phb, nid); in pcibios_alloc_controller() 150 return phb; in pcibios_alloc_controller() 154 void pcibios_free_controller(struct pci_controller *phb) in pcibios_free_controller() argument [all …]
|
/openbmc/linux/drivers/pci/hotplug/ |
H A D | rpadlpar_core.c | 141 struct pci_controller *phb = pdn->phb; in dlpar_pci_add_bus() local 147 dev = of_create_pci_dev(dn, phb->bus, pdn->devfn); in dlpar_pci_add_bus() 166 pcibios_finish_adding_to_bus(phb->bus); in dlpar_pci_add_bus() 172 struct pci_controller *phb; in dlpar_add_pci_slot() local 181 phb = PCI_DN(dn)->phb; in dlpar_add_pci_slot() 182 dev = dlpar_find_new_dev(phb->bus, dn); in dlpar_add_pci_slot() 223 BUG_ON(!pdn || !pdn->phb); in dlpar_remove_phb() 224 rc = remove_phb_dynamic(pdn->phb); in dlpar_remove_phb() 228 pdn->phb = NULL; in dlpar_remove_phb() 235 struct pci_controller *phb; in dlpar_add_phb() local [all …]
|
/openbmc/qemu/hw/ppc/ |
H A D | spapr_pci.c | 84 PCIHostState *phb = PCI_HOST_BRIDGE(sphb); in spapr_pci_find_dev() local 88 if (!phb) { in spapr_pci_find_dev() 92 return pci_find_device(phb->bus, bus_num, devfn); in spapr_pci_find_dev() 280 SpaprPhbState *phb = NULL; in rtas_ibm_change_msi() local 288 phb = spapr_pci_find_phb(spapr, buid); in rtas_ibm_change_msi() 289 if (phb) { in rtas_ibm_change_msi() 292 if (!phb || !pdev) { in rtas_ibm_change_msi() 330 msi = (SpaprPciMsi *) g_hash_table_lookup(phb->msi, &config_addr); in rtas_ibm_change_msi() 346 g_hash_table_remove(phb->msi, &config_addr); in rtas_ibm_change_msi() 409 g_hash_table_remove(phb->msi, &config_addr); in rtas_ibm_change_msi() [all …]
|
/openbmc/linux/arch/powerpc/include/asm/ |
H A D | ppc-pci.h | 31 extern void pci_devs_phb_init_dynamic(struct pci_controller *phb); 35 extern void ppc_iommu_register_device(struct pci_controller *phb); 36 extern void ppc_iommu_unregister_device(struct pci_controller *phb); 38 static inline void ppc_iommu_register_device(struct pci_controller *phb) { } in ppc_iommu_register_device() argument 39 static inline void ppc_iommu_unregister_device(struct pci_controller *phb) { } in ppc_iommu_unregister_device() argument 46 extern int rtas_setup_phb(struct pci_controller *phb);
|