Commit c7ba218d authored by blueswir1's avatar blueswir1

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
parent d4066479
......@@ -64,6 +64,7 @@ extern QEMUMachine ss1000_machine, ss2000_machine;
/* sun4u.c */
extern QEMUMachine sun4u_machine;
extern QEMUMachine sun4v_machine;
/* integratorcp.c */
extern QEMUMachine integratorcp_machine;
......
/*
* QEMU Sun4u System Emulator
* QEMU Sun4u/Sun4v System Emulator
*
* Copyright (c) 2005 Fabrice Bellard
*
......@@ -45,6 +45,10 @@
#define NVRAM_SIZE 0x2000
#define MAX_IDE_BUS 2
struct hwdef {
const char * const default_cpu_model;
};
int DMA_get_channel_mode (int nchan)
{
return 0;
......@@ -245,11 +249,11 @@ static const int parallel_irq[MAX_PARALLEL_PORTS] = { 7, 7, 7 };
static fdctrl_t *floppy_controller;
/* Sun4u hardware initialisation */
static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size,
const char *boot_devices, DisplayState *ds,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename, const char *cpu_model)
static void sun4uv_init(ram_addr_t RAM_size, int vga_ram_size,
const char *boot_devices, DisplayState *ds,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename, const char *cpu_model,
const struct hwdef *hwdef)
{
CPUState *env;
char buf[1024];
......@@ -267,8 +271,9 @@ static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size,
linux_boot = (kernel_filename != NULL);
/* init CPUs */
if (cpu_model == NULL)
cpu_model = "TI UltraSparc II";
if (!cpu_model)
cpu_model = hwdef->default_cpu_model;
env = cpu_init(cpu_model);
if (!env) {
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,
}
static const struct hwdef hwdefs[] = {
/* Sun4u generic PC-like machine */
{
.default_cpu_model = "TI UltraSparc II",
},
/* Sun4v generic PC-like machine */
{
.default_cpu_model = "Sun UltraSparc T1",
},
};
/* Sun4u hardware initialisation */
static void sun4u_init(ram_addr_t RAM_size, int vga_ram_size,
const char *boot_devices, DisplayState *ds,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename, const char *cpu_model)
{
sun4uv_init(RAM_size, vga_ram_size, boot_devices, ds, kernel_filename,
kernel_cmdline, initrd_filename, cpu_model, &hwdefs[0]);
}
/* Sun4v hardware initialisation */
static void sun4v_init(ram_addr_t RAM_size, int vga_ram_size,
const char *boot_devices, DisplayState *ds,
const char *kernel_filename, const char *kernel_cmdline,
const char *initrd_filename, const char *cpu_model)
{
sun4uv_init(RAM_size, vga_ram_size, boot_devices, ds, kernel_filename,
kernel_cmdline, initrd_filename, cpu_model, &hwdefs[1]);
}
QEMUMachine sun4u_machine = {
"sun4u",
"Sun4u platform",
sun4u_init,
PROM_SIZE_MAX + VGA_RAM_SIZE,
};
QEMUMachine sun4v_machine = {
"sun4v",
"Sun4v platform",
sun4v_init,
PROM_SIZE_MAX + VGA_RAM_SIZE,
};
......@@ -75,7 +75,7 @@ For system emulation, the following hardware targets are supported:
@item G3 BW PowerMac (PowerPC processor)
@item Mac99 PowerMac (PowerPC processor, in progress)
@item Sun4m/Sun4c/Sun4d (32-bit Sparc processor)
@item Sun4u (64-bit Sparc processor, in progress)
@item Sun4u/Sun4v (64-bit Sparc processor, in progress)
@item Malta board (32-bit and 64-bit MIPS processors)
@item MIPS Magnum (64-bit MIPS processor)
@item ARM Integrator/CP (ARM)
......@@ -2315,10 +2315,10 @@ Set the emulated machine type. Default is SS-5.
@node Sparc64 System emulator
@section Sparc64 System emulator
Use the executable @file{qemu-system-sparc64} to simulate a Sun4u machine.
The emulator is not usable for anything yet.
Use the executable @file{qemu-system-sparc64} to simulate a Sun4u or
Sun4v machine. The emulator is not usable for anything yet.
QEMU emulates the following sun4u peripherals:
QEMU emulates the following peripherals:
@itemize @minus
@item
......@@ -2329,8 +2329,24 @@ PCI VGA compatible card with VESA Bochs Extensions
Non Volatile RAM M48T59
@item
PC-compatible serial ports
@item
2 PCI IDE interfaces with hard disk and CD-ROM support
@end itemize
@c man begin OPTIONS
The following options are specific to the Sparc64 emulation:
@table @option
@item -M [sun4u|sun4v]
Set the emulated machine type. The default is sun4u.
@end table
@c man end
@node MIPS System emulator
@section MIPS System emulator
......
......@@ -86,4 +86,6 @@ Sun4u:
- A lot of real machine types
Sun4v:
- To be added
- A lot of unimplemented features
- A lot of real machine types
......@@ -1115,6 +1115,28 @@ static const sparc_def_t sparc_defs[] = {
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES,
},
{
.name = "Sun UltraSparc T1",
// defined in sparc_ifu_fdp.v and ctu.h
.iu_version = ((0x3eULL << 48) | (0x23ULL << 32) | (0x02ULL << 24)
| (MAXTL << 8)),
.fpu_version = 0x00000000,
.mmu_version = mmu_sun4v,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT
| CPU_FEATURE_GL,
},
{
.name = "Sun UltraSparc T2",
// defined in tlu_asi_ctl.v and n2_revid_cust.v
.iu_version = ((0x3eULL << 48) | (0x24ULL << 32) | (0x02ULL << 24)
| (MAXTL << 8)),
.fpu_version = 0x00000000,
.mmu_version = mmu_sun4v,
.nwindows = 8,
.features = CPU_DEFAULT_FEATURES | CPU_FEATURE_HYPV | CPU_FEATURE_CMT
| CPU_FEATURE_GL,
},
{
.name = "NEC UltraSparc I",
.iu_version = ((0x22ULL << 48) | (0x10ULL << 32) | (0x40ULL << 24)
......
......@@ -7,6 +7,7 @@ void register_machines(void)
{
#ifdef TARGET_SPARC64
qemu_register_machine(&sun4u_machine);
qemu_register_machine(&sun4v_machine);
#else
qemu_register_machine(&ss5_machine);
qemu_register_machine(&ss10_machine);
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment