This is an automated email from Gerrit.

Hsiangkai Wang (hsiang...@gmail.com) just uploaded a new patch set to Gerrit, 
which you can find at http://openocd.zylin.com/1280

-- gerrit

commit cdbefce784fb39e378d06a1ab0710fea2a29eeba
Author: Hsiangkai Wang <hsiang...@gmail.com>
Date:   Wed Mar 20 19:32:25 2013 +0800

    nds32: avoid generating exceptions as updating system registers
    
    If target writes reserved value to R/W register fields,
    it will generate exceptions. To avoid users to set these
    unexpected values to registers, add a filter to skip the
    reserved values as updating registers.
    
    Change-Id: Ibffabc3dbd0bb00fbca35b097cf82c7a8df8059a
    Signed-off-by: Hsiangkai Wang <hsiang...@gmail.com>

diff --git a/src/target/nds32.c b/src/target/nds32.c
index dab8419..0738461 100644
--- a/src/target/nds32.c
+++ b/src/target/nds32.c
@@ -184,6 +184,10 @@ static int nds32_set_core_reg(struct reg *reg, uint8_t 
*buf)
                return ERROR_TARGET_NOT_HALTED;
        }
 
+       /* ignore values that will generate exception */
+       if (nds32_reg_exception(reg_arch_info->num, value))
+               return ERROR_OK;
+
        buf_set_u32(reg->value, 0, 32, value);
 
        /* update registers to take effect right now */
diff --git a/src/target/nds32_reg.c b/src/target/nds32_reg.c
index 9c9f0cc..384e9eb 100644
--- a/src/target/nds32_reg.c
+++ b/src/target/nds32_reg.c
@@ -21,10 +21,18 @@
 #include "config.h"
 #endif
 
+#include <helper/log.h>
 #include "nds32_reg.h"
 
 static bool nds32_reg_init_done;
 static struct nds32_reg_s nds32_regs[TOTAL_REG_NUM];
+static struct nds32_reg_exception_s nds32_ex_reg_values[] = {
+       {MR3, 1, 0x7, 0},
+       {MR3, 1, 0x7, 4},
+       {MR3, 1, 0x7, 6},
+       {MR3, 8, 0x7, 3},
+       {0, 0, 0, 0},
+};
 
 static inline void nds32_reg_set(uint32_t number, const char *simple_mnemonic,
                const char *symbolic_mnemonic, uint32_t sr_index,
@@ -335,3 +343,28 @@ const char *nds32_reg_symbolic_name(uint32_t number)
 {
        return nds32_regs[number].symbolic_mnemonic;
 }
+
+bool nds32_reg_exception(uint32_t number, uint32_t value)
+{
+       int i;
+       struct nds32_reg_exception_s *ex_reg_value;
+       uint32_t field_value;
+
+       i = 0;
+       while (nds32_ex_reg_values[i].reg_num != 0) {
+               ex_reg_value = nds32_ex_reg_values + i;
+
+               if (ex_reg_value->reg_num == number) {
+                       field_value = (value >> ex_reg_value->ex_value_bit_pos) 
& ex_reg_value->ex_value_mask;
+                       if (field_value == ex_reg_value->ex_value) {
+                               LOG_WARNING("It will generate exceptions as 
setting %d to %s",
+                                               value, 
nds32_regs[number].simple_mnemonic);
+                               return true;
+                       }
+               }
+
+               i++;
+       }
+
+       return false;
+}
diff --git a/src/target/nds32_reg.h b/src/target/nds32_reg.h
index 425ae78..739a2cb 100644
--- a/src/target/nds32_reg.h
+++ b/src/target/nds32_reg.h
@@ -303,11 +303,19 @@ struct nds32_reg_s {
        uint8_t size;
 };
 
+struct nds32_reg_exception_s {
+       uint32_t reg_num;
+       uint32_t ex_value_bit_pos;
+       uint32_t ex_value_mask;
+       uint32_t ex_value;
+};
+
 void nds32_reg_init(void);
 uint32_t nds32_reg_sr_index(uint32_t number);
 enum nds32_reg_type_s nds32_reg_type(uint32_t number);
 uint8_t nds32_reg_size(uint32_t number);
 const char *nds32_reg_simple_name(uint32_t number);
 const char *nds32_reg_symbolic_name(uint32_t number);
+bool nds32_reg_exception(uint32_t number, uint32_t value);
 
 #endif

-- 

------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_d2d_mar
_______________________________________________
OpenOCD-devel mailing list
OpenOCD-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/openocd-devel

Reply via email to