]> code.ossystems Code Review - openembedded-core.git/commitdiff
qemu-native/powerpc: add qemu 0.12.4 powerpc support
authorBruce Ashfield <bruce.ashfield@windriver.com>
Wed, 7 Jul 2010 01:55:51 +0000 (21:55 -0400)
committerRichard Purdie <rpurdie@linux.intel.com>
Thu, 15 Jul 2010 10:19:01 +0000 (11:19 +0100)
In order to force 0.12.4 to allow a powerpc system boot, we need
a patch to qemu, and a new powerpc (not ppc) ROM.

This configuration supports non-graphical booting only, since the
ROM does not have support to pass a graphics device via the
device tree yet.

Signed-off-by: Bruce Ashfield <bruce.ashfield@windriver.com>
meta/packages/qemu/qemu-0.12.4/powerpc_rom.bin [new file with mode: 0644]
meta/packages/qemu/qemu-0.12.4/qemu-ppc-hack.patch [new file with mode: 0644]
meta/packages/qemu/qemu_0.12.4.bb

diff --git a/meta/packages/qemu/qemu-0.12.4/powerpc_rom.bin b/meta/packages/qemu/qemu-0.12.4/powerpc_rom.bin
new file mode 100644 (file)
index 0000000..c404429
Binary files /dev/null and b/meta/packages/qemu/qemu-0.12.4/powerpc_rom.bin differ
diff --git a/meta/packages/qemu/qemu-0.12.4/qemu-ppc-hack.patch b/meta/packages/qemu/qemu-0.12.4/qemu-ppc-hack.patch
new file mode 100644 (file)
index 0000000..3ed227e
--- /dev/null
@@ -0,0 +1,136 @@
+Quick fixes to get the ppc system model to boot a 603e based\r
+kernel.\r
+\r
+diff --git a/hw/m48t59.c b/hw/m48t59.c\r
+index ce38f8b..d99054f 100644\r
+--- a/hw/m48t59.c\r
++++ b/hw/m48t59.c\r
+@@ -50,6 +50,7 @@\r
+  */\r
\r
+ struct m48t59_t {\r
++    SysBusDevice busdev;\r
+     /* Model parameters */\r
+     uint32_t type; // 2 = m48t02, 8 = m48t08, 59 = m48t59\r
+     /* Hardware parameters */\r
+@@ -74,11 +75,6 @@ typedef struct M48t59ISAState {\r
+     m48t59_t state;\r
+ } M48t59ISAState;\r
\r
+-typedef struct M48t59SysBusState {\r
+-    SysBusDevice busdev;\r
+-    m48t59_t state;\r
+-} M48t59SysBusState;\r
+-\r
+ /* Fake timer functions */\r
\r
+ /* Alarm management */\r
+@@ -629,8 +625,7 @@ static void m48t59_reset_isa(DeviceState *d)\r
\r
+ static void m48t59_reset_sysbus(DeviceState *d)\r
+ {\r
+-    M48t59SysBusState *sys = container_of(d, M48t59SysBusState, busdev.qdev);\r
+-    m48t59_t *NVRAM = &sys->state;\r
++    m48t59_t *NVRAM = container_of(d, m48t59_t, busdev.qdev);\r
\r
+     m48t59_reset_common(NVRAM);\r
+ }\r
+@@ -642,7 +637,7 @@ m48t59_t *m48t59_init (qemu_irq IRQ, target_phys_addr_t mem_base,\r
+ {\r
+     DeviceState *dev;\r
+     SysBusDevice *s;\r
+-    M48t59SysBusState *d;\r
++    m48t59_t *d;\r
\r
+     dev = qdev_create(NULL, "m48t59");\r
+     qdev_prop_set_uint32(dev, "type", type);\r
+@@ -659,9 +654,9 @@ m48t59_t *m48t59_init (qemu_irq IRQ, target_phys_addr_t mem_base,\r
+         sysbus_mmio_map(s, 0, mem_base);\r
+     }\r
\r
+-    d = FROM_SYSBUS(M48t59SysBusState, s);\r
++    d = FROM_SYSBUS(m48t59_t, s);\r
\r
+-    return &d->state;\r
++    return d;\r
+ }\r
\r
+ m48t59_t *m48t59_init_isa(uint32_t io_base, uint16_t size, int type)\r
+@@ -711,8 +706,7 @@ static int m48t59_init_isa1(ISADevice *dev)\r
\r
+ static int m48t59_init1(SysBusDevice *dev)\r
+ {\r
+-    M48t59SysBusState *d = FROM_SYSBUS(M48t59SysBusState, dev);\r
+-    m48t59_t *s = &d->state;\r
++    m48t59_t *s = FROM_SYSBUS(m48t59_t, dev);\r
+     int mem_index;\r
\r
+     sysbus_init_irq(dev, &s->IRQ);\r
+@@ -741,12 +735,12 @@ static ISADeviceInfo m48t59_isa_info = {\r
+ static SysBusDeviceInfo m48t59_info = {\r
+     .init = m48t59_init1,\r
+     .qdev.name  = "m48t59",\r
+-    .qdev.size = sizeof(M48t59SysBusState),\r
++    .qdev.size  = sizeof(m48t59_t),\r
+     .qdev.reset = m48t59_reset_sysbus,\r
+     .qdev.props = (Property[]) {\r
+-        DEFINE_PROP_UINT32("size",    M48t59SysBusState, state.size,    -1),\r
+-        DEFINE_PROP_UINT32("type",    M48t59SysBusState, state.type,    -1),\r
+-        DEFINE_PROP_HEX32( "io_base", M48t59SysBusState, state.io_base,  0),\r
++        DEFINE_PROP_UINT32("size",    m48t59_t, size,    -1),\r
++        DEFINE_PROP_UINT32("type",    m48t59_t, type,    -1),\r
++        DEFINE_PROP_HEX32( "io_base", m48t59_t, io_base,  0),\r
+         DEFINE_PROP_END_OF_LIST(),\r
+     }\r
+ };\r
+diff --git a/hw/ppc_prep.c b/hw/ppc_prep.c\r
+index eb758f2..08db51b 100644\r
+--- a/hw/ppc_prep.c\r
++++ b/hw/ppc_prep.c\r
+@@ -73,7 +73,7 @@ qemu_log_mask(CPU_LOG_IOPORT, fmt, ## __VA_ARGS__)\r
+ /* Constants for devices init */\r
+ static const int ide_iobase[2] = { 0x1f0, 0x170 };\r
+ static const int ide_iobase2[2] = { 0x3f6, 0x376 };\r
+-static const int ide_irq[2] = { 13, 13 };\r
++static const int ide_irq[2] = { 13, 14 };\r
\r
+ #define NE2000_NB_MAX 6\r
\r
+@@ -620,9 +620,6 @@ static void ppc_prep_init (ram_addr_t ram_size,\r
+     if (filename) {\r
+         qemu_free(filename);\r
+     }\r
+-    if (env->nip < 0xFFF80000 && bios_size < 0x00100000) {\r
+-        hw_error("PowerPC 601 / 620 / 970 need a 1MB BIOS\n");\r
+-    }\r
\r
+     if (linux_boot) {\r
+         kernel_base = KERNEL_LOAD_ADDR;\r
+diff --git a/target-ppc/op_helper.c b/target-ppc/op_helper.c\r
+index e3bd29c..1cb2e07 100644\r
+--- a/target-ppc/op_helper.c\r
++++ b/target-ppc/op_helper.c\r
+@@ -1646,20 +1646,20 @@ static inline void do_rfi(target_ulong nip, target_ulong msr,\r
+ void helper_rfi (void)\r
+ {\r
+     do_rfi(env->spr[SPR_SRR0], env->spr[SPR_SRR1],\r
+-           ~((target_ulong)0x0), 1);\r
++           ~((target_ulong)0xFFFF0000), 1);\r
+ }\r
\r
+ #if defined(TARGET_PPC64)\r
+ void helper_rfid (void)\r
+ {\r
+     do_rfi(env->spr[SPR_SRR0], env->spr[SPR_SRR1],\r
+-           ~((target_ulong)0x0), 0);\r
++           ~((target_ulong)0xFFFF0000), 0);\r
+ }\r
\r
+ void helper_hrfid (void)\r
+ {\r
+     do_rfi(env->spr[SPR_HSRR0], env->spr[SPR_HSRR1],\r
+-           ~((target_ulong)0x0), 0);\r
++           ~((target_ulong)0xFFFF0000), 0);\r
+ }\r
+ #endif\r
+ #endif\r
index 7d158bf863d34f31bf5c396f6102eebfb208293d..c253b03a2f1da68ba36dcdbcd38564b8f7ab3edb 100644 (file)
@@ -15,6 +15,13 @@ SRC_URI = "\
     file://qemugl-allow-glxcontext-release.patch \
     file://linker-flags.patch \
     file://init-info.patch \
-    file://qemu-vmware-vga-depth.patch"
+    file://qemu-vmware-vga-depth.patch \
+    file://qemu-ppc-hack.patch \
+    file://powerpc_rom.bin"
+
+do_install_append () {
+        install -d ${D}${datadir}/qemu
+        install -m 0755 ${WORKDIR}/powerpc_rom.bin ${D}${datadir}/qemu
+}
 
 S = "${WORKDIR}/qemu-${PV}"