From fdb872d9cd86f5a7d7dbfb17ee6a2549b29f0d8f Mon Sep 17 00:00:00 2001 From: Sergei Trofimov Date: Wed, 28 Feb 2018 10:20:24 +0000 Subject: [PATCH] fw/target/manager: Add verify_target_responsive() Add a method to check that the target is still responsive, and cache the value so that the target does not need to be repeatedly probed during various stages of wrapping up execution. --- wa/framework/target/manager.py | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/wa/framework/target/manager.py b/wa/framework/target/manager.py index e01b251f..fadb614c 100644 --- a/wa/framework/target/manager.py +++ b/wa/framework/target/manager.py @@ -1,6 +1,7 @@ import logging from wa.framework import signal +from wa.framework.exception import ExecutionError, TargetError from wa.framework.plugin import Parameter from wa.framework.target.descriptor import (get_target_description, instantiate_target, @@ -10,7 +11,6 @@ from wa.framework.target.runtime_parameter_manager import RuntimeParameterManage from devlib import Gem5SimulationPlatform from devlib.utils.misc import memoized -from devlib.exception import TargetError class TargetManager(object): @@ -33,6 +33,7 @@ class TargetManager(object): self.target = None self.assistant = None self.platform_name = None + self.is_responsive = None self.parameters = parameters self.disconnect = parameters.get('disconnect') @@ -82,6 +83,16 @@ class TargetManager(object): def commit_runtime_parameters(self, parameters): self.rpm.commit_runtime_parameters(parameters) + def verify_target_responsive(self): + if not self.target.check_responsive(explode=False): + self.is_responsive = False + if self.target.has('hard_reset'): + self.logger.info('Target unresponsive; performing hard reset') + self.target.reboot(hard=True) + self.is_responsive = True + else: + raise ExecutionError('Target unresponsive and hard reset not supported; bailing.') + def _init_target(self): tdesc = get_target_description(self.target_name) @@ -93,6 +104,8 @@ class TargetManager(object): self.target = instantiate_target(tdesc, self.parameters, connect=False, extra_platform_params=extra_plat_params) + self.is_responsive = True + with signal.wrap('TARGET_CONNECT'): self.target.connect() self.logger.info('Setting up target')