From patchwork Thu Aug 24 19:20:54 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kaiser X-Patchwork-Id: 13364590 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id C5A7CC27C40 for ; Thu, 24 Aug 2023 19:24:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BKBbratYnEqZcj+PDiarbGNCP7gszLNgF8sE3VEGOos=; b=Hb8TJYlwmFx2oS Xknw5vgfrZ7JVzf81PjiS7GiieYtf/4zbv1ZEWgB8BMiplNB/CKGKdtNoQcHY2mrrzawjc6sKK7L6 +3ViOyLL7mV27cMpdftQ7dnG/sm1PujCCXv4QnrwBONzXVyrTpE/gIjy/h3EcJFAJBJhWMlItUTDE q22jQkQcV76sP7Qnf/3Nbc4GyetZ+2mrkapgVuZbSP5bMPBLQ9BVbZHPhXQ5l5GdSGf4eAu+D/eQN oCQ1r7XZpnFfx+BrrZeBEwXNHEM9IFF3MZiiGj8VGcViAUCk023h2mJMyCo56R6h9Zx6RexCx0rSO YMRThoGInx7Wvl+Adskg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qZFvw-003etP-1m; Thu, 24 Aug 2023 19:23:56 +0000 Received: from viti.kaiser.cx ([2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qZFvs-003eqw-2X for linux-arm-kernel@lists.infradead.org; Thu, 24 Aug 2023 19:23:54 +0000 Received: from dslb-188-097-211-187.188.097.pools.vodafone-ip.de ([188.97.211.187] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1qZFvi-00036P-8z; Thu, 24 Aug 2023 21:23:42 +0200 From: Martin Kaiser To: Herbert Xu Cc: Alexander Stein , linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 1/6] hwrng: imx-rngc - reasonable timeout for selftest Date: Thu, 24 Aug 2023 21:20:54 +0200 Message-Id: <20230824192059.1569591-2-martin@kaiser.cx> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230824192059.1569591-1-martin@kaiser.cx> References: <20230824192059.1569591-1-martin@kaiser.cx> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230824_122352_995356_1000B0BE X-CRM114-Status: GOOD ( 10.60 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Set a more reasonable timeout for the rngc selftest. According to the reference manual, "The self test takes approximately 29,000 cycles to complete." With the rngc peripheral clock running at 66.5 MHz, this would be 436us. Let's use 1.5ms insteaf of 3sec for the timeout. Signed-off-by: Martin Kaiser --- v2: - adjust timeouts before we switch to polling drivers/char/hw_random/imx-rngc.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/hw_random/imx-rngc.c index e4b385b01b11..6024c923b67d 100644 --- a/drivers/char/hw_random/imx-rngc.c +++ b/drivers/char/hw_random/imx-rngc.c @@ -53,6 +53,7 @@ #define RNGC_TIMEOUT 3000 /* 3 sec */ +#define RNGC_SELFTEST_TIMEOUT 1500 /* us */ static bool self_test = true; module_param(self_test, bool, 0); @@ -110,7 +111,8 @@ static int imx_rngc_self_test(struct imx_rngc *rngc) cmd = readl(rngc->base + RNGC_COMMAND); writel(cmd | RNGC_CMD_SELF_TEST, rngc->base + RNGC_COMMAND); - ret = wait_for_completion_timeout(&rngc->rng_op_done, msecs_to_jiffies(RNGC_TIMEOUT)); + ret = wait_for_completion_timeout(&rngc->rng_op_done, + usecs_to_jiffies(RNGC_SELFTEST_TIMEOUT)); imx_rngc_irq_mask_clear(rngc); if (!ret) return -ETIMEDOUT; From patchwork Thu Aug 24 19:20:55 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kaiser X-Patchwork-Id: 13364593 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 52A0BEE49A5 for ; Thu, 24 Aug 2023 19:24:43 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2GnEVcRnofoyVy3F+RDaW0EY6rdwKmVensO0maurnZ4=; b=JCGFbEaLDsI//d Us5V7Ep18bdHrFktRhMA/ksgTdBw+4m2VIfcVZoDzN5JDFm0RAtoJsUi8AKSoZZhM4m6I1hqE6jAT xZApnx4ZpjDHneWUIa/7w3gEPSG13Dhp80JVg8ONviaW/z2xbBxAs/eq8knuAkC6BxF1sIo2Mr+ps SgD/R0YEJ37/dhpkvkiwC0vWiu8ENYkSzLLDw/P43thMxb9n1ajy5vXB7/Ihw7hvv4HjvacQqAiYk Sq0m4Bdv2+gnS2ijEQn/rD2d/nb8wNxWl5pKDmqJC6mmyhMT/jtxK+R9EtfbefvmyzVvetjPO3RP4 M/GX0Qb5s5ZGUfBD8cOA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qZFwB-003evW-1T; Thu, 24 Aug 2023 19:24:11 +0000 Received: from viti.kaiser.cx ([2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qZFvs-003eqy-2c for linux-arm-kernel@lists.infradead.org; Thu, 24 Aug 2023 19:23:55 +0000 Received: from dslb-188-097-211-187.188.097.pools.vodafone-ip.de ([188.97.211.187] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1qZFvj-00036P-5D; Thu, 24 Aug 2023 21:23:43 +0200 From: Martin Kaiser To: Herbert Xu Cc: Alexander Stein , linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 2/6] hwrng: imx-rngc - reasonable timeout for initial seed Date: Thu, 24 Aug 2023 21:20:55 +0200 Message-Id: <20230824192059.1569591-3-martin@kaiser.cx> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230824192059.1569591-1-martin@kaiser.cx> References: <20230824192059.1569591-1-martin@kaiser.cx> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230824_122353_011437_C2E8AB5C X-CRM114-Status: GOOD ( 11.28 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Set a more reasonable timeout for calculating the initial seed. The reference manuals says that "The initial seed takes approximately 2,000,000 clock cycles." If the rngc peripheral clock runs at 66.5MHz, this is approx. 30ms. A timeout of 100ms is more appropriate that the current value of 3 seconds. We define the timeout in us to simplify the transition to readl_poll_timeout. Signed-off-by: Martin Kaiser --- v2: - adjust timeouts before we switch to polling drivers/char/hw_random/imx-rngc.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/hw_random/imx-rngc.c index 6024c923b67d..8ff3d46674fd 100644 --- a/drivers/char/hw_random/imx-rngc.c +++ b/drivers/char/hw_random/imx-rngc.c @@ -51,9 +51,8 @@ #define RNGC_ERROR_STATUS_STAT_ERR 0x00000008 -#define RNGC_TIMEOUT 3000 /* 3 sec */ - -#define RNGC_SELFTEST_TIMEOUT 1500 /* us */ +#define RNGC_SELFTEST_TIMEOUT 1500 /* us */ +#define RNGC_SEED_TIMEOUT 100000 /* us */ static bool self_test = true; module_param(self_test, bool, 0); @@ -184,7 +183,8 @@ static int imx_rngc_init(struct hwrng *rng) cmd = readl(rngc->base + RNGC_COMMAND); writel(cmd | RNGC_CMD_SEED, rngc->base + RNGC_COMMAND); - ret = wait_for_completion_timeout(&rngc->rng_op_done, msecs_to_jiffies(RNGC_TIMEOUT)); + ret = wait_for_completion_timeout(&rngc->rng_op_done, + usecs_to_jiffies(RNGC_SEED_TIMEOUT)); if (!ret) { ret = -ETIMEDOUT; goto err; From patchwork Thu Aug 24 19:20:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kaiser X-Patchwork-Id: 13364595 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 1A128C6FA8F for ; Thu, 24 Aug 2023 19:24:50 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4lqJjAqOk+8RiX3WrYHZCSn8YaGp02/lokmOXe8xvi0=; b=U7seFq+Zvw8zj0 YfMLFe0z1np65ASjC1fPa1fmXSXTOt1is2oa5Zmyn4P6ve79RIHXh4TebtJvca/jJjsRuAk8KWsrA nKL4VVORdC7oB2YxWSM5QIP79bJ5xmH2O7iGzvpTFz/IK7HjzLnidp4A+1Wu2w78DM03fiAtqJNcy O05lPrHkrIAqTRCSXJJ2Kkm2BtfZThPeXWq+S2S0EqPPeRCHru3yVsqROqwgHa8DSeWRXhzM4r4Cp l6stkc6Gk6Gzf8hQ0TF+YEZWF1JyBKGMmLnN1+CywK0L6pcsSreqZ6jPIkcP+6KXLU/fX6StkfSJr f+kbB4KHE8Rom2zenazA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qZFwC-003ew6-1b; Thu, 24 Aug 2023 19:24:12 +0000 Received: from viti.kaiser.cx ([2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qZFvt-003er2-0J for linux-arm-kernel@lists.infradead.org; Thu, 24 Aug 2023 19:23:55 +0000 Received: from dslb-188-097-211-187.188.097.pools.vodafone-ip.de ([188.97.211.187] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1qZFvj-00036P-Ud; Thu, 24 Aug 2023 21:23:44 +0200 From: Martin Kaiser To: Herbert Xu Cc: Alexander Stein , linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 3/6] hwrng: imx-rngc - use polling to detect end of self test Date: Thu, 24 Aug 2023 21:20:56 +0200 Message-Id: <20230824192059.1569591-4-martin@kaiser.cx> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230824192059.1569591-1-martin@kaiser.cx> References: <20230824192059.1569591-1-martin@kaiser.cx> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230824_122353_276796_CBCC67DF X-CRM114-Status: GOOD ( 12.61 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Use polling to detect the end of the rngc self test. This is much simpler than using an interrupt and a completion. The selftest should take approx. 450us. Keep the overhead to a minimum by polling every 500us. (We've already lowered the timeout to 1.5ms.) Signed-off-by: Martin Kaiser --- v2: - use shorter timeout and polling interval drivers/char/hw_random/imx-rngc.c | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/hw_random/imx-rngc.c index 8ff3d46674fd..09523936d2af 100644 --- a/drivers/char/hw_random/imx-rngc.c +++ b/drivers/char/hw_random/imx-rngc.c @@ -17,6 +17,7 @@ #include #include #include +#include #include #define RNGC_VER_ID 0x0000 @@ -101,22 +102,19 @@ static inline void imx_rngc_irq_unmask(struct imx_rngc *rngc) static int imx_rngc_self_test(struct imx_rngc *rngc) { - u32 cmd; + u32 cmd, status; int ret; - imx_rngc_irq_unmask(rngc); - /* run self test */ cmd = readl(rngc->base + RNGC_COMMAND); writel(cmd | RNGC_CMD_SELF_TEST, rngc->base + RNGC_COMMAND); - ret = wait_for_completion_timeout(&rngc->rng_op_done, - usecs_to_jiffies(RNGC_SELFTEST_TIMEOUT)); - imx_rngc_irq_mask_clear(rngc); - if (!ret) - return -ETIMEDOUT; + ret = readl_poll_timeout(rngc->base + RNGC_STATUS, status, + status & RNGC_STATUS_ST_DONE, 500, RNGC_SELFTEST_TIMEOUT); + if (ret < 0) + return ret; - return rngc->err_reg ? -EIO : 0; + return readl(rngc->base + RNGC_ERROR) ? -EIO : 0; } static int imx_rngc_read(struct hwrng *rng, void *data, size_t max, bool wait) From patchwork Thu Aug 24 19:20:57 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kaiser X-Patchwork-Id: 13364591 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id D9A2BC27C40 for ; Thu, 24 Aug 2023 19:24:40 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=HCMAHvB5wW3bbJ/tcspVes2W3vxvXle2I92FawD1ZEY=; b=SO2rTONYvGL61r 0kcj5VGYKb5qwMbxzipGFCHcNwtY/I/GxhqSGM74scRk1NYj+WHBZNdb8EjK9TT8+I3MC4joRSTMM RsA+zuTrfIGXWHMOTfTwe0VLGAVwkCW3E0SPUIaeydFz+/ad/liUsRHgqfkloQwTFYp6FTjuyUmxu 8FHGQvOdKVaG18et8XoLRjZRAqrbVrnQo+8YdLzIDvfrKcZl+OamNb7vXr8jNSjky8KlL0fqGbHYi J9pGhbs9+FJ4a2MTcnfGntCcc9Sxl2B+t5VAE2eF0ESyOafBQfC7RNHaCW8AdfiztkShbXNUePXKl mzB8V2pArBg+FDe+Ht3g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qZFwB-003evx-32; Thu, 24 Aug 2023 19:24:11 +0000 Received: from viti.kaiser.cx ([2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qZFvu-003eqv-16 for linux-arm-kernel@lists.infradead.org; Thu, 24 Aug 2023 19:23:55 +0000 Received: from dslb-188-097-211-187.188.097.pools.vodafone-ip.de ([188.97.211.187] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1qZFvk-00036P-Nc; Thu, 24 Aug 2023 21:23:44 +0200 From: Martin Kaiser To: Herbert Xu Cc: Alexander Stein , linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 4/6] hwrng: imx-rngc - read status register for error checks Date: Thu, 24 Aug 2023 21:20:57 +0200 Message-Id: <20230824192059.1569591-5-martin@kaiser.cx> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230824192059.1569591-1-martin@kaiser.cx> References: <20230824192059.1569591-1-martin@kaiser.cx> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230824_122354_574423_AD76B47E X-CRM114-Status: GOOD ( 12.67 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org The error bit in the status register of the imx-rngc is set for any kind of error. Details about the error can be read from the bits in the error status register. In the imx_rngc_self_test function, we just need the info if there was an error or not. We can check the status register, there's no need to read the error status register. Signed-off-by: Martin Kaiser --- drivers/char/hw_random/imx-rngc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/hw_random/imx-rngc.c index 09523936d2af..c2582673427d 100644 --- a/drivers/char/hw_random/imx-rngc.c +++ b/drivers/char/hw_random/imx-rngc.c @@ -114,7 +114,7 @@ static int imx_rngc_self_test(struct imx_rngc *rngc) if (ret < 0) return ret; - return readl(rngc->base + RNGC_ERROR) ? -EIO : 0; + return (status & RNGC_STATUS_ERROR) ? -EIO : 0; } static int imx_rngc_read(struct hwrng *rng, void *data, size_t max, bool wait) From patchwork Thu Aug 24 19:20:58 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kaiser X-Patchwork-Id: 13364594 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id BC6CBC71153 for ; Thu, 24 Aug 2023 19:24:47 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=JnCaVfZ3R7fihnHonsiLm+bLBpM2yKhSjmQeNH4688A=; b=AQiwrmy/z0Mkr0 zLvwOu+5VkCT9cfF64TE/I2dvZqoB0jb6pw3X6aSl9tOs9j2GJF8BKp3aWbWerO5QprAQ8XPTqUJ1 qi7JuxzSn1TWn7FNZyxS00ZnapfknM2z3IiVciuOXYEcUh/ccfv6Q0erGGjDnrXxL8T3k2HFNI/kc IXt7cyvaH/EAYka8unzL1IHKkOKlSW4AFJ1kL6PeikjLhzhTA8unlBZl5HdPixMTvATyDOy6eGcLZ rXJlasEZE+X6ng7XSDokVbM63wpTeTzqzVtqnfEvQPAAx9RfUCpTGvts7HdwwHjP032Xj0fBmXQe3 R5w3h9QbhJD5VB2fH29A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qZFwC-003ewh-3C; Thu, 24 Aug 2023 19:24:12 +0000 Received: from viti.kaiser.cx ([2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qZFvt-003eqx-0P for linux-arm-kernel@lists.infradead.org; Thu, 24 Aug 2023 19:23:55 +0000 Received: from dslb-188-097-211-187.188.097.pools.vodafone-ip.de ([188.97.211.187] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1qZFvl-00036P-Io; Thu, 24 Aug 2023 21:23:45 +0200 From: Martin Kaiser To: Herbert Xu Cc: Alexander Stein , linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 5/6] hwrng: imx-rngc - use polling for initial seed Date: Thu, 24 Aug 2023 21:20:58 +0200 Message-Id: <20230824192059.1569591-6-martin@kaiser.cx> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230824192059.1569591-1-martin@kaiser.cx> References: <20230824192059.1569591-1-martin@kaiser.cx> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230824_122353_319146_F5ABE493 X-CRM114-Status: GOOD ( 16.06 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Use polling instead of interrupt + completion to wait until the initial seed was calculated. This should take about 30ms. Call readl_poll_timeout and set the poll interval to the recommended maximum of 20ms. readl_poll_timeout uses usleep_range, this is based on a hrtimer. The task will we put to sleep while waiting, this does not burn CPU cycles by waiting in the foreground. Signed-off-by: Martin Kaiser --- v2: - use shorter timeout and polling interval - readl_poll_timeout does not wait in the foreground drivers/char/hw_random/imx-rngc.c | 27 +++++++++------------------ 1 file changed, 9 insertions(+), 18 deletions(-) diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/hw_random/imx-rngc.c index c2582673427d..3a3f0f923bed 100644 --- a/drivers/char/hw_random/imx-rngc.c +++ b/drivers/char/hw_random/imx-rngc.c @@ -166,34 +166,29 @@ static irqreturn_t imx_rngc_irq(int irq, void *priv) static int imx_rngc_init(struct hwrng *rng) { struct imx_rngc *rngc = container_of(rng, struct imx_rngc, rng); - u32 cmd, ctrl; + u32 cmd, ctrl, status, err_reg; int ret; /* clear error */ cmd = readl(rngc->base + RNGC_COMMAND); writel(cmd | RNGC_CMD_CLR_ERR, rngc->base + RNGC_COMMAND); - imx_rngc_irq_unmask(rngc); - /* create seed, repeat while there is some statistical error */ do { /* seed creation */ cmd = readl(rngc->base + RNGC_COMMAND); writel(cmd | RNGC_CMD_SEED, rngc->base + RNGC_COMMAND); - ret = wait_for_completion_timeout(&rngc->rng_op_done, - usecs_to_jiffies(RNGC_SEED_TIMEOUT)); - if (!ret) { - ret = -ETIMEDOUT; - goto err; - } + ret = readl_poll_timeout(rngc->base + RNGC_STATUS, status, + status & RNGC_STATUS_SEED_DONE, 20000, RNGC_SEED_TIMEOUT); + if (ret < 0) + return ret; - } while (rngc->err_reg == RNGC_ERROR_STATUS_STAT_ERR); + err_reg = readl(rngc->base + RNGC_ERROR); + } while (err_reg == RNGC_ERROR_STATUS_STAT_ERR); - if (rngc->err_reg) { - ret = -EIO; - goto err; - } + if (err_reg) + return -EIO; /* * enable automatic seeding, the rngc creates a new seed automatically @@ -209,10 +204,6 @@ static int imx_rngc_init(struct hwrng *rng) * we mask the interrupt ourselves if we return an error */ return 0; - -err: - imx_rngc_irq_mask_clear(rngc); - return ret; } static void imx_rngc_cleanup(struct hwrng *rng) From patchwork Thu Aug 24 19:20:59 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Martin Kaiser X-Patchwork-Id: 13364592 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 40185C6FA8F for ; Thu, 24 Aug 2023 19:24:42 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=zLcVZwwXwFenXIJVRHKkpg51QJ1qgl4t3QvxI+BtbaY=; b=lYnSEIJKaBYiHE gGrqN1QdqPeYU4WepNsqPZGDo+n9H4yRqJfaprsj8IFmx9vbGkmYeSRA8fQGe3n7Ztr27GCS3umiU PkSkWQ88Arw2ijZhlCbZADbb+UQOIAEtyAuQ780usR9RwwzZsTBOFGJ7kNRzUG/GWBCtChx2DPGUD PdbiHL6vIhXP8rnPaTZstqiXdhkrjIOp9Mb90O3Oii8WrE8+jv35Uyq4j/8zp3h62wQ/GgSzTjVBR Fa8wxu6A4k8zoY9vTn3crwnV8GdtaaiNbEprKOFoE4LoP3oTZVfGaK6oY3z0YS2Sl6eS9mPzHadwF R2a7x1jFd8zPxvR64UOQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qZFwD-003ewx-1c; Thu, 24 Aug 2023 19:24:13 +0000 Received: from viti.kaiser.cx ([2a01:238:43fe:e600:cd0c:bd4a:7a3:8e9f]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qZFvt-003er0-0P for linux-arm-kernel@lists.infradead.org; Thu, 24 Aug 2023 19:23:55 +0000 Received: from dslb-188-097-211-187.188.097.pools.vodafone-ip.de ([188.97.211.187] helo=martin-debian-2.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.89) (envelope-from ) id 1qZFvm-00036P-E7; Thu, 24 Aug 2023 21:23:46 +0200 From: Martin Kaiser To: Herbert Xu Cc: Alexander Stein , linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH v2 6/6] hwrng: imx-rngc - remove interrupt handler Date: Thu, 24 Aug 2023 21:20:59 +0200 Message-Id: <20230824192059.1569591-7-martin@kaiser.cx> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20230824192059.1569591-1-martin@kaiser.cx> References: <20230824192059.1569591-1-martin@kaiser.cx> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230824_122353_323854_593B0AFE X-CRM114-Status: GOOD ( 15.34 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Remove the interrupt handler and the code for its installation and cleanup. We use readl_poll_timeout now for the selftest and the initial seed. There are no more users of the interrupt. Signed-off-by: Martin Kaiser --- v2: - separate commit for removing irq code drivers/char/hw_random/imx-rngc.c | 55 ------------------------------- 1 file changed, 55 deletions(-) diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/hw_random/imx-rngc.c index 3a3f0f923bed..7fe09c59ce19 100644 --- a/drivers/char/hw_random/imx-rngc.c +++ b/drivers/char/hw_random/imx-rngc.c @@ -63,12 +63,6 @@ struct imx_rngc { struct clk *clk; void __iomem *base; struct hwrng rng; - struct completion rng_op_done; - /* - * err_reg is written only by the irq handler and read only - * when interrupts are masked, we need no spinlock - */ - u32 err_reg; }; @@ -91,15 +85,6 @@ static inline void imx_rngc_irq_mask_clear(struct imx_rngc *rngc) writel(cmd, rngc->base + RNGC_COMMAND); } -static inline void imx_rngc_irq_unmask(struct imx_rngc *rngc) -{ - u32 ctrl; - - ctrl = readl(rngc->base + RNGC_CONTROL); - ctrl &= ~(RNGC_CTRL_MASK_DONE | RNGC_CTRL_MASK_ERROR); - writel(ctrl, rngc->base + RNGC_CONTROL); -} - static int imx_rngc_self_test(struct imx_rngc *rngc) { u32 cmd, status; @@ -143,26 +128,6 @@ static int imx_rngc_read(struct hwrng *rng, void *data, size_t max, bool wait) return retval ? retval : -EIO; } -static irqreturn_t imx_rngc_irq(int irq, void *priv) -{ - struct imx_rngc *rngc = (struct imx_rngc *)priv; - u32 status; - - /* - * clearing the interrupt will also clear the error register - * read error and status before clearing - */ - status = readl(rngc->base + RNGC_STATUS); - rngc->err_reg = readl(rngc->base + RNGC_ERROR); - - imx_rngc_irq_mask_clear(rngc); - - if (status & (RNGC_STATUS_SEED_DONE | RNGC_STATUS_ST_DONE)) - complete(&rngc->rng_op_done); - - return IRQ_HANDLED; -} - static int imx_rngc_init(struct hwrng *rng) { struct imx_rngc *rngc = container_of(rng, struct imx_rngc, rng); @@ -198,21 +163,9 @@ static int imx_rngc_init(struct hwrng *rng) ctrl |= RNGC_CTRL_AUTO_SEED; writel(ctrl, rngc->base + RNGC_CONTROL); - /* - * if initialisation was successful, we keep the interrupt - * unmasked until imx_rngc_cleanup is called - * we mask the interrupt ourselves if we return an error - */ return 0; } -static void imx_rngc_cleanup(struct hwrng *rng) -{ - struct imx_rngc *rngc = container_of(rng, struct imx_rngc, rng); - - imx_rngc_irq_mask_clear(rngc); -} - static int __init imx_rngc_probe(struct platform_device *pdev) { struct imx_rngc *rngc; @@ -246,12 +199,9 @@ static int __init imx_rngc_probe(struct platform_device *pdev) if (rng_type != RNGC_TYPE_RNGC && rng_type != RNGC_TYPE_RNGB) return -ENODEV; - init_completion(&rngc->rng_op_done); - rngc->rng.name = pdev->name; rngc->rng.init = imx_rngc_init; rngc->rng.read = imx_rngc_read; - rngc->rng.cleanup = imx_rngc_cleanup; rngc->rng.quality = 19; rngc->dev = &pdev->dev; @@ -259,11 +209,6 @@ static int __init imx_rngc_probe(struct platform_device *pdev) imx_rngc_irq_mask_clear(rngc); - ret = devm_request_irq(&pdev->dev, - irq, imx_rngc_irq, 0, pdev->name, (void *)rngc); - if (ret) - return dev_err_probe(&pdev->dev, ret, "Can't get interrupt working.\n"); - if (self_test) { ret = imx_rngc_self_test(rngc); if (ret)