summaryrefslogtreecommitdiff
path: root/lib/igt_chamelium.c
diff options
context:
space:
mode:
authorKunal Joshi <kunal1.joshi@intel.com>2021-05-10 23:29:46 +0530
committerKunal Joshi <kunal1.joshi@intel.com>2021-05-11 10:13:26 +0530
commit355269577baef0c5d8114e8851acaeac657e4fe6 (patch)
tree61d70d6ba451668728777d0f954417bf5fd64610 /lib/igt_chamelium.c
parentfdff4bba7abf9cb7c8ea21abf14e36d344ebb8c1 (diff)
lib/igt_chamelium: Retry DP FSM on Failure
We have a thread called chamelium_fsm_mon which monitors HPD events triggered by chamelium, Unfortunately not always the HPD event arrives in a fixed interval (mostly does), Quick fix to this is to retry. v2: Remove redundant assert (Bhanu) v3: Cleanup (Petri) Fixes :- https://gitlab.freedesktop.org/drm/intel/-/issues/262 Cc: Petri Latvala <petri.latvala@intel.com> Cc: Modem Bhanuprakash <bhanuprakash.modem@intel.com> Signed-off-by: Kunal Joshi <kunal1.joshi@intel.com> Reviewed-by: Petri Latvala <petri.latvala@intel.com>
Diffstat (limited to 'lib/igt_chamelium.c')
-rw-r--r--lib/igt_chamelium.c27
1 files changed, 22 insertions, 5 deletions
diff --git a/lib/igt_chamelium.c b/lib/igt_chamelium.c
index 7085122a..b4d838bb 100644
--- a/lib/igt_chamelium.c
+++ b/lib/igt_chamelium.c
@@ -522,12 +522,29 @@ static xmlrpc_value *chamelium_rpc(struct chamelium *chamelium,
{
xmlrpc_value *res;
va_list va_args;
+ int fsm_trials_left = 5;
+
+ if (strcmp(method_name, "CaptureVideo") == 0
+ || strcmp(method_name, "StartCapturingVideo") == 0) {
+ while (fsm_trials_left) {
+ va_start(va_args, format_str);
+ res = __chamelium_rpc_va(chamelium, fsm_port,
+ method_name, format_str,
+ va_args);
+ va_end(va_args);
+
+ if (!chamelium->env.fault_occurred)
+ break;
- va_start(va_args, format_str);
- res = __chamelium_rpc_va(chamelium, fsm_port, method_name,
- format_str, va_args);
- va_end(va_args);
-
+ igt_debug("DP FSM failed retrying, tries left %d\n", fsm_trials_left);
+ --fsm_trials_left;
+ }
+ } else {
+ va_start(va_args, format_str);
+ res = __chamelium_rpc_va(chamelium, fsm_port, method_name,
+ format_str, va_args);
+ va_end(va_args);
+ }
igt_assert_f(!chamelium->env.fault_occurred,
"Chamelium RPC call failed: %s\n",
chamelium->env.fault_string);