From patchwork Wed Nov 8 00:44:44 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Florian Fainelli X-Patchwork-Id: 10047461 X-Patchwork-Delegate: herbert@gondor.apana.org.au Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id 284BF60247 for ; Wed, 8 Nov 2017 00:48:08 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 1C2612A1D3 for ; Wed, 8 Nov 2017 00:48:08 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id 111722A1E6; Wed, 8 Nov 2017 00:48:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.5 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, FREEMAIL_FROM, RCVD_IN_DNSWL_HI, RCVD_IN_SORBS_SPAM autolearn=unavailable version=3.3.1 Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id 769112A1D3 for ; Wed, 8 Nov 2017 00:48:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755875AbdKHArp (ORCPT ); Tue, 7 Nov 2017 19:47:45 -0500 Received: from mail-qt0-f194.google.com ([209.85.216.194]:51792 "EHLO mail-qt0-f194.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934118AbdKHApS (ORCPT ); Tue, 7 Nov 2017 19:45:18 -0500 Received: by mail-qt0-f194.google.com with SMTP id h4so1390747qtk.8; Tue, 07 Nov 2017 16:45:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id:in-reply-to:references; bh=UUyLyiAu/V7fFybDfwotNUeqO2BWg8lib0sJlaOV99E=; b=qjeJGeV1eLqiV/Z5zsQIAv9cG2YXOU4HV0KsviL+za1mPz/1Pcn4IKDqfRNccXkBQ2 JFNERIKoYtjL0TST1VUr/56j7/3UgNZzqclSXf5PMfehUtQO+U4IyzdkGUlrD2330D7F aB/noENpBLrrKMTGv2B/XPoV+qeIPq60LK8PjKbT8X0mPSSl8w76i0QUPPf2qS52S08V hBhuV5Bq9fVpb9inZoTbTJsyuRRp5yE1pzKnxA+6vLe3g3x6ofg2tBjbNQTyRRgKalD5 aT7iFK5kCB4A8JuyuA/N5lgMOwMB3godXwzAbY8NvyvkPu10PdR9I0Dl2kfkRTZI5nn5 CgPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id:in-reply-to :references; bh=UUyLyiAu/V7fFybDfwotNUeqO2BWg8lib0sJlaOV99E=; b=M2nm0ZRXobjIpHGvxWqjgfBZ+Fos9xQYRp4ZK4YiDhI02A94V9+JLAXB+LkHgGV3aC eRDHuOe3TDFvsI3gB7E/hzFxDKoPKng0HRH+9m5f38dk8Z3pvxqv7CPVY39XK9hqt4eq 7zxcQk0D1SP/4IH3Buy3lLcHIiHs6h7QKSQnuH7ZxDfPECpgmNb2FbBRN+L2+Ztj9b4i F9Bkas/WfX1Cbp0iKbUZuv/dcv60VYMXPsSihqTHnCD67Y96A9ZR59LpfRvdaB326hsp jD4UlNV8EoAXE0YmD0erlV3c0pRskT59wSkk7gJw2dtsEnSdCCYb2ELFdKxP45JPg6PO /Q6A== X-Gm-Message-State: AJaThX6JHMKd4b+vI+kkz1irolROk7Pua6193SVqa3wjebHKstaOUcqS u51/iSp7d7S4kjNXnpy5X2Ec4IQT X-Google-Smtp-Source: ABhQp+TBiBoxV2u1idnVmiitGX55WvRs+utGJ2sITOnhkdMGgRQjYfPVH0I/8cvjfWrCjueENn4lgg== X-Received: by 10.200.45.172 with SMTP id p41mr1028551qta.256.1510101917384; Tue, 07 Nov 2017 16:45:17 -0800 (PST) Received: from fainelli-desktop.broadcom.com ([192.19.255.250]) by smtp.gmail.com with ESMTPSA id y9sm1862407qth.43.2017.11.07.16.45.14 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Tue, 07 Nov 2017 16:45:16 -0800 (PST) From: Florian Fainelli To: linux-kernel@vger.kernel.org Cc: Florian Fainelli , Matt Mackall , Herbert Xu , Rob Herring , Mark Rutland , Ray Jui , Scott Branden , bcm-kernel-feedback-list@broadcom.com (maintainer:BROADCOM BCM281XX/BCM11XXX/BCM216XX ARM ARCHITE...), Eric Anholt , Stefan Wahren , PrasannaKumar Muralidharan , Russell King , Krzysztof Kozlowski , Harald Freudenberger , Sean Wang , Martin Kaiser , Steffen Trumtrar , linux-crypto@vger.kernel.org (open list:HARDWARE RANDOM NUMBER GENERATOR CORE), devicetree@vger.kernel.org (open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS), linux-rpi-kernel@lists.infradead.org (moderated list:BROADCOM BCM2835 ARM ARCHITECTURE), linux-arm-kernel@lists.infradead.org (moderated list:BROADCOM BCM2835 ARM ARCHITECTURE) Subject: [PATCH v2 07/12] hwrng: bcm2835-rng: Manage an optional clock Date: Tue, 7 Nov 2017 16:44:44 -0800 Message-Id: <20171108004449.32730-8-f.fainelli@gmail.com> X-Mailer: git-send-email 2.9.3 In-Reply-To: <20171108004449.32730-1-f.fainelli@gmail.com> References: <20171108004449.32730-1-f.fainelli@gmail.com> Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org X-Virus-Scanned: ClamAV using ClamSMTP One of the last steps before bcm63xx-rng can be eliminated is to manage a clock during hwrng::init and hwrng::cleanup, so fetch it in the probe function, and manage it during these two steps when valid. Signed-off-by: Florian Fainelli Reviewed-by: Eric Anholt --- drivers/char/hw_random/bcm2835-rng.c | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/drivers/char/hw_random/bcm2835-rng.c b/drivers/char/hw_random/bcm2835-rng.c index ed20e0b6b7ae..99b56fd5482c 100644 --- a/drivers/char/hw_random/bcm2835-rng.c +++ b/drivers/char/hw_random/bcm2835-rng.c @@ -15,6 +15,7 @@ #include #include #include +#include #define RNG_CTRL 0x0 #define RNG_STATUS 0x4 @@ -33,6 +34,7 @@ struct bcm2835_rng_priv { struct hwrng rng; void __iomem *base; bool mask_interrupts; + struct clk *clk; }; static inline struct bcm2835_rng_priv *to_rng_priv(struct hwrng *rng) @@ -66,8 +68,15 @@ static int bcm2835_rng_read(struct hwrng *rng, void *buf, size_t max, static int bcm2835_rng_init(struct hwrng *rng) { struct bcm2835_rng_priv *priv = to_rng_priv(rng); + int ret = 0; u32 val; + if (!IS_ERR(priv->clk)) { + ret = clk_prepare_enable(priv->clk); + if (ret) + return ret; + } + if (priv->mask_interrupts) { /* mask the interrupt */ val = readl(priv->base + RNG_INT_MASK); @@ -79,7 +88,7 @@ static int bcm2835_rng_init(struct hwrng *rng) __raw_writel(RNG_WARMUP_COUNT, priv->base + RNG_STATUS); __raw_writel(RNG_RBGEN, priv->base + RNG_CTRL); - return 0; + return ret; } static void bcm2835_rng_cleanup(struct hwrng *rng) @@ -88,6 +97,9 @@ static void bcm2835_rng_cleanup(struct hwrng *rng) /* disable rng hardware */ __raw_writel(0, priv->base + RNG_CTRL); + + if (!IS_ERR(priv->clk)) + clk_disable_unprepare(priv->clk); } struct bcm2835_rng_of_data { @@ -130,6 +142,9 @@ static int bcm2835_rng_probe(struct platform_device *pdev) return PTR_ERR(priv->base); } + /* Clock is optional on most platforms */ + priv->clk = devm_clk_get(dev, NULL); + priv->rng.name = "bcm2835-rng"; priv->rng.init = bcm2835_rng_init; priv->rng.read = bcm2835_rng_read;