[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-ppc] [qemuppc] virtex_ml507: Add support for loading kernel uImage
From: |
Elvis Dowson |
Subject: |
[Qemu-ppc] [qemuppc] virtex_ml507: Add support for loading kernel uImage binary. |
Date: |
Tue, 5 Jun 2012 20:36:05 +0200 |
This commit adds support for loading a kernel uImage binary.
Signed-off-by: Elvis Dowson <address@hidden>
---
hw/virtex_ml507.c | 23 +++++++++++++++--------
1 file changed, 15 insertions(+), 8 deletions(-)
diff --git a/hw/virtex_ml507.c b/hw/virtex_ml507.c
index 4a133b5..a0ba618 100644
--- a/hw/virtex_ml507.c
+++ b/hw/virtex_ml507.c
@@ -43,8 +43,9 @@
#include "blockdev.h"
#include "xilinx.h"
-#define EPAPR_MAGIC (0x45504150)
-#define FLASH_SIZE (16 * 1024 * 1024)
+#define UIMAGE_LOAD_BASE 0
+#define EPAPR_MAGIC (0x45504150)
+#define FLASH_SIZE (16 * 1024 * 1024)
static struct boot_info
{
@@ -189,7 +190,7 @@ static void virtex_init(ram_addr_t ram_size,
MemoryRegion *address_space_mem = get_system_memory();
DeviceState *dev;
CPUPPCState *env;
- target_phys_addr_t ram_base = 0;
+ target_phys_addr_t loadaddr = UIMAGE_LOAD_BASE;
DriveInfo *dinfo;
MemoryRegion *phys_ram = g_new(MemoryRegion, 1);
qemu_irq irq[32], *cpu_irq;
@@ -206,7 +207,7 @@ static void virtex_init(ram_addr_t ram_size,
memory_region_init_ram(phys_ram, "ram", ram_size);
vmstate_register_ram_global(phys_ram);
- memory_region_add_subregion(address_space_mem, ram_base, phys_ram);
+ memory_region_add_subregion(address_space_mem, loadaddr, phys_ram);
dinfo = drive_get(IF_PFLASH, 0, 0);
pflash_cfi01_register(0xfc000000, NULL, "virtex.flash", FLASH_SIZE,
@@ -226,14 +227,20 @@ static void virtex_init(ram_addr_t ram_size,
/* 2 timers at irq 2 @ 62 Mhz. */
xilinx_timer_create(0x83c00000, irq[3], 2, 62 * 1000000);
+ /* Load kernel. */
if (kernel_filename) {
uint64_t entry, low, high;
target_phys_addr_t boot_offset;
- /* Boots a kernel elf binary. */
- kernel_size = load_elf(kernel_filename, NULL, NULL,
- &entry, &low, &high, 1, ELF_MACHINE, 0);
- boot_info.bootstrap_pc = entry & 0x00ffffff;
+ /* Boot a kernel uImage binary. */
+ kernel_size = load_uimage(kernel_filename, &entry, &loadaddr, NULL);
+
+ /* If we failed loading uImage, try again as a kernel elf binary. */
+ if (kernel_size < 0) {
+ kernel_size = load_elf(kernel_filename, NULL, NULL,
+ &entry, &low, &high, 1, ELF_MACHINE, 0);
+ boot_info.bootstrap_pc = entry & 0x00ffffff;
+ }
if (kernel_size < 0) {
boot_offset = 0x1200000;
--
1.7.9.5
- [Qemu-ppc] [qemuppc] virtex_ml507: Add support for loading kernel uImage binary.,
Elvis Dowson <=