Commit 4c823cff9e0a3a11d917869dfbc8ae94bff26bba
1 parent
d2123ead
PowerPC 601 / 620 / 970 need a 1MB firmware.
This option is not allowed for PowerMac, as it would overlap with NVRAM. git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@3480 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
4 changed files
with
28 additions
and
1 deletions
hw/ppc_chrp.c
| ... | ... | @@ -98,6 +98,13 @@ static void ppc_core99_init (int ram_size, int vga_ram_size, int boot_device, |
| 98 | 98 | register_savevm("cpu", 0, 3, cpu_save, cpu_load, env); |
| 99 | 99 | envs[i] = env; |
| 100 | 100 | } |
| 101 | + if (env->nip < 0xFFF80000) { | |
| 102 | + /* Special test for PowerPC 601: | |
| 103 | + * the boot vector is at 0xFFF00100, then we need a 1MB BIOS. | |
| 104 | + * But the NVRAM is located at 0xFFF04000... | |
| 105 | + */ | |
| 106 | + cpu_abort(env, "Mac99 hardware can not handle 1 MB BIOS\n"); | |
| 107 | + } | |
| 101 | 108 | |
| 102 | 109 | /* allocate RAM */ |
| 103 | 110 | cpu_register_physical_memory(0, ram_size, IO_MEM_RAM); |
| ... | ... | @@ -113,6 +120,10 @@ static void ppc_core99_init (int ram_size, int vga_ram_size, int boot_device, |
| 113 | 120 | exit(1); |
| 114 | 121 | } |
| 115 | 122 | bios_size = (bios_size + 0xfff) & ~0xfff; |
| 123 | + if (bios_size > 0x00080000) { | |
| 124 | + /* As the NVRAM is located at 0xFFF04000, we cannot use 1 MB BIOSes */ | |
| 125 | + cpu_abort(env, "Mac99 hardware can not handle 1 MB BIOS\n"); | |
| 126 | + } | |
| 116 | 127 | cpu_register_physical_memory((uint32_t)(-bios_size), |
| 117 | 128 | bios_size, bios_offset | IO_MEM_ROM); |
| 118 | 129 | ... | ... |
hw/ppc_oldworld.c
| ... | ... | @@ -135,6 +135,13 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size, int boot_device, |
| 135 | 135 | register_savevm("cpu", 0, 3, cpu_save, cpu_load, env); |
| 136 | 136 | envs[i] = env; |
| 137 | 137 | } |
| 138 | + if (env->nip < 0xFFF80000) { | |
| 139 | + /* Special test for PowerPC 601: | |
| 140 | + * the boot vector is at 0xFFF00100, then we need a 1MB BIOS. | |
| 141 | + * But the NVRAM is located at 0xFFF04000... | |
| 142 | + */ | |
| 143 | + cpu_abort(env, "G3BW Mac hardware can not handle 1 MB BIOS\n"); | |
| 144 | + } | |
| 138 | 145 | |
| 139 | 146 | /* allocate RAM */ |
| 140 | 147 | cpu_register_physical_memory(0, ram_size, IO_MEM_RAM); |
| ... | ... | @@ -150,6 +157,10 @@ static void ppc_heathrow_init (int ram_size, int vga_ram_size, int boot_device, |
| 150 | 157 | exit(1); |
| 151 | 158 | } |
| 152 | 159 | bios_size = (bios_size + 0xfff) & ~0xfff; |
| 160 | + if (bios_size > 0x00080000) { | |
| 161 | + /* As the NVRAM is located at 0xFFF04000, we cannot use 1 MB BIOSes */ | |
| 162 | + cpu_abort(env, "G3BW Mac hardware can not handle 1 MB BIOS\n"); | |
| 163 | + } | |
| 153 | 164 | cpu_register_physical_memory((uint32_t)(-bios_size), |
| 154 | 165 | bios_size, bios_offset | IO_MEM_ROM); |
| 155 | 166 | ... | ... |
hw/ppc_prep.c
| ... | ... | @@ -574,6 +574,9 @@ static void ppc_prep_init (int ram_size, int vga_ram_size, int boot_device, |
| 574 | 574 | cpu_abort(env, "qemu: could not load PPC PREP bios '%s'\n", buf); |
| 575 | 575 | exit(1); |
| 576 | 576 | } |
| 577 | + if (env->nip < 0xFFF80000 && bios_size < 0x00100000) { | |
| 578 | + cpu_abort(env, "PowerPC 601 / 620 / 970 need a 1MB BIOS\n"); | |
| 579 | + } | |
| 577 | 580 | bios_size = (bios_size + 0xfff) & ~0xfff; |
| 578 | 581 | cpu_register_physical_memory((uint32_t)(-bios_size), |
| 579 | 582 | bios_size, bios_offset | IO_MEM_ROM); | ... | ... |
vl.h
| ... | ... | @@ -197,7 +197,9 @@ extern unsigned int nb_prom_envs; |
| 197 | 197 | |
| 198 | 198 | /* XXX: make it dynamic */ |
| 199 | 199 | #define MAX_BIOS_SIZE (4 * 1024 * 1024) |
| 200 | -#if defined (TARGET_PPC) || defined (TARGET_SPARC64) | |
| 200 | +#if defined (TARGET_PPC) | |
| 201 | +#define BIOS_SIZE (1024 * 1024) | |
| 202 | +#elif defined (TARGET_SPARC64) | |
| 201 | 203 | #define BIOS_SIZE ((512 + 32) * 1024) |
| 202 | 204 | #elif defined(TARGET_MIPS) |
| 203 | 205 | #define BIOS_SIZE (4 * 1024 * 1024) | ... | ... |