Commit c7ba218da1639a054b5ca1c259530305562fa571
1 parent
d4066479
Add T1 and T2 CPUs, add a Sun4v machine
git-svn-id: svn://svn.savannah.nongnu.org/qemu/trunk@4923 c046a42c-6fe2-441c-8c8c-71466251a162
Showing
6 changed files
with
98 additions
and
13 deletions
hw/boards.h
hw/sun4u.c
| 1 | 1 | /* |
| 2 | - * QEMU Sun4u System Emulator | |
| 2 | + * QEMU Sun4u/Sun4v System Emulator | |
| 3 | 3 | * |
| 4 | 4 | * Copyright (c) 2005 Fabrice Bellard |
| 5 | 5 | * |
| ... | ... | @@ -45,6 +45,10 @@ |
| 45 | 45 | #define NVRAM_SIZE 0x2000 |
| 46 | 46 | #define MAX_IDE_BUS 2 |
| 47 | 47 | |
| 48 | +struct hwdef { | |
| 49 | + const char * const default_cpu_model; | |
| 50 | +}; | |
| 51 | + | |
| 48 | 52 | int DMA_get_channel_mode (int nchan) |
| 49 | 53 | { |
| 50 | 54 | return 0; |
| ... | ... | @@ -245,11 +249,11 @@ static const int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 }; |
| 245 | 249 | |
| 246 | 250 | static fdctrl_t *floppy_controller; |
| 247 | 251 | |
| 248 | -/* Sun4u hardware initialisation */ | |
| 249 | -static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size, | |
| 250 | - const char *boot_devices, DisplayState *ds, | |
| 251 | - const char *kernel_filename, const char *kernel_cmdline, | |
| 252 | - const char *initrd_filename, const char *cpu_model) | |
| 252 | +static void sun4uv_init(ram_addr_t RAM_size, int vga_ram_size, | |
| 253 | + const char *boot_devices, DisplayState *ds, | |
| 254 | + const char *kernel_filename, const char *kernel_cmdline, | |
| 255 | + const char *initrd_filename, const char *cpu_model, | |
| 256 | + const struct hwdef *hwdef) | |
| 253 | 257 | { |
| 254 | 258 | CPUState *env; |
| 255 | 259 | char buf[1024]; |
| ... | ... | @@ -267,8 +271,9 @@ static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size, |
| 267 | 271 | linux_boot = (kernel_filename != NULL); |
| 268 | 272 | |
| 269 | 273 | /* init CPUs */ |
| 270 | - if (cpu_model == NULL) | |
| 271 | - cpu_model = "TI UltraSparc II"; | |
| 274 | + if (!cpu_model) | |
| 275 | + cpu_model = hwdef->default_cpu_model; | |
| 276 | + | |
| 272 | 277 | env = cpu_init(cpu_model); |
| 273 | 278 | if (!env) { |
| 274 | 279 | fprintf(stderr, "Unable to find Sparc CPU definition\n"); |
| ... | ... | @@ -409,9 +414,47 @@ static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size, |
| 409 | 414 | |
| 410 | 415 | } |
| 411 | 416 | |
| 417 | +static const struct hwdef hwdefs[] = { | |
| 418 | + /* Sun4u generic PC-like machine */ | |
| 419 | + { | |
| 420 | + .default_cpu_model = "TI UltraSparc II", | |
| 421 | + }, | |
| 422 | + /* Sun4v generic PC-like machine */ | |
| 423 | + { | |
| 424 | + .default_cpu_model = "Sun UltraSparc T1", | |
| 425 | + }, | |
| 426 | +}; | |
| 427 | + | |
| 428 | +/* Sun4u hardware initialisation */ | |
| 429 | +static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size, | |
| 430 | + const char *boot_devices, DisplayState *ds, | |
| 431 | + const char *kernel_filename, const char *kernel_cmdline, | |
| 432 | + const char *initrd_filename, const char *cpu_model) | |
| 433 | +{ | |
| 434 | + sun4uv_init(RAM_size, vga_ram_size, boot_devices, ds, kernel_filename, | |
| 435 | + kernel_cmdline, initrd_filename, cpu_model, &hwdefs[0]); | |
| 436 | +} | |
| 437 | + | |
| 438 | +/* Sun4v hardware initialisation */ | |
| 439 | +static void sun4v_init(ram_addr_t RAM_size, int vga_ram_size, | |
| 440 | + const char *boot_devices, DisplayState *ds, | |
| 441 | + const char *kernel_filename, const char *kernel_cmdline, | |
| 442 | + const char *initrd_filename, const char *cpu_model) | |
| 443 | +{ | |
| 444 | + sun4uv_init(RAM_size, vga_ram_size, boot_devices, ds, kernel_filename, | |
| 445 | + kernel_cmdline, initrd_filename, cpu_model, &hwdefs[1]); | |
| 446 | +} | |
| 447 | + | |
| 412 | 448 | QEMUMachine sun4u_machine = { |
| 413 | 449 | "sun4u", |
| 414 | 450 | "Sun4u platform", |
| 415 | 451 | sun4u_init, |
| 416 | 452 | PROM_SIZE_MAX + VGA_RAM_SIZE, |
| 417 | 453 | }; |
| 454 | + | |
| 455 | +QEMUMachine sun4v_machine = { | |
| 456 | + "sun4v", | |
| 457 | + "Sun4v platform", | |
| 458 | + sun4v_init, | |
| 459 | + PROM_SIZE_MAX + VGA_RAM_SIZE, | |
| 460 | +}; | ... | ... |
qemu-doc.texi
| ... | ... | @@ -75,7 +75,7 @@ For system emulation, the following hardware targets are supported: |
| 75 | 75 | @item G3 BW PowerMac (PowerPC processor) |
| 76 | 76 | @item Mac99 PowerMac (PowerPC processor, in progress) |
| 77 | 77 | @item Sun4m/Sun4c/Sun4d (32-bit Sparc processor) |
| 78 | -@item Sun4u (64-bit Sparc processor, in progress) | |
| 78 | +@item Sun4u/Sun4v (64-bit Sparc processor, in progress) | |
| 79 | 79 | @item Malta board (32-bit and 64-bit MIPS processors) |
| 80 | 80 | @item MIPS Magnum (64-bit MIPS processor) |
| 81 | 81 | @item ARM Integrator/CP (ARM) |
| ... | ... | @@ -2315,10 +2315,10 @@ Set the emulated machine type. Default is SS-5. |
| 2315 | 2315 | @node Sparc64 System emulator |
| 2316 | 2316 | @section Sparc64 System emulator |
| 2317 | 2317 | |
| 2318 | -Use the executable @file{qemu-system-sparc64} to simulate a Sun4u machine. | |
| 2319 | -The emulator is not usable for anything yet. | |
| 2318 | +Use the executable @file{qemu-system-sparc64} to simulate a Sun4u or | |
| 2319 | +Sun4v machine. The emulator is not usable for anything yet. | |
| 2320 | 2320 | |
| 2321 | -QEMU emulates the following sun4u peripherals: | |
| 2321 | +QEMU emulates the following peripherals: | |
| 2322 | 2322 | |
| 2323 | 2323 | @itemize @minus |
| 2324 | 2324 | @item |
| ... | ... | @@ -2329,8 +2329,24 @@ PCI VGA compatible card with VESA Bochs Extensions |
| 2329 | 2329 | Non Volatile RAM M48T59 |
| 2330 | 2330 | @item |
| 2331 | 2331 | PC-compatible serial ports |
| 2332 | +@item | |
| 2333 | +2 PCI IDE interfaces with hard disk and CD-ROM support | |
| 2332 | 2334 | @end itemize |
| 2333 | 2335 | |
| 2336 | +@c man begin OPTIONS | |
| 2337 | + | |
| 2338 | +The following options are specific to the Sparc64 emulation: | |
| 2339 | + | |
| 2340 | +@table @option | |
| 2341 | + | |
| 2342 | +@item -M [sun4u|sun4v] | |
| 2343 | + | |
| 2344 | +Set the emulated machine type. The default is sun4u. | |
| 2345 | + | |
| 2346 | +@end table | |
| 2347 | + | |
| 2348 | +@c man end | |
| 2349 | + | |
| 2334 | 2350 | @node MIPS System emulator |
| 2335 | 2351 | @section MIPS System emulator |
| 2336 | 2352 | ... | ... |
target-sparc/TODO
target-sparc/helper.c
| ... | ... | @@ -1116,6 +1116,28 @@ static const sparc_def_t sparc_defs[] = { |
| 1116 | 1116 | .features = CPU_DEFAULT_FEATURES, |
| 1117 | 1117 | }, |
| 1118 | 1118 | { |
| 1119 | + .name = "Sun UltraSparc T1", | |
| 1120 | + // defined in sparc_ifu_fdp.v and ctu.h | |
| 1121 | + .iu_version = ((0x3eULL << 48) | (0x23ULL << 32) | (0x02ULL << 24) | |
| 1122 | + | (MAXTL << 8)), | |
| 1123 | + .fpu_version = 0x00000000, | |
| 1124 | + .mmu_version = mmu_sun4v, | |
| 1125 | + .nwindows = 8, | |
| 1126 | + .features = CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT | |
| 1127 | + | CPU_FEATURE_GL, | |
| 1128 | + }, | |
| 1129 | + { | |
| 1130 | + .name = "Sun UltraSparc T2", | |
| 1131 | + // defined in tlu_asi_ctl.v and n2_revid_cust.v | |
| 1132 | + .iu_version = ((0x3eULL << 48) | (0x24ULL << 32) | (0x02ULL << 24) | |
| 1133 | + | (MAXTL << 8)), | |
| 1134 | + .fpu_version = 0x00000000, | |
| 1135 | + .mmu_version = mmu_sun4v, | |
| 1136 | + .nwindows = 8, | |
| 1137 | + .features = CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT | |
| 1138 | + | CPU_FEATURE_GL, | |
| 1139 | + }, | |
| 1140 | + { | |
| 1119 | 1141 | .name = "NEC UltraSparc I", |
| 1120 | 1142 | .iu_version = ((0x22ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24) |
| 1121 | 1143 | | (MAXTL << 8)), | ... | ... |
target-sparc/machine.c