From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752904AbdLEMgT (ORCPT ); Tue, 5 Dec 2017 07:36:19 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:59150 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752711AbdLEMgG (ORCPT ); Tue, 5 Dec 2017 07:36:06 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20171205123604euoutp0179f9ce001c36dff2be7ad25d574890ff~9ZiZQhUjX2888228882euoutp01g X-AuditID: cbfec7ef-f79ee6d000003120-31-5a2692b3def5 MIME-version: 1.0 Content-transfer-encoding: 8BIT Content-type: text/plain; charset="UTF-8" From: =?UTF-8?q?=C5=81ukasz=20Stelmach?= To: Krzysztof Kozlowski , robh+dt@kernel.org, Stephan Mueller , Herbert Xu , "David S. Miller" , Kukjin Kim , linux-crypto@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-kernel@vger.kernel.org Cc: =?UTF-8?q?=C5=81ukasz=20Stelmach?= , m.szyprowski@samsung.com, b.zolnierkie@samsung.com Subject: [PATCH 2/3] crypto: exynos - Improve performance of PRNG Date: Tue, 05 Dec 2017 13:35:57 +0100 Message-id: <20171205123558.31087-3-l.stelmach@samsung.com> X-Mailer: git-send-email 2.11.0 In-reply-to: <20171205123558.31087-1-l.stelmach@samsung.com> Organization: Samsung R&D Institute Poland X-Brightmail-Tracker: H4sIAAAAAAAAA01SbUhTYRjlvffu7ioub5vYg0nSQFEjTerHTS0UFo2K9IcE7k8tvUzRqeyq pCKsUtNNms7EZeYHljpLV0tFDCXncILITMW0aFohiQVGFmZ+lPNq+e+8zznn+Ti8FC7uFPhR qRnZrCZDmS4lPYme4TXn8RfGIMWJeksI89xkETB1ziKC0S/5M4ZPX3DG6XwmZGZtbYiZc61h zGRfHcmYnAMY02F/L2SK++1Cpnq0g4jxkn+fmsLkXeZZTN7zKlBubS8j5Xe72pF8xXoknlR4 Riez6am5rCb87DXPlIaZWkGWVnLjs7FeqEWN3jrkQQF9CvRFmwIe+8K4y0LqkCclplsQzC82 4fxjBcFIwzC252g13kH/VDOTVuQmRPRB+FXlInSIonA6AOwTae4yTodA90uLkNf/QFDpMu80 IulYMDweEbgJH7ofg69j/QTvyIGx+ne4G0u2RQurozuYoAOh1VFO8sOiYHru5u5GAdBX8nrn Bg86GprGTDsabzoUnt56Q7gHAP2HBFfPkJA3yKDNXIF4LIElR9du3R8mq/S7BgOCoYbVXeIe guamGB5HwUZ7JclvegCMPTW4+2SgRVBaIuYlchiYf0jwOBYspd8w/vztnoNlv1EFCqjdl1jt /8Rq9yXWiPB25MPmcGoVy0WEcUo1l5OhCkvKVFvR9i8a3XIs96KF2wk2RFNI6iXSXgxUiAXK XC5PbUNA4VIfEW4IUohFycq8fFaTeVWTk85yNnSYIqSHRGcUJYliWqXMZtNYNovV7LEY5eGn RUkT69MTeiy0rAU0F64DLquTFRo3HKqND0Nh4pikTa5YG35l5ueTFT91oNeD4I6CdbaRyt+Q 6LjT1foxfay5INsw7mDOPbIrnZ3LH5ciJW8X5wZ7fe9vxucZy6PVhZLE5pNbx+Lsl0yRcdaV 4KnuYb/zkTVpl482JZAxMpeU4FKUEaG4hlP+BTCXkixBAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFmpkkeLIzCtJLcpLzFFi42I5/e/4Vd3Nk9SiDDYsZrXYOGM9q8Wc8y0s Ft2vZCz6H79mtjh/fgO7xc1DKxgt7t/7yWRxedccNosZ5/cxWaw9cpfdonXvEXaLqafXsjjw eHy6coXJY8vKm0we2w6oemxa1cnm0bdlFaPH501yAWxRXDYpqTmZZalF+nYJXBnzb8xiLWgQ rng+aR57A+MC/i5GTg4JAROJ5ZPaGSFsMYkL99azdTFycQgJLGGUuHX3GBNIgldAUOLH5Hss XYwcHMwC8hJHLmWDhJkF1CUmzVvEDFH/jVFi5sujbCAJNgFHif6lJ1hBEiIC+5kkXpz4xAjR USrRP/MFWJEwUNHT76eZQWwWAVWJ5cd72CCWWUtcu9/IBHGRvMSutousIDangI3EwrMz2ECO EAKqOT05GiTML6AlsabpOssERsFZSE6dhXDqLCSnLmBkXsUoklpanJueW2ykV5yYW1yal66X nJ+7iREYMduO/dyyg7HrXfAhRgEORiUe3gZv1Sgh1sSy4srcQ4wSHMxKIrzM/WpRQrwpiZVV qUX58UWlOanFhxilOViUxHl796yOFBJITyxJzU5NLUgtgskycXBKNTDuVXqyXWfVYZaghg2l 57w+7HNkefNhvfz0bfVnukx7J945dcGy6MibTpEvfWyebT9kp4We6lP7uSjs5txg7W1nF7Mx KG/x/hu39st7Lo11f7YckDgwXf/pxJPmDNx13tXxDqzbnFq5alt3JU5IqrQ7O22i3JZuv9lM FgzzE3dN+tuz++3taU+uK7EUZyQaajEXFScCAP0Cr6uUAgAA X-CMS-MailID: 20171205123603eucas1p177cceb022e3a5c0a9d13ca437c05b669 X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20171205123603eucas1p177cceb022e3a5c0a9d13ca437c05b669 X-RootMTR: 20171205123603eucas1p177cceb022e3a5c0a9d13ca437c05b669 References: <20171205123558.31087-1-l.stelmach@samsung.com> Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Use memcpy_fromio() instead of custom exynos_rng_copy_random() function to retrieve generated numbers from the registers of PRNG. Remove unnecessary invocation of cpu_relax(). Signed-off-by: Ɓukasz Stelmach --- drivers/crypto/exynos-rng.c | 36 +++++------------------------------- 1 file changed, 5 insertions(+), 31 deletions(-) diff --git a/drivers/crypto/exynos-rng.c b/drivers/crypto/exynos-rng.c index 894ef93ef5ec..002e9d2a83cc 100644 --- a/drivers/crypto/exynos-rng.c +++ b/drivers/crypto/exynos-rng.c @@ -130,34 +130,6 @@ static int exynos_rng_set_seed(struct exynos_rng_dev *rng, } /* - * Read from output registers and put the data under 'dst' array, - * up to dlen bytes. - * - * Returns number of bytes actually stored in 'dst' (dlen - * or EXYNOS_RNG_SEED_SIZE). - */ -static unsigned int exynos_rng_copy_random(struct exynos_rng_dev *rng, - u8 *dst, unsigned int dlen) -{ - unsigned int cnt = 0; - int i, j; - u32 val; - - for (j = 0; j < EXYNOS_RNG_SEED_REGS; j++) { - val = exynos_rng_readl(rng, EXYNOS_RNG_OUT(j)); - - for (i = 0; i < 4; i++) { - dst[cnt] = val & 0xff; - val >>= 8; - if (++cnt >= dlen) - return cnt; - } - } - - return cnt; -} - -/* * Start the engine and poll for finish. Then read from output registers * filling the 'dst' buffer up to 'dlen' bytes or up to size of generated * random data (EXYNOS_RNG_SEED_SIZE). @@ -171,6 +143,8 @@ static int exynos_rng_get_random(struct exynos_rng_dev *rng, { int retry = EXYNOS_RNG_WAIT_RETRIES; + *read = min_t(size_t, dlen, EXYNOS_RNG_SEED_SIZE); + if (rng->type == EXYNOS_PRNG_TYPE4) { exynos_rng_writel(rng, EXYNOS_RNG_CONTROL_START, EXYNOS_RNG_CONTROL); @@ -180,8 +154,8 @@ static int exynos_rng_get_random(struct exynos_rng_dev *rng, } while (!(exynos_rng_readl(rng, - EXYNOS_RNG_STATUS) & EXYNOS_RNG_STATUS_RNG_DONE) && --retry) - cpu_relax(); + EXYNOS_RNG_STATUS) & EXYNOS_RNG_STATUS_RNG_DONE) && + --retry); if (!retry) return -ETIMEDOUT; @@ -189,7 +163,7 @@ static int exynos_rng_get_random(struct exynos_rng_dev *rng, /* Clear status bit */ exynos_rng_writel(rng, EXYNOS_RNG_STATUS_RNG_DONE, EXYNOS_RNG_STATUS); - *read = exynos_rng_copy_random(rng, dst, dlen); + memcpy_fromio(dst, rng->mem + EXYNOS_RNG_OUT_BASE, *read); return 0; } -- 2.11.0