Skip to content

Commit

Permalink
raven: Set a correct PCI memory region
Browse files Browse the repository at this point in the history
PCI memory region is 0x3f000000 bytes starting at 0xc0000000.

However, keep compatibility with Open Hack'Ware expectations
by adding a hack for Open Hack'Ware display.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
Signed-off-by: Andreas Färber <andreas.faerber@web.de>
  • Loading branch information
hpoussin authored and afaerber committed Mar 19, 2014
1 parent 1ae1dc5 commit 1fe9e26
Show file tree
Hide file tree
Showing 2 changed files with 15 additions and 3 deletions.
9 changes: 6 additions & 3 deletions hw/pci-host/prep.c
Expand Up @@ -57,6 +57,7 @@ typedef struct PRePPCIState {
AddressSpace pci_io_as;
MemoryRegion pci_io;
MemoryRegion pci_io_non_contiguous;
MemoryRegion pci_memory;
MemoryRegion pci_intack;
RavenPCIState pci_dev;

Expand Down Expand Up @@ -204,8 +205,6 @@ static void raven_pcihost_realizefn(DeviceState *d, Error **errp)
MemoryRegion *address_space_mem = get_system_memory();
int i;

isa_mem_base = 0xc0000000;

for (i = 0; i < PCI_NUM_PINS; i++) {
sysbus_init_irq(dev, &s->irq[i]);
}
Expand Down Expand Up @@ -243,14 +242,18 @@ static void raven_pcihost_initfn(Object *obj)
memory_region_init(&s->pci_io, obj, "pci-io", 0x3f800000);
memory_region_init_io(&s->pci_io_non_contiguous, obj, &raven_io_ops, s,
"pci-io-non-contiguous", 0x00800000);
/* Open Hack'Ware hack: real size should be only 0x3f000000 bytes */
memory_region_init(&s->pci_memory, obj, "pci-memory",
0x3f000000 + 0xc0000000ULL);
address_space_init(&s->pci_io_as, &s->pci_io, "raven-io");

/* CPU address space */
memory_region_add_subregion(address_space_mem, 0x80000000, &s->pci_io);
memory_region_add_subregion_overlap(address_space_mem, 0x80000000,
&s->pci_io_non_contiguous, 1);
memory_region_add_subregion(address_space_mem, 0xc0000000, &s->pci_memory);
pci_bus_new_inplace(&s->pci_bus, sizeof(s->pci_bus), DEVICE(obj), NULL,
address_space_mem, &s->pci_io, 0, TYPE_PCI_BUS);
&s->pci_memory, &s->pci_io, 0, TYPE_PCI_BUS);

h->bus = &s->pci_bus;

Expand Down
9 changes: 9 additions & 0 deletions hw/ppc/prep.c
Expand Up @@ -381,6 +381,7 @@ static void ppc_prep_init(QEMUMachineInitArgs *args)
#endif
int linux_boot, i, nb_nics1;
MemoryRegion *ram = g_new(MemoryRegion, 1);
MemoryRegion *vga = g_new(MemoryRegion, 1);
uint32_t kernel_base, initrd_base;
long kernel_size, initrd_size;
DeviceState *dev;
Expand Down Expand Up @@ -506,6 +507,14 @@ static void ppc_prep_init(QEMUMachineInitArgs *args)

/* init basic PC hardware */
pci_vga_init(pci_bus);
/* Open Hack'Ware hack: PCI BAR#0 is programmed to 0xf0000000.
* While bios will access framebuffer at 0xf0000000, real physical
* address is 0xf0000000 + 0xc0000000 (PCI memory base).
* Alias the wrong memory accesses to the right place.
*/
memory_region_init_alias(vga, NULL, "vga-alias", pci_address_space(pci),
0xf0000000, 0x1000000);
memory_region_add_subregion_overlap(sysmem, 0xf0000000, vga, 10);

nb_nics1 = nb_nics;
if (nb_nics1 > NE2000_NB_MAX)
Expand Down

0 comments on commit 1fe9e26

Please sign in to comment.