From patchwork Tue Feb 22 02:50:37 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Stanley X-Patchwork-Id: 1595810 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=FDgvB8Ji; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=2404:9400:2:0:216:3eff:fee1:b9f1; helo=lists.ozlabs.org; envelope-from=pdbg-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [IPv6:2404:9400:2:0:216:3eff:fee1:b9f1]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4K2kFp3JhXz9sFk for ; Tue, 22 Feb 2022 13:51:26 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4K2kFh5jNZz2yJw for ; Tue, 22 Feb 2022 13:51:20 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=FDgvB8Ji; dkim-atps=neutral X-Original-To: pdbg@lists.ozlabs.org Delivered-To: pdbg@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::102d; helo=mail-pj1-x102d.google.com; envelope-from=joel.stan@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=FDgvB8Ji; dkim-atps=neutral Received: from mail-pj1-x102d.google.com (mail-pj1-x102d.google.com [IPv6:2607:f8b0:4864:20::102d]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4K2kFV5jFLz2yHL for ; Tue, 22 Feb 2022 13:51:10 +1100 (AEDT) Received: by mail-pj1-x102d.google.com with SMTP id b8so16941230pjb.4 for ; Mon, 21 Feb 2022 18:51:11 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=+wqldjVWo/9WwBU/Z7dwbk1VOc+HBUEOU+elundn3no=; b=FDgvB8Jiqc1yuJx1VuJhMxX5YW3mB5B6iVQX7bBoLRCymqsxs3fzSBNH8d/nfNxuz5 p0mIZy2oGD7Wa3HYNOGqSV9bONceXqRcWD3cjr9TXlGX9cx/FHciIFX95eRmuRuNPac5 2f40wVpg3MrFwbjW9WPQzBh4dNnTHcHY+jWBcyy/wewO0ymYPaCHGPkFy92chVMmXTeK CziBXjoNZMxE3hjS6cURKjVxfKettnyCV9GwdS9mYDcHFAJXhizDnOOSj+l2jstlOAZA 6vFfs7pb9w2RmDMixcuUZepsbzANNsi7n54lH4nBw0fjvmU4hZN5MHT9EaR9PseFPlml fDYQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=+wqldjVWo/9WwBU/Z7dwbk1VOc+HBUEOU+elundn3no=; b=fqfZPePLLdhn3aknLheam7LRVItHzPPjbJ6uaNEqgMVud8ompxBBW70nmgN/w+C4G2 aJuVJy0rmeVc31HwggijoQySUivcx8pWA2YuZbHX2MRaTpISJrkWnDndXgQFl5OxzeBA 1gj0eA1qQGZgiynUd9EiUnJvxpFdClAqoctkyBvqvfa9JRs+mP+YiFRRrjA5d3ePE9Ih r0PkMcLbrqTk8DC2VgQvpeqWbWb+FdxS11qc6esSHtxgWj6GA3tZI3orMYTYqSQiG6pE L/IsPCPmNjCRvG8BF8idKTs4cAd28ktHBNleUPJVWI3aL3LXDqkfrtxRbAoNt1yXkIgJ j2NQ== X-Gm-Message-State: AOAM5308DdObDhUzYBBz2zmtwqX5drlxHyqsnM6HIEKijad6dGK84w+J xjtz0A8lJm8PlpFt6ydUZr+8X9Yzlt8aEg== X-Google-Smtp-Source: ABdhPJy58lOX4eXaf2DIN+HR/TSp7lXvzsBNdYjFj70va5fEvG10nk0sHkP4cf79NdAUylnwazOkcw== X-Received: by 2002:a17:90a:ac0e:b0:1b8:7c57:b5e6 with SMTP id o14-20020a17090aac0e00b001b87c57b5e6mr1900008pjq.166.1645498268196; Mon, 21 Feb 2022 18:51:08 -0800 (PST) Received: from localhost.localdomain ([45.124.203.14]) by smtp.gmail.com with ESMTPSA id z17sm19219265pgf.91.2022.02.21.18.51.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Feb 2022 18:51:07 -0800 (PST) From: Joel Stanley To: pdbg@lists.ozlabs.org, Nicholas Piggin Date: Tue, 22 Feb 2022 13:20:37 +1030 Message-Id: <20220222025038.29925-2-joel@jms.id.au> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220222025038.29925-1-joel@jms.id.au> References: <20220222025038.29925-1-joel@jms.id.au> MIME-Version: 1.0 Subject: [Pdbg] [PATCH 1/2] configure: Add configure check for X-BeenThere: pdbg@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "mailing list for https://github.com/open-power/pdbg development" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Amitay Isaacs Errors-To: pdbg-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Pdbg" From: Amitay Isaacs This is required for sbefifo ioctl definition. Signed-off-by: Amitay Isaacs Signed-off-by: Joel Stanley --- configure.ac | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configure.ac b/configure.ac index 8b4a012177b2..7b5dacafd2ec 100644 --- a/configure.ac +++ b/configure.ac @@ -34,6 +34,11 @@ else AC_SUBST([LIBFDT], ["-lfdt"]) fi +AC_CHECK_HEADER([linux/fsi.h], + [AC_DEFINE([HAVE_LINUX_FSI_H], 1, + [Define to 1 if you have the header file])], + []) + AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS([config.h]) AC_CONFIG_FILES([Makefile]) From patchwork Tue Feb 22 02:50:38 2022 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Joel Stanley X-Patchwork-Id: 1595809 Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@bilbo.ozlabs.org Authentication-Results: bilbo.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=bjmIpqwb; dkim-atps=neutral Authentication-Results: ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.ozlabs.org (client-ip=112.213.38.117; helo=lists.ozlabs.org; envelope-from=pdbg-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org; receiver=) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits)) (No client certificate requested) by bilbo.ozlabs.org (Postfix) with ESMTPS id 4K2kFk4Zvqz9sFk for ; Tue, 22 Feb 2022 13:51:22 +1100 (AEDT) Received: from boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4K2kFj6djLz30RD for ; Tue, 22 Feb 2022 13:51:21 +1100 (AEDT) Authentication-Results: lists.ozlabs.org; dkim=fail reason="signature verification failed" (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=bjmIpqwb; dkim-atps=neutral X-Original-To: pdbg@lists.ozlabs.org Delivered-To: pdbg@lists.ozlabs.org Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=gmail.com (client-ip=2607:f8b0:4864:20::1032; helo=mail-pj1-x1032.google.com; envelope-from=joel.stan@gmail.com; receiver=) Authentication-Results: lists.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256 header.s=20210112 header.b=bjmIpqwb; dkim-atps=neutral Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4K2kFY4jLxz2yHL for ; Tue, 22 Feb 2022 13:51:13 +1100 (AEDT) Received: by mail-pj1-x1032.google.com with SMTP id v4so16975582pjh.2 for ; Mon, 21 Feb 2022 18:51:14 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=sender:from:to:cc:subject:date:message-id:in-reply-to:references :mime-version:content-transfer-encoding; bh=2z9LsWrS6bao6KholIX98I22Bm1TcPhXcHvj81OUZ8A=; b=bjmIpqwb/BYweIApOXuWjN7wCoOSbFjVsovvP/e5Uk87e5id4DFf9RGqDd7S/l6gze qMeL7BA5qqvZkW+IHKqRLGOTfiqLJvEY5ghzNQHTkq5/laRDe99mO8nd1HNwYqL3rQ/7 qIvXaHAdTSB0O8ouad0ZlFYOn7oukQFXJnGg/zZ+WCXCQT9xknsOQc7cI31GPiS8VmBE LR07/mHi1S6G1jZpqptdoyohMwNiqUaK7xBlxWr5XmiIZwuT2PrEHvEbe15js70xYRAH 9Vp2BGJKADqcMcJIsbVcwfVwxzM5TE7tbIfA4XDHcjVrZkW+FEvTdMW6aQeE1HeRVSYG AccQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:sender:from:to:cc:subject:date:message-id :in-reply-to:references:mime-version:content-transfer-encoding; bh=2z9LsWrS6bao6KholIX98I22Bm1TcPhXcHvj81OUZ8A=; b=D49Oq5SNKEGui3ZU8n00Nki1wDUB89whfzoLiGeemakVAeOZceKVTfXEKg8ZkOurpn Fd3xjKoq8eHiKxGtfEsZGGYe9bjC/2miQJ9qsleqF/LP4OYTjTEAqumwb0BR++t8qWyB 98Ljl+3e4ic2seh5VSN9id8R3h+3NRCKBn39zdE5m0nzmwoFIliHlRTYDeK0L+UdfksP J87/eYTs2vc1fDO343jD0G6Kc4D2PYniQtoQWD1HckUHRb0YJncYwdb0yq2w3CyMWmZh n8+EnFx0yqtkyDcos07RiLKOev1Kr7MDNuxZm7bQK5Klab8qXr+c2EbHyzI/1VZpYd/w cZYw== X-Gm-Message-State: AOAM533yitwkGUYeZh0MVy2dGtKhBQ494rXuJNQAvmrFOUOi33Al0RPc ldlGVVIcB1FuHUEZYOsLswmjI6t4RsEvmQ== X-Google-Smtp-Source: ABdhPJxG8kedM0pbVMRTTC2hR1U8e2PrdWH9y4gyY3rNb+xjuQd6YmJVcaZFlL/pBAYrHOdcJRC18w== X-Received: by 2002:a17:90a:8581:b0:1b2:7541:af6c with SMTP id m1-20020a17090a858100b001b27541af6cmr1910225pjn.48.1645498271409; Mon, 21 Feb 2022 18:51:11 -0800 (PST) Received: from localhost.localdomain ([45.124.203.14]) by smtp.gmail.com with ESMTPSA id z17sm19219265pgf.91.2022.02.21.18.51.08 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 21 Feb 2022 18:51:10 -0800 (PST) From: Joel Stanley To: pdbg@lists.ozlabs.org, Nicholas Piggin Date: Tue, 22 Feb 2022 13:20:38 +1030 Message-Id: <20220222025038.29925-3-joel@jms.id.au> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20220222025038.29925-1-joel@jms.id.au> References: <20220222025038.29925-1-joel@jms.id.au> MIME-Version: 1.0 Subject: [Pdbg] [PATCH 2/2] libsbefifo: Implement long read timeout for chip-ops X-BeenThere: pdbg@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: "mailing list for https://github.com/open-power/pdbg development" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Amitay Isaacs Errors-To: pdbg-bounces+incoming=patchwork.ozlabs.org@lists.ozlabs.org Sender: "Pdbg" From: Amitay Isaacs SBE interface specification lists several sbe chip-ops that require long read timeout as those chip-ops can take up to 30 seconds to complete. Reset the long timeout back to the default after performing the chip-op. Signed-off-by: Amitay Isaacs Signed-off-by: Joel Stanley --- libsbefifo/sbefifo_private.h | 2 ++ libsbefifo/cmd_array.c | 12 +++++++++++ libsbefifo/cmd_control.c | 6 ++++++ libsbefifo/cmd_generic.c | 6 ++++++ libsbefifo/cmd_memory.c | 23 ++++++++++++++++++++ libsbefifo/cmd_mpipl.c | 18 ++++++++++++++++ libsbefifo/cmd_register.c | 12 +++++++++++ libsbefifo/cmd_ring.c | 18 ++++++++++++++++ libsbefifo/connect.c | 41 ++++++++++++++++++++++++++++++++++++ 9 files changed, 138 insertions(+) diff --git a/libsbefifo/sbefifo_private.h b/libsbefifo/sbefifo_private.h index 3c5ebcefb288..373f7f3c90ed 100644 --- a/libsbefifo/sbefifo_private.h +++ b/libsbefifo/sbefifo_private.h @@ -83,6 +83,8 @@ struct sbefifo_context { uint32_t ffdc_len; }; +int sbefifo_set_long_timeout(struct sbefifo_context *sctx); +int sbefifo_reset_timeout(struct sbefifo_context *sctx); void sbefifo_debug(const char *fmt, ...); void sbefifo_ffdc_clear(struct sbefifo_context *sctx); diff --git a/libsbefifo/cmd_array.c b/libsbefifo/cmd_array.c index 1ff8c03d7278..d579eafdfb77 100644 --- a/libsbefifo/cmd_array.c +++ b/libsbefifo/cmd_array.c @@ -69,12 +69,18 @@ int sbefifo_control_fast_array(struct sbefifo_context *sctx, uint16_t target_typ if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_control_fast_array_pull(out, out_len); if (out) free(out); @@ -136,6 +142,10 @@ int sbefifo_control_trace_array(struct sbefifo_context *sctx, uint16_t target_ty if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + /* The size of returned data is just a guess */ out_len = 16 * sizeof(uint32_t); rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); @@ -143,6 +153,8 @@ int sbefifo_control_trace_array(struct sbefifo_context *sctx, uint16_t target_ty if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_control_trace_array_pull(out, out_len, trace_data, trace_data_len); if (out) free(out); diff --git a/libsbefifo/cmd_control.c b/libsbefifo/cmd_control.c index e64f555c665d..5fb44d7a80cc 100644 --- a/libsbefifo/cmd_control.c +++ b/libsbefifo/cmd_control.c @@ -64,12 +64,18 @@ int sbefifo_istep_execute(struct sbefifo_context *sctx, uint8_t major, uint8_t m if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_istep_execute_pull(out, out_len); if (out) free(out); diff --git a/libsbefifo/cmd_generic.c b/libsbefifo/cmd_generic.c index 16c61f4a7863..d0514cd1da6b 100644 --- a/libsbefifo/cmd_generic.c +++ b/libsbefifo/cmd_generic.c @@ -199,12 +199,18 @@ int sbefifo_quiesce(struct sbefifo_context *sctx) if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_quiesce_pull(out, out_len); if (out) free(out); diff --git a/libsbefifo/cmd_memory.c b/libsbefifo/cmd_memory.c index 4195a1269963..7390ee36d435 100644 --- a/libsbefifo/cmd_memory.c +++ b/libsbefifo/cmd_memory.c @@ -125,6 +125,10 @@ int sbefifo_mem_get(struct sbefifo_context *sctx, uint64_t addr, uint32_t size, if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + /* length is 6th word in the request */ len = be32toh(*(uint32_t *)(msg + 20)); extra_bytes = 0; @@ -141,6 +145,7 @@ int sbefifo_mem_get(struct sbefifo_context *sctx, uint64_t addr, uint32_t size, if (rc) return rc; + sbefifo_reset_timeout(sctx); rc = sbefifo_mem_get_pull(out, out_len, addr, size, flags, data); if (out) @@ -206,12 +211,18 @@ int sbefifo_mem_put(struct sbefifo_context *sctx, uint64_t addr, uint8_t *data, if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 1 * 4; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_mem_put_pull(out, out_len); if (out) free(out); @@ -295,6 +306,10 @@ int sbefifo_sram_get(struct sbefifo_context *sctx, uint16_t chiplet_id, uint64_t if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + /* length is 6th word in the request */ len = be32toh(*(uint32_t *)(msg + 20)); @@ -304,6 +319,8 @@ int sbefifo_sram_get(struct sbefifo_context *sctx, uint16_t chiplet_id, uint64_t if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_sram_get_pull(out, out_len, addr, size, data, data_len); if (out) free(out); @@ -375,12 +392,18 @@ int sbefifo_sram_put(struct sbefifo_context *sctx, uint16_t chiplet_id, uint64_t if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 4; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_sram_put_pull(out, out_len); if (out) free(out); diff --git a/libsbefifo/cmd_mpipl.c b/libsbefifo/cmd_mpipl.c index 1d3249483375..9248b9536886 100644 --- a/libsbefifo/cmd_mpipl.c +++ b/libsbefifo/cmd_mpipl.c @@ -61,12 +61,18 @@ int sbefifo_mpipl_enter(struct sbefifo_context *sctx) if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_mpipl_enter_pull(out, out_len); if (out) free(out); @@ -112,12 +118,18 @@ int sbefifo_mpipl_continue(struct sbefifo_context *sctx) if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_mpipl_continue_pull(out, out_len); if (out) free(out); @@ -224,12 +236,18 @@ int sbefifo_mpipl_get_ti_info(struct sbefifo_context *sctx, uint8_t **data, uint if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_mpipl_get_ti_info_pull(out, out_len, data, data_len); if (out) free(out); diff --git a/libsbefifo/cmd_register.c b/libsbefifo/cmd_register.c index 1e74b6ec4eb9..076b774cb905 100644 --- a/libsbefifo/cmd_register.c +++ b/libsbefifo/cmd_register.c @@ -88,12 +88,18 @@ int sbefifo_register_get(struct sbefifo_context *sctx, uint8_t core_id, uint8_t if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = reg_count * 8; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_register_get_pull(out, out_len, reg_count, value); if (out) free(out); @@ -154,12 +160,18 @@ int sbefifo_register_put(struct sbefifo_context *sctx, uint8_t core_id, uint8_t if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_register_put_pull(out, out_len); if (out) free(out); diff --git a/libsbefifo/cmd_ring.c b/libsbefifo/cmd_ring.c index 44e8effc4c99..cffb3a119b02 100644 --- a/libsbefifo/cmd_ring.c +++ b/libsbefifo/cmd_ring.c @@ -71,6 +71,10 @@ int sbefifo_ring_get(struct sbefifo_context *sctx, uint32_t ring_addr, uint32_t if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + /* multiples of 64 bits */ out_len = (ring_len_bits + 63) / 8; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); @@ -78,6 +82,8 @@ int sbefifo_ring_get(struct sbefifo_context *sctx, uint32_t ring_addr, uint32_t if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_ring_get_pull(out, out_len, ring_len_bits, ring_data, ring_len); if (out) free(out); @@ -125,12 +131,18 @@ int sbefifo_ring_put(struct sbefifo_context *sctx, uint16_t ring_mode, uint8_t * if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(msg); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_ring_put_pull(out, out_len); if (out) free(out); @@ -185,12 +197,18 @@ int sbefifo_ring_put_from_image(struct sbefifo_context *sctx, uint16_t target, u if (rc) return rc; + rc = sbefifo_set_long_timeout(sctx); + if (rc) + return rc; + out_len = 0; rc = sbefifo_operation(sctx, msg, msg_len, &out, &out_len); free(out); if (rc) return rc; + sbefifo_reset_timeout(sctx); + rc = sbefifo_ring_put_from_image_pull(out, out_len); if (out) free(out); diff --git a/libsbefifo/connect.c b/libsbefifo/connect.c index 1d23af5ec896..698a38cc3094 100644 --- a/libsbefifo/connect.c +++ b/libsbefifo/connect.c @@ -21,6 +21,17 @@ #include #include #include +#include + +#ifdef HAVE_LINUX_FSI_H +#include +#else +#include +#endif /* HAVE_LINUX_FSI_H */ + +#ifndef FSI_SBEFIFO_READ_TIMEOUT +#define FSI_SBEFIFO_READ_TIMEOUT _IOW('s', 0x00, unsigned int) +#endif #include "libsbefifo.h" #include "sbefifo_private.h" @@ -106,6 +117,36 @@ int sbefifo_proc(struct sbefifo_context *sctx) return sctx->proc; } +int sbefifo_set_long_timeout(struct sbefifo_context *sctx) +{ + unsigned int long_timeout = 30; + int rc; + + LOG("long_timeout: %u sec\n", long_timeout); + rc = ioctl(sctx->fd, FSI_SBEFIFO_READ_TIMEOUT, &long_timeout); + if (rc == -1 && errno == EINVAL) { + /* Do not fail if kernel does not implement ioctl */ + rc = 0; + } + + return rc; +} + +int sbefifo_reset_timeout(struct sbefifo_context *sctx) +{ + unsigned int timeout = 0; + int rc; + + LOG("reset_timeout\n"); + rc = ioctl(sctx->fd, FSI_SBEFIFO_READ_TIMEOUT, &timeout); + if (rc == -1 && errno == EINVAL) { + /* Do not fail if kernel does not implement ioctl */ + rc = 0; + } + + return rc; +} + void sbefifo_debug(const char *fmt, ...) { va_list ap;