Commit 070ce5edc39df04ffed2b002da27e69859ee01b7
1 parent
acdf72bb
Make the Malta bootloader handling a bit more transparent.
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@2949 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
1 changed file
with
17 additions
and
14 deletions
hw/mips_malta.c
@@ -778,9 +778,23 @@ void mips_malta_init (int ram_size, int vga_ram_size, int boot_device, | @@ -778,9 +778,23 @@ void mips_malta_init (int ram_size, int vga_ram_size, int boot_device, | ||
778 | cpu_register_physical_memory(0x1fc00000LL, | 778 | cpu_register_physical_memory(0x1fc00000LL, |
779 | BIOS_SIZE, bios_offset | IO_MEM_ROM); | 779 | BIOS_SIZE, bios_offset | IO_MEM_ROM); |
780 | 780 | ||
781 | - /* Load a BIOS image except if a kernel image has been specified. In | ||
782 | - the later case, just write a small bootloader to the flash | ||
783 | - location. */ | 781 | + /* FPGA */ |
782 | + malta_fpga = malta_fpga_init(0x1f000000LL, env); | ||
783 | + | ||
784 | + /* Load a BIOS image unless a kernel image has been specified. */ | ||
785 | + if (!kernel_filename) { | ||
786 | + snprintf(buf, sizeof(buf), "%s/%s", bios_dir, BIOS_FILENAME); | ||
787 | + ret = load_image(buf, phys_ram_base + bios_offset); | ||
788 | + if (ret < 0 || ret > BIOS_SIZE) { | ||
789 | + fprintf(stderr, | ||
790 | + "qemu: Could not load MIPS bios '%s', and no -kernel argument was specified\n", | ||
791 | + buf); | ||
792 | + exit(1); | ||
793 | + } | ||
794 | + } | ||
795 | + | ||
796 | + /* If a kernel image has been specified, write a small bootloader | ||
797 | + to the flash location. */ | ||
784 | if (kernel_filename) { | 798 | if (kernel_filename) { |
785 | env->ram_size = ram_size; | 799 | env->ram_size = ram_size; |
786 | env->kernel_filename = kernel_filename; | 800 | env->kernel_filename = kernel_filename; |
@@ -789,14 +803,6 @@ void mips_malta_init (int ram_size, int vga_ram_size, int boot_device, | @@ -789,14 +803,6 @@ void mips_malta_init (int ram_size, int vga_ram_size, int boot_device, | ||
789 | kernel_entry = load_kernel(env); | 803 | kernel_entry = load_kernel(env); |
790 | env->CP0_Status &= ~((1 << CP0St_BEV) | (1 << CP0St_ERL)); | 804 | env->CP0_Status &= ~((1 << CP0St_BEV) | (1 << CP0St_ERL)); |
791 | write_bootloader(env, bios_offset, kernel_entry); | 805 | write_bootloader(env, bios_offset, kernel_entry); |
792 | - } else { | ||
793 | - snprintf(buf, sizeof(buf), "%s/%s", bios_dir, BIOS_FILENAME); | ||
794 | - ret = load_image(buf, phys_ram_base + bios_offset); | ||
795 | - if (ret < 0 || ret > BIOS_SIZE) { | ||
796 | - fprintf(stderr, "qemu: Warning, could not load MIPS bios '%s'\n", | ||
797 | - buf); | ||
798 | - exit(1); | ||
799 | - } | ||
800 | } | 806 | } |
801 | 807 | ||
802 | /* Board ID = 0x420 (Malta Board with CoreLV) | 808 | /* Board ID = 0x420 (Malta Board with CoreLV) |
@@ -809,9 +815,6 @@ void mips_malta_init (int ram_size, int vga_ram_size, int boot_device, | @@ -809,9 +815,6 @@ void mips_malta_init (int ram_size, int vga_ram_size, int boot_device, | ||
809 | cpu_mips_clock_init(env); | 815 | cpu_mips_clock_init(env); |
810 | cpu_mips_irqctrl_init(); | 816 | cpu_mips_irqctrl_init(); |
811 | 817 | ||
812 | - /* FPGA */ | ||
813 | - malta_fpga = malta_fpga_init(0x1f000000LL, env); | ||
814 | - | ||
815 | /* Interrupt controller */ | 818 | /* Interrupt controller */ |
816 | /* The 8259 is attached to the MIPS CPU INT0 pin, ie interrupt 2 */ | 819 | /* The 8259 is attached to the MIPS CPU INT0 pin, ie interrupt 2 */ |
817 | i8259 = i8259_init(env->irq[2]); | 820 | i8259 = i8259_init(env->irq[2]); |