Skip to content

Commit

Permalink
Revert "spapr_pci: map the MSI window in each PHB"
Browse files Browse the repository at this point in the history
This patch is predicated on cc943c, which was dropped from
stable tree for other reasons.

This reverts commit 0824ca6.

Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
  • Loading branch information
gkurz authored and mdroth committed Sep 23, 2014
1 parent 3cb451e commit 0717855
Show file tree
Hide file tree
Showing 4 changed files with 33 additions and 25 deletions.
1 change: 1 addition & 0 deletions hw/ppc/spapr.c
Expand Up @@ -1377,6 +1377,7 @@ static void ppc_spapr_init(MachineState *machine)
spapr_create_nvram(spapr);

/* Set up PCI */
spapr_pci_msi_init(spapr, SPAPR_PCI_MSI_WINDOW);
spapr_pci_rtas_init();

phb = spapr_create_phb(spapr, 0);
Expand Down
53 changes: 29 additions & 24 deletions hw/ppc/spapr_pci.c
Expand Up @@ -341,7 +341,7 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, sPAPREnvironment *spapr,
}

/* Setup MSI/MSIX vectors in the device (via cfgspace or MSIX BAR) */
spapr_msi_setmsg(pdev, SPAPR_PCI_MSI_WINDOW, ret_intr_type == RTAS_TYPE_MSIX,
spapr_msi_setmsg(pdev, spapr->msi_win_addr, ret_intr_type == RTAS_TYPE_MSIX,
irq, req_num);

/* Add MSI device to cache */
Expand Down Expand Up @@ -465,6 +465,34 @@ static const MemoryRegionOps spapr_msi_ops = {
.endianness = DEVICE_LITTLE_ENDIAN
};

void spapr_pci_msi_init(sPAPREnvironment *spapr, hwaddr addr)
{
uint64_t window_size = 4096;

/*
* As MSI/MSIX interrupts trigger by writing at MSI/MSIX vectors,
* we need to allocate some memory to catch those writes coming
* from msi_notify()/msix_notify().
* As MSIMessage:addr is going to be the same and MSIMessage:data
* is going to be a VIRQ number, 4 bytes of the MSI MR will only
* be used.
*
* For KVM we want to ensure that this memory is a full page so that
* our memory slot is of page size granularity.
*/
#ifdef CONFIG_KVM
if (kvm_enabled()) {
window_size = getpagesize();
}
#endif

spapr->msi_win_addr = addr;
memory_region_init_io(&spapr->msiwindow, NULL, &spapr_msi_ops, spapr,
"msi", window_size);
memory_region_add_subregion(get_system_memory(), spapr->msi_win_addr,
&spapr->msiwindow);
}

/*
* PHB PCI device
*/
Expand All @@ -484,7 +512,6 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
char *namebuf;
int i;
PCIBus *bus;
uint64_t msi_window_size = 4096;

if (sphb->index != -1) {
hwaddr windows_base;
Expand Down Expand Up @@ -577,28 +604,6 @@ static void spapr_phb_realize(DeviceState *dev, Error **errp)
address_space_init(&sphb->iommu_as, &sphb->iommu_root,
sphb->dtbusname);

/*
* As MSI/MSIX interrupts trigger by writing at MSI/MSIX vectors,
* we need to allocate some memory to catch those writes coming
* from msi_notify()/msix_notify().
* As MSIMessage:addr is going to be the same and MSIMessage:data
* is going to be a VIRQ number, 4 bytes of the MSI MR will only
* be used.
*
* For KVM we want to ensure that this memory is a full page so that
* our memory slot is of page size granularity.
*/
#ifdef CONFIG_KVM
if (kvm_enabled()) {
msi_window_size = getpagesize();
}
#endif

memory_region_init_io(&sphb->msiwindow, NULL, &spapr_msi_ops, spapr,
"msi", msi_window_size);
memory_region_add_subregion(&sphb->iommu_root, SPAPR_PCI_MSI_WINDOW,
&sphb->msiwindow);

pci_setup_iommu(bus, spapr_pci_dma_iommu, sphb);

pci_bus_set_route_irq_fn(bus, spapr_route_intx_pin_to_irq);
Expand Down
2 changes: 1 addition & 1 deletion include/hw/pci-host/spapr.h
Expand Up @@ -70,7 +70,7 @@ struct sPAPRPHBState {

MemoryRegion memspace, iospace;
hwaddr mem_win_addr, mem_win_size, io_win_addr, io_win_size;
MemoryRegion memwindow, iowindow, msiwindow;
MemoryRegion memwindow, iowindow;

uint32_t dma_liobn;
AddressSpace iommu_as;
Expand Down
2 changes: 2 additions & 0 deletions include/hw/ppc/spapr.h
Expand Up @@ -13,6 +13,8 @@ struct sPAPRNVRAM;
typedef struct sPAPREnvironment {
struct VIOsPAPRBus *vio_bus;
QLIST_HEAD(, sPAPRPHBState) phbs;
hwaddr msi_win_addr;
MemoryRegion msiwindow;
struct sPAPRNVRAM *nvram;
XICSState *icp;

Expand Down

0 comments on commit 0717855

Please sign in to comment.