qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
* [Qemu-devel] [4719] CRIS: Emulate NMIs.
@ 2008-06-09 23:18 Edgar E. Iglesias
  0 siblings, 0 replies; only message in thread
From: Edgar E. Iglesias @ 2008-06-09 23:18 UTC (permalink / raw)
  To: qemu-devel

Revision: 4719
          http://svn.sv.gnu.org/viewvc/?view=rev&root=qemu&revision=4719
Author:   edgar_igl
Date:     2008-06-09 23:18:06 +0000 (Mon, 09 Jun 2008)

Log Message:
-----------
CRIS: Emulate NMIs.

Modified Paths:
--------------
    trunk/cpu-exec.c
    trunk/target-cris/cpu.h
    trunk/target-cris/helper.c

Modified: trunk/cpu-exec.c
===================================================================
--- trunk/cpu-exec.c	2008-06-09 23:07:50 UTC (rev 4718)
+++ trunk/cpu-exec.c	2008-06-09 23:18:06 UTC (rev 4719)
@@ -501,10 +501,18 @@
                         next_tb = 0;
                     }
 #elif defined(TARGET_CRIS)
-                    if (interrupt_request & CPU_INTERRUPT_HARD) {
+                    if (interrupt_request & CPU_INTERRUPT_HARD
+                        && (env->pregs[PR_CCS] & I_FLAG)) {
+                        env->exception_index = EXCP_IRQ;
                         do_interrupt(env);
                         next_tb = 0;
                     }
+                    if (interrupt_request & CPU_INTERRUPT_NMI
+                        && (env->pregs[PR_CCS] & M_FLAG)) {
+                        env->exception_index = EXCP_NMI;
+                        do_interrupt(env);
+                        next_tb = 0;
+                    }
 #elif defined(TARGET_M68K)
                     if (interrupt_request & CPU_INTERRUPT_HARD
                         && ((env->sr & SR_I) >> SR_I_SHIFT)

Modified: trunk/target-cris/cpu.h
===================================================================
--- trunk/target-cris/cpu.h	2008-06-09 23:07:50 UTC (rev 4718)
+++ trunk/target-cris/cpu.h	2008-06-09 23:18:06 UTC (rev 4719)
@@ -29,12 +29,11 @@
 
 #define ELF_MACHINE	EM_CRIS
 
-#define EXCP_MMU_EXEC    0
-#define EXCP_MMU_READ    1
-#define EXCP_MMU_WRITE   2
-#define EXCP_MMU_FLUSH   3
-#define EXCP_MMU_FAULT   4
-#define EXCP_BREAK      16 /* trap.  */
+#define EXCP_NMI        1
+#define EXCP_GURU       2
+#define EXCP_BUSFAULT   3
+#define EXCP_IRQ        4
+#define EXCP_BREAK      5
 
 /* Register aliases. R0 - R15 */
 #define R_FP  8
@@ -54,11 +53,14 @@
 #define PR_EBP 9
 #define PR_ERP 10
 #define PR_SRP 11
+#define PR_NRP 12
 #define PR_CCS 13
 #define PR_USP 14
 #define PR_SPC 15
 
 /* CPU flags.  */
+#define Q_FLAG 0x80000000
+#define M_FLAG 0x40000000
 #define S_FLAG 0x200
 #define R_FLAG 0x100
 #define P_FLAG 0x80
@@ -154,7 +156,6 @@
 		uint32_t lo;
 	} tlbsets[2][4][16];
 
-	int features;
 	int user_mode_only;
 
 	CPU_COMMON

Modified: trunk/target-cris/helper.c
===================================================================
--- trunk/target-cris/helper.c	2008-06-09 23:07:50 UTC (rev 4718)
+++ trunk/target-cris/helper.c	2008-06-09 23:18:06 UTC (rev 4719)
@@ -78,13 +78,13 @@
 	miss = cris_mmu_translate(&res, env, address, rw, mmu_idx);
 	if (miss)
 	{
-		if (env->exception_index == EXCP_MMU_FAULT)
+		if (env->exception_index == EXCP_BUSFAULT)
 			cpu_abort(env, 
 				  "CRIS: Illegal recursive bus fault."
 				  "addr=%x rw=%d\n",
 				  address, rw);
 
-		env->exception_index = EXCP_MMU_FAULT;
+		env->exception_index = EXCP_BUSFAULT;
 		env->fault_vector = res.bf_vec;
 		r = 1;
 	}
@@ -120,17 +120,20 @@
 			env->pregs[PR_ERP] = env->pc + 2;
 			break;
 
-		case EXCP_MMU_FAULT:
+		case EXCP_NMI:
+			/* NMI is hardwired to vector zero.  */
+			ex_vec = 0;
+			env->pregs[PR_CCS] &= ~M_FLAG;
+			env->pregs[PR_NRP] = env->pc;
+			break;
+
+		case EXCP_BUSFAULT:
 			ex_vec = env->fault_vector;
 			env->pregs[PR_ERP] = env->pc;
 			break;
 
 		default:
-			/* Is the core accepting interrupts?  */
-			if (!(env->pregs[PR_CCS] & I_FLAG))
-				return;
-			/* The interrupt controller gives us the
-			   vector.  */
+			/* The interrupt controller gives us the vector.  */
 			ex_vec = env->interrupt_vector;
 			/* Normal interrupts are taken between
 			   TB's.  env->pc is valid here.  */

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2008-06-09 23:18 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2008-06-09 23:18 [Qemu-devel] [4719] CRIS: Emulate NMIs Edgar E. Iglesias

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).