qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13
@ 2014-03-13 19:33 Andreas Färber
  2014-03-13 19:33 ` [Qemu-devel] [PULL for-2.0 1/2] prep: Update ppc_rom.bin Andreas Färber
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: Andreas Färber @ 2014-03-13 19:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: Peter Maydell, Mark Cave-Ayland, Alexander Graf,
	Andreas Färber, qemu-ppc, Hervé Poussineau

Hello Peter,

Please pull the PowerPC Reference Platform (PReP) queue into qemu.git master.

This is the second part, supporting binutils 2.19 and applying the BIOS load changes.

Regards,
Andreas

Cc: Peter Maydell <peter.maydell@linaro.org>
Cc: qemu-ppc@nongnu.org
Cc: Alexander Graf <agraf@suse.de>
Cc: Hervé Poussineau <hpoussin@reactos.org>
Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>

The following changes since commit d7f0a59ff02affb8270ad9b6ee7e60974ac92df0:

  Merge remote-tracking branch 'remotes/kraxel/tags/pull-input-6' into staging (2014-03-13 18:37:01 +0000)

are available in the git repository at:


  git://github.com/afaerber/qemu-cpu.git tags/prep-for-2.0

for you to fetch changes up to d0b25425749d5525b2ba6d9d966d8800a5643b35:

  raven: Move BIOS loading from board code to PCI host (2014-03-13 20:15:37 +0100)

----------------------------------------------------------------
PReP machine and devices

* ppc_rom.bin update
* Raven PCI host bridge preparations for OpenBIOS

----------------------------------------------------------------
Andreas Färber (1):
      prep: Update ppc_rom.bin

Hervé Poussineau (1):
      raven: Move BIOS loading from board code to PCI host

 hw/pci-host/prep.c  |  51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 hw/ppc/prep.c       |  46 ++++++----------------------------------------
 pc-bios/ppc_rom.bin | Bin 524288 -> 1048576 bytes
 roms/openhackware   |   2 +-
 4 files changed, 58 insertions(+), 41 deletions(-)

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

* [Qemu-devel] [PULL for-2.0 1/2] prep: Update ppc_rom.bin
  2014-03-13 19:33 [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13 Andreas Färber
@ 2014-03-13 19:33 ` Andreas Färber
  2014-03-13 19:33 ` [Qemu-devel] [PULL for-2.0 2/2] raven: Move BIOS loading from board code to PCI host Andreas Färber
  2014-03-13 21:28 ` [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13 Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Andreas Färber @ 2014-03-13 19:33 UTC (permalink / raw)
  To: qemu-devel; +Cc: Andreas Färber, qemu-ppc

This increases file size from 512 KiB to 1 MiB.

Signed-off-by: Andreas Färber <andreas.faerber@web.de>
---
 pc-bios/ppc_rom.bin | Bin 524288 -> 1048576 bytes
 roms/openhackware   |   2 +-
 2 files changed, 1 insertion(+), 1 deletion(-)

diff --git a/pc-bios/ppc_rom.bin b/pc-bios/ppc_rom.bin
index d378d9a95e63fe843b7a6234fb45ddf6179198d3..e7f769328b33c67ab02426fc5f643cd11b5b101e 100644
GIT binary patch
delta 20336
[...]
delta 20361
[...]

diff --git a/roms/openhackware b/roms/openhackware
index e9829b5..1af7e55 160000
--- a/roms/openhackware
+++ b/roms/openhackware
@@ -1 +1 @@
-Subproject commit e9829b5584169ad14df2ca8776b87f4985aa9f06
+Subproject commit 1af7e55425e58a6dcb5133b092fcf16f8c654fb9
-- 
1.8.4.5

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

* [Qemu-devel] [PULL for-2.0 2/2] raven: Move BIOS loading from board code to PCI host
  2014-03-13 19:33 [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13 Andreas Färber
  2014-03-13 19:33 ` [Qemu-devel] [PULL for-2.0 1/2] prep: Update ppc_rom.bin Andreas Färber
@ 2014-03-13 19:33 ` Andreas Färber
  2014-03-13 21:28 ` [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13 Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Andreas Färber @ 2014-03-13 19:33 UTC (permalink / raw)
  To: qemu-devel
  Cc: Hervé Poussineau, Andreas Färber, qemu-ppc,
	Alexander Graf

From: Hervé Poussineau <hpoussin@reactos.org>

Raven datasheet explains where firmware lives in system memory, so do
it there instead of in board code. Other boards using the same PCI
host will not have to copy the firmware loading code.

Signed-off-by: Hervé Poussineau <hpoussin@reactos.org>
[AF: Drop BIOS size workaround in favor of replacing our firmware blob]
Signed-off-by: Andreas Färber <andreas.faerber@web.de>
---
 hw/pci-host/prep.c | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++
 hw/ppc/prep.c      | 46 ++++++----------------------------------------
 2 files changed, 57 insertions(+), 40 deletions(-)

diff --git a/hw/pci-host/prep.c b/hw/pci-host/prep.c
index 0c948e2..94fdffa 100644
--- a/hw/pci-host/prep.c
+++ b/hw/pci-host/prep.c
@@ -28,7 +28,9 @@
 #include "hw/pci/pci_bus.h"
 #include "hw/pci/pci_host.h"
 #include "hw/i386/pc.h"
+#include "hw/loader.h"
 #include "exec/address-spaces.h"
+#include "elf.h"
 
 #define TYPE_RAVEN_PCI_DEVICE "raven"
 #define TYPE_RAVEN_PCI_HOST_BRIDGE "raven-pcihost"
@@ -38,6 +40,10 @@
 
 typedef struct RavenPCIState {
     PCIDevice dev;
+
+    uint32_t elf_machine;
+    char *bios_name;
+    MemoryRegion bios;
 } RavenPCIState;
 
 #define RAVEN_PCI_HOST_BRIDGE(obj) \
@@ -52,6 +58,8 @@ typedef struct PRePPCIState {
     RavenPCIState pci_dev;
 } PREPPCIState;
 
+#define BIOS_SIZE (1024 * 1024)
+
 static inline uint32_t PPC_PCIIO_config(hwaddr addr)
 {
     int i;
@@ -169,10 +177,45 @@ static void raven_pcihost_initfn(Object *obj)
 
 static int raven_init(PCIDevice *d)
 {
+    RavenPCIState *s = RAVEN_PCI_DEVICE(d);
+    char *filename;
+    int bios_size = -1;
+
     d->config[0x0C] = 0x08; // cache_line_size
     d->config[0x0D] = 0x10; // latency_timer
     d->config[0x34] = 0x00; // capabilities_pointer
 
+    memory_region_init_ram(&s->bios, OBJECT(s), "bios", BIOS_SIZE);
+    memory_region_set_readonly(&s->bios, true);
+    memory_region_add_subregion(get_system_memory(), (uint32_t)(-BIOS_SIZE),
+                                &s->bios);
+    vmstate_register_ram_global(&s->bios);
+    if (s->bios_name) {
+        filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, s->bios_name);
+        if (filename) {
+            if (s->elf_machine != EM_NONE) {
+                bios_size = load_elf(filename, NULL, NULL, NULL,
+                                     NULL, NULL, 1, s->elf_machine, 0);
+            }
+            if (bios_size < 0) {
+                bios_size = get_image_size(filename);
+                if (bios_size > 0 && bios_size <= BIOS_SIZE) {
+                    hwaddr bios_addr;
+                    bios_size = (bios_size + 0xfff) & ~0xfff;
+                    bios_addr = (uint32_t)(-BIOS_SIZE);
+                    bios_size = load_image_targphys(filename, bios_addr,
+                                                    bios_size);
+                }
+            }
+        }
+        if (bios_size < 0 || bios_size > BIOS_SIZE) {
+            hw_error("qemu: could not load bios image '%s'\n", s->bios_name);
+        }
+        if (filename) {
+            g_free(filename);
+        }
+    }
+
     return 0;
 }
 
@@ -212,12 +255,20 @@ static const TypeInfo raven_info = {
     .class_init = raven_class_init,
 };
 
+static Property raven_pcihost_properties[] = {
+    DEFINE_PROP_UINT32("elf-machine", PREPPCIState, pci_dev.elf_machine,
+                       EM_NONE),
+    DEFINE_PROP_STRING("bios-name", PREPPCIState, pci_dev.bios_name),
+    DEFINE_PROP_END_OF_LIST()
+};
+
 static void raven_pcihost_class_init(ObjectClass *klass, void *data)
 {
     DeviceClass *dc = DEVICE_CLASS(klass);
 
     set_bit(DEVICE_CATEGORY_BRIDGE, dc->categories);
     dc->realize = raven_pcihost_realizefn;
+    dc->props = raven_pcihost_properties;
     dc->fw_name = "pci";
 }
 
diff --git a/hw/ppc/prep.c b/hw/ppc/prep.c
index 9f8538c..81e13cb 100644
--- a/hw/ppc/prep.c
+++ b/hw/ppc/prep.c
@@ -456,7 +456,6 @@ static void ppc_prep_init(QEMUMachineInitArgs *args)
     MemoryRegion *sysmem = get_system_memory();
     PowerPCCPU *cpu = NULL;
     CPUPPCState *env = NULL;
-    char *filename;
     nvram_t nvram;
     M48t59State *m48t59;
     MemoryRegion *PPC_io_memory = g_new(MemoryRegion, 1);
@@ -464,9 +463,8 @@ static void ppc_prep_init(QEMUMachineInitArgs *args)
 #if 0
     MemoryRegion *xcsr = g_new(MemoryRegion, 1);
 #endif
-    int linux_boot, i, nb_nics1, bios_size;
+    int linux_boot, i, nb_nics1;
     MemoryRegion *ram = g_new(MemoryRegion, 1);
-    MemoryRegion *bios = g_new(MemoryRegion, 1);
     uint32_t kernel_base, initrd_base;
     long kernel_size, initrd_size;
     DeviceState *dev;
@@ -509,43 +507,6 @@ static void ppc_prep_init(QEMUMachineInitArgs *args)
     vmstate_register_ram_global(ram);
     memory_region_add_subregion(sysmem, 0, ram);
 
-    /* allocate and load BIOS */
-    memory_region_init_ram(bios, NULL, "ppc_prep.bios", BIOS_SIZE);
-    memory_region_set_readonly(bios, true);
-    memory_region_add_subregion(sysmem, (uint32_t)(-BIOS_SIZE), bios);
-    vmstate_register_ram_global(bios);
-    if (bios_name == NULL)
-        bios_name = BIOS_FILENAME;
-    filename = qemu_find_file(QEMU_FILE_TYPE_BIOS, bios_name);
-    if (filename) {
-        bios_size = load_elf(filename, NULL, NULL, NULL,
-                             NULL, NULL, 1, ELF_MACHINE, 0);
-        if (bios_size < 0) {
-            bios_size = get_image_size(filename);
-            if (bios_size > 0 && bios_size <= BIOS_SIZE) {
-                hwaddr bios_addr;
-                bios_size = (bios_size + 0xfff) & ~0xfff;
-                bios_addr = (uint32_t)(-bios_size);
-                bios_size = load_image_targphys(filename, bios_addr, bios_size);
-            }
-            if (bios_size > BIOS_SIZE) {
-                fprintf(stderr, "qemu: PReP bios '%s' is too large (0x%x)\n",
-                        bios_name, bios_size);
-                exit(1);
-            }
-        }
-    } else {
-        bios_size = -1;
-    }
-    if (bios_size < 0 && !qtest_enabled()) {
-        fprintf(stderr, "qemu: could not load PPC PReP bios '%s'\n",
-                bios_name);
-        exit(1);
-    }
-    if (filename) {
-        g_free(filename);
-    }
-
     if (linux_boot) {
         kernel_base = KERNEL_LOAD_ADDR;
         /* now we can load the kernel */
@@ -593,6 +554,11 @@ static void ppc_prep_init(QEMUMachineInitArgs *args)
     }
 
     dev = qdev_create(NULL, "raven-pcihost");
+    if (bios_name == NULL) {
+        bios_name = BIOS_FILENAME;
+    }
+    qdev_prop_set_string(dev, "bios-name", bios_name);
+    qdev_prop_set_uint32(dev, "elf-machine", ELF_MACHINE);
     pcihost = PCI_HOST_BRIDGE(dev);
     object_property_add_child(qdev_get_machine(), "raven", OBJECT(dev), NULL);
     qdev_init_nofail(dev);
-- 
1.8.4.5

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

* Re: [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13
  2014-03-13 19:33 [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13 Andreas Färber
  2014-03-13 19:33 ` [Qemu-devel] [PULL for-2.0 1/2] prep: Update ppc_rom.bin Andreas Färber
  2014-03-13 19:33 ` [Qemu-devel] [PULL for-2.0 2/2] raven: Move BIOS loading from board code to PCI host Andreas Färber
@ 2014-03-13 21:28 ` Peter Maydell
  2 siblings, 0 replies; 4+ messages in thread
From: Peter Maydell @ 2014-03-13 21:28 UTC (permalink / raw)
  To: Andreas Färber
  Cc: Hervé Poussineau, Mark Cave-Ayland, qemu-ppc@nongnu.org,
	QEMU Developers, Alexander Graf

On 13 March 2014 19:33, Andreas Färber <andreas.faerber@web.de> wrote:
> Hello Peter,
>
> Please pull the PowerPC Reference Platform (PReP) queue into qemu.git master.
>
> This is the second part, supporting binutils 2.19 and applying the BIOS load changes.
>
> Regards,
> Andreas
>
> Cc: Peter Maydell <peter.maydell@linaro.org>
> Cc: qemu-ppc@nongnu.org
> Cc: Alexander Graf <agraf@suse.de>
> Cc: Hervé Poussineau <hpoussin@reactos.org>
> Cc: Mark Cave-Ayland <mark.cave-ayland@ilande.co.uk>
>
> The following changes since commit d7f0a59ff02affb8270ad9b6ee7e60974ac92df0:
>
>   Merge remote-tracking branch 'remotes/kraxel/tags/pull-input-6' into staging (2014-03-13 18:37:01 +0000)
>
> are available in the git repository at:
>
>
>   git://github.com/afaerber/qemu-cpu.git tags/prep-for-2.0
>
> for you to fetch changes up to d0b25425749d5525b2ba6d9d966d8800a5643b35:
>
>   raven: Move BIOS loading from board code to PCI host (2014-03-13 20:15:37 +0100)
>
> ----------------------------------------------------------------
> PReP machine and devices
>
> * ppc_rom.bin update
> * Raven PCI host bridge preparations for OpenBIOS
>

Applied, thanks.
-- PMM

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

end of thread, other threads:[~2014-03-13 21:29 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2014-03-13 19:33 [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13 Andreas Färber
2014-03-13 19:33 ` [Qemu-devel] [PULL for-2.0 1/2] prep: Update ppc_rom.bin Andreas Färber
2014-03-13 19:33 ` [Qemu-devel] [PULL for-2.0 2/2] raven: Move BIOS loading from board code to PCI host Andreas Färber
2014-03-13 21:28 ` [Qemu-devel] [PULL for-2.0 0/2] PReP patch queue 2014-03-13 Peter Maydell

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).