@@ -649,7 +649,7 @@ def MCONTROL_TYPE(xlen):
649649def MCONTROL_DMODE (xlen ):
650650 return 1 << ((xlen )- 5 )
651651def MCONTROL_MASKMAX (xlen ):
652- return 0x3 << ((xlen )- 11 )
652+ return 0x3f << ((xlen )- 11 )
653653
654654MCONTROL_SELECT = 1 << 19
655655MCONTROL_TIMING = 1 << 18
@@ -666,6 +666,7 @@ def MCONTROL_MASKMAX(xlen):
666666
667667MCONTROL_TYPE_NONE = 0
668668MCONTROL_TYPE_MATCH = 2
669+ MCONTROL_TYPE_MATCH6 = 6
669670
670671MCONTROL_ACTION_DEBUG_EXCEPTION = 0
671672MCONTROL_ACTION_DEBUG_MODE = 1
@@ -713,11 +714,23 @@ def set_manual_trigger(self, tdata1, tdata2):
713714 self .gdb .p ("$tdata1=0" )
714715 # Need to write a valid value to tdata2 before writing tdata1
715716 self .gdb .p (f"$tdata2=0x{ tdata2 :x} " )
716- self .gdb .p (f"$tdata1=0x{ tdata1 :x} " )
717717
718+ tdata1_t2 = set_field (tdata1 , MCONTROL_TYPE (self .hart .xlen ),
719+ MCONTROL_TYPE_MATCH )
720+ self .gdb .p (f"$tdata1=0x{ tdata1_t2 :x} " )
718721 tdata2_rb = self .gdb .p ("$tdata2" )
719722 tdata1_rb = self .gdb .p ("$tdata1" )
720- if tdata1_rb == tdata1 and tdata2_rb == tdata2 :
723+ maskmax_rb = tdata1_rb & MCONTROL_MASKMAX (self .hart .xlen )
724+ tdata1_t2 = tdata1_t2 | maskmax_rb
725+ if tdata1_rb == tdata1_t2 and tdata2_rb == tdata2 :
726+ return tselect
727+
728+ tdata1_t6 = set_field (tdata1 , MCONTROL_TYPE (self .hart .xlen ),
729+ MCONTROL_TYPE_MATCH6 )
730+ self .gdb .p (f"$tdata1=0x{ tdata1_t6 :x} " )
731+ tdata2_rb = self .gdb .p ("$tdata2" )
732+ tdata1_rb = self .gdb .p ("$tdata1" )
733+ if tdata1_rb == tdata1_t6 and tdata2_rb == tdata2 :
721734 return tselect
722735
723736 type_rb = tdata1_rb & MCONTROL_TYPE (self .hart .xlen )
@@ -747,8 +760,6 @@ def test(self):
747760
748761 #self.gdb.hbreak("rot13")
749762 tdata1 = MCONTROL_DMODE (self .hart .xlen )
750- tdata1 = set_field (tdata1 , MCONTROL_TYPE (self .hart .xlen ),
751- MCONTROL_TYPE_MATCH )
752763 tdata1 = set_field (tdata1 , MCONTROL_ACTION , MCONTROL_ACTION_DEBUG_MODE )
753764 tdata1 = set_field (tdata1 , MCONTROL_MATCH , MCONTROL_MATCH_EQUAL )
754765 tdata1 |= MCONTROL_M | MCONTROL_S | MCONTROL_U | MCONTROL_EXECUTE
0 commit comments