Lines Matching +full:build +full:- +full:without +full:- +full:defaults

9  * in the Software without restriction, including without limitation the rights
17 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
36 #include "hw/pci-host/spapr.h"
40 #include "qemu/error-report.h"
47 #include "hw/qdev-properties.h"
70 QLIST_FOREACH(sphb, &spapr->phbs, list) { in spapr_pci_find_phb()
71 if (sphb->buid != buid) { in spapr_pci_find_phb()
92 return pci_find_device(phb->bus, bus_num, devfn); in spapr_pci_find_dev()
254 trace_spapr_pci_msi_setup(pdev->name, 0, msg.address); in spapr_msi_setmsg()
260 trace_spapr_pci_msi_setup(pdev->name, i, msg.address); in spapr_msi_setmsg()
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()
360 max_irqs = pdev->msix_entries_nr; in rtas_ibm_change_msi()
365 rtas_st(rets, 0, -1); /* Hardware error */ in rtas_ibm_change_msi()
377 if (smc->legacy_irq_allocation) { in rtas_ibm_change_msi()
397 if (!smc->legacy_irq_allocation) { in rtas_ibm_change_msi()
409 g_hash_table_remove(phb->msi, &config_addr); in rtas_ibm_change_msi()
418 msi->first_irq = irq; in rtas_ibm_change_msi()
419 msi->num = req_num; in rtas_ibm_change_msi()
422 g_hash_table_insert(phb->msi, config_addr_key, msi); in rtas_ibm_change_msi()
445 unsigned int intr_src_num = -1, ioa_intr_num = rtas_ld(args, 3); in rtas_ibm_query_interrupt_source_number()
461 msi = (SpaprPciMsi *) g_hash_table_lookup(phb->msi, &config_addr); in rtas_ibm_query_interrupt_source_number()
462 if (!msi || !msi->first_irq || !msi->num || (ioa_intr_num >= msi->num)) { in rtas_ibm_query_interrupt_source_number()
467 intr_src_num = msi->first_irq + ioa_intr_num; in rtas_ibm_query_interrupt_source_number()
725 trace_spapr_pci_lsi_set(phb->dtbusname, irq_num, phb->lsi_table[irq_num].irq); in pci_spapr_set_irq()
726 qemu_set_irq(spapr_qirq(spapr, phb->lsi_table[irq_num].irq), level); in pci_spapr_set_irq()
735 route.irq = sphb->lsi_table[pin].irq; in spapr_route_intx_pin_to_irq()
779 return &phb->iommu_as; in spapr_pci_dma_iommu()
805 /* Construct and read from host device tree the loc-code */ in spapr_phb_vfio_get_loc_code()
807 path = g_strdup_printf("/proc/device-tree%s/ibm,loc-code", devspec); in spapr_phb_vfio_get_loc_code()
820 if (object_dynamic_cast(OBJECT(pdev), "vfio-pci")) { in spapr_phb_get_loc_code()
828 * For emulated devices and VFIO-failure case, make up in spapr_phb_get_loc_code()
829 * the loc-code. in spapr_phb_get_loc_code()
832 devtype, pdev->name, sphb->index, busnr, in spapr_phb_get_loc_code()
833 PCI_SLOT(pdev->devfn), PCI_FUNC(pdev->devfn)); in spapr_phb_get_loc_code()
838 #define b_x(x, p, l) (((x) & ((1<<(l))-1)) << (p))
869 * the property is an array of ('phys-addr', 'size') pairs describing
870 * the addressable regions of the PCI device, where 'phys-addr' is a
871 * RESOURCE_CELLS_ADDRESS-tuple of 32-bit integers corresponding to
873 * RESOURCE_CELLS_SIZE-tuple corresponding to (size.hi, size.lo).
878 * ||| +-- space code
882 * ||| + 10 if 32-bit MEM region
883 * ||| + 11 if 64-bit MEM region
885 * ||+------ for non-relocatable IO: 1 if aliased
888 * |+------- 1 if region is prefetchable
889 * +-------- 1 if region is non-relocatable
903 * IEEE Std 1275-1994, section 4.1.1, as implemented by PAPR+ v2.7,
910 b_ddddd(PCI_SLOT(d->devfn)) | in populate_resource_props()
911 b_fff(PCI_FUNC(d->devfn))); in populate_resource_props()
916 reg = &rp->reg[reg_idx++]; in populate_resource_props()
917 reg->phys_hi = cpu_to_be32(dev_id); in populate_resource_props()
918 reg->phys_mid = 0; in populate_resource_props()
919 reg->phys_lo = 0; in populate_resource_props()
920 reg->size_hi = 0; in populate_resource_props()
921 reg->size_lo = 0; in populate_resource_props()
924 if (!d->io_regions[i].size) { in populate_resource_props()
928 reg = &rp->reg[reg_idx++]; in populate_resource_props()
930 reg->phys_hi = cpu_to_be32(dev_id | b_rrrrrrrr(pci_bar(d, i))); in populate_resource_props()
931 if (d->io_regions[i].type & PCI_BASE_ADDRESS_SPACE_IO) { in populate_resource_props()
932 reg->phys_hi |= cpu_to_be32(b_ss(1)); in populate_resource_props()
933 } else if (d->io_regions[i].type & PCI_BASE_ADDRESS_MEM_TYPE_64) { in populate_resource_props()
934 reg->phys_hi |= cpu_to_be32(b_ss(3)); in populate_resource_props()
936 reg->phys_hi |= cpu_to_be32(b_ss(2)); in populate_resource_props()
938 reg->phys_mid = 0; in populate_resource_props()
939 reg->phys_lo = 0; in populate_resource_props()
940 reg->size_hi = cpu_to_be32(d->io_regions[i].size >> 32); in populate_resource_props()
941 reg->size_lo = cpu_to_be32(d->io_regions[i].size); in populate_resource_props()
944 rp->reg_len = reg_idx * sizeof(ResourceFields); in populate_resource_props()
986 { PCI_CLASS_NETWORK_TOKEN_RING, "token-ring", NULL },
998 { PCI_CLASS_DISPLAY_3D, "3d-controller", NULL },
1025 { PCI_CLASS_BRIDGE_PCI_SEMITP, "semi-transparent-pci", NULL },
1033 { PCI_CLASS_COMMUNICATION_MULTISERIAL, "multiport-serial", NULL },
1036 { PCI_CLASS_COMMUNICATION_SC, "smart-card", NULL },
1041 { PCI_CLASS_SYSTEM_PIC_IOAPIC, "io-apic" },
1042 { PCI_CLASS_SYSTEM_PIC_IOXAPIC, "io-xapic" },
1047 { PCI_CLASS_SYSTEM_PIC, "interrupt-controller", pic_iface },
1048 { PCI_CLASS_SYSTEM_DMA, "dma-controller", NULL },
1051 { PCI_CLASS_SYSTEM_PCI_HOTPLUG, "hot-plug-controller", NULL },
1052 { PCI_CLASS_SYSTEM_SDHCI, "sd-host-controller", NULL },
1074 { PCI_CLASS_PROCESSOR_CO, "co-processor", NULL },
1079 { PCI_CLASS_SERIAL_USB_UHCI, "usb-uhci" },
1080 { PCI_CLASS_SERIAL_USB_OHCI, "usb-ohci", },
1081 { PCI_CLASS_SERIAL_USB_EHCI, "usb-ehci" },
1082 { PCI_CLASS_SERIAL_USB_XHCI, "usb-xhci" },
1083 { PCI_CLASS_SERIAL_USB_UNKNOWN, "usb-unknown" },
1084 { PCI_CLASS_SERIAL_USB_DEVICE, "usb-device" },
1090 { PCI_CLASS_SERIAL_ACCESS, "access-bus", NULL },
1093 { PCI_CLASS_SERIAL_FIBER, "fibre-channel", NULL },
1104 { PCI_CLASS_WIRELESS_CIR, "consumer-ir", NULL },
1105 { PCI_CLASS_WIRELESS_RF_CONTROLLER, "rf-controller", NULL },
1112 { PCI_CLASS_SATELLITE_TV, "satellite-tv", NULL },
1113 { PCI_CLASS_SATELLITE_AUDIO, "satellite-audio", NULL },
1114 { PCI_CLASS_SATELLITE_VOICE, "satellite-voice", NULL },
1115 { PCI_CLASS_SATELLITE_DATA, "satellite-data", NULL },
1120 { PCI_CLASS_CRYPT_NETWORK, "network-encryption", NULL },
1122 "entertainment-encryption", NULL },
1130 { PCI_CLASS_SP_MANAGEMENT, "management-card", NULL },
1135 { "legacy-device", undef_subclass },
1136 { "mass-storage", mass_subclass },
1139 { "multimedia-device", media_subclass },
1140 { "memory-controller", mem_subclass },
1141 { "unknown-bridge", bridg_subclass },
1142 { "communication-controller", comm_subclass},
1143 { "system-peripheral", sys_subclass },
1144 { "input-controller", inp_subclass },
1145 { "docking-station", dock_subclass },
1147 { "serial-bus", ser_subclass },
1148 { "wireless-controller", wrl_subclass },
1149 { "intelligent-io", NULL },
1150 { "satellite-device", sat_subclass },
1152 { "data-processing-controller", spc_subclass },
1168 name = pclass->name; in dt_name_from_class()
1170 if (pclass->subc == NULL) { in dt_name_from_class()
1174 psubclass = pclass->subc; in dt_name_from_class()
1175 while ((psubclass->subclass & 0xff) != 0xff) { in dt_name_from_class()
1176 if ((psubclass->subclass & 0xff) == subclass) { in dt_name_from_class()
1177 name = psubclass->name; in dt_name_from_class()
1183 piface = psubclass->iface; in dt_name_from_class()
1187 while ((piface->iface & 0xff) != 0xff) { in dt_name_from_class()
1188 if ((piface->iface & 0xff) == iface) { in dt_name_from_class()
1189 name = piface->name; in dt_name_from_class()
1205 return (phb->index << 16) | (chassis << 8) | devfn; in drc_id_from_devfn()
1231 return drc_from_devfn(phb, chassis, dev->devfn); in drc_from_dev()
1261 for (i = PCI_SLOT_MAX * PCI_FUNC_MAX - 1; i >= 0; i--) { in remove_drcs()
1286 if (p->err || !pdev->enabled) { in spapr_dt_pci_device_cb()
1290 err = spapr_dt_pci_device(p->sphb, pdev, p->fdt, p->offset); in spapr_dt_pci_device_cb()
1292 p->err = err; in spapr_dt_pci_device_cb()
1309 _FDT(fdt_setprop_cell(fdt, offset, "#address-cells", in spapr_dt_pci_bus()
1311 _FDT(fdt_setprop_cell(fdt, offset, "#size-cells", in spapr_dt_pci_bus()
1338 int slot = PCI_SLOT(dev->devfn); in spapr_pci_fw_dev_name()
1339 int func = PCI_FUNC(dev->devfn); in spapr_pci_fw_dev_name()
1376 _FDT(fdt_setprop_cell(fdt, offset, "vendor-id", vendor_id)); in spapr_dt_pci_device()
1377 _FDT(fdt_setprop_cell(fdt, offset, "device-id", device_id)); in spapr_dt_pci_device()
1378 _FDT(fdt_setprop_cell(fdt, offset, "revision-id", revision_id)); in spapr_dt_pci_device()
1380 _FDT(fdt_setprop_cell(fdt, offset, "class-code", ccode)); in spapr_dt_pci_device()
1386 _FDT(fdt_setprop_cell(fdt, offset, "subsystem-id", subsystem_id)); in spapr_dt_pci_device()
1390 _FDT(fdt_setprop_cell(fdt, offset, "subsystem-vendor-id", in spapr_dt_pci_device()
1394 _FDT(fdt_setprop_cell(fdt, offset, "cache-line-size", cache_line_size)); in spapr_dt_pci_device()
1398 _FDT(fdt_setprop_cell(fdt, offset, "devsel-speed", in spapr_dt_pci_device()
1402 _FDT(fdt_setprop(fdt, offset, "fast-back-to-back", NULL, 0)); in spapr_dt_pci_device()
1405 _FDT(fdt_setprop(fdt, offset, "66mhz-capable", NULL, 0)); in spapr_dt_pci_device()
1408 _FDT(fdt_setprop(fdt, offset, "udf-supported", NULL, 0)); in spapr_dt_pci_device()
1412 _FDT(fdt_setprop_string(fdt, offset, "ibm,loc-code", loc_code)); in spapr_dt_pci_device()
1416 _FDT(fdt_setprop_cell(fdt, offset, "ibm,my-drc-index", in spapr_dt_pci_device()
1427 uint32_t max_msix = dev->msix_entries_nr; in spapr_dt_pci_device()
1429 _FDT(fdt_setprop_cell(fdt, offset, "ibm,req#msi-x", max_msix)); in spapr_dt_pci_device()
1436 if (sphb->pcie_ecs && pci_is_express(dev)) { in spapr_dt_pci_device()
1437 _FDT(fdt_setprop_cell(fdt, offset, "ibm,pci-config-space-type", 0x1)); in spapr_dt_pci_device()
1441 /* Properties only for non-bridges */ in spapr_dt_pci_device()
1444 _FDT(fdt_setprop_cell(fdt, offset, "min-grant", min_grant)); in spapr_dt_pci_device()
1445 _FDT(fdt_setprop_cell(fdt, offset, "max-latency", max_latency)); in spapr_dt_pci_device()
1466 HotplugHandler *plug_handler = qdev_get_hotplug_handler(drc->dev); in spapr_pci_dt_populate()
1468 PCIDevice *pdev = PCI_DEVICE(drc->dev); in spapr_pci_dt_populate()
1482 /* Returns non-zero if the value of "chassis_nr" is already in use */
1519 error_append_hint(errp, "Try -device pci-bridge instead.\n"); in bridge_has_valid_chassis_nr()
1540 uint32_t slotnr = PCI_SLOT(pdev->devfn); in spapr_pci_pre_plug()
1552 if (plugged_dev->hotplugged && in spapr_pci_pre_plug()
1554 bus->devices[PCI_DEVFN(slotnr, 0)] && in spapr_pci_pre_plug()
1555 PCI_FUNC(pdev->devfn) != 0) { in spapr_pci_pre_plug()
1558 slotnr, bus->devices[PCI_DEVFN(slotnr, 0)]->name); in spapr_pci_pre_plug()
1561 if (drc && drc->dev) { in spapr_pci_pre_plug()
1563 pci_get_function_0(PCI_DEVICE(drc->dev))->name); in spapr_pci_pre_plug()
1574 uint32_t slotnr = PCI_SLOT(pdev->devfn); in spapr_pci_plug()
1580 if (!pdev->enabled) { in spapr_pci_plug()
1598 } else if (PCI_FUNC(pdev->devfn) == 0) { in spapr_pci_plug()
1609 state = func_drck->dr_entity_sense(func_drc); in spapr_pci_plug()
1660 if (!drc->dev) { in spapr_pci_unplug_request()
1664 g_assert(drc->dev == plugged_dev); in spapr_pci_unplug_request()
1667 uint32_t slotnr = PCI_SLOT(pdev->devfn); in spapr_pci_unplug_request()
1678 if (object_property_get_uint(OBJECT(pdev), "nvlink2-tgt", NULL)) { in spapr_pci_unplug_request()
1684 if (PCI_FUNC(pdev->devfn) == 0) { in spapr_pci_unplug_request()
1688 state = func_drck->dr_entity_sense(func_drc); in spapr_pci_unplug_request()
1707 if (PCI_FUNC(pdev->devfn) == 0) { in spapr_pci_unplug_request()
1708 for (i = 7; i >= 0; i--) { in spapr_pci_unplug_request()
1711 state = func_drck->dr_entity_sense(func_drc); in spapr_pci_unplug_request()
1720 drc->dev->id); in spapr_pci_unplug_request()
1728 g_free(sphb->dtbusname); in spapr_phb_finalizefn()
1729 sphb->dtbusname = NULL; in spapr_phb_finalizefn()
1742 if (sphb->msi) { in spapr_phb_unrealize()
1743 g_hash_table_unref(sphb->msi); in spapr_phb_unrealize()
1744 sphb->msi = NULL; in spapr_phb_unrealize()
1749 * via PHB's unrealize->object_finalize in spapr_phb_unrealize()
1751 for (i = windows_supported - 1; i >= 0; i--) { in spapr_phb_unrealize()
1752 tcet = spapr_tce_find_by_liobn(sphb->dma_liobn[i]); in spapr_phb_unrealize()
1754 memory_region_del_subregion(&sphb->iommu_root, in spapr_phb_unrealize()
1759 remove_drcs(sphb, phb->bus); in spapr_phb_unrealize()
1761 for (i = PCI_NUM_PINS - 1; i >= 0; i--) { in spapr_phb_unrealize()
1762 if (sphb->lsi_table[i].irq) { in spapr_phb_unrealize()
1763 spapr_irq_free(spapr, sphb->lsi_table[i].irq, 1); in spapr_phb_unrealize()
1764 sphb->lsi_table[i].irq = 0; in spapr_phb_unrealize()
1770 memory_region_del_subregion(&sphb->iommu_root, &sphb->msiwindow); in spapr_phb_unrealize()
1777 address_space_remove_listeners(&sphb->iommu_as); in spapr_phb_unrealize()
1778 address_space_destroy(&sphb->iommu_as); in spapr_phb_unrealize()
1780 qbus_set_hotplug_handler(BUS(phb->bus), NULL); in spapr_phb_unrealize()
1781 pci_unregister_root_bus(phb->bus); in spapr_phb_unrealize()
1783 memory_region_del_subregion(get_system_memory(), &sphb->iowindow); in spapr_phb_unrealize()
1784 if (sphb->mem64_win_pciaddr != (hwaddr)-1) { in spapr_phb_unrealize()
1785 memory_region_del_subregion(get_system_memory(), &sphb->mem64window); in spapr_phb_unrealize()
1787 memory_region_del_subregion(get_system_memory(), &sphb->mem32window); in spapr_phb_unrealize()
1796 if (!smc->legacy_irq_allocation) { in spapr_phb_destroy_msi()
1797 spapr_irq_msi_free(spapr, msi->first_irq, msi->num); in spapr_phb_destroy_msi()
1799 spapr_irq_free(spapr, msi->first_irq, msi->num); in spapr_phb_destroy_msi()
1807 * tries to add a sPAPR PHB to a non-pseries machine. in spapr_phb_realize()
1829 assert(sphb->index != (uint32_t)-1); /* checked in spapr_phb_pre_plug() */ in spapr_phb_realize()
1831 if (sphb->mem_win_size > SPAPR_PCI_MEM32_WIN_SIZE) { in spapr_phb_realize()
1832 error_setg(errp, "32-bit memory window of size 0x%"HWADDR_PRIx in spapr_phb_realize()
1833 " (max 2 GiB)", sphb->mem_win_size); in spapr_phb_realize()
1837 /* 64-bit window defaults to identity mapping */ in spapr_phb_realize()
1838 sphb->mem64_win_pciaddr = sphb->mem64_win_addr; in spapr_phb_realize()
1840 if (spapr_pci_find_phb(spapr, sphb->buid)) { in spapr_phb_realize()
1845 QLIST_FOREACH(s, &spapr->phbs, list) { in spapr_phb_realize()
1846 error_append_hint(errp, " %d", s->index); in spapr_phb_realize()
1852 if (sphb->numa_node != -1 && in spapr_phb_realize()
1853 (sphb->numa_node >= MAX_NODES || in spapr_phb_realize()
1854 !ms->numa_state->nodes[sphb->numa_node].present)) { in spapr_phb_realize()
1859 sphb->dtbusname = g_strdup_printf("pci@%" PRIx64, sphb->buid); in spapr_phb_realize()
1862 namebuf = g_strdup_printf("%s.mmio", sphb->dtbusname); in spapr_phb_realize()
1863 memory_region_init(&sphb->memspace, OBJECT(sphb), namebuf, UINT64_MAX); in spapr_phb_realize()
1866 namebuf = g_strdup_printf("%s.mmio32-alias", sphb->dtbusname); in spapr_phb_realize()
1867 memory_region_init_alias(&sphb->mem32window, OBJECT(sphb), in spapr_phb_realize()
1868 namebuf, &sphb->memspace, in spapr_phb_realize()
1869 SPAPR_PCI_MEM_WIN_BUS_OFFSET, sphb->mem_win_size); in spapr_phb_realize()
1871 memory_region_add_subregion(get_system_memory(), sphb->mem_win_addr, in spapr_phb_realize()
1872 &sphb->mem32window); in spapr_phb_realize()
1874 if (sphb->mem64_win_size != 0) { in spapr_phb_realize()
1875 namebuf = g_strdup_printf("%s.mmio64-alias", sphb->dtbusname); in spapr_phb_realize()
1876 memory_region_init_alias(&sphb->mem64window, OBJECT(sphb), in spapr_phb_realize()
1877 namebuf, &sphb->memspace, in spapr_phb_realize()
1878 sphb->mem64_win_pciaddr, sphb->mem64_win_size); in spapr_phb_realize()
1882 sphb->mem64_win_addr, in spapr_phb_realize()
1883 &sphb->mem64window); in spapr_phb_realize()
1887 namebuf = g_strdup_printf("%s.io", sphb->dtbusname); in spapr_phb_realize()
1888 memory_region_init(&sphb->iospace, OBJECT(sphb), in spapr_phb_realize()
1892 namebuf = g_strdup_printf("%s.io-alias", sphb->dtbusname); in spapr_phb_realize()
1893 memory_region_init_alias(&sphb->iowindow, OBJECT(sphb), namebuf, in spapr_phb_realize()
1894 &sphb->iospace, 0, SPAPR_PCI_IO_WIN_SIZE); in spapr_phb_realize()
1896 memory_region_add_subregion(get_system_memory(), sphb->io_win_addr, in spapr_phb_realize()
1897 &sphb->iowindow); in spapr_phb_realize()
1901 &sphb->memspace, &sphb->iospace, in spapr_phb_realize()
1907 * para-virtualized PCI bus *does* permit PCI-E extended config in spapr_phb_realize()
1910 if (sphb->pcie_ecs) { in spapr_phb_realize()
1911 bus->flags |= PCI_BUS_EXTENDED_CONFIG_SPACE; in spapr_phb_realize()
1913 phb->bus = bus; in spapr_phb_realize()
1914 qbus_set_hotplug_handler(BUS(phb->bus), OBJECT(sphb)); in spapr_phb_realize()
1923 namebuf = g_strdup_printf("%s.iommu-root", sphb->dtbusname); in spapr_phb_realize()
1924 memory_region_init(&sphb->iommu_root, OBJECT(sphb), in spapr_phb_realize()
1927 address_space_init(&sphb->iommu_as, &sphb->iommu_root, in spapr_phb_realize()
1928 sphb->dtbusname); in spapr_phb_realize()
1945 memory_region_init_io(&sphb->msiwindow, OBJECT(sphb), &spapr_msi_ops, spapr, in spapr_phb_realize()
1947 memory_region_add_subregion(&sphb->iommu_root, SPAPR_PCI_MSI_WINDOW, in spapr_phb_realize()
1948 &sphb->msiwindow); in spapr_phb_realize()
1954 QLIST_INSERT_HEAD(&spapr->phbs, sphb, list); in spapr_phb_realize()
1958 int irq = SPAPR_IRQ_PCI_LSI + sphb->index * PCI_NUM_PINS + i; in spapr_phb_realize()
1960 if (smc->legacy_irq_allocation) { in spapr_phb_realize()
1977 sphb->lsi_table[i].irq = irq; in spapr_phb_realize()
1981 add_drcs(sphb, phb->bus); in spapr_phb_realize()
1985 tcet = spapr_tce_new_table(DEVICE(sphb), sphb->dma_liobn[i]); in spapr_phb_realize()
1988 i, sphb->dtbusname); in spapr_phb_realize()
1991 memory_region_add_subregion(&sphb->iommu_root, 0, in spapr_phb_realize()
1995 sphb->msi = g_hash_table_new_full(g_int_hash, g_int_equal, g_free, in spapr_phb_realize()
2020 tcet = spapr_tce_find_by_liobn(sphb->dma_liobn[i]); in spapr_phb_dma_reset()
2022 if (tcet && tcet->nb_table) { in spapr_phb_dma_reset()
2028 tcet = spapr_tce_find_by_liobn(sphb->dma_liobn[0]); in spapr_phb_dma_reset()
2029 spapr_tce_table_enable(tcet, SPAPR_TCE_PAGE_SHIFT, sphb->dma_win_addr, in spapr_phb_dma_reset()
2030 sphb->dma_win_size >> SPAPR_TCE_PAGE_SHIFT); in spapr_phb_dma_reset()
2031 tcet->def_win = true; in spapr_phb_dma_reset()
2047 g_hash_table_remove_all(sphb->msi); in spapr_phb_reset()
2051 DEFINE_PROP_UINT32("index", SpaprPhbState, index, -1),
2067 DEFINE_PROP_UINT32("numa_node", SpaprPhbState, numa_node, -1),
2068 DEFINE_PROP_BOOL("pcie-extended-configuration-space", SpaprPhbState,
2070 DEFINE_PROP_BOOL("pre-5.1-associativity", SpaprPhbState,
2104 g_free(sphb->msi_devs); in spapr_pci_pre_save()
2105 sphb->msi_devs = NULL; in spapr_pci_pre_save()
2106 sphb->msi_devs_num = g_hash_table_size(sphb->msi); in spapr_pci_pre_save()
2107 if (!sphb->msi_devs_num) { in spapr_pci_pre_save()
2110 sphb->msi_devs = g_new(SpaprPciMsiMig, sphb->msi_devs_num); in spapr_pci_pre_save()
2112 g_hash_table_iter_init(&iter, sphb->msi); in spapr_pci_pre_save()
2114 sphb->msi_devs[i].key = *(uint32_t *) key; in spapr_pci_pre_save()
2115 sphb->msi_devs[i].value = *(SpaprPciMsi *) value; in spapr_pci_pre_save()
2125 g_free(sphb->msi_devs); in spapr_pci_post_save()
2126 sphb->msi_devs = NULL; in spapr_pci_post_save()
2127 sphb->msi_devs_num = 0; in spapr_pci_post_save()
2137 for (i = 0; i < sphb->msi_devs_num; ++i) { in spapr_pci_post_load()
2138 key = g_memdup2(&sphb->msi_devs[i].key, sizeof(sphb->msi_devs[i].key)); in spapr_pci_post_load()
2139 value = g_memdup2(&sphb->msi_devs[i].value, in spapr_pci_post_load()
2140 sizeof(sphb->msi_devs[i].value)); in spapr_pci_post_load()
2141 g_hash_table_insert(sphb->msi, key, value); in spapr_pci_post_load()
2143 g_free(sphb->msi_devs); in spapr_pci_post_load()
2144 sphb->msi_devs = NULL; in spapr_pci_post_load()
2145 sphb->msi_devs_num = 0; in spapr_pci_post_load()
2173 return sphb->dtbusname; in spapr_phb_root_bus_path()
2182 hc->root_bus_path = spapr_phb_root_bus_path; in spapr_phb_class_init()
2183 dc->realize = spapr_phb_realize; in spapr_phb_class_init()
2184 dc->unrealize = spapr_phb_unrealize; in spapr_phb_class_init()
2187 dc->vmsd = &vmstate_spapr_pci; in spapr_phb_class_init()
2189 dc->user_creatable = true; in spapr_phb_class_init()
2190 set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories); in spapr_phb_class_init()
2191 hp->pre_plug = spapr_pci_pre_plug; in spapr_phb_class_init()
2192 hp->plug = spapr_pci_plug; in spapr_phb_class_init()
2193 hp->unplug = spapr_pci_unplug; in spapr_phb_class_init()
2194 hp->unplug_request = spapr_pci_unplug_request; in spapr_phb_class_init()
2237 PCIBus *bus = PCI_HOST_BRIDGE(phb)->bus; in spapr_phb_pci_enumerate()
2258 cpu_to_be64(phb->io_win_addr), in spapr_dt_phb()
2259 cpu_to_be64(memory_region_size(&phb->iospace)), in spapr_dt_phb()
2263 cpu_to_be64(phb->mem_win_addr), in spapr_dt_phb()
2264 cpu_to_be64(phb->mem_win_size), in spapr_dt_phb()
2267 cpu_to_be32(b_ss(3)), cpu_to_be64(phb->mem64_win_pciaddr), in spapr_dt_phb()
2268 cpu_to_be64(phb->mem64_win_addr), in spapr_dt_phb()
2269 cpu_to_be64(phb->mem64_win_size), in spapr_dt_phb()
2273 (phb->mem64_win_size ? 3 : 2) * sizeof(ranges[0]); in spapr_dt_phb()
2274 uint64_t bus_reg[] = { cpu_to_be64(phb->buid), 0 }; in spapr_dt_phb()
2276 cpu_to_be32(b_ddddd(-1)|b_fff(0)), 0x0, 0x0, cpu_to_be32(-1)}; in spapr_dt_phb()
2286 cpu_to_be32(1), /* 1: ibm,query-pe-dma-window 6 outputs, PAPR 2.8 */ in spapr_dt_phb()
2292 _FDT(bus_off = fdt_add_subnode(fdt, 0, phb->dtbusname)); in spapr_dt_phb()
2300 _FDT(fdt_setprop_cell(fdt, bus_off, "#interrupt-cells", 0x1)); in spapr_dt_phb()
2301 _FDT(fdt_setprop(fdt, bus_off, "used-by-rtas", NULL, 0)); in spapr_dt_phb()
2302 _FDT(fdt_setprop(fdt, bus_off, "bus-range", &bus_range, sizeof(bus_range))); in spapr_dt_phb()
2305 _FDT(fdt_setprop_cell(fdt, bus_off, "ibm,pci-config-space-type", 0x1)); in spapr_dt_phb()
2306 _FDT(fdt_setprop_cell(fdt, bus_off, "ibm,pe-total-#msi", in spapr_dt_phb()
2310 if (phb->ddw_enabled) { in spapr_dt_phb()
2311 _FDT(fdt_setprop(fdt, bus_off, "ibm,ddw-applicable", &ddw_applicable, in spapr_dt_phb()
2313 _FDT(fdt_setprop(fdt, bus_off, "ibm,ddw-extensions", in spapr_dt_phb()
2318 if (phb->numa_node != -1) { in spapr_dt_phb()
2319 spapr_numa_write_associativity_dt(spapr, fdt, bus_off, phb->numa_node); in spapr_dt_phb()
2322 /* Build the interrupt-map, this must matches what is done in spapr_dt_phb()
2325 _FDT(fdt_setprop(fdt, bus_off, "interrupt-map-mask", in spapr_dt_phb()
2337 spapr_dt_irq(&irqmap[5], phb->lsi_table[lsi_num].irq, true); in spapr_dt_phb()
2341 _FDT(fdt_setprop(fdt, bus_off, "interrupt-map", &interrupt_map, in spapr_dt_phb()
2344 tcet = spapr_tce_find_by_liobn(phb->dma_liobn[0]); in spapr_dt_phb()
2346 return -1; in spapr_dt_phb()
2348 spapr_dma_dt(fdt, bus_off, "ibm,dma-window", in spapr_dt_phb()
2349 tcet->liobn, tcet->bus_offset, in spapr_dt_phb()
2350 tcet->nb_table << tcet->page_shift); in spapr_dt_phb()
2352 drc = spapr_drc_by_id(TYPE_SPAPR_DRC_PHB, phb->index); in spapr_dt_phb()
2356 _FDT(fdt_setprop(fdt, bus_off, "ibm,my-drc-index", &drc_index, in spapr_dt_phb()
2362 _FDT(fdt_setprop_cell(fdt, bus_off, "qemu,phb-enumerated", 0x1)); in spapr_dt_phb()
2365 ret = spapr_dt_pci_bus(phb, PCI_HOST_BRIDGE(phb)->bus, fdt, bus_off); in spapr_dt_phb()
2375 spapr_rtas_register(RTAS_READ_PCI_CONFIG, "read-pci-config", in spapr_pci_rtas_init()
2377 spapr_rtas_register(RTAS_WRITE_PCI_CONFIG, "write-pci-config", in spapr_pci_rtas_init()
2379 spapr_rtas_register(RTAS_IBM_READ_PCI_CONFIG, "ibm,read-pci-config", in spapr_pci_rtas_init()
2381 spapr_rtas_register(RTAS_IBM_WRITE_PCI_CONFIG, "ibm,write-pci-config", in spapr_pci_rtas_init()
2385 "ibm,query-interrupt-source-number", in spapr_pci_rtas_init()
2387 spapr_rtas_register(RTAS_IBM_CHANGE_MSI, "ibm,change-msi", in spapr_pci_rtas_init()
2392 "ibm,set-eeh-option", in spapr_pci_rtas_init()
2395 "ibm,get-config-addr-info2", in spapr_pci_rtas_init()
2398 "ibm,read-slot-reset-state2", in spapr_pci_rtas_init()
2401 "ibm,set-slot-reset", in spapr_pci_rtas_init()
2404 "ibm,configure-pe", in spapr_pci_rtas_init()
2407 "ibm,slot-error-detail", in spapr_pci_rtas_init()
2423 || object_dynamic_cast(OBJECT(dev), "secondary-vga") in type_init()
2424 || object_dynamic_cast(OBJECT(dev), "bochs-display") in type_init()
2425 || object_dynamic_cast(OBJECT(dev), "virtio-vga")) { in type_init()
2426 object_property_set_bool(OBJECT(dev), "big-endian-framebuffer", be, in type_init()
2441 QLIST_FOREACH(sphb, &spapr->phbs, list) { in spapr_pci_switch_vga()
2442 BusState *bus = &PCI_HOST_BRIDGE(sphb)->bus->qbus; in spapr_pci_switch_vga()