All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable
@ 2015-01-19 21:28 Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 1/7] isa: add memory space parameter to isa_bus_new Hervé Poussineau
                   ` (6 more replies)
  0 siblings, 7 replies; 9+ messages in thread
From: Hervé Poussineau @ 2015-01-19 21:28 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Hi,

This patchset removes the isa_mem_base variable in VGA display devices.
This variable is a global variable telling at which address is the
ISA memory base address in the system memory address space.

Once removed, we're paving the way to new QEMU functionalities:
- supporting other MMIO ISA devices
- supporting multiple ISA buses (not done in this patchset)

Patch 6 may be not very good, but I don't know enough gt64xxx chipset
to come to a better solution.

Hervé

Hervé Poussineau (7):
  isa: add memory space parameter to isa_bus_new
  jazz: do not explode QEMUMachineInitArgs structure
  jazz: remove usage of isa_mem_base
  mips: remove isa_mem_base usage
  piix4: use PCI address space instead of system memory
  gt64xxx: remove isa_mem_base usage
  isa: remove isa_mem_base variable

 hw/alpha/typhoon.c      |    2 +-
 hw/display/cirrus_vga.c |    2 +-
 hw/display/vga-isa.c    |    2 +-
 hw/display/vga.c        |    3 +--
 hw/i386/pc_piix.c       |    2 +-
 hw/isa/i82378.c         |    3 ++-
 hw/isa/isa-bus.c        |   12 ++++++++----
 hw/isa/lpc_ich9.c       |    2 +-
 hw/isa/piix4.c          |    3 ++-
 hw/isa/vt82c686.c       |    3 ++-
 hw/mips/gt64xxx_pci.c   |   17 ++++++++++-------
 hw/mips/mips_jazz.c     |   44 +++++++++++++++++++++-----------------------
 hw/mips/mips_r4k.c      |   19 ++++++++++---------
 hw/pci-host/piix.c      |    3 ++-
 hw/sparc64/sun4u.c      |    3 ++-
 include/hw/isa/isa.h    |    6 +++---
 16 files changed, 68 insertions(+), 58 deletions(-)

-- 
1.7.10.4

^ permalink raw reply	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 1/7] isa: add memory space parameter to isa_bus_new
  2015-01-19 21:28 [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable Hervé Poussineau
@ 2015-01-19 21:28 ` Hervé Poussineau
  2015-01-20 10:44   ` Paolo Bonzini
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 2/7] jazz: do not explode QEMUMachineInitArgs structure Hervé Poussineau
                   ` (5 subsequent siblings)
  6 siblings, 1 reply; 9+ messages in thread
From: Hervé Poussineau @ 2015-01-19 21:28 UTC (permalink / raw)
  To: qemu-devel
  Cc: Michael S. Tsirkin, Blue Swirl, Hervé Poussineau,
	Anthony Liguori, Paolo Bonzini, Leon Alrae, Aurelien Jarno,
	Richard Henderson

Currently, keep current behaviour by always using get_system_memory().

Also use QOM casts when possible.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/alpha/typhoon.c   |    2 +-
 hw/i386/pc_piix.c    |    2 +-
 hw/isa/i82378.c      |    3 ++-
 hw/isa/isa-bus.c     |   11 ++++++++---
 hw/isa/lpc_ich9.c    |    2 +-
 hw/isa/piix4.c       |    3 ++-
 hw/isa/vt82c686.c    |    3 ++-
 hw/mips/mips_jazz.c  |    2 +-
 hw/mips/mips_r4k.c   |    2 +-
 hw/pci-host/piix.c   |    3 ++-
 hw/sparc64/sun4u.c   |    3 ++-
 include/hw/isa/isa.h |    4 +++-
 12 files changed, 26 insertions(+), 14 deletions(-)

diff --git a/hw/alpha/typhoon.c b/hw/alpha/typhoon.c
index 5310006..62af946 100644
--- a/hw/alpha/typhoon.c
+++ b/hw/alpha/typhoon.c
@@ -920,7 +920,7 @@ PCIBus *typhoon_init(ram_addr_t ram_size, ISABus **isa_bus,
     {
         qemu_irq isa_pci_irq, *isa_irqs;
 
-        *isa_bus = isa_bus_new(NULL, &s->pchip.reg_io);
+        *isa_bus = isa_bus_new(NULL, get_system_memory(), &s->pchip.reg_io);
         isa_pci_irq = *qemu_allocate_irqs(typhoon_set_isa_irq, s, 1);
         isa_irqs = i8259_init(*isa_bus, isa_pci_irq);
         isa_bus_irqs(*isa_bus, isa_irqs);
diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
index f0a3201..8f932c9 100644
--- a/hw/i386/pc_piix.c
+++ b/hw/i386/pc_piix.c
@@ -208,7 +208,7 @@ static void pc_init1(MachineState *machine,
     } else {
         pci_bus = NULL;
         i440fx_state = NULL;
-        isa_bus = isa_bus_new(NULL, system_io);
+        isa_bus = isa_bus_new(NULL, get_system_memory(), system_io);
         no_hpet = 1;
     }
     isa_bus_irqs(isa_bus, gsi);
diff --git a/hw/isa/i82378.c b/hw/isa/i82378.c
index a7d9aa6..0dc440d 100644
--- a/hw/isa/i82378.c
+++ b/hw/isa/i82378.c
@@ -75,7 +75,8 @@ static int i82378_initfn(PCIDevice *pci)
 
     pci_config_set_interrupt_pin(pci_conf, 1); /* interrupt pin 0 */
 
-    isabus = isa_bus_new(dev, pci_address_space_io(pci));
+    isabus = isa_bus_new(dev, get_system_memory(),
+                         pci_address_space_io(pci));
 
     /* This device has:
        2 82C59 (irq)
diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c
index cc85e53..fd6a3a1 100644
--- a/hw/isa/isa-bus.c
+++ b/hw/isa/isa-bus.c
@@ -21,7 +21,6 @@
 #include "hw/sysbus.h"
 #include "sysemu/sysemu.h"
 #include "hw/isa/isa.h"
-#include "exec/address-spaces.h"
 
 static ISABus *isabus;
 hwaddr isa_mem_base = 0;
@@ -44,7 +43,8 @@ static const TypeInfo isa_bus_info = {
     .class_init = isa_bus_class_init,
 };
 
-ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space_io)
+ISABus *isa_bus_new(DeviceState *dev, MemoryRegion* address_space,
+                    MemoryRegion *address_space_io)
 {
     if (isabus) {
         fprintf(stderr, "Can't create a second ISA bus\n");
@@ -56,6 +56,7 @@ ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space_io)
     }
 
     isabus = ISA_BUS(qbus_create(TYPE_ISA_BUS, dev, NULL));
+    isabus->address_space = address_space;
     isabus->address_space_io = address_space_io;
     return isabus;
 }
@@ -250,7 +251,11 @@ static char *isabus_get_fw_dev_path(DeviceState *dev)
 
 MemoryRegion *isa_address_space(ISADevice *dev)
 {
-    return get_system_memory();
+    if (dev) {
+        return isa_bus_from_device(dev)->address_space;
+    }
+
+    return isabus->address_space;
 }
 
 MemoryRegion *isa_address_space_io(ISADevice *dev)
diff --git a/hw/isa/lpc_ich9.c b/hw/isa/lpc_ich9.c
index 530b074..231de74 100644
--- a/hw/isa/lpc_ich9.c
+++ b/hw/isa/lpc_ich9.c
@@ -575,7 +575,7 @@ static int ich9_lpc_init(PCIDevice *d)
     ICH9LPCState *lpc = ICH9_LPC_DEVICE(d);
     ISABus *isa_bus;
 
-    isa_bus = isa_bus_new(&d->qdev, get_system_io());
+    isa_bus = isa_bus_new(DEVICE(d), get_system_memory(), get_system_io());
 
     pci_set_long(d->wmask + ICH9_LPC_PMBASE,
                  ICH9_LPC_PMBASE_BASE_ADDRESS_MASK);
diff --git a/hw/isa/piix4.c b/hw/isa/piix4.c
index 1aa17d7..0cacc3b 100644
--- a/hw/isa/piix4.c
+++ b/hw/isa/piix4.c
@@ -86,7 +86,8 @@ static int piix4_initfn(PCIDevice *dev)
 {
     PIIX4State *d = DO_UPCAST(PIIX4State, dev, dev);
 
-    isa_bus_new(&d->dev.qdev, pci_address_space_io(dev));
+    isa_bus_new(DEVICE(d), get_system_memory(),
+                pci_address_space_io(dev));
     piix4_dev = &d->dev;
     qemu_register_reset(piix4_reset, d);
     return 0;
diff --git a/hw/isa/vt82c686.c b/hw/isa/vt82c686.c
index 2f53bf8..254f00f 100644
--- a/hw/isa/vt82c686.c
+++ b/hw/isa/vt82c686.c
@@ -429,7 +429,8 @@ static int vt82c686b_initfn(PCIDevice *d)
     uint8_t *wmask;
     int i;
 
-    isa_bus = isa_bus_new(&d->qdev, pci_address_space_io(d));
+    isa_bus = isa_bus_new(DEVICE(d), get_system_memory(),
+                          pci_address_space_io(d));
 
     pci_conf = d->config;
     pci_config_set_prog_interface(pci_conf, 0x0);
diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
index 3f33093..de35299 100644
--- a/hw/mips/mips_jazz.c
+++ b/hw/mips/mips_jazz.c
@@ -219,7 +219,7 @@ static void mips_jazz_init(MemoryRegion *address_space,
     memory_region_add_subregion(address_space, 0x8000d000, dma_dummy);
 
     /* ISA devices */
-    isa_bus = isa_bus_new(NULL, address_space_io);
+    isa_bus = isa_bus_new(NULL, get_system_memory(), address_space_io);
     i8259 = i8259_init(isa_bus, env->irq[4]);
     isa_bus_irqs(isa_bus, i8259);
     cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c
index a7fe0ce..5b982f2 100644
--- a/hw/mips/mips_r4k.c
+++ b/hw/mips/mips_r4k.c
@@ -268,7 +268,7 @@ void mips_r4k_init(MachineState *machine)
     cpu_mips_clock_init(env);
 
     /* The PIC is attached to the MIPS CPU INT0 pin */
-    isa_bus = isa_bus_new(NULL, get_system_io());
+    isa_bus = isa_bus_new(NULL, get_system_memory(), get_system_io());
     i8259 = i8259_init(isa_bus, env->irq[2]);
     isa_bus_irqs(isa_bus, i8259);
 
diff --git a/hw/pci-host/piix.c b/hw/pci-host/piix.c
index 1530038..8ea718e 100644
--- a/hw/pci-host/piix.c
+++ b/hw/pci-host/piix.c
@@ -635,7 +635,8 @@ static int piix3_initfn(PCIDevice *dev)
 {
     PIIX3State *d = DO_UPCAST(PIIX3State, dev, dev);
 
-    isa_bus_new(DEVICE(d), pci_address_space_io(dev));
+    isa_bus_new(DEVICE(d), get_system_memory(),
+                pci_address_space_io(dev));
 
     memory_region_init_io(&d->rcr_mem, OBJECT(dev), &rcr_ops, d,
                           "piix3-reset-control", 1);
diff --git a/hw/sparc64/sun4u.c b/hw/sparc64/sun4u.c
index 3ff5bd8..4620cc6 100644
--- a/hw/sparc64/sun4u.c
+++ b/hw/sparc64/sun4u.c
@@ -596,7 +596,8 @@ pci_ebus_init1(PCIDevice *pci_dev)
 {
     EbusState *s = DO_UPCAST(EbusState, pci_dev, pci_dev);
 
-    isa_bus_new(&pci_dev->qdev, pci_address_space_io(pci_dev));
+    isa_bus_new(DEVICE(pci_dev), get_system_memory(),
+                pci_address_space_io(pci_dev));
 
     pci_dev->config[0x04] = 0x06; // command = bus master, pci mem
     pci_dev->config[0x05] = 0x00;
diff --git a/include/hw/isa/isa.h b/include/hw/isa/isa.h
index e0c749f..c621822 100644
--- a/include/hw/isa/isa.h
+++ b/include/hw/isa/isa.h
@@ -36,6 +36,7 @@ struct ISABus {
     BusState parent_obj;
     /*< public >*/
 
+    MemoryRegion *address_space;
     MemoryRegion *address_space_io;
     qemu_irq *irqs;
 };
@@ -50,7 +51,8 @@ struct ISADevice {
     int ioport_id;
 };
 
-ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space_io);
+ISABus *isa_bus_new(DeviceState *dev, MemoryRegion *address_space,
+                    MemoryRegion *address_space_io);
 void isa_bus_irqs(ISABus *bus, qemu_irq *irqs);
 qemu_irq isa_get_irq(ISADevice *dev, int isairq);
 void isa_init_irq(ISADevice *dev, qemu_irq *p, int isairq);
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 2/7] jazz: do not explode QEMUMachineInitArgs structure
  2015-01-19 21:28 [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 1/7] isa: add memory space parameter to isa_bus_new Hervé Poussineau
@ 2015-01-19 21:28 ` Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 3/7] jazz: remove usage of isa_mem_base Hervé Poussineau
                   ` (4 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Hervé Poussineau @ 2015-01-19 21:28 UTC (permalink / raw)
  To: qemu-devel; +Cc: Leon Alrae, Hervé Poussineau, Aurelien Jarno

Also remove address_space and address_space_io parameters, which
where always get_system_memory() and get_system_io().

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips/mips_jazz.c |   21 ++++++++-------------
 1 file changed, 8 insertions(+), 13 deletions(-)

diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
index de35299..738e9c7 100644
--- a/hw/mips/mips_jazz.c
+++ b/hw/mips/mips_jazz.c
@@ -120,12 +120,12 @@ static void mips_jazz_do_unassigned_access(CPUState *cpu, hwaddr addr,
     (*real_do_unassigned_access)(cpu, addr, is_write, is_exec, opaque, size);
 }
 
-static void mips_jazz_init(MemoryRegion *address_space,
-                           MemoryRegion *address_space_io,
-                           ram_addr_t ram_size,
-                           const char *cpu_model,
+static void mips_jazz_init(MachineState *machine,
                            enum jazz_model_e jazz_model)
 {
+    MemoryRegion *address_space = get_system_memory();
+    MemoryRegion *address_space_io = get_system_io();
+    const char *cpu_model = machine->cpu_model;
     char *filename;
     int bios_size, n;
     MIPSCPU *cpu;
@@ -179,7 +179,8 @@ static void mips_jazz_init(MemoryRegion *address_space,
     cc->do_unassigned_access = mips_jazz_do_unassigned_access;
 
     /* allocate RAM */
-    memory_region_init_ram(ram, NULL, "mips_jazz.ram", ram_size, &error_abort);
+    memory_region_init_ram(ram, NULL, "mips_jazz.ram", machine->ram_size,
+                           &error_abort);
     vmstate_register_ram_global(ram);
     memory_region_add_subregion(address_space, 0, ram);
 
@@ -333,19 +334,13 @@ static void mips_jazz_init(MemoryRegion *address_space,
 static
 void mips_magnum_init(MachineState *machine)
 {
-    ram_addr_t ram_size = machine->ram_size;
-    const char *cpu_model = machine->cpu_model;
-        mips_jazz_init(get_system_memory(), get_system_io(),
-                       ram_size, cpu_model, JAZZ_MAGNUM);
+    mips_jazz_init(machine, JAZZ_MAGNUM);
 }
 
 static
 void mips_pica61_init(MachineState *machine)
 {
-    ram_addr_t ram_size = machine->ram_size;
-    const char *cpu_model = machine->cpu_model;
-    mips_jazz_init(get_system_memory(), get_system_io(),
-                   ram_size, cpu_model, JAZZ_PICA61);
+    mips_jazz_init(machine, JAZZ_PICA61);
 }
 
 static QEMUMachine mips_magnum_machine = {
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 3/7] jazz: remove usage of isa_mem_base
  2015-01-19 21:28 [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 1/7] isa: add memory space parameter to isa_bus_new Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 2/7] jazz: do not explode QEMUMachineInitArgs structure Hervé Poussineau
@ 2015-01-19 21:28 ` Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 4/7] mips: remove isa_mem_base usage Hervé Poussineau
                   ` (3 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Hervé Poussineau @ 2015-01-19 21:28 UTC (permalink / raw)
  To: qemu-devel; +Cc: Leon Alrae, Hervé Poussineau, Aurelien Jarno

Do assorted changes in memory-mapped rtc interface.

Also fix size of ISA I/O memory region, which should be 0x10000 bytes.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips/mips_jazz.c |   25 ++++++++++++++-----------
 1 file changed, 14 insertions(+), 11 deletions(-)

diff --git a/hw/mips/mips_jazz.c b/hw/mips/mips_jazz.c
index 738e9c7..ef5dd7d 100644
--- a/hw/mips/mips_jazz.c
+++ b/hw/mips/mips_jazz.c
@@ -60,13 +60,16 @@ static void main_cpu_reset(void *opaque)
 
 static uint64_t rtc_read(void *opaque, hwaddr addr, unsigned size)
 {
-    return cpu_inw(0x71);
+    uint8_t val;
+    address_space_read(&address_space_memory, 0x90000071, &val, 1);
+    return val;
 }
 
 static void rtc_write(void *opaque, hwaddr addr,
                       uint64_t val, unsigned size)
 {
-    cpu_outw(0x71, val & 0xff);
+    uint8_t buf = val & 0xff;
+    address_space_write(&address_space_memory, 0x90000071, &buf, 1);
 }
 
 static const MemoryRegionOps rtc_ops = {
@@ -124,7 +127,6 @@ static void mips_jazz_init(MachineState *machine,
                            enum jazz_model_e jazz_model)
 {
     MemoryRegion *address_space = get_system_memory();
-    MemoryRegion *address_space_io = get_system_io();
     const char *cpu_model = machine->cpu_model;
     char *filename;
     int bios_size, n;
@@ -134,7 +136,8 @@ static void mips_jazz_init(MachineState *machine,
     qemu_irq *rc4030, *i8259;
     rc4030_dma *dmas;
     void* rc4030_opaque;
-    MemoryRegion *isa = g_new(MemoryRegion, 1);
+    MemoryRegion *isa_mem = g_new(MemoryRegion, 1);
+    MemoryRegion *isa_io = g_new(MemoryRegion, 1);
     MemoryRegion *rtc = g_new(MemoryRegion, 1);
     MemoryRegion *i8042 = g_new(MemoryRegion, 1);
     MemoryRegion *dma_dummy = g_new(MemoryRegion, 1);
@@ -219,8 +222,14 @@ static void mips_jazz_init(MachineState *machine,
     memory_region_init_io(dma_dummy, NULL, &dma_dummy_ops, NULL, "dummy_dma", 0x1000);
     memory_region_add_subregion(address_space, 0x8000d000, dma_dummy);
 
+    /* ISA bus: IO space at 0x90000000, mem space at 0x91000000 */
+    memory_region_init(isa_io, NULL, "isa-io", 0x00010000);
+    memory_region_init(isa_mem, NULL, "isa-mem", 0x01000000);
+    memory_region_add_subregion(address_space, 0x90000000, isa_io);
+    memory_region_add_subregion(address_space, 0x91000000, isa_mem);
+    isa_bus = isa_bus_new(NULL, isa_mem, isa_io);
+
     /* ISA devices */
-    isa_bus = isa_bus_new(NULL, get_system_memory(), address_space_io);
     i8259 = i8259_init(isa_bus, env->irq[4]);
     isa_bus_irqs(isa_bus, i8259);
     cpu_exit_irq = qemu_allocate_irqs(cpu_request_exit, NULL, 1);
@@ -228,12 +237,6 @@ static void mips_jazz_init(MachineState *machine,
     pit = pit_init(isa_bus, 0x40, 0, NULL);
     pcspk_init(isa_bus, pit);
 
-    /* ISA IO space at 0x90000000 */
-    memory_region_init_alias(isa, NULL, "isa_mmio",
-                             get_system_io(), 0, 0x01000000);
-    memory_region_add_subregion(address_space, 0x90000000, isa);
-    isa_mem_base = 0x11000000;
-
     /* Video card */
     switch (jazz_model) {
     case JAZZ_MAGNUM:
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 4/7] mips: remove isa_mem_base usage
  2015-01-19 21:28 [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable Hervé Poussineau
                   ` (2 preceding siblings ...)
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 3/7] jazz: remove usage of isa_mem_base Hervé Poussineau
@ 2015-01-19 21:28 ` Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 5/7] piix4: use PCI address space instead of system memory Hervé Poussineau
                   ` (2 subsequent siblings)
  6 siblings, 0 replies; 9+ messages in thread
From: Hervé Poussineau @ 2015-01-19 21:28 UTC (permalink / raw)
  To: qemu-devel; +Cc: Leon Alrae, Hervé Poussineau, Aurelien Jarno


Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/mips/mips_r4k.c |   19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/hw/mips/mips_r4k.c b/hw/mips/mips_r4k.c
index 5b982f2..3e90e27 100644
--- a/hw/mips/mips_r4k.c
+++ b/hw/mips/mips_r4k.c
@@ -165,7 +165,8 @@ void mips_r4k_init(MachineState *machine)
     MemoryRegion *ram = g_new(MemoryRegion, 1);
     MemoryRegion *bios;
     MemoryRegion *iomem = g_new(MemoryRegion, 1);
-    MemoryRegion *isa = g_new(MemoryRegion, 1);
+    MemoryRegion *isa_io = g_new(MemoryRegion, 1);
+    MemoryRegion *isa_mem = g_new(MemoryRegion, 1);
     int bios_size;
     MIPSCPU *cpu;
     CPUMIPSState *env;
@@ -267,20 +268,20 @@ void mips_r4k_init(MachineState *machine)
     cpu_mips_irq_init_cpu(env);
     cpu_mips_clock_init(env);
 
+    /* ISA bus: IO space at 0x14000000, mem space at 0x10000000 */
+    memory_region_init_alias(isa_io, NULL, "isa-io",
+                             get_system_io(), 0, 0x00010000);
+    memory_region_init(isa_mem, NULL, "isa-mem", 0x01000000);
+    memory_region_add_subregion(get_system_memory(), 0x14000000, isa_io);
+    memory_region_add_subregion(get_system_memory(), 0x10000000, isa_mem);
+    isa_bus = isa_bus_new(NULL, isa_mem, get_system_io());
+
     /* The PIC is attached to the MIPS CPU INT0 pin */
-    isa_bus = isa_bus_new(NULL, get_system_memory(), get_system_io());
     i8259 = i8259_init(isa_bus, env->irq[2]);
     isa_bus_irqs(isa_bus, i8259);
 
     rtc_init(isa_bus, 2000, NULL);
 
-    /* Register 64 KB of ISA IO space at 0x14000000 */
-    memory_region_init_alias(isa, NULL, "isa_mmio",
-                             get_system_io(), 0, 0x00010000);
-    memory_region_add_subregion(get_system_memory(), 0x14000000, isa);
-
-    isa_mem_base = 0x10000000;
-
     pit = pit_init(isa_bus, 0x40, 0, NULL);
 
     for(i = 0; i < MAX_SERIAL_PORTS; i++) {
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 5/7] piix4: use PCI address space instead of system memory
  2015-01-19 21:28 [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable Hervé Poussineau
                   ` (3 preceding siblings ...)
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 4/7] mips: remove isa_mem_base usage Hervé Poussineau
@ 2015-01-19 21:28 ` Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 6/7] gt64xxx: remove isa_mem_base usage Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 7/7] isa: remove isa_mem_base variable Hervé Poussineau
  6 siblings, 0 replies; 9+ messages in thread
From: Hervé Poussineau @ 2015-01-19 21:28 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau, Anthony Liguori, Michael S. Tsirkin

piix4 is only used on MIPS Malta board, which gives get_system_memory()
to pci_register_bus().

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/isa/piix4.c |    2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/hw/isa/piix4.c b/hw/isa/piix4.c
index 0cacc3b..a9916df 100644
--- a/hw/isa/piix4.c
+++ b/hw/isa/piix4.c
@@ -86,7 +86,7 @@ static int piix4_initfn(PCIDevice *dev)
 {
     PIIX4State *d = DO_UPCAST(PIIX4State, dev, dev);
 
-    isa_bus_new(DEVICE(d), get_system_memory(),
+    isa_bus_new(DEVICE(d), pci_address_space(dev),
                 pci_address_space_io(dev));
     piix4_dev = &d->dev;
     qemu_register_reset(piix4_reset, d);
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 6/7] gt64xxx: remove isa_mem_base usage
  2015-01-19 21:28 [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable Hervé Poussineau
                   ` (4 preceding siblings ...)
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 5/7] piix4: use PCI address space instead of system memory Hervé Poussineau
@ 2015-01-19 21:28 ` Hervé Poussineau
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 7/7] isa: remove isa_mem_base variable Hervé Poussineau
  6 siblings, 0 replies; 9+ messages in thread
From: Hervé Poussineau @ 2015-01-19 21:28 UTC (permalink / raw)
  To: qemu-devel; +Cc: Leon Alrae, Hervé Poussineau, Aurelien Jarno

Create a custom address space for PCI memory region and use it for the PCI bus.

However, continue to hardcode VGA window address at 0x10000000 instead of
calculating its address dynamically.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>

---
I would be quite happy if someone knowing gt64xxx better than me can provide
a better patch.
---
 hw/mips/gt64xxx_pci.c |   17 ++++++++++-------
 1 file changed, 10 insertions(+), 7 deletions(-)

diff --git a/hw/mips/gt64xxx_pci.c b/hw/mips/gt64xxx_pci.c
index 1f2fe5f..eb323cb 100644
--- a/hw/mips/gt64xxx_pci.c
+++ b/hw/mips/gt64xxx_pci.c
@@ -240,6 +240,9 @@ typedef struct GT64120State {
     uint32_t regs[GT_REGS];
     PCI_MAPPING_ENTRY(PCI0IO);
     PCI_MAPPING_ENTRY(ISD);
+    MemoryRegion pci0_mem;
+    MemoryRegion vga_window;
+    AddressSpace pci0_mem_as;
 } GT64120State;
 
 /* Adjust range to avoid touching space which isn't mappable via PCI */
@@ -302,7 +305,6 @@ static void gt64120_pci_mapping(GT64120State *s)
       /* Map new IO address */
       s->PCI0IO_start = s->regs[GT_PCI0IOLD] << 21;
       s->PCI0IO_length = ((s->regs[GT_PCI0IOHD] + 1) - (s->regs[GT_PCI0IOLD] & 0x7f)) << 21;
-      isa_mem_base = s->PCI0IO_start;
       if (s->PCI0IO_length) {
           memory_region_init_alias(&s->PCI0IO_mem, OBJECT(s), "isa_mmio",
                                    get_system_io(), 0, s->PCI0IO_length);
@@ -1124,10 +1126,16 @@ PCIBus *gt64120_register(qemu_irq *pic)
     qdev_init_nofail(dev);
     d = GT64120_PCI_HOST_BRIDGE(dev);
     phb = PCI_HOST_BRIDGE(dev);
+    memory_region_init(&d->pci0_mem, OBJECT(dev), "pci0-mem", UINT32_MAX);
+    address_space_init(&d->pci0_mem_as, &d->pci0_mem, "pci0-mem");
+    memory_region_init_alias(&d->vga_window, OBJECT(dev), "vga",
+                             &d->pci0_mem, 0xa0000, QEMU_PCI_VGA_MEM_SIZE);
+    memory_region_add_subregion_overlap(get_system_memory(), 0x10000000,
+                                        &d->vga_window, 1);
     phb->bus = pci_register_bus(dev, "pci",
                                 gt64120_pci_set_irq, gt64120_pci_map_irq,
                                 pic,
-                                get_system_memory(),
+                                &d->pci0_mem,
                                 get_system_io(),
                                 PCI_DEVFN(18, 0), 4, TYPE_PCI_BUS);
     memory_region_init_io(&d->ISD_mem, OBJECT(dev), &isd_mem_ops, d, "isd-mem", 0x1000);
@@ -1142,11 +1150,6 @@ static int gt64120_init(SysBusDevice *dev)
 
     s = GT64120_PCI_HOST_BRIDGE(dev);
 
-    /* FIXME: This value is computed from registers during reset, but some
-       devices (e.g. VGA card) need to know it when they are registered.
-       This also mean that changing the register to change the mapping
-       does not fully work. */
-    isa_mem_base = 0x10000000;
     qemu_register_reset(gt64120_reset, s);
     return 0;
 }
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [Qemu-devel] [PATCH 7/7] isa: remove isa_mem_base variable
  2015-01-19 21:28 [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable Hervé Poussineau
                   ` (5 preceding siblings ...)
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 6/7] gt64xxx: remove isa_mem_base usage Hervé Poussineau
@ 2015-01-19 21:28 ` Hervé Poussineau
  6 siblings, 0 replies; 9+ messages in thread
From: Hervé Poussineau @ 2015-01-19 21:28 UTC (permalink / raw)
  To: qemu-devel; +Cc: Hervé Poussineau

Now that isa_mem_base variable is always 0, we can remove its usage.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
---
 hw/display/cirrus_vga.c |    2 +-
 hw/display/vga-isa.c    |    2 +-
 hw/display/vga.c        |    3 +--
 hw/isa/isa-bus.c        |    1 -
 include/hw/isa/isa.h    |    2 --
 5 files changed, 3 insertions(+), 7 deletions(-)

diff --git a/hw/display/cirrus_vga.c b/hw/display/cirrus_vga.c
index 3a53f20..ec923c8 100644
--- a/hw/display/cirrus_vga.c
+++ b/hw/display/cirrus_vga.c
@@ -2907,7 +2907,7 @@ static void cirrus_init_common(CirrusVGAState *s, Object *owner,
                                             bank, 1);
     }
     memory_region_add_subregion_overlap(system_memory,
-                                        isa_mem_base + 0x000a0000,
+                                        0x000a0000,
                                         &s->low_mem_container,
                                         1);
     memory_region_set_coalescing(&s->low_mem);
diff --git a/hw/display/vga-isa.c b/hw/display/vga-isa.c
index 2b480bd..7f3c989 100644
--- a/hw/display/vga-isa.c
+++ b/hw/display/vga-isa.c
@@ -64,7 +64,7 @@ static void vga_isa_realizefn(DeviceState *dev, Error **errp)
         isa_register_portio_list(isadev, 0x1ce, vbe_ports, s, "vbe");
     }
     memory_region_add_subregion_overlap(isa_address_space(isadev),
-                                        isa_mem_base + 0x000a0000,
+                                        0x000a0000,
                                         vga_io_memory, 1);
     memory_region_set_coalescing(vga_io_memory);
     s->con = graphic_console_init(DEVICE(dev), 0, s->hw_ops, s);
diff --git a/hw/display/vga.c b/hw/display/vga.c
index ffcfce3..7125b89 100644
--- a/hw/display/vga.c
+++ b/hw/display/vga.c
@@ -177,7 +177,6 @@ static void vga_update_memory_access(VGACommonState *s)
             size = 0x8000;
             break;
         }
-        base += isa_mem_base;
         memory_region_init_alias(&s->chain4_alias, memory_region_owner(&s->vram),
                                  "vga.chain4", &s->vram, offset, size);
         memory_region_add_subregion_overlap(s->legacy_address_space, base,
@@ -2218,7 +2217,7 @@ void vga_init(VGACommonState *s, Object *obj, MemoryRegion *address_space,
 
     vga_io_memory = vga_init_io(s, obj, &vga_ports, &vbe_ports);
     memory_region_add_subregion_overlap(address_space,
-                                        isa_mem_base + 0x000a0000,
+                                        0x000a0000,
                                         vga_io_memory,
                                         1);
     memory_region_set_coalescing(vga_io_memory);
diff --git a/hw/isa/isa-bus.c b/hw/isa/isa-bus.c
index fd6a3a1..825aa62 100644
--- a/hw/isa/isa-bus.c
+++ b/hw/isa/isa-bus.c
@@ -23,7 +23,6 @@
 #include "hw/isa/isa.h"
 
 static ISABus *isabus;
-hwaddr isa_mem_base = 0;
 
 static void isabus_dev_print(Monitor *mon, DeviceState *dev, int indent);
 static char *isabus_get_fw_dev_path(DeviceState *dev);
diff --git a/include/hw/isa/isa.h b/include/hw/isa/isa.h
index c621822..cf7bd34 100644
--- a/include/hw/isa/isa.h
+++ b/include/hw/isa/isa.h
@@ -99,8 +99,6 @@ static inline ISABus *isa_bus_from_device(ISADevice *d)
     return ISA_BUS(qdev_get_parent_bus(DEVICE(d)));
 }
 
-extern hwaddr isa_mem_base;
-
 /* dma.c */
 int DMA_get_channel_mode (int nchan);
 int DMA_read_memory (int nchan, void *buf, int pos, int size);
-- 
1.7.10.4

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [Qemu-devel] [PATCH 1/7] isa: add memory space parameter to isa_bus_new
  2015-01-19 21:28 ` [Qemu-devel] [PATCH 1/7] isa: add memory space parameter to isa_bus_new Hervé Poussineau
@ 2015-01-20 10:44   ` Paolo Bonzini
  0 siblings, 0 replies; 9+ messages in thread
From: Paolo Bonzini @ 2015-01-20 10:44 UTC (permalink / raw)
  To: Hervé Poussineau, qemu-devel
  Cc: Michael S. Tsirkin, Blue Swirl, Anthony Liguori, Leon Alrae,
	Aurelien Jarno, Richard Henderson



On 19/01/2015 22:28, Hervé Poussineau wrote:
> diff --git a/hw/i386/pc_piix.c b/hw/i386/pc_piix.c
> index f0a3201..8f932c9 100644
> --- a/hw/i386/pc_piix.c
> +++ b/hw/i386/pc_piix.c
> @@ -208,7 +208,7 @@ static void pc_init1(MachineState *machine,
>      } else {
>          pci_bus = NULL;
>          i440fx_state = NULL;
> -        isa_bus = isa_bus_new(NULL, system_io);
> +        isa_bus = isa_bus_new(NULL, get_system_memory(), system_io);
>          no_hpet = 1;
>      }
>      isa_bus_irqs(isa_bus, gsi);

I suspect the right thing to do would be the PCI address space, since
the ISA bridge on real hardware has BusMaster+ set in lspci.  But if
firmware doesn't set it for virtual machines, passing
get_system_memory() is probably a good idea.

Reviewed-by: Paolo Bonzini <pbonzini@redhat.com>

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2015-01-20 10:45 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-01-19 21:28 [Qemu-devel] [PATCH 0/7] isa: remove isa_mem_base variable Hervé Poussineau
2015-01-19 21:28 ` [Qemu-devel] [PATCH 1/7] isa: add memory space parameter to isa_bus_new Hervé Poussineau
2015-01-20 10:44   ` Paolo Bonzini
2015-01-19 21:28 ` [Qemu-devel] [PATCH 2/7] jazz: do not explode QEMUMachineInitArgs structure Hervé Poussineau
2015-01-19 21:28 ` [Qemu-devel] [PATCH 3/7] jazz: remove usage of isa_mem_base Hervé Poussineau
2015-01-19 21:28 ` [Qemu-devel] [PATCH 4/7] mips: remove isa_mem_base usage Hervé Poussineau
2015-01-19 21:28 ` [Qemu-devel] [PATCH 5/7] piix4: use PCI address space instead of system memory Hervé Poussineau
2015-01-19 21:28 ` [Qemu-devel] [PATCH 6/7] gt64xxx: remove isa_mem_base usage Hervé Poussineau
2015-01-19 21:28 ` [Qemu-devel] [PATCH 7/7] isa: remove isa_mem_base variable Hervé Poussineau

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.