diff --git a/hw/ppc/e500.c b/hw/ppc/e500.c
index 197411d..c7ae2b6 100644
--- a/hw/ppc/e500.c
+++ b/hw/ppc/e500.c
@@ -518,6 +518,7 @@ void ppce500_init(PPCE500Params *params)
 
     /* PCI */
     dev = qdev_create(NULL, "e500-pcihost");
+    qdev_prop_set_ptr(dev, "bar0_region", ccsr);
     qdev_init_nofail(dev);
     s = sysbus_from_qdev(dev);
     sysbus_connect_irq(s, 0, mpic[pci_irq_nrs[0]]);
diff --git a/hw/ppce500_pci.c b/hw/ppce500_pci.c
index 92b1dc0..16e4af2 100644
--- a/hw/ppce500_pci.c
+++ b/hw/ppce500_pci.c
@@ -87,6 +87,7 @@ struct PPCE500PCIState {
     /* mmio maps */
     MemoryRegion container;
     MemoryRegion iomem;
+    void *bar0;
 };
 
 typedef struct PPCE500PCIState PPCE500PCIState;
@@ -315,6 +316,8 @@ static int e500_pcihost_initfn(SysBusDevice *dev)
     int i;
     MemoryRegion *address_space_mem = get_system_memory();
     MemoryRegion *address_space_io = get_system_io();
+    PCIDevice *pdev;
+    MemoryRegion bar0;
 
     h = PCI_HOST_BRIDGE(dev);
     s = PPC_E500_PCI_HOST_BRIDGE(dev);
@@ -342,6 +345,10 @@ static int e500_pcihost_initfn(SysBusDevice *dev)
     memory_region_add_subregion(&s->container, PCIE500_REG_BASE, &s->iomem);
     sysbus_init_mmio(dev, &s->container);
 
+    bar0 = *(MemoryRegion *)s->bar0;
+    pdev = pci_find_device(b, 0, 0);
+    pci_register_bar(pdev, 0, PCI_BASE_ADDRESS_SPACE_MEMORY, &bar0);
+
     return 0;
 }
 
@@ -363,6 +370,11 @@ static const TypeInfo e500_host_bridge_info = {
     .class_init    = e500_host_bridge_class_init,
 };
 
+static Property pci_host_dev_info[] = {
+    DEFINE_PROP_PTR("bar0_region", PPCE500PCIState, bar0),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
 static void e500_pcihost_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
@@ -370,6 +382,7 @@ static void e500_pcihost_class_init(ObjectClass *klass, void *data)
 
     k->init = e500_pcihost_initfn;
     dc->vmsd = &vmstate_ppce500_pci;
+    dc->props = pci_host_dev_info;
 }
 
 static const TypeInfo e500_pcihost_info = {
