qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Qemu-devel] [PATCH] mips: Add 5KEc and 5KEf MIPS64r2 processors


From: Maciej W. Rozycki
Subject: [Qemu-devel] [PATCH] mips: Add 5KEc and 5KEf MIPS64r2 processors
Date: Mon, 3 Nov 2014 19:31:26 +0000
User-agent: Alpine 1.10 (DEB 962 2008-03-14)

Add the 5KEc and 5KEf processors from MIPS Technologies that are the 
original implementation of the MIPS64r2 ISA.

Silicon for these processors has never been taped out and no soft cores 
were released even.  They do exist though, a CP0.PRId value has been 
assigned and experimental RTLs produced at the time the MIPS64r2 ISA has 
been finalized.  The settings introduced here faithfully reproduce that 
hardware.

As far the implementation goes these processors are the same as the 5Kc 
and the 5Kf CPUs respectively, except implementing the MIPS64r2 rather 
than the original MIPS64 instruction set.  There must have been some 
updates to the CP0 architecture as mandated by the ISA, such as the 
addition of the EBase register, although I am not sure about the exact 
details, no documentation has ever been produced for these processors.  
The remaining parts of the microarchitecture, in particular the 
pipeline, stayed unchanged.  Or to put it another way, the difference 
between a 5K and a 5KE CPU corresponds to one between a 4K and a 4KE 
CPU, except for the 64-bit rather than 32-bit ISA.

Signed-off-by: Maciej W. Rozycki <address@hidden>
---
For the curious:

$ cat /proc/cpuinfo
system type             : MIPS Malta
processor               : 0
cpu model               : MIPS 5KE V0.12  FPU V0.12
BogoMIPS                : 49.86
wait instruction        : no
microsecond timers      : yes
tlb_entries             : 32
extra interrupt vector  : yes
hardware watchpoint     : yes, count: 2, address/irw mask: [0x0fff, 0x0fff]
microMIPS               : no
ASEs implemented        :
shadow register sets    : 1
core                    : 0
VCED exceptions         : not available
VCEI exceptions         : not available
$ 

-- this is on real hardware, running a 5KEf RTL out of an FPGA.

 Please apply.

  Maciej

qemu-mips-5ke.diff
Index: qemu-git-trunk/target-mips/translate_init.c
===================================================================
--- qemu-git-trunk.orig/target-mips/translate_init.c    2014-11-02 
18:07:08.000000000 +0000
+++ qemu-git-trunk/target-mips/translate_init.c 2014-11-02 18:15:44.108928770 
+0000
@@ -516,6 +516,51 @@ static const mips_def_t mips_defs[] =
         .mmu_type = MMU_TYPE_R4000,
     },
     {
+        .name = "5KEc",
+        .CP0_PRid = 0x00018900,
+        .CP0_Config0 = MIPS_CONFIG0 | (0x1 << CP0C0_AR) | (0x2 << CP0C0_AT) |
+                       (MMU_TYPE_R4000 << CP0C0_MT),
+        .CP0_Config1 = MIPS_CONFIG1 | (31 << CP0C1_MMU) |
+                       (1 << CP0C1_IS) | (4 << CP0C1_IL) | (1 << CP0C1_IA) |
+                       (1 << CP0C1_DS) | (4 << CP0C1_DL) | (1 << CP0C1_DA) |
+                       (1 << CP0C1_PC) | (1 << CP0C1_WR) | (1 << CP0C1_EP),
+        .CP0_Config2 = MIPS_CONFIG2,
+        .CP0_Config3 = MIPS_CONFIG3,
+        .CP0_LLAddr_rw_bitmask = 0,
+        .CP0_LLAddr_shift = 4,
+        .SYNCI_Step = 32,
+        .CCRes = 2,
+        .CP0_Status_rw_bitmask = 0x32F8FFFF,
+        .SEGBITS = 42,
+        .PABITS = 36,
+        .insn_flags = CPU_MIPS64R2,
+        .mmu_type = MMU_TYPE_R4000,
+    },
+    {
+        .name = "5KEf",
+        .CP0_PRid = 0x00018900,
+        .CP0_Config0 = MIPS_CONFIG0 | (0x1 << CP0C0_AR) | (0x2 << CP0C0_AT) |
+                       (MMU_TYPE_R4000 << CP0C0_MT),
+        .CP0_Config1 = MIPS_CONFIG1 | (1 << CP0C1_FP) | (31 << CP0C1_MMU) |
+                       (1 << CP0C1_IS) | (4 << CP0C1_IL) | (1 << CP0C1_IA) |
+                       (1 << CP0C1_DS) | (4 << CP0C1_DL) | (1 << CP0C1_DA) |
+                       (1 << CP0C1_PC) | (1 << CP0C1_WR) | (1 << CP0C1_EP),
+        .CP0_Config2 = MIPS_CONFIG2,
+        .CP0_Config3 = MIPS_CONFIG3,
+        .CP0_LLAddr_rw_bitmask = 0,
+        .CP0_LLAddr_shift = 4,
+        .SYNCI_Step = 32,
+        .CCRes = 2,
+        .CP0_Status_rw_bitmask = 0x36F8FFFF,
+        .CP1_fcr0 = (1 << FCR0_F64) | (1 << FCR0_L) | (1 << FCR0_W) |
+                    (1 << FCR0_D) | (1 << FCR0_S) |
+                    (0x89 << FCR0_PRID) | (0x0 << FCR0_REV),
+        .SEGBITS = 42,
+        .PABITS = 36,
+        .insn_flags = CPU_MIPS64R2,
+        .mmu_type = MMU_TYPE_R4000,
+    },
+    {
         /* A generic CPU supporting MIPS64 Release 6 ISA.
            FIXME: It does not support all the MIPS64R6 features yet.
                   Eventually this should be replaced by a real CPU model. */



reply via email to

[Prev in Thread] Current Thread [Next in Thread]