Lines Matching refs:self
24 def len_of_burn_unit(self): argument
29 def __init__(self, parent, param, skip_read=False): argument
31 super(EfuseBlock, self).__init__(parent, param, skip_read=skip_read)
33 def apply_coding_scheme(self): argument
34 data = self.get_raw(from_read=False)[::-1]
35 if len(data) < self.len_of_burn_unit():
36 add_empty_bytes = self.len_of_burn_unit() - len(data)
38 if self.get_coding_scheme() == self.parent.REGS.CODING_SCHEME_RS:
62 self, argument
69 self.Blocks = EfuseDefineBlocks()
70 self.Fields = EfuseDefineFields(extend_efuse_table)
71 self.REGS = EfuseDefineRegisters
72 self.BURN_BLOCK_DATA_NAMES = self.Blocks.get_burn_block_data_names()
73 self.BLOCKS_FOR_KEYS = self.Blocks.get_blocks_for_keys()
74 self._esp = esp
75 self.debug = debug
76 self.do_not_confirm = do_not_confirm
83 flags = self._esp.get_security_info()["flags"]
89 self.blocks = [
90 EfuseBlock(self, self.Blocks.get(block), skip_read=skip_connect)
91 for block in self.Blocks.BLOCKS
94 self.get_coding_scheme_warnings()
95 self.efuses = [EfuseField.convert(self, efuse) for efuse in self.Fields.EFUSES]
96 self.efuses += [
97 EfuseField.convert(self, efuse) for efuse in self.Fields.KEYBLOCKS
100 self.efuses += [
101 EfuseField.convert(self, efuse)
102 for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
105 if self["BLK_VERSION_MINOR"].get() == 2:
106 self.efuses += [
107 EfuseField.convert(self, efuse)
108 for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
110 self.efuses += [
111 EfuseField.convert(self, efuse) for efuse in self.Fields.CALC
114 def __getitem__(self, efuse_name): argument
116 for e in self.efuses:
120 for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES:
124 self.efuses += [
125 EfuseField.convert(self, efuse)
126 for efuse in self.Fields.BLOCK2_CALIBRATION_EFUSES
130 for e in self.efuses:
135 def read_coding_scheme(self): argument
136 self.coding_scheme = self.REGS.CODING_SCHEME_RS
138 def print_status_regs(self): argument
140 self.blocks[0].print_block(self.blocks[0].err_bitarray, "err__regs", debug=True)
143 "EFUSE_RD_RS_ERR0_REG", self.read_reg(self.REGS.EFUSE_RD_RS_ERR0_REG)
148 "EFUSE_RD_RS_ERR1_REG", self.read_reg(self.REGS.EFUSE_RD_RS_ERR1_REG)
152 def efuse_controller_setup(self): argument
153 self.set_efuse_timing()
154 self.clear_pgm_registers()
155 self.wait_efuse_idle()
157 def write_efuses(self, block): argument
158 self.efuse_program(block)
159 return self.get_coding_scheme_warnings(silent=True)
161 def clear_pgm_registers(self): argument
162 self.wait_efuse_idle()
164 self.REGS.EFUSE_PGM_DATA0_REG, self.REGS.EFUSE_PGM_DATA0_REG + 32, 4
166 self.write_reg(r, 0)
168 def wait_efuse_idle(self): argument
169 deadline = time.time() + self.REGS.EFUSE_BURN_TIMEOUT
171 cmds = self.REGS.EFUSE_PGM_CMD | self.REGS.EFUSE_READ_CMD
172 if self.read_reg(self.REGS.EFUSE_CMD_REG) & cmds == 0:
173 if self.read_reg(self.REGS.EFUSE_CMD_REG) & cmds == 0:
182 def efuse_program(self, block): argument
183 self.wait_efuse_idle()
184 self.write_reg(self.REGS.EFUSE_CONF_REG, self.REGS.EFUSE_WRITE_OP_CODE)
185 self.write_reg(self.REGS.EFUSE_CMD_REG, self.REGS.EFUSE_PGM_CMD | (block << 2))
186 self.wait_efuse_idle()
187 self.clear_pgm_registers()
188 self.efuse_read()
190 def efuse_read(self): argument
191 self.wait_efuse_idle()
192 self.write_reg(self.REGS.EFUSE_CONF_REG, self.REGS.EFUSE_READ_OP_CODE)
197 self.write_reg(
198 self.REGS.EFUSE_CMD_REG, self.REGS.EFUSE_READ_CMD, delay_after_us=1000
200 self.wait_efuse_idle()
202 secure_download_mode_before = self._esp.secure_download_mode
205 self._esp = self.reconnect_chip(self._esp)
208 if not self["DIS_DOWNLOAD_MODE"].get() and self[
221 if self._esp.secure_download_mode and not secure_download_mode_before:
223 if not self["ENABLE_SECURITY_DOWNLOAD"].get() and self[
234 def set_efuse_timing(self): argument
237 apb_freq = self.get_crystal_freq()
243 self.update_reg(self.REGS.EFUSE_DAC_CONF_REG, self.REGS.EFUSE_DAC_NUM_M, 0xFF)
244 self.update_reg(
245 self.REGS.EFUSE_DAC_CONF_REG, self.REGS.EFUSE_DAC_CLK_DIV_M, 0x28
247 self.update_reg(
248 self.REGS.EFUSE_WR_TIM_CONF1_REG, self.REGS.EFUSE_PWR_ON_NUM_M, 0x3000
250 self.update_reg(
251 self.REGS.EFUSE_WR_TIM_CONF2_REG, self.REGS.EFUSE_PWR_OFF_NUM_M, 0x190
254 def get_coding_scheme_warnings(self, silent=False): argument
259 for block in self.blocks:
262 self.read_reg(self.REGS.EFUSE_RD_REPEAT_ERR0_REG + offs * 4)
271 addr_reg, err_num_mask, err_num_offs, fail_bit = self.REGS.BLOCK_ERRORS[
278 reg_value = self.read_reg(addr_reg)
287 if (self.debug or ret_fail) and not silent:
288 self.print_status_regs()
291 def summary(self): argument
309 def get(self, from_read=True): argument
310 hi_bits = self.parent["WAFER_VERSION_MINOR_HI"].get(from_read)
311 assert self.parent["WAFER_VERSION_MINOR_HI"].bit_len == 1
312 lo_bits = self.parent["WAFER_VERSION_MINOR_LO"].get(from_read)
313 assert self.parent["WAFER_VERSION_MINOR_LO"].bit_len == 3
316 def save(self, new_value): argument
317 raise esptool.FatalError("Burning %s is not supported" % self.name)
321 def get(self, from_read=True): argument
322 value = self.get_bitstring(from_read)
328 def get(self, from_read=True): argument
330 value = self.get_bitstring(from_read)
336 def check_format(self, new_value_str): argument
341 num_bytes = 8 if self.name == "MAC_EUI64" else 6
348 hexad = hexad.split(" ", 1)[0] if self.is_field_calculated() else hexad
357 if not self.is_field_calculated():
364 def check(self): argument
365 errs, fail = self.parent.get_block_errors(self.block)
367 output = "Block%d has ERRORS:%d FAIL:%d" % (self.block, errs, fail)
372 def get(self, from_read=True): argument
373 if self.name == "CUSTOM_MAC":
374 mac = self.get_raw(from_read)[::-1]
375 elif self.name == "MAC":
376 mac = self.get_raw(from_read)
377 elif self.name == "MAC_EUI64":
378 mac = self.parent["MAC"].get_bitstring(from_read).copy()
379 mac_ext = self.parent["MAC_EXT"].get_bitstring(from_read)
383 mac = self.get_raw(from_read)
384 return "%s %s" % (util.hexify(mac, ":"), self.check())
386 def save(self, new_value): argument
394 if self.name == "CUSTOM_MAC":
395 bitarray_mac = self.convert_to_bitstring(new_value)
396 print_field(self, bitarray_mac)
397 super(EfuseMacField, self).save(new_value)
424 def check_format(self, new_value_str): argument
428 for purpose_name in self.KEY_PURPOSES:
433 if int(raw_val) not in [p[1] for p in self.KEY_PURPOSES if p[1] > 0]:
439 def need_reverse(self, new_key_purpose): argument
440 for key in self.KEY_PURPOSES:
444 def need_rd_protect(self, new_key_purpose): argument
445 for key in self.KEY_PURPOSES:
449 def get(self, from_read=True): argument
450 for p in self.KEY_PURPOSES:
451 if p[1] == self.get_raw(from_read):
455 def get_name(self, raw_val): argument
456 for key in self.KEY_PURPOSES:
460 def save(self, new_value): argument
461 raw_val = int(self.check_format(str(new_value)))
462 str_new_value = self.get_name(raw_val)
463 if self.name == "KEY_PURPOSE_5" and str_new_value.startswith("XTS_AES"):
465 return super(EfuseKeyPurposeField, self).save(raw_val)