From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1Ls0VU-0007dz-IE for qemu-devel@nongnu.org; Thu, 09 Apr 2009 16:05:52 -0400 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1Ls0VT-0007dG-J7 for qemu-devel@nongnu.org; Thu, 09 Apr 2009 16:05:52 -0400 Received: from [199.232.76.173] (port=48742 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1Ls0VT-0007d6-Ed for qemu-devel@nongnu.org; Thu, 09 Apr 2009 16:05:51 -0400 Received: from savannah.gnu.org ([199.232.41.3]:47263 helo=sv.gnu.org) by monty-python.gnu.org with esmtps (TLS-1.0:RSA_AES_256_CBC_SHA1:32) (Exim 4.60) (envelope-from ) id 1Ls0VS-0007S9-KN for qemu-devel@nongnu.org; Thu, 09 Apr 2009 16:05:51 -0400 Received: from cvs.savannah.gnu.org ([199.232.41.69]) by sv.gnu.org with esmtp (Exim 4.69) (envelope-from ) id 1Ls0VR-0005A5-UN for qemu-devel@nongnu.org; Thu, 09 Apr 2009 20:05:50 +0000 Received: from pbrook by cvs.savannah.gnu.org with local (Exim 4.69) (envelope-from ) id 1Ls0VR-0005A1-HT for qemu-devel@nongnu.org; Thu, 09 Apr 2009 20:05:49 +0000 MIME-Version: 1.0 Errors-To: pbrook Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit From: Paul Brook Message-Id: Date: Thu, 09 Apr 2009 20:05:49 +0000 Subject: [Qemu-devel] [7056] Use load_image_targphys and avoid phys_ram_base. Reply-To: qemu-devel@nongnu.org List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Revision: 7056 http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=7056 Author: pbrook Date: 2009-04-09 20:05:49 +0000 (Thu, 09 Apr 2009) Log Message: ----------- Use load_image_targphys and avoid phys_ram_base. Signed-off-by: Paul Brook Modified Paths: -------------- trunk/hw/an5206.c trunk/hw/armv7m.c trunk/hw/axis_dev88.c trunk/hw/dummy_m68k.c trunk/hw/etraxfs.c trunk/hw/mcf5208.c trunk/hw/mips_jazz.c trunk/hw/mips_malta.c trunk/hw/mips_mipssim.c trunk/hw/mips_r4k.c trunk/hw/nseries.c trunk/hw/palm.c trunk/hw/ppc440_bamboo.c trunk/hw/ppc_oldworld.c trunk/hw/ppc_prep.c trunk/hw/shix.c Modified: trunk/hw/an5206.c =================================================================== --- trunk/hw/an5206.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/an5206.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -72,8 +72,8 @@ kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL); } if (kernel_size < 0) { - kernel_size = load_image(kernel_filename, - phys_ram_base + KERNEL_LOAD_ADDR); + kernel_size = load_image_targphys(kernel_filename, KERNEL_LOAD_ADDR, + ram_size - KERNEL_LOAD_ADDR); entry = KERNEL_LOAD_ADDR; } if (kernel_size < 0) { Modified: trunk/hw/armv7m.c =================================================================== --- trunk/hw/armv7m.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/armv7m.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -170,16 +170,17 @@ #endif /* Flash programming is done via the SCU, so pretend it is ROM. */ - cpu_register_physical_memory(0, flash_size, IO_MEM_ROM); + cpu_register_physical_memory(0, flash_size, + qemu_ram_alloc(flash_size) | IO_MEM_ROM); cpu_register_physical_memory(0x20000000, sram_size, - flash_size + IO_MEM_RAM); + qemu_ram_alloc(sram_size) | IO_MEM_RAM); armv7m_bitband_init(); pic = armv7m_nvic_init(env); image_size = load_elf(kernel_filename, 0, &entry, &lowaddr, NULL); if (image_size < 0) { - image_size = load_image(kernel_filename, phys_ram_base); + image_size = load_image_targphys(kernel_filename, 0, flash_size); lowaddr = 0; } if (image_size < 0) { @@ -203,7 +204,8 @@ /* Hack to map an additional page of ram at the top of the address space. This stops qemu complaining about executing code outside RAM when returning from an exception. */ - cpu_register_physical_memory(0xfffff000, 0x1000, IO_MEM_RAM + ram_size); + cpu_register_physical_memory(0xfffff000, 0x1000, + qemu_ram_alloc(0x1000) | IO_MEM_RAM); return pic; } Modified: trunk/hw/axis_dev88.c =================================================================== --- trunk/hw/axis_dev88.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/axis_dev88.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -338,7 +338,8 @@ bootstrap_pc = entry; if (kernel_size < 0) { /* Takes a kimage from the axis devboard SDK. */ - kernel_size = load_image(kernel_filename, phys_ram_base + 0x4000); + kernel_size = load_image_targphys(kernel_filename, 0x40004000, + ram_size); bootstrap_pc = 0x40004000; env->regs[9] = 0x40004000 + kernel_size; } Modified: trunk/hw/dummy_m68k.c =================================================================== --- trunk/hw/dummy_m68k.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/dummy_m68k.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -47,8 +47,9 @@ kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL); } if (kernel_size < 0) { - kernel_size = load_image(kernel_filename, - phys_ram_base + KERNEL_LOAD_ADDR); + kernel_size = load_image_targphys(kernel_filename, + KERNEL_LOAD_ADDR, + ram_size - KERNEL_LOAD_ADDR); entry = KERNEL_LOAD_ADDR; } if (kernel_size < 0) { Modified: trunk/hw/etraxfs.c =================================================================== --- trunk/hw/etraxfs.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/etraxfs.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -129,7 +129,8 @@ bootstrap_pc = entry; if (kernel_size < 0) { /* Takes a kimage from the axis devboard SDK. */ - kernel_size = load_image(kernel_filename, phys_ram_base + 0x4000); + kernel_size = load_image_targphys(kernel_filename, 0x40004000, + ram_size); bootstrap_pc = 0x40004000; env->regs[9] = 0x40004000 + kernel_size; } Modified: trunk/hw/mcf5208.c =================================================================== --- trunk/hw/mcf5208.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/mcf5208.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -220,7 +220,7 @@ env->vbr = 0; /* TODO: Configure BARs. */ - /* DRAM at 0x20000000 */ + /* DRAM at 0x40000000 */ cpu_register_physical_memory(0x40000000, ram_size, qemu_ram_alloc(ram_size) | IO_MEM_RAM); @@ -278,8 +278,9 @@ kernel_size = load_uimage(kernel_filename, &entry, NULL, NULL); } if (kernel_size < 0) { - kernel_size = load_image(kernel_filename, phys_ram_base); - entry = 0x20000000; + kernel_size = load_image_targphys(kernel_filename, 0x40000000, + ram_size); + entry = 0x40000000; } if (kernel_size < 0) { fprintf(stderr, "qemu: could not load kernel '%s'\n", kernel_filename); Modified: trunk/hw/mips_jazz.c =================================================================== --- trunk/hw/mips_jazz.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/mips_jazz.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -129,7 +129,6 @@ enum jazz_model_e jazz_model) { char buf[1024]; - unsigned long bios_offset; int bios_size, n; CPUState *env; qemu_irq *rc4030, *i8259; @@ -141,6 +140,9 @@ PITState *pit; BlockDriverState *fds[MAX_FD]; qemu_irq esp_reset; + ram_addr_t ram_offset; + ram_addr_t bios_offset; + ram_addr_t vga_ram_offset; /* init CPUs */ if (cpu_model == NULL) { @@ -159,25 +161,27 @@ qemu_register_reset(main_cpu_reset, env); /* allocate RAM */ - cpu_register_physical_memory(0, ram_size, IO_MEM_RAM); + ram_offset = qemu_ram_alloc(ram_size); + cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); + vga_ram_offset = qemu_ram_alloc(vga_ram_size); + bios_offset = qemu_ram_alloc(MAGNUM_BIOS_SIZE); + cpu_register_physical_memory(0x1fc00000LL, + MAGNUM_BIOS_SIZE, bios_offset | IO_MEM_ROM); + cpu_register_physical_memory(0xfff00000LL, + MAGNUM_BIOS_SIZE, bios_offset | IO_MEM_ROM); + /* load the BIOS image. */ - bios_offset = ram_size + vga_ram_size; if (bios_name == NULL) bios_name = BIOS_FILENAME; snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name); - bios_size = load_image(buf, phys_ram_base + bios_offset); + bios_size = load_image_targphys(buf, 0xfff00000LL, MAGNUM_BIOS_SIZE); if (bios_size < 0 || bios_size > MAGNUM_BIOS_SIZE) { fprintf(stderr, "qemu: Could not load MIPS bios '%s'\n", buf); exit(1); } - cpu_register_physical_memory(0x1fc00000LL, - MAGNUM_BIOS_SIZE, bios_offset | IO_MEM_ROM); - cpu_register_physical_memory(0xfff00000LL, - MAGNUM_BIOS_SIZE, bios_offset | IO_MEM_ROM); - /* Init CPU internal devices */ cpu_mips_irq_init_cpu(env); cpu_mips_clock_init(env); @@ -201,11 +205,11 @@ /* Video card */ switch (jazz_model) { case JAZZ_MAGNUM: - g364fb_mm_init(phys_ram_base + ram_size, ram_size, vga_ram_size, + g364fb_mm_init(phys_ram_base + vga_ram_offset, ram_size, vga_ram_size, 0x40000000, 0x60000000, 0, rc4030[3]); break; case JAZZ_PICA61: - isa_vga_mm_init(phys_ram_base + ram_size, ram_size, vga_ram_size, + isa_vga_mm_init(phys_ram_base + vga_ram_offset, ram_size, vga_ram_size, 0x40000000, 0x60000000, 0); break; default: Modified: trunk/hw/mips_malta.c =================================================================== --- trunk/hw/mips_malta.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/mips_malta.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -717,8 +717,9 @@ loaderparams.initrd_filename); exit(1); } - initrd_size = load_image(loaderparams.initrd_filename, - phys_ram_base + initrd_offset); + initrd_size = load_image_targphys(loaderparams.initrd_filename, + initrd_offset, + ram_size - initrd_offset); } if (initrd_size == (target_ulong) -1) { fprintf(stderr, "qemu: could not load initial ram disk '%s'\n", @@ -767,7 +768,9 @@ const char *initrd_filename, const char *cpu_model) { char buf[1024]; - unsigned long bios_offset; + ram_addr_t ram_offset; + ram_addr_t vga_ram_offset; + ram_addr_t bios_offset; target_long bios_size; int64_t kernel_entry; PCIBus *pci_bus; @@ -808,10 +811,14 @@ ((unsigned int)ram_size / (1 << 20))); exit(1); } - cpu_register_physical_memory(0, ram_size, IO_MEM_RAM); + ram_offset = qemu_ram_alloc(ram_size); + vga_ram_offset = qemu_ram_alloc(vga_ram_size); + bios_offset = qemu_ram_alloc(BIOS_SIZE); + + cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); + /* Map the bios at two physical locations, as on the real board. */ - bios_offset = ram_size + vga_ram_size; cpu_register_physical_memory(0x1e000000LL, BIOS_SIZE, bios_offset | IO_MEM_ROM); cpu_register_physical_memory(0x1fc00000LL, @@ -851,7 +858,7 @@ if (bios_name == NULL) bios_name = BIOS_FILENAME; snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name); - bios_size = load_image(buf, phys_ram_base + bios_offset); + bios_size = load_image_targphys(buf, 0x1fc00000LL, BIOS_SIZE); if ((bios_size < 0 || bios_size > BIOS_SIZE) && !kernel_filename) { fprintf(stderr, "qemu: Could not load MIPS bios '%s', and no -kernel argument was specified\n", @@ -942,13 +949,13 @@ /* Optional PCI video card */ if (cirrus_vga_enabled) { - pci_cirrus_vga_init(pci_bus, phys_ram_base + ram_size, + pci_cirrus_vga_init(pci_bus, phys_ram_base + vga_ram_offset, ram_size, vga_ram_size); } else if (vmsvga_enabled) { - pci_vmsvga_init(pci_bus, phys_ram_base + ram_size, + pci_vmsvga_init(pci_bus, phys_ram_base + vga_ram_offset, ram_size, vga_ram_size); } else if (std_vga_enabled) { - pci_vga_init(pci_bus, phys_ram_base + ram_size, + pci_vga_init(pci_bus, phys_ram_base + vga_ram_offset, ram_size, vga_ram_size, 0, 0); } } Modified: trunk/hw/mips_mipssim.c =================================================================== --- trunk/hw/mips_mipssim.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/mips_mipssim.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -86,8 +86,8 @@ loaderparams.initrd_filename); exit(1); } - initrd_size = load_image(loaderparams.initrd_filename, - phys_ram_base + initrd_offset); + initrd_size = load_image_targphys(loaderparams.initrd_filename, + initrd_offset, loaderparams.ram_size - initrd_offset); } if (initrd_size == (target_ulong) -1) { fprintf(stderr, "qemu: could not load initial ram disk '%s'\n", @@ -113,7 +113,8 @@ const char *initrd_filename, const char *cpu_model) { char buf[1024]; - unsigned long bios_offset; + ram_addr_t ram_offset; + ram_addr_t bios_offset; CPUState *env; int bios_size; @@ -133,14 +134,19 @@ qemu_register_reset(main_cpu_reset, env); /* Allocate RAM. */ - cpu_register_physical_memory(0, ram_size, IO_MEM_RAM); + ram_offset = qemu_ram_alloc(ram_size); + bios_offset = qemu_ram_alloc(BIOS_SIZE); + cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); + + /* Map the BIOS / boot exception handler. */ + cpu_register_physical_memory(0x1fc00000LL, + BIOS_SIZE, bios_offset | IO_MEM_ROM); /* Load a BIOS / boot exception handler image. */ - bios_offset = ram_size + vga_ram_size; if (bios_name == NULL) bios_name = BIOS_FILENAME; snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name); - bios_size = load_image(buf, phys_ram_base + bios_offset); + bios_size = load_image_targphys(buf, 0x1fc00000LL, BIOS_SIZE); if ((bios_size < 0 || bios_size > BIOS_SIZE) && !kernel_filename) { /* Bail out if we have neither a kernel image nor boot vector code. */ fprintf(stderr, @@ -148,9 +154,6 @@ buf); exit(1); } else { - /* Map the BIOS / boot exception handler. */ - cpu_register_physical_memory(0x1fc00000LL, - bios_size, bios_offset | IO_MEM_ROM); /* We have a boot vector start address. */ env->active_tc.PC = (target_long)(int32_t)0xbfc00000; } Modified: trunk/hw/mips_r4k.c =================================================================== --- trunk/hw/mips_r4k.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/mips_r4k.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -107,8 +107,9 @@ loaderparams.initrd_filename); exit(1); } - initrd_size = load_image(loaderparams.initrd_filename, - phys_ram_base + initrd_offset); + initrd_size = load_image_targphys(loaderparams.initrd_filename, + initrd_offset, + ram_size - initrd_offset); } if (initrd_size == (target_ulong) -1) { fprintf(stderr, "qemu: could not load initial ram disk '%s'\n", @@ -153,7 +154,9 @@ const char *initrd_filename, const char *cpu_model) { char buf[1024]; - unsigned long bios_offset; + ram_addr_t ram_offset; + ram_addr_t vga_ram_offset; + ram_addr_t bios_offset; int bios_size; CPUState *env; RTCState *rtc_state; @@ -184,8 +187,11 @@ ((unsigned int)ram_size / (1 << 20))); exit(1); } - cpu_register_physical_memory(0, ram_size, IO_MEM_RAM); + ram_offset = qemu_ram_alloc(ram_size); + vga_ram_offset = qemu_ram_alloc(vga_ram_size); + cpu_register_physical_memory(0, ram_size, ram_offset | IO_MEM_RAM); + if (!mips_qemu_iomemtype) { mips_qemu_iomemtype = cpu_register_io_memory(0, mips_qemu_read, mips_qemu_write, NULL); @@ -196,19 +202,20 @@ but initialize the hardware ourselves. When a kernel gets preloaded we also initialize the hardware, since the BIOS wasn't run. */ - bios_offset = ram_size + vga_ram_size; if (bios_name == NULL) bios_name = BIOS_FILENAME; snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name); - bios_size = load_image(buf, phys_ram_base + bios_offset); + bios_size = get_image_size(buf); if ((bios_size > 0) && (bios_size <= BIOS_SIZE)) { - cpu_register_physical_memory(0x1fc00000, - BIOS_SIZE, bios_offset | IO_MEM_ROM); + bios_offset = qemu_ram_alloc(BIOS_SIZE); + cpu_register_physical_memory(0x1fc00000, BIOS_SIZE, + bios_offset | IO_MEM_ROM); + + load_image_targphys(buf, 0x1fc00000, BIOS_SIZE); } else if ((index = drive_get_index(IF_PFLASH, 0, 0)) > -1) { uint32_t mips_rom = 0x00400000; - cpu_register_physical_memory(0x1fc00000, mips_rom, - qemu_ram_alloc(mips_rom) | IO_MEM_ROM); - if (!pflash_cfi01_register(0x1fc00000, qemu_ram_alloc(mips_rom), + bios_offset = qemu_ram_alloc(mips_rom); + if (!pflash_cfi01_register(0x1fc00000, bios_offset, drives_table[index].bdrv, sector_len, mips_rom / sector_len, 4, 0, 0, 0, 0)) { fprintf(stderr, "qemu: Error registering flash memory.\n"); @@ -250,7 +257,7 @@ } } - isa_vga_init(phys_ram_base + ram_size, ram_size, + isa_vga_init(phys_ram_base + vga_ram_offset, ram_size, vga_ram_size); if (nd_table[0].vlan) Modified: trunk/hw/nseries.c =================================================================== --- trunk/hw/nseries.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/nseries.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -1341,6 +1341,7 @@ } if (option_rom[0] && (boot_device[0] == 'n' || !kernel_filename)) { + int rom_size; /* No, wait, better start at the ROM. */ s->cpu->env->regs[15] = OMAP2_Q2_BASE + 0x400000; @@ -1353,8 +1354,10 @@ * * The code above is for loading the `zImage' file from Nokia * images. */ - printf("%i bytes of image loaded\n", load_image(option_rom[0], - phys_ram_base + 0x400000)); + rom_size = load_image_targphys(option_rom[0], + OMAP2_Q2_BASE + 0x400000, + sdram_size - 0x400000); + printf("%i bytes of image loaded\n", rom_size); n800_setup_nolo_tags(phys_ram_base + sdram_size); } Modified: trunk/hw/palm.c =================================================================== --- trunk/hw/palm.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/palm.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -247,16 +247,21 @@ /* Setup initial (reset) machine state */ if (nb_option_roms) { rom_size = get_image_size(option_rom[0]); - if (rom_size > flash_size) + if (rom_size > flash_size) { fprintf(stderr, "%s: ROM image too big (%x > %x)\n", __FUNCTION__, rom_size, flash_size); - else if (rom_size > 0 && load_image(option_rom[0], - phys_ram_base + phys_flash) > 0) { + rom_size = 0; + } + if (rom_size > 0) { + rom_size = load_image_targphys(option_rom[0], OMAP_CS0_BASE, + flash_size); rom_loaded = 1; cpu->env->regs[15] = 0x00000000; - } else + } + if (rom_size < 0) { fprintf(stderr, "%s: error loading '%s'\n", __FUNCTION__, option_rom[0]); + } } if (!rom_loaded && !kernel_filename) { Modified: trunk/hw/ppc440_bamboo.c =================================================================== --- trunk/hw/ppc440_bamboo.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/ppc440_bamboo.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -148,7 +148,8 @@ /* Load initrd. */ if (initrd_filename) { initrd_base = kernel_size + loadaddr; - initrd_size = load_image(initrd_filename, phys_ram_base + initrd_base); + initrd_size = load_image_targphys(initrd_filename, initrd_base, + ram_size - initrd_base); if (initrd_size < 0) { fprintf(stderr, "qemu: could not load initial ram disk '%s'\n", Modified: trunk/hw/ppc_oldworld.c =================================================================== --- trunk/hw/ppc_oldworld.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/ppc_oldworld.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -231,8 +231,8 @@ /* load initrd */ if (initrd_filename) { initrd_base = INITRD_LOAD_ADDR; - initrd_size = load_image(initrd_filename, - phys_ram_base + initrd_base); + initrd_size = load_image_targphys(initrd_filename, initrd_base, + ram_size - initrd_base); if (initrd_size < 0) { cpu_abort(env, "qemu: could not load initial ram disk '%s'\n", initrd_filename); Modified: trunk/hw/ppc_prep.c =================================================================== --- trunk/hw/ppc_prep.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/ppc_prep.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -588,7 +588,15 @@ if (bios_name == NULL) bios_name = BIOS_FILENAME; snprintf(buf, sizeof(buf), "%s/%s", bios_dir, bios_name); - bios_size = load_image(buf, phys_ram_base + bios_offset); + bios_size = get_image_size(buf); + if (bios_size > 0 && bios_size <= BIOS_SIZE) { + target_phys_addr_t bios_addr; + bios_size = (bios_size + 0xfff) & ~0xfff; + bios_addr = (uint32_t)(-bios_size); + cpu_register_physical_memory(bios_addr, bios_size, + bios_offset | IO_MEM_ROM); + bios_size = load_image_targphys(buf, bios_addr, bios_size); + } if (bios_size < 0 || bios_size > BIOS_SIZE) { cpu_abort(env, "qemu: could not load PPC PREP bios '%s'\n", buf); exit(1); @@ -596,14 +604,12 @@ if (env->nip < 0xFFF80000 && bios_size < 0x00100000) { cpu_abort(env, "PowerPC 601 / 620 / 970 need a 1MB BIOS\n"); } - bios_size = (bios_size + 0xfff) & ~0xfff; - cpu_register_physical_memory((uint32_t)(-bios_size), - bios_size, bios_offset | IO_MEM_ROM); if (linux_boot) { kernel_base = KERNEL_LOAD_ADDR; /* now we can load the kernel */ - kernel_size = load_image(kernel_filename, phys_ram_base + kernel_base); + kernel_size = load_image_targphys(kernel_filename, kernel_base, + ram_size - kernel_base); if (kernel_size < 0) { cpu_abort(env, "qemu: could not load kernel '%s'\n", kernel_filename); @@ -612,8 +618,8 @@ /* load initrd */ if (initrd_filename) { initrd_base = INITRD_LOAD_ADDR; - initrd_size = load_image(initrd_filename, - phys_ram_base + initrd_base); + initrd_size = load_image_targphys(initrd_filename, initrd_base, + ram_size - initrd_base); if (initrd_size < 0) { cpu_abort(env, "qemu: could not load initial ram disk '%s'\n", initrd_filename); Modified: trunk/hw/shix.c =================================================================== --- trunk/hw/shix.c 2009-04-09 17:48:30 UTC (rev 7055) +++ trunk/hw/shix.c 2009-04-09 20:05:49 UTC (rev 7056) @@ -73,7 +73,7 @@ if (bios_name == NULL) bios_name = BIOS_FILENAME; printf("%s: load BIOS '%s'\n", __func__, bios_name); - ret = load_image(bios_name, phys_ram_base); + ret = load_image_targphys(bios_name, 0, 0x4000); if (ret < 0) { /* Check bios size */ fprintf(stderr, "ret=%d\n", ret); fprintf(stderr, "qemu: could not load SHIX bios '%s'\n",