From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752572AbdLLQga (ORCPT ); Tue, 12 Dec 2017 11:36:30 -0500 Received: from mailout1.w1.samsung.com ([210.118.77.11]:57949 "EHLO mailout1.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751729AbdLLQgP (ORCPT ); Tue, 12 Dec 2017 11:36:15 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 mailout1.w1.samsung.com 20171212163612euoutp0164cf3740b86b6ae0af8a388110bb8db5~-mVD5urrl1961919619euoutp01D X-AuditID: cbfec7f5-f79d06d0000031c7-6a-5a30057b2cb4 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?= , Marek Szyprowski , Bartlomiej Zolnierkiewicz Subject: [PATCH v3 2/4] crypto: exynos - Improve performance of PRNG Date: Tue, 12 Dec 2017 17:36:05 +0100 Message-id: <20171212163607.2985-3-l.stelmach@samsung.com> X-Mailer: git-send-email 2.11.0 In-reply-to: <20171212163607.2985-1-l.stelmach@samsung.com> In-reply-to: <20171211140623.7673-1-l.stelmach@samsung.com> Organization: Samsung R&D Institute Poland X-Brightmail-Tracker: H4sIAAAAAAAAA02Sa0hTYRzGec85OztOZ6d56Y+OjIFCUl4g66QZGiH7KH3K+cGGnqbp1Ha8 ZH4xSXMKLk1LRNQhmg515WWJpuQFpxku01CzDBHBFBEv5YySdjxKfnt4n+f/e//vw0vhsh6R F5WUmsHqUtUpClJCWEb3Jy/mioJUQXnrwczrKrOIqbE9JpiSNTljWF7HGZvtlZiZH2pGzPfF fYyZ7q0hmSrbAMa0jXwTMwX9I2KmcqKNiHBRbs/MYMqulnlMaXnnq+ww6UllaZcJKXc6zkaT Ksm1BDYlKYvVBV6/I0ncHuxC6YWuD1b0beI8ZHQuRk4U0JfAPGbHBe0JHxfNZDGSUDK6EcHu vgnjDRm9g+CzPeR4oKPEiIRQE4K5hgWCN6T0abA/W3RoisJpHxj5lMwf4/R56O4zi4X8LoL2 N50i3iDpSDA0jol4w50ewGC5rPKQivPUQcs4yZPc6JtQVOHNDxC0L2zv1uPCZaGwtDCNhI18 oLdw6hDqRIfB7kE7dqz11ickr0/R/tCaP0vwfKANYugusx9uCg7+eFWMwHGDNWuXWNBy0BcN Ykd5BMN1e0dGBYIGY4Sgw+CPqYwUnukK5ZYXuMCUQlGhTIgooXmzSSToSJi2ThFCE6UISlr/ oqfoXPWJ8qr/l1d9orx6hJuQO5vJaTUsFxLAqbVcZqomID5N24Ec/2niwPqzBzWOhg4hmkIK F2nRYqBKJlJncTnaIQQUrnCXluQ7jqQJ6pyHrC4tTpeZwnJDyJsiFGek4arCGBmtUWewySyb zuqOXYxy8spDzik3XmoN8o1YQx93L/qt0W5hWlVjubUH43c9rnKhC6PJBabJiA+30n/Fr3rO P5pL1r5fgbjNpu6whNkNv5Zhv/CtH8re57EJX+pEZpcttvVKY5zmsvH3RllVbWd2bFzF7FK2 a1R9jZiV7+0NaPzKA/v1C7fvSyZWo1YveHyNVBBcojrYH9dx6n/hkbteSwMAAA== X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprJIsWRmVeSWpSXmKPExsVy+t/xq7rVrAZRBusfiFhsnLGe1WLO+RYW i+5XMhb9j18zW5w/v4Hd4uahFYwW9+/9ZLK4vGsOm8WM8/uYLNYeuctu0br3CLvF1NNrWRx4 PD5ducLksWXlTSaPbQdUPTat6mTz6NuyitHj8ya5ALYoLpuU1JzMstQifbsEroxPB7cwFrTx VTztXMvewLiQu4uRk0NCwERiU/dCRghbTOLCvfVsXYxcHEICSxglrk/+zAqS4BUQlPgx+R5L FyMHB7OAvMSRS9kgYWYBdYlJ8xYxg9hCAt8YJVb1p4PYbAKOEv1LT7CCzBEROMAk0dCzBGwo s8AyRok/Pa1sIIOEBVwkOqZIgzSwCKhKfPqygBlil5XEw9uXoQ6Sl9jVdhHsBk4Ba4kv/9Yx QSyzkvhz4i87TLzzeDsbTHz973VgcX4BLYk1TddZJjAKz0LywiyEF2YheWEBI/MqRpHU0uLc 9NxiQ73ixNzi0rx0veT83E2MwAjbduzn5h2MlzYGH2IU4GBU4uF98EA/Sog1say4MvcQowQH s5IIb3cTUIg3JbGyKrUoP76oNCe1+BCjNAeLkjhv757VkUIC6YklqdmpqQWpRTBZJg5OqQbG dP0Zxh9sak4cD19u/nh9v/VHQfVWoavXzqnuktvSvo0tYo+kTeo83cKkTeeUch8t+P+i3LVi a9jFR1s21yw1vP6BdfPrPVP8V0/PyWOY5nrI1WRj3MMbS6uvXjlfdeDoyudMM3YfTJ2SeDyR LXYH2wOG73cPzWgP3jXB1Y9bbo2kiXmpzuNd95VYijMSDbWYi4oTAUSqUsGsAgAA X-CMS-MailID: 20171212163611eucas1p2bb80c67eb0e0a8411abcc1f65242c362 X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20171212163611eucas1p2bb80c67eb0e0a8411abcc1f65242c362 X-RootMTR: 20171212163611eucas1p2bb80c67eb0e0a8411abcc1f65242c362 References: <20171212163607.2985-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. Signed-off-by: Ɓukasz Stelmach --- drivers/crypto/exynos-rng.c | 31 ++----------------------------- 1 file changed, 2 insertions(+), 29 deletions(-) diff --git a/drivers/crypto/exynos-rng.c b/drivers/crypto/exynos-rng.c index 825c09619eb8..dcdd444d0b3b 100644 --- a/drivers/crypto/exynos-rng.c +++ b/drivers/crypto/exynos-rng.c @@ -131,34 +131,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). @@ -190,7 +162,8 @@ 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); + *read = min_t(size_t, dlen, EXYNOS_RNG_SEED_SIZE); + memcpy_fromio(dst, rng->mem + EXYNOS_RNG_OUT_BASE, *read); return 0; } -- 2.11.0