Lines Matching refs:self
81 def __init__(self, cfg, family, softreset, pinreset, dev_id, erase=False, argument
85 self.hex_ = cfg.hex_file
87 self.family = family.lower() if family else None
88 self.softreset = softreset
89 self.pinreset = pinreset
90 self.dev_id = dev_id
91 self.erase = bool(erase)
92 self.erase_mode = erase_mode
93 self.ext_erase_mode = ext_erase_mode
94 self.reset = bool(reset)
95 self.force = force
96 self.recover = bool(recover)
99 self.suit_starter = False
101 self.tool_opt = []
104 self.tool_opt += opts
160 def ensure_snr(self): argument
162 dev_id = self.dev_id
169 self.dev_id = [d.lstrip("0") for d in dev_id]
172 dev_id = self.get_board_snr(dev_id or "*")
173 self.dev_id = dev_id.lstrip("0")
176 def do_get_boards(self): argument
179 def get_boards(self): argument
180 snrs = self.do_get_boards()
192 def get_board_snr(self, glob): argument
201 snrs = [snr for snr in self.get_boards() if fullmatch(re_glob, snr)]
209 self.verify_snr(board_snr)
240 def ensure_family(self): argument
243 if self.family is not None:
246 if self.build_conf.getboolean('CONFIG_SOC_SERIES_NRF51X'):
247 self.family = 'nrf51'
248 elif self.build_conf.getboolean('CONFIG_SOC_SERIES_NRF52X'):
249 self.family = 'nrf52'
250 elif self.build_conf.getboolean('CONFIG_SOC_SERIES_NRF53X'):
251 self.family = 'nrf53'
252 elif self.build_conf.getboolean('CONFIG_SOC_SERIES_NRF54LX'):
253 self.family = 'nrf54l'
254 elif self.build_conf.getboolean('CONFIG_SOC_SERIES_NRF54HX'):
255 self.family = 'nrf54h'
256 elif self.build_conf.getboolean('CONFIG_SOC_SERIES_NRF91X'):
257 self.family = 'nrf91'
258 elif self.build_conf.getboolean('CONFIG_SOC_SERIES_NRF92X'):
259 self.family = 'nrf92'
263 def hex_refers_region(self, region_start, region_end): argument
264 for segment_start, _ in self.hex_contents.segments():
269 def hex_get_uicrs(self): argument
272 if self.family in UICR_RANGES:
273 for uicr_core, uicr_range in UICR_RANGES[self.family].items():
274 if self.hex_refers_region(*uicr_range):
279 def flush(self, force=False): argument
281 self.flush_ops(force=force)
284 if self.family == 'nrf53':
293 self.logger.error(
298 if cpe.returncode == ErrVerify and self.hex_get_uicrs():
302 self.logger.warning(
310 def recover_target(self): argument
311 if self.family in ('nrf53', 'nrf54h', 'nrf92'):
312 self.logger.info(
316 self.logger.info('Recovering and erasing all flash memory.')
323 if self.family in ('nrf53', 'nrf92'):
324 self.exec_op('recover', core='Network')
326 self.exec_op('recover')
328 def _get_core(self): argument
329 if self.family in ('nrf54h', 'nrf92'):
330 if (self.build_conf.getboolean('CONFIG_SOC_NRF54H20_CPUAPP') or
331 self.build_conf.getboolean('CONFIG_SOC_NRF54H20_CPUFLPR') or
332 self.build_conf.getboolean('CONFIG_SOC_NRF54H20_CPUPPR') or
333 self.build_conf.getboolean('CONFIG_SOC_NRF9280_CPUAPP')):
335 if (self.build_conf.getboolean('CONFIG_SOC_NRF54H20_CPURAD') or
336 self.build_conf.getboolean('CONFIG_SOC_NRF9280_CPURAD')):
340 if self.family in ('nrf53'):
341 if self.build_conf.getboolean('CONFIG_SOC_NRF5340_CPUAPP'):
343 if self.build_conf.getboolean('CONFIG_SOC_NRF5340_CPUNET'):
349 def _get_erase_mode(self, mode): argument
361 def program_hex(self): argument
363 self.logger.info(f'Flashing file: {self.hex_}')
366 core = self._get_core()
368 if self.family in ('nrf54h', 'nrf92'):
371 regtool_generated_uicr = self.build_conf.getboolean('CONFIG_NRF_REGTOOL_GENERATE_UICR')
373 if regtool_generated_uicr and not self.hex_get_uicrs().get(core):
380 if self.erase:
381 if self.family == 'nrf54h':
382 self.exec_op('erase', kind='all')
384 self.exec_op('erase', core='Application', kind='all')
385 self.exec_op('erase', core='Network', kind='all')
391 if self.build_conf.get('CONFIG_BOARD_QUALIFIERS') == self.sysbuild_conf.get(
394 mpi_hex_dir = Path(os.path.join(self.cfg.build_dir, 'zephyr'))
397 if self.sysbuild_conf.getboolean('SB_CONFIG_SUIT_MPI_GENERATE'):
399 mpi_hex_dir / self.sysbuild_conf.get('SB_CONFIG_SUIT_MPI_APP_AREA_PATH'))
401 mpi_hex_dir / self.sysbuild_conf.get('SB_CONFIG_SUIT_MPI_RAD_AREA_PATH')
404 self.op_program(
412 self.op_program(
423 if core != 'Application' and self.sysbuild_conf.get('SB_CONFIG_SUIT_ENVELOPE'):
428 self.op_program(
436 if self.build_conf.getboolean("CONFIG_NRF_HALTIUM_GENERATE_UICR"):
437 zephyr_build_dir = Path(self.cfg.build_dir) / 'zephyr'
439 self.op_program(
447 if self.build_conf.getboolean("CONFIG_NRF_HALTIUM_UICR_PERIPHCONF"):
448 self.op_program(
456 if not self.erase and regtool_generated_uicr:
457 self.exec_op('erase', core=core, kind='uicr')
459 if self.erase:
461 elif self.family == 'nrf54l':
462 erase_arg = self._get_erase_mode(self.erase_mode) or 'ERASE_NONE'
471 if self.family in xip_ranges:
472 xip_start, xip_end = xip_ranges[self.family]
473 if self.hex_refers_region(xip_start, xip_end):
475 ext_mem_erase_opt = self._get_erase_mode(self.ext_erase_mode) or \
479 if not ext_mem_erase_opt and self.ext_erase_mode:
480 self.logger.warning('Option --ext-erase-mode ignored, no parts of the '
483 self.logger.debug(f'Erase modes: chip:{erase_arg} ext_mem:'
487 if self.family == 'nrf54h' and core == 'Network':
490 self.op_program(self.hex_, erase_arg, ext_mem_erase_opt, defer=True, core=core)
492 if self.erase or self.recover:
494 keyfile = Path(self.cfg.build_dir).parent / 'keyfile.json'
496 self.logger.info(f'Provisioning key file: {keyfile}')
497 self.exec_op('x-provision-keys', keyfile=str(keyfile), defer=True)
499 self.flush(force=False)
502 def reset_target(self): argument
503 sw_reset = "RESET_HARD" if self.family in ('nrf54h', 'nrf92') else "RESET_SYSTEM"
506 default = sw_reset if self.family == 'nrf52' else "RESET_PIN"
507 kind = (sw_reset if self.softreset else "RESET_PIN" if
508 self.pinreset else default)
510 if self.family == 'nrf52' and kind == "RESET_PIN":
512 self.exec_op('pinreset-enable')
514 self.logger.debug(f'Reset kind: {kind}')
515 self.exec_op('reset', kind=kind)
518 def do_require(self): argument
521 def _check_suit_starter(self, op): argument
529 self.logger.debug(f'suit starter: {file}')
533 def op_program(self, hex_file, erase, ext_mem_erase, defer=False, core=None): argument
534 args = self._op_program(hex_file, erase, ext_mem_erase)
535 self.exec_op('program', defer, core, **args)
537 def _op_program(self, hex_file, erase, ext_mem_erase): argument
545 def exec_op(self, op, defer=False, core=None, **kwargs): argument
553 self.logger.debug(f'defer: {defer} op: {op}')
554 if defer or not self.do_exec_op(op, force=False):
555 self.ops.append(op)
560 if self.suit_starter and self.family == 'nrf54h':
561 file = self._check_suit_starter(_op)
563 args = self._op_program(file, 'ERASE_NONE', None)
567 def do_exec_op(self, op, force=False): argument
572 def flush_ops(self, force=True): argument
578 self.logger.debug('Flushing ops')
579 while self.ops:
580 self.do_exec_op(self.ops.popleft(), force)
582 def do_run(self, command, **kwargs): argument
583 self.do_require()
585 if self.softreset and self.pinreset:
589 if self.erase and self.erase_mode:
593 if self.erase and self.ext_erase_mode:
597 self.ensure_family()
599 if self.family != 'nrf54l' and self.erase_mode:
603 self.ensure_output('hex')
608 self.hex_contents = IntelHex()
610 self.hex_contents.loadfile(self.hex_, format='hex')
612 self.ensure_snr()
614 self.ops = deque()
616 if self.recover:
617 self.recover_target()
618 self.program_hex()
619 if self.reset:
620 self.reset_target()
622 self.flush(force=True)
624 self.logger.info(f'Board(s) with serial number(s) {self.dev_id} '