From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752550AbdLLQgZ (ORCPT ); Tue, 12 Dec 2017 11:36:25 -0500 Received: from mailout2.w1.samsung.com ([210.118.77.12]:40510 "EHLO mailout2.w1.samsung.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751612AbdLLQgO (ORCPT ); Tue, 12 Dec 2017 11:36:14 -0500 DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20171212163611euoutp02645ca98346611030f8bc502935ff0207~-mVC_DOc-3187531875euoutp02W X-AuditID: cbfec7f1-f793a6d00000326b-63-5a30057a675e 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 1/4] crypto: exynos - Support Exynos5250+ SoCs Date: Tue, 12 Dec 2017 17:36:04 +0100 Message-id: <20171212163607.2985-2-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: H4sIAAAAAAAAA+NgFtrNKsWRmVeSWpSXmKPExsWy7djPc7pVrAZRBifu6FtsnLGe1WLO+RYW i+5XMhb9j18zW5w/v4Hd4uahFYwW9+/9ZLK4vGsOm8WM8/uYLNYeuctu0br3CLvF1NNrWRx4 PD5ducLksWXlTSaPbQdUPTat6mTz6NuyitHj8ya5ALYoLpuU1JzMstQifbsEroznj48zFuyR qeib+J21gXGJeBcjJ4eEgInEhKln2CFsMYkL99azdTFycQgJLGWUWHPoCCOE85lRomHGW0aY jgXr2pghEssYJWZPW8AGkuAVEJT4MfkeSxcjBwezgLzEkUvZIGFmAU2JrbvXs0PUf2GUeLZy DjNIgk3AUaJ/6QlWkISIwD4miccTp4KtYwaZenDbSbCpwkBVu77tAlvNIqAqMbX7IxPENiuJ R/9OQx0uL7Gr7SIriM0pYC3x5d86Jhi783g72Bx+AS2JNU3XWUAWSAhMZpfo2fieFaLZReLC vEYmCFtY4tXxLVBDZSQ6Ow4yQTT0M0ocnv8dKjGFUWLxQgcI21riz6qJbBCP8klM2jadGeR/ CQFeiY42IYgSD4kVV6azQdiOEst2/WGChEUfo8TvB88ZJzAqzEIKvlmI4JuFFHwLGJlXMYqk lhbnpqcWG+kVJ+YWl+al6yXn525iBCap0/+Of9zB+P6E1SFGAQ5GJR7eBw/0o4RYE8uKK3MP MUpwMCuJ8HY3AYV4UxIrq1KL8uOLSnNSiw8xSnOwKInz2ka1RQoJpCeWpGanphakFsFkmTg4 pRoYk7+2NfvkP/piqiHF9Uz105/9jUt/aqypUtflvDhfT0Yrq3PJrKpYT5OVCaKiHrWRp089 fHTRUCC+qsLEfNL+qb9UHnzgSXV7NLmdvVV748bli8PvHJW9t7LGflVOUPR2k0P7J7bsF5W+ u5qpIKvy1WsB7vj9MZ92BC78cebx+omdS1/OVZh6QImlOCPRUIu5qDgRAHJZ0zBOAwAA X-Brightmail-Tracker: H4sIAAAAAAAAA+NgFprFIsWRmVeSWpSXmKPExsVy+t/xa7pVrAZRBkf6RS02zljPajHnfAuL RfcrGYv+x6+ZLc6f38BucfPQCkaL+/d+Mllc3jWHzWLG+X1MFmuP3GW3aN17hN1i6um1LA48 Hp+uXGHy2LLyJpPHtgOqHptWdbJ59G1ZxejxeZNcAFsUl01Kak5mWWqRvl0CV8bzx8cZC/bI VPRN/M7awLhEvIuRk0NCwERiwbo2ZghbTOLCvfVsXYxcHEICSxglfp+4yg6S4BUQlPgx+R5L FyMHB7OAvMSRS9kgYWYBdYlJ8xaB9QoJfGOUWDpNFcRmE3CU6F96ghVkjojAASaJhp4lYEOZ BZYxSvzpaWUDqRIGqtr1bRcjiM0ioCoxtfsjE8QyK4lH/06zQ1wkL7Gr7SIriM0pYC3x5d86 JohtVhJ/Tvxlh4l3Hm9ng4mv/70OLM4voCWxpuk6ywRG4VlIfpiF8MMsJD8sYGRexSiSWlqc m55bbKhXnJhbXJqXrpecn7uJERhj24793LyD8dLG4EOMAhyMSjy8Dx7oRwmxJpYVV+YeYpTg YFYS4e1uAgrxpiRWVqUW5ccXleakFh9ilOZgURLn7d2zOlJIID2xJDU7NbUgtQgmy8TBKdXA aOy9j8lAX7flveomy8Cnq77+CFqUeZ39SQLfx13V+1Pcdpnpyz7Sarm063pK9rTK1u+P5mty TBIwPMfyO0uN+1z1l+nbzWM+7qhb9uDANr0Fj16dc3nFFLu75Ksf67fv5o9D34Ycm7iEb+/E eyyMyWJbph8VO6hdcevZOsYD0w+wRwi2caRdTlJiKc5INNRiLipOBACqX/uNrQIAAA== X-CMS-MailID: 20171212163610eucas1p2c42f1448547bb4914fd7c1b79fc2e892 X-Msg-Generator: CA CMS-TYPE: 201P X-CMS-RootMailID: 20171212163610eucas1p2c42f1448547bb4914fd7c1b79fc2e892 X-RootMTR: 20171212163610eucas1p2c42f1448547bb4914fd7c1b79fc2e892 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 Add support for PRNG in Exynos5250+ SoCs. Signed-off-by: Ɓukasz Stelmach --- .../bindings/crypto/samsung,exynos-rng4.txt | 4 +++- drivers/crypto/exynos-rng.c | 27 ++++++++++++++++++++-- 2 files changed, 28 insertions(+), 3 deletions(-) diff --git a/Documentation/devicetree/bindings/crypto/samsung,exynos-rng4.txt b/Documentation/devicetree/bindings/crypto/samsung,exynos-rng4.txt index 4ca8dd4d7e66..a13fbdb4bd88 100644 --- a/Documentation/devicetree/bindings/crypto/samsung,exynos-rng4.txt +++ b/Documentation/devicetree/bindings/crypto/samsung,exynos-rng4.txt @@ -2,7 +2,9 @@ Exynos Pseudo Random Number Generator Required properties: -- compatible : Should be "samsung,exynos4-rng". +- compatible : One of: + - "samsung,exynos4-rng" for Exynos4210 and Exynos4412 + - "samsung,exynos5250-prng" for Exynos5250+ - reg : Specifies base physical address and size of the registers map. - clocks : Phandle to clock-controller plus clock-specifier pair. - clock-names : "secss" as a clock name. diff --git a/drivers/crypto/exynos-rng.c b/drivers/crypto/exynos-rng.c index ed6ba796ad71..825c09619eb8 100644 --- a/drivers/crypto/exynos-rng.c +++ b/drivers/crypto/exynos-rng.c @@ -22,12 +22,17 @@ #include #include #include +#include #include #include #define EXYNOS_RNG_CONTROL 0x0 #define EXYNOS_RNG_STATUS 0x10 + +#define EXYNOS_RNG_SEED_CONF 0x14 +#define EXYNOS_RNG_GEN_PRNG BIT(1) + #define EXYNOS_RNG_SEED_BASE 0x140 #define EXYNOS_RNG_SEED(n) (EXYNOS_RNG_SEED_BASE + (n * 0x4)) #define EXYNOS_RNG_OUT_BASE 0x160 @@ -43,6 +48,12 @@ #define EXYNOS_RNG_SEED_REGS 5 #define EXYNOS_RNG_SEED_SIZE (EXYNOS_RNG_SEED_REGS * 4) +enum exynos_prng_type { + EXYNOS_PRNG_UNKNOWN = 0, + EXYNOS_PRNG_EXYNOS4, + EXYNOS_PRNG_EXYNOS5, +}; + /* * Driver re-seeds itself with generated random numbers to increase * the randomness. @@ -63,6 +74,7 @@ struct exynos_rng_ctx { /* Device associated memory */ struct exynos_rng_dev { struct device *dev; + enum exynos_prng_type type; void __iomem *mem; struct clk *clk; /* Generated numbers stored for seeding during resume */ @@ -160,8 +172,13 @@ static int exynos_rng_get_random(struct exynos_rng_dev *rng, { int retry = EXYNOS_RNG_WAIT_RETRIES; - exynos_rng_writel(rng, EXYNOS_RNG_CONTROL_START, - EXYNOS_RNG_CONTROL); + if (rng->type == EXYNOS_PRNG_EXYNOS4) { + exynos_rng_writel(rng, EXYNOS_RNG_CONTROL_START, + EXYNOS_RNG_CONTROL); + } else if (rng->type == EXYNOS_PRNG_EXYNOS5) { + exynos_rng_writel(rng, EXYNOS_RNG_GEN_PRNG, + EXYNOS_RNG_SEED_CONF); + } while (!(exynos_rng_readl(rng, EXYNOS_RNG_STATUS) & EXYNOS_RNG_STATUS_RNG_DONE) && --retry) @@ -279,6 +296,8 @@ static int exynos_rng_probe(struct platform_device *pdev) if (!rng) return -ENOMEM; + rng->type = (enum exynos_prng_type)of_device_get_match_data(&pdev->dev); + rng->dev = &pdev->dev; rng->clk = devm_clk_get(&pdev->dev, "secss"); if (IS_ERR(rng->clk)) { @@ -367,6 +386,10 @@ static SIMPLE_DEV_PM_OPS(exynos_rng_pm_ops, exynos_rng_suspend, static const struct of_device_id exynos_rng_dt_match[] = { { .compatible = "samsung,exynos4-rng", + .data = (const void *)EXYNOS_PRNG_EXYNOS4, + }, { + .compatible = "samsung,exynos5250-prng", + .data = (const void *)EXYNOS_PRNG_EXYNOS5, }, { }, }; -- 2.11.0