@@ -314,37 +314,37 @@ def get_pt(self, addr, uncached=False):
314314
315315 return cached , self .pt_cache [addr ]
316316
317- # def flush_pt(self, addr):
318- # assert addr in self.pt_cache
319- # self.iface.writemem(addr, struct.pack(f"<{self.Lx_SIZE}Q", *self.pt_cache[addr]))
317+ def flush_pt (self , addr ):
318+ assert addr in self .pt_cache
319+ self .iface .writemem (addr , struct .pack (f"<{ self .Lx_SIZE } Q" , * self .pt_cache [addr ]))
320320
321- # def initialize(self):
322- # for i in range(15):
323- # self.regs.TCR[i].reg = R_TCR(TRANSLATE_ENABLE=1)
324- # self.regs.TCR[15].reg = R_TCR(BYPASS_DART=1)
321+ def initialize (self ):
322+ for i in range (15 ):
323+ self .regs .TCR [i ].reg = R_TCR (TRANSLATE_ENABLE = 1 )
324+ self .regs .TCR [15 ].reg = R_TCR (BYPASS_DART = 1 )
325325
326- # for i in range(16):
327- # for j in range(4):
328- # self.regs.TTBR[i, j].reg = R_TTBR(VALID = 0)
326+ for i in range (16 ):
327+ self .regs .TTBR [i ].reg = R_TTBR (VALID = 0 )
329328
330- # self.regs.ERROR.val = 0xffffffff
331- # self.regs.UNK1.val = 0
332- # self.regs.ENABLED_STREAMS .val = 0
333- # self.enabled_streams = 0
329+ # self.regs.ERROR.val = 0xffffffff
330+ # self.regs.UNK1.val = 0
331+ self .regs .DISABLE_STREAMS [ 0 ] .val = 0xffff
332+ self .enabled_streams = 0
334333
335- # self.invalidate_streams()
334+ self .invalidate_streams ()
336335
337336# def show_error(self):
338337# if self.regs.ERROR.reg.FLAG:
339338# print(f"ERROR: {self.regs.ERROR.reg!s}")
340339# print(f"ADDR: {self.regs.ERROR_ADDR_HI.val:#x}:{self.regs.ERROR_ADDR_LO.val:#x}")
341340# self.regs.ERROR.val = 0xffffffff
342341
343- # def invalidate_streams(self, streams=0xffffffff):
344- # self.regs.STREAM_SELECT.val = streams
345- # self.regs.STREAM_COMMAND.val = R_STREAM_COMMAND(INVALIDATE=1)
346- # while self.regs.STREAM_COMMAND.reg.BUSY:
347- # pass
342+ def invalidate_streams (self , streams = 0xffff ):
343+ for sid in range (256 ):
344+ if streams & (1 << sid ):
345+ self .regs .TLB_OP .val = R_TLB_OP (STREAM = sid , OP = 1 )
346+ while self .regs .TLB_OP .reg .BUSY :
347+ pass
348348
349349 def invalidate_cache (self ):
350350 self .pt_cache = {}
0 commit comments