From patchwork Thu Jun 20 23:13:34 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 13706539 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 D322CC2BA18 for ; Thu, 20 Jun 2024 23:14:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=MgnmbN5MPz4u6HwtpTU4Zp3I0CSg6ni7gpmRecQhhsc=; b=R3RalIAxHqfsZ0PHzs/ucR34Z4 Jn61bwx0b9s+Mr8OhzIUK11Q2X0o20qGU3ZA4JWw8RERqan/pmOQE0isIix5E2Cl91ovFzquxrpXE tLkIcuLloFoW7EsTBOq06pcp7RpNEEg1eEmD/el7uC301aKCADHbFISvSvjItQ1fMerSmk/Oe1kkG n/oqo4TfAI0a0nXXjLqEU4gmq47cu8TvnMDih9zo3Mfw01khc8hN4AHwQYHJePeWl9ZXkdbnE5vCa 6faXgg3UquDUgyV7ubPUp2kS28imhm5rmrTFqfl0/rvv7TEe4KoAP7x21wb9xwUG/rSNdXGZlWy+R rEJEwEGA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyX-0000000754V-0erE; Thu, 20 Jun 2024 23:13:53 +0000 Received: from mail-ot1-x333.google.com ([2607:f8b0:4864:20::333]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyM-000000074ze-0Fi8 for linux-arm-kernel@lists.infradead.org; Thu, 20 Jun 2024 23:13:45 +0000 Received: by mail-ot1-x333.google.com with SMTP id 46e09a7af769-6f97a4c4588so865182a34.2 for ; Thu, 20 Jun 2024 16:13:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718925221; x=1719530021; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=MgnmbN5MPz4u6HwtpTU4Zp3I0CSg6ni7gpmRecQhhsc=; b=q5zfTYsB5vYX+9Z8QvuzQ+BKhnHGG91WS0x0vWcq7P71TY3IP6gH3L0TTy54j7+gY8 KINm73un8E7/NXklcBBceUQEMJ0xHTln7JoPbeHpexexoJXWYFs4SJb3RxkT//AN5kv5 ueuTyp9YBhYYvVuNVSc8WbsEibD6pTTlSH6lpAyy0zwsIfDbq8DCLWRECZr8ai9CMTSp EcrYmY5sFnk9xlIrrR/BZl2UVmnim43qgCbaZyP8buHB36WtGz4sakRWaWn//oMA3tmX PUopW9fz9VYSP6Mp1EdMrZe7vt2fQ8skiSl8sNMgaqv6Ef+WGBt0EaPCD+ew2NfBGq0T xIEg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718925221; x=1719530021; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=MgnmbN5MPz4u6HwtpTU4Zp3I0CSg6ni7gpmRecQhhsc=; b=niWEr/h9yjkVGjJD3JSUzdKjfD0HhzelLfLw7VLf8cukS+JobAvCdXyCPG3wIDyBkr P8MV/RLu4Wd91Pxs3+JbiOjUtYeHPaidsGpSxcyREBiUxbd/DZa3OwS1Xy0tVcGoLQ2V 1MdWq4hvEMzPTOYeck3SPRwSkQO42maSWQJmQCttKMszvhTfEvj8XuWk/TnvU+A8HRYo 5txgjAtwc0R9fAkISaPHbi9kXMOx95LWRJe64hUSSsBBrddn2fNUEP3jrO8DcgJzZQSS LqwEvz5DtVhjxtI7Su7YTNRtCqbSp2CG1/Bg1+45lscEmvDyav4TlOm2LwY5ISgCtg+c pxfw== X-Forwarded-Encrypted: i=1; AJvYcCWG0QsAwq5olWNtVs3G5o1fxipKA6gxMoG//qESwpwce271VMaWKVm7kejpxVmJNxfbBMCio6D4KviLd5tnReqg35W8Bgv8MCzE4z3XcpDhgggI9tA= X-Gm-Message-State: AOJu0Yxk4bFlCO86g7lAlxsJ8eK+FqjK1QeW7Z5dkc8oDedBr3v4GAmL IUi2IwsFHXtrzwb+OCGwQXrzXp8azmvsKWKCUR8bqqECBqourgIe7vA4zd1vXWs= X-Google-Smtp-Source: AGHT+IGcflyEPj6w5naITQ8Pm+V6zs8OQmKJmr+51gTiWQ/prs82vRgY/sUN5+lTjL9xSd1p6OXsXA== X-Received: by 2002:a05:6830:1018:b0:6f9:a5bc:fae9 with SMTP id 46e09a7af769-700748c96ccmr7378826a34.10.1718925220685; Thu, 20 Jun 2024 16:13:40 -0700 (PDT) Received: from localhost ([136.62.192.75]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7009c5df247sm89737a34.6.2024.06.20.16.13.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 16:13:40 -0700 (PDT) From: Sam Protsenko To: =?utf-8?q?=C5=81ukasz_Stelmach?= , Krzysztof Kozlowski , Rob Herring , Conor Dooley Cc: Anand Moon , Olivia Mackall , Herbert Xu , Alim Akhtar , linux-samsung-soc@vger.kernel.org, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 1/6] dt-bindings: rng: Add Exynos850 support to exynos-trng Date: Thu, 20 Jun 2024 18:13:34 -0500 Message-Id: <20240620231339.1574-2-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240620231339.1574-1-semen.protsenko@linaro.org> References: <20240620231339.1574-1-semen.protsenko@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240620_161342_383105_D4972E3B X-CRM114-Status: GOOD ( 12.50 ) 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 TRNG block in Exynos850 is pretty much the same as in Exynos5250, but there are two clocks that has to be controlled to make it work: 1. Functional (operating) clock: called ACLK in Exynos850, the same as "secss" clock in Exynos5250 2. Interface (bus) clock: called PCLK in Exynos850. It has to be enabled in order to access TRNG registers Document Exynos850 compatible and the related clock changes. Signed-off-by: Sam Protsenko Reviewed-by: Krzysztof Kozlowski --- Changes in v3: - Added R-b tag from Krzysztof Changes in v2: - Removed example added in v1 .../bindings/rng/samsung,exynos5250-trng.yaml | 40 +++++++++++++++++-- 1 file changed, 36 insertions(+), 4 deletions(-) diff --git a/Documentation/devicetree/bindings/rng/samsung,exynos5250-trng.yaml b/Documentation/devicetree/bindings/rng/samsung,exynos5250-trng.yaml index 765d9f9edd6e..1a71935d8a19 100644 --- a/Documentation/devicetree/bindings/rng/samsung,exynos5250-trng.yaml +++ b/Documentation/devicetree/bindings/rng/samsung,exynos5250-trng.yaml @@ -12,14 +12,17 @@ maintainers: properties: compatible: - const: samsung,exynos5250-trng + enum: + - samsung,exynos5250-trng + - samsung,exynos850-trng clocks: - maxItems: 1 + minItems: 1 + maxItems: 2 clock-names: - items: - - const: secss + minItems: 1 + maxItems: 2 reg: maxItems: 1 @@ -30,6 +33,35 @@ required: - clock-names - reg +allOf: + - if: + properties: + compatible: + contains: + const: samsung,exynos850-trng + + then: + properties: + clocks: + items: + - description: SSS (Security Sub System) operating clock + - description: SSS (Security Sub System) bus clock + + clock-names: + items: + - const: secss + - const: pclk + + else: + properties: + clocks: + items: + - description: SSS (Security Sub System) operating clock + + clock-names: + items: + - const: secss + additionalProperties: false examples: From patchwork Thu Jun 20 23:13:35 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 13706540 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 88B9FC2BD05 for ; Thu, 20 Jun 2024 23:14:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type: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=BATlvT+ON6RviBgwB4syCf5hzbCPLHDaJ0daEPb1cT8=; b=RLTGOhJ7DsOWfpWIMLQx/r52D1 /pu0fJiuypvhSvo5eTkPb0Ty+w9qXCyiEGtb3JIriZ/vrEQmNB4dx3la51TdCZGPUz6lRTPK9BvbC 0jEK3yzuiAHu7YyRew+LybvfgLUqyoFYZ9UNrghNb15GJl9hIB1qu5QUsm7dFbUOvQX4x7+L55bt2 HqzZ/qRsAtEQkvUuuZ6MPiLwaFwIxMxYq0Qj4tW03HVKuKZMJjcJcFOTKU9hIEDe0S9kkAaYz4xdS p4rwzJHgDyTf2j5AA42PNq9Owc8xoeA6U3CYZpTCFPmsDY93dnNcB/VzFAexDBVy/tIKG331BWyUN t7kaqTPA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyY-0000000755k-32nP; Thu, 20 Jun 2024 23:13:54 +0000 Received: from mail-oi1-x22d.google.com ([2607:f8b0:4864:20::22d]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyM-000000074zq-3CA5 for linux-arm-kernel@lists.infradead.org; Thu, 20 Jun 2024 23:13:45 +0000 Received: by mail-oi1-x22d.google.com with SMTP id 5614622812f47-3d226aff122so748161b6e.2 for ; Thu, 20 Jun 2024 16:13:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718925221; x=1719530021; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=BATlvT+ON6RviBgwB4syCf5hzbCPLHDaJ0daEPb1cT8=; b=h/FJTy/a8RuJEHEnzwqipbycUfzdKps82hMvbC3OtUEhfq63EWenjMwaG7t9V1aVsO IujhGCxlb927QBM+I3VZBYPbOa0j+SheXe02WIUH49q6nwiH609G7Q88FXRQfuAU12/N yG7EeMt/krPzoTDqAMMe9RCQnDFfC96MwmuHMo1s/Qf8SEwP7nMYHpHBVi4R5yRw+URh r3ymqzL9nJuKVgaEEDb4d+dGQ+2hnoDiduKRWEaSbGE7ylAlEzkiQb9BrRUXUbvnDBU2 OWPzJJNsCurFRfKryxcrTNJSaI7EUHGsQtWn+lbcYZk4kbL+92393UeE3bkRRFDdCjZk Euqw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718925221; x=1719530021; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BATlvT+ON6RviBgwB4syCf5hzbCPLHDaJ0daEPb1cT8=; b=ItfXmrZtPza798aGglSJHI/Y45NOD0eadmhL8sG/8FpwcfJvFxIOIzx0r+iXZPOVlX vz1Y+JROoB1uIDEgVzmYZsDSGssBcsDi2fQ8nx0UGHx0Q/EFEf7AOM28Ry/lJb2BPyuM J4am6eYM79MnB2dtlpQhmh5jfgBPjXUV/lPyBsgwmtRo8fW9xxN5DBb5ZRpvPsk1VGRP VeQvq+mDJZT3lHAZhfiwPRIKfGKik+kkah3bYtWwQ/Nl2QfbOYRY1VvWR30peUL96e62 WtkMYg+UeFhY4oaH4MX/U4XU/sB06H/CawVk88qdPe55sV9N06pjCzlsy+ulLMuSzabt 0YlA== X-Forwarded-Encrypted: i=1; AJvYcCUxshuSU1Wy6hAiiYeG8sY11REmBAQ9ANQbpZTT8QoIskAPQuWbU2Opr1AqCNGIYowJR4AiOXYmCv24GLyHqrcFB5IrEfm2+pcrV6xPQrzRiA2jDU0= X-Gm-Message-State: AOJu0YwYLtJZGFShdpOLY6guqWbDnpiDmbMALCwWAKZjmqCUuTvnD3yr kLsT6jgOytckwgwYBGrS5WbHwR2MUltmTOU/8D4yLkj8gY913SXmnpIS6gOY6Zw= X-Google-Smtp-Source: AGHT+IEKb6IknyNKfozPN/QAZLLLGaOcrLym6h7VLNCVPFwfAvcGLmQyegTh/tAgk3vnZ27Ac09bFw== X-Received: by 2002:a05:6808:2391:b0:3d2:2f52:c617 with SMTP id 5614622812f47-3d51baf8f68mr8339992b6e.47.1718925221409; Thu, 20 Jun 2024 16:13:41 -0700 (PDT) Received: from localhost ([136.62.192.75]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d5344de334sm86675b6e.8.2024.06.20.16.13.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 16:13:41 -0700 (PDT) From: Sam Protsenko To: =?utf-8?q?=C5=81ukasz_Stelmach?= , Krzysztof Kozlowski , Rob Herring , Conor Dooley Cc: Anand Moon , Olivia Mackall , Herbert Xu , Alim Akhtar , linux-samsung-soc@vger.kernel.org, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 2/6] hwrng: exynos: Improve coding style Date: Thu, 20 Jun 2024 18:13:35 -0500 Message-Id: <20240620231339.1574-3-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240620231339.1574-1-semen.protsenko@linaro.org> References: <20240620231339.1574-1-semen.protsenko@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240620_161342_826660_8F72231A X-CRM114-Status: GOOD ( 15.47 ) 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 Fix obvious style issues. Some of those were found with checkpatch, and some just contradict the kernel coding style guide. No functional change. Signed-off-by: Sam Protsenko Reviewed-by: Krzysztof Kozlowski Acked-by: Łukasz Stelmach --- Changes in v3: - Added '\n' in dev_err("clock divider too large") - Added A-b tag from Łukasz Changes in v2: - Added Krzysztof's R-b tag drivers/char/hw_random/exynos-trng.c | 63 +++++++++++++--------------- 1 file changed, 30 insertions(+), 33 deletions(-) diff --git a/drivers/char/hw_random/exynos-trng.c b/drivers/char/hw_random/exynos-trng.c index 0ed5d22fe667..266bdad84f3c 100644 --- a/drivers/char/hw_random/exynos-trng.c +++ b/drivers/char/hw_random/exynos-trng.c @@ -23,45 +23,41 @@ #include #include -#define EXYNOS_TRNG_CLKDIV (0x0) - -#define EXYNOS_TRNG_CTRL (0x20) -#define EXYNOS_TRNG_CTRL_RNGEN BIT(31) - -#define EXYNOS_TRNG_POST_CTRL (0x30) -#define EXYNOS_TRNG_ONLINE_CTRL (0x40) -#define EXYNOS_TRNG_ONLINE_STAT (0x44) -#define EXYNOS_TRNG_ONLINE_MAXCHI2 (0x48) -#define EXYNOS_TRNG_FIFO_CTRL (0x50) -#define EXYNOS_TRNG_FIFO_0 (0x80) -#define EXYNOS_TRNG_FIFO_1 (0x84) -#define EXYNOS_TRNG_FIFO_2 (0x88) -#define EXYNOS_TRNG_FIFO_3 (0x8c) -#define EXYNOS_TRNG_FIFO_4 (0x90) -#define EXYNOS_TRNG_FIFO_5 (0x94) -#define EXYNOS_TRNG_FIFO_6 (0x98) -#define EXYNOS_TRNG_FIFO_7 (0x9c) -#define EXYNOS_TRNG_FIFO_LEN (8) -#define EXYNOS_TRNG_CLOCK_RATE (500000) - +#define EXYNOS_TRNG_CLKDIV 0x0 + +#define EXYNOS_TRNG_CTRL 0x20 +#define EXYNOS_TRNG_CTRL_RNGEN BIT(31) + +#define EXYNOS_TRNG_POST_CTRL 0x30 +#define EXYNOS_TRNG_ONLINE_CTRL 0x40 +#define EXYNOS_TRNG_ONLINE_STAT 0x44 +#define EXYNOS_TRNG_ONLINE_MAXCHI2 0x48 +#define EXYNOS_TRNG_FIFO_CTRL 0x50 +#define EXYNOS_TRNG_FIFO_0 0x80 +#define EXYNOS_TRNG_FIFO_1 0x84 +#define EXYNOS_TRNG_FIFO_2 0x88 +#define EXYNOS_TRNG_FIFO_3 0x8c +#define EXYNOS_TRNG_FIFO_4 0x90 +#define EXYNOS_TRNG_FIFO_5 0x94 +#define EXYNOS_TRNG_FIFO_6 0x98 +#define EXYNOS_TRNG_FIFO_7 0x9c +#define EXYNOS_TRNG_FIFO_LEN 8 +#define EXYNOS_TRNG_CLOCK_RATE 500000 struct exynos_trng_dev { - struct device *dev; - void __iomem *mem; - struct clk *clk; - struct hwrng rng; + struct device *dev; + void __iomem *mem; + struct clk *clk; + struct hwrng rng; }; static int exynos_trng_do_read(struct hwrng *rng, void *data, size_t max, bool wait) { - struct exynos_trng_dev *trng; + struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv; int val; max = min_t(size_t, max, (EXYNOS_TRNG_FIFO_LEN * 4)); - - trng = (struct exynos_trng_dev *)rng->priv; - writel_relaxed(max * 8, trng->mem + EXYNOS_TRNG_FIFO_CTRL); val = readl_poll_timeout(trng->mem + EXYNOS_TRNG_FIFO_CTRL, val, val == 0, 200, 1000000); @@ -87,7 +83,7 @@ static int exynos_trng_init(struct hwrng *rng) */ val = sss_rate / (EXYNOS_TRNG_CLOCK_RATE * 2); if (val > 0x7fff) { - dev_err(trng->dev, "clock divider too large: %d", val); + dev_err(trng->dev, "clock divider too large: %d\n", val); return -ERANGE; } val = val << 1; @@ -122,7 +118,7 @@ static int exynos_trng_probe(struct platform_device *pdev) trng->rng.init = exynos_trng_init; trng->rng.read = exynos_trng_do_read; - trng->rng.priv = (unsigned long) trng; + trng->rng.priv = (unsigned long)trng; platform_set_drvdata(pdev, trng); trng->dev = &pdev->dev; @@ -175,7 +171,7 @@ static int exynos_trng_probe(struct platform_device *pdev) static void exynos_trng_remove(struct platform_device *pdev) { - struct exynos_trng_dev *trng = platform_get_drvdata(pdev); + struct exynos_trng_dev *trng = platform_get_drvdata(pdev); clk_disable_unprepare(trng->clk); @@ -204,7 +200,7 @@ static int exynos_trng_resume(struct device *dev) } static DEFINE_SIMPLE_DEV_PM_OPS(exynos_trng_pm_ops, exynos_trng_suspend, - exynos_trng_resume); + exynos_trng_resume); static const struct of_device_id exynos_trng_dt_match[] = { { @@ -225,6 +221,7 @@ static struct platform_driver exynos_trng_driver = { }; module_platform_driver(exynos_trng_driver); + MODULE_AUTHOR("Łukasz Stelmach"); MODULE_DESCRIPTION("H/W TRNG driver for Exynos chips"); MODULE_LICENSE("GPL v2"); From patchwork Thu Jun 20 23:13:36 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 13706541 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 6C048C2BD09 for ; Thu, 20 Jun 2024 23:14:06 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Xx9yiqfqGQhoL/OQzBJX0T4MbHx9pH2R2+We+nfV8yc=; b=Gawy3YXc9ICnKsZXkzzevi5hq6 upSqFOn0nQFKgdfFqlolspXLC4hfdwz07zEb6NNJ+DSlIgpMXVW8DZRU0EGr2JHkVw8FBwZh402ER xlsQmne8S05x+61hpm9xL1a+mE/9dLp0SVrpduCG6SsdGZ8Yiisd90dT+p1lnyK8+ZPBHgx8HhUFh 6QpiVbUvJhosjbUe0X/guTpUFeQneXfnv/cqdZm1Fnj9QjLX8AVRZxCWJYqOQHoAlaYhMlBFubA2W zzMObWOTJviJgxkR9S9J0us6ozZCNLPQ96mkiMf0DLlsvEZWrsYR7GOvpHym9ncwbHhPtHShStmYq BwUzNzow==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyX-00000007557-3eec; Thu, 20 Jun 2024 23:13:53 +0000 Received: from mail-oa1-x36.google.com ([2001:4860:4864:20::36]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyN-0000000750S-2WJi for linux-arm-kernel@lists.infradead.org; Thu, 20 Jun 2024 23:13:45 +0000 Received: by mail-oa1-x36.google.com with SMTP id 586e51a60fabf-25980546baeso715529fac.2 for ; Thu, 20 Jun 2024 16:13:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718925222; x=1719530022; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Xx9yiqfqGQhoL/OQzBJX0T4MbHx9pH2R2+We+nfV8yc=; b=aDZDPAvTGbjpGyYvlVGtnf3U+nJApyw6KuXJ9WcreJMFXdbi0vYEFfKv8Pr6hnHykz IFX/DMqFjXKvHrzGlEqVzLk9qfWBRAbLSjjp36FpexKe6kKrOdTihJKafBKibiMaoHmA BGIctBKJYVTYUPEAO7IqxAZk5tXyDHZsMTs45MeKTrlVVtlwhNfhivhWmw0kNXS+ydKM 7s3R3VGvm0mOCydWqsd2+nwyy2UIo6OLxmDZLAtACe41ZvlF/6+czR3iG8PSoBc1DIDm +YdWr8uGR4irKW0M9axtqMPoMX7wazaWLTQql0K5QZg5Xjiov6ltfEFq9Gbedej7Vh+y J56w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718925222; x=1719530022; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Xx9yiqfqGQhoL/OQzBJX0T4MbHx9pH2R2+We+nfV8yc=; b=JSYTZyYNX3m1fCSKzh1zEBIuEmcxIiK3/7JDm2ijpLYNw20GRjCL+rFGQNurFNeQ7m FKmL+ZnJsxQSGdHZBO6JlkeZGuHYx692ELRa/X/fq56/GHwFIf0GVLKvqYLa3cGRK5DX myWIg+RYq5U9ay2s+oWI1+K6K7y5Kj6WqfhZHKTIHApvSGUvGhOhI1rj+CdvQy+6LsPM oYQ2ftFqGt7TWuMKR5xouuNPnTEn5qnPJFQB2iPs9hC2p/zFds2hn3pz85vLGaBk3XaX VEKkauLVN2l/TgBMmN3UMPW1c4ETo4jl1xXeeOt1hnqjhmoRFxFkp1hkRWvI0GX040Jr qWCg== X-Forwarded-Encrypted: i=1; AJvYcCVQZOUVljZ3lRbSDPfpz7CrOsmgwQO4NDaxHLj6Xc1V/CNmNiu19tgt1W/n1CWujtcy41PWCK6gCCYh2Eh2Y/xLEtynMJ9MH0tGkeM8RoGIDghx9y4= X-Gm-Message-State: AOJu0YxcLUMkJZYmUzlWPyi0hP9Vuo1eJDNjLa56S5eam+oVJvH5qXnK q4q7GqRU7WHl+Qxfi/1EjHrRFx+iFlYZ4ffj+hqTvnKSwNStvfohUuVfJGfycOU= X-Google-Smtp-Source: AGHT+IG8lAKtWiSgYIqlkSt41d/qaNiahUHwFKBCRi2rphALIUFAjgt4BUmpmumuwrlgNLH0oGwTwA== X-Received: by 2002:a05:6870:c111:b0:254:ada1:aa29 with SMTP id 586e51a60fabf-25c94a22a97mr8080798fac.27.1718925222389; Thu, 20 Jun 2024 16:13:42 -0700 (PDT) Received: from localhost ([136.62.192.75]) by smtp.gmail.com with ESMTPSA id 586e51a60fabf-25cd49d18absm131302fac.25.2024.06.20.16.13.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 16:13:42 -0700 (PDT) From: Sam Protsenko To: =?utf-8?q?=C5=81ukasz_Stelmach?= , Krzysztof Kozlowski , Rob Herring , Conor Dooley Cc: Anand Moon , Olivia Mackall , Herbert Xu , Alim Akhtar , linux-samsung-soc@vger.kernel.org, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 3/6] hwrng: exynos: Use devm_clk_get_enabled() to get the clock Date: Thu, 20 Jun 2024 18:13:36 -0500 Message-Id: <20240620231339.1574-4-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240620231339.1574-1-semen.protsenko@linaro.org> References: <20240620231339.1574-1-semen.protsenko@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240620_161343_671815_AD07045F X-CRM114-Status: GOOD ( 13.94 ) 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 devm_clk_get_enabled() helper instead of calling devm_clk_get() and then clk_prepare_enable(). It simplifies the error handling and makes the code more compact. Also use dev_err_probe() to handle possible -EPROBE_DEFER errors if the clock is not available yet. Signed-off-by: Sam Protsenko Reviewed-by: Krzysztof Kozlowski Reviewed-by: Anand Moon --- Changes in v3: - Added missing '\n' in dev_err_probe() - Added R-b tag from Krzysztof - Added R-b tag from Anand Changes in v2: - No changes (it's a new patch added in v2) drivers/char/hw_random/exynos-trng.c | 21 ++++----------------- 1 file changed, 4 insertions(+), 17 deletions(-) diff --git a/drivers/char/hw_random/exynos-trng.c b/drivers/char/hw_random/exynos-trng.c index 266bdad84f3c..997bd22f4498 100644 --- a/drivers/char/hw_random/exynos-trng.c +++ b/drivers/char/hw_random/exynos-trng.c @@ -134,32 +134,23 @@ static int exynos_trng_probe(struct platform_device *pdev) goto err_pm_get; } - trng->clk = devm_clk_get(&pdev->dev, "secss"); + trng->clk = devm_clk_get_enabled(&pdev->dev, "secss"); if (IS_ERR(trng->clk)) { - ret = PTR_ERR(trng->clk); - dev_err(&pdev->dev, "Could not get clock.\n"); - goto err_clock; - } - - ret = clk_prepare_enable(trng->clk); - if (ret) { - dev_err(&pdev->dev, "Could not enable the clk.\n"); + ret = dev_err_probe(&pdev->dev, PTR_ERR(trng->clk), + "Could not get clock\n"); goto err_clock; } ret = devm_hwrng_register(&pdev->dev, &trng->rng); if (ret) { dev_err(&pdev->dev, "Could not register hwrng device.\n"); - goto err_register; + goto err_clock; } dev_info(&pdev->dev, "Exynos True Random Number Generator.\n"); return 0; -err_register: - clk_disable_unprepare(trng->clk); - err_clock: pm_runtime_put_noidle(&pdev->dev); @@ -171,10 +162,6 @@ static int exynos_trng_probe(struct platform_device *pdev) static void exynos_trng_remove(struct platform_device *pdev) { - struct exynos_trng_dev *trng = platform_get_drvdata(pdev); - - clk_disable_unprepare(trng->clk); - pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); } From patchwork Thu Jun 20 23:13:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 13706543 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 A548FC2BA18 for ; Thu, 20 Jun 2024 23:14:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=3cJgtDYRGnxNR5uxsP8R2aMDXQF4TAj9PgQdzrH0jxc=; b=s/bni2hpu93lQxBByiiL+q4OWT 59C8TQ/xUAonjNYilUozRpsjxvXdNEh1ZusUSJ84ot68LttZVQy9+us7ncEcwIvEfTFFQXFvOnChR qYxLzVgKNrVWakmdSsm2pZkiMhPIeXcKa88qRiRgZAmB1qR3npvHZtbcOBuVbIE+jofY1YlImBFO1 V7dO+MTU3mBkfFdSJ6Bxc/jkl47vs9IgUAuSti3pDrQxGlV5kVdj/A+HaZN+/C/vAhWKnjNw2fHRG 0ieHOp5Wr931AENJB5UdZ/lEK76tG21lsRgabzB00Vzk5qG1zOic458jrVcDHKbg50UNhyumJgaca UOyoNBXw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyZ-0000000756d-3Fid; Thu, 20 Jun 2024 23:13:55 +0000 Received: from mail-ot1-x336.google.com ([2607:f8b0:4864:20::336]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyO-0000000750d-1Kr4 for linux-arm-kernel@lists.infradead.org; Thu, 20 Jun 2024 23:13:45 +0000 Received: by mail-ot1-x336.google.com with SMTP id 46e09a7af769-6fd3d9f572fso775044a34.0 for ; Thu, 20 Jun 2024 16:13:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718925223; x=1719530023; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3cJgtDYRGnxNR5uxsP8R2aMDXQF4TAj9PgQdzrH0jxc=; b=KoRNxZrveIQ2grql09FLc3RIAGCuzTZHW/SQayDjrql7WgsCDqOeyW4TuL0RP+XV1h 39j45G2DG2/9GCv2zqYuxJrIGfFXHBE6ZTx22Ga+OhDlxRBjBn+7kZRZ/eJqKvop0Vb+ SwWgxZ1m6iGbMGXont48pM8oH++JRJHnrprc82BU/AEv9q/G+CrZKz31ys0FZU7Zq0rD zCB7qJVcVSU8h+bY9Z+TBlRiH5dw9QouVonsVUztiZREkapinlLrz79f+bTmFJxuoskK 0JnZ70ewQbTeu5tzl9zQQ9gH4/JWwp7QlL8dQbzXJ6onCoCBK+uDljCaHLi7dccwayXz xCTg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718925223; x=1719530023; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3cJgtDYRGnxNR5uxsP8R2aMDXQF4TAj9PgQdzrH0jxc=; b=ieeRPm99ALvkRFycnUgoZXZ410ChJvFNYpzYkxOb1+NeD6MU1gVtEi9labCtrSGheG FO44xo7FxVFw6Ko0TLJZP5pXpOGXhF5OtBPyc+u95tp95wZnPkUIClHN9nI32NROQkMX Dbg5UQrqZM6ks3rcTBKc6SkzY7Q0By2LF4gpS/bwY7HvK85/i72gTL48IkdeLbM3sVCQ pTMJeY5NQXKi3KFB/42gOHrrOAzSX7Q5H7wg0KobVUvIvGoIHUhfW6ATKp/xVy5qbqjg WpjNJyVF/8JzLxjPJ6AUhz6bfKuYw7iMTHn/JAVfe9iXHGkM/J302p7K/1f6wJKwy4p9 EhNQ== X-Forwarded-Encrypted: i=1; AJvYcCXuGjZ9jqjOAYkkzWHSw+14e+FHexN1sMx0V/y6bPsMJ1/cix+ye8+TR/Py054KXEIv09yux7m1bpj1tAOHej9NUDwVC2TIr/3vDxdOTyqJ8yP5EIg= X-Gm-Message-State: AOJu0YydwoPg3PGsN3gaIe2Htk+vryQA+yZBai6jqVqIojWhmUwe3PpR u2lK1Ms5mbt3wd3MdiTIgoD6YqMJHvmkbw0ceCA48evCfmqRG5KzIManE8tbQbA= X-Google-Smtp-Source: AGHT+IFo/CfULEDzNMn3svBf7fPxTFvjTmzdPpeV1CFsheF7Pw04fqkYLYCT/ue0ZcXoBsHBHlK0pA== X-Received: by 2002:a9d:7409:0:b0:6f9:a523:403f with SMTP id 46e09a7af769-70073f20008mr7815451a34.22.1718925223095; Thu, 20 Jun 2024 16:13:43 -0700 (PDT) Received: from localhost ([136.62.192.75]) by smtp.gmail.com with ESMTPSA id 46e09a7af769-7009c60a4b1sm90529a34.47.2024.06.20.16.13.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 16:13:42 -0700 (PDT) From: Sam Protsenko To: =?utf-8?q?=C5=81ukasz_Stelmach?= , Krzysztof Kozlowski , Rob Herring , Conor Dooley Cc: Anand Moon , Olivia Mackall , Herbert Xu , Alim Akhtar , linux-samsung-soc@vger.kernel.org, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 4/6] hwrng: exynos: Implement bus clock control Date: Thu, 20 Jun 2024 18:13:37 -0500 Message-Id: <20240620231339.1574-5-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240620231339.1574-1-semen.protsenko@linaro.org> References: <20240620231339.1574-1-semen.protsenko@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240620_161344_385868_3E109D62 X-CRM114-Status: GOOD ( 15.18 ) 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 Some SoCs like Exynos850 might require the SSS bus clock (PCLK) to be enabled in order to access TRNG registers. Add and handle the optional PCLK clock accordingly to make it possible. Signed-off-by: Sam Protsenko Reviewed-by: Krzysztof Kozlowski Reviewed-by: Anand Moon --- Changes in v3: - Added missing '\n' in dev_err_probe() - Added R-b tag from Krzysztof - Added R-b tag from Anand Changes in v2: - Used devm_clk_get_optional_enabled() to avoid calling clk_prepare_enable() for PCLK drivers/char/hw_random/exynos-trng.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/drivers/char/hw_random/exynos-trng.c b/drivers/char/hw_random/exynos-trng.c index 997bd22f4498..6ef2ee6c9804 100644 --- a/drivers/char/hw_random/exynos-trng.c +++ b/drivers/char/hw_random/exynos-trng.c @@ -47,7 +47,8 @@ struct exynos_trng_dev { struct device *dev; void __iomem *mem; - struct clk *clk; + struct clk *clk; /* operating clock */ + struct clk *pclk; /* bus clock */ struct hwrng rng; }; @@ -141,6 +142,13 @@ static int exynos_trng_probe(struct platform_device *pdev) goto err_clock; } + trng->pclk = devm_clk_get_optional_enabled(&pdev->dev, "pclk"); + if (IS_ERR(trng->pclk)) { + ret = dev_err_probe(&pdev->dev, PTR_ERR(trng->pclk), + "Could not get pclk\n"); + goto err_clock; + } + ret = devm_hwrng_register(&pdev->dev, &trng->rng); if (ret) { dev_err(&pdev->dev, "Could not register hwrng device.\n"); From patchwork Thu Jun 20 23:13:38 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 13706542 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 B1BC1C2BD05 for ; Thu, 20 Jun 2024 23:14:07 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type: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=RkNkM6mewnoLT1ZDzP6dyIrgO4uv3nwMETptakYX1vA=; b=fkVdjbGan7RFa/T3QA4fY4TvQh wZd/pflC0hY2lHcywAZ25Y3S97MxKQUX+gFUT1ol+XKjEXnUGMw1KsiAb7NUeOb0QTCv+nicSfCpQ p3EXJ9OYm08qD4XYyuXi2bIumRYTl1qDBYFpj2DMfUxJFjCGuti441ORqpNrkwI5HKKjTjLz8neLg 4AyzluabBCcmcbQrGLTef0Fy2pcLKMqhYKdDT56w5WTtqcrJZGLU9OgXoaF1/WlwsiqsdqIB1m/px 6DNsvdrB0/oj7iBG14Iz7uQOp39gCms80BtXh8A/ZFuKpvx7JDZ9iYFUef8YlVhYMhqG6XkmD0XV+ sC56f02g==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQya-0000000757T-2tb1; Thu, 20 Jun 2024 23:13:56 +0000 Received: from mail-oo1-xc2e.google.com ([2607:f8b0:4864:20::c2e]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyP-0000000751A-0Ea5 for linux-arm-kernel@lists.infradead.org; Thu, 20 Jun 2024 23:13:46 +0000 Received: by mail-oo1-xc2e.google.com with SMTP id 006d021491bc7-5c1acd482e4so767279eaf.3 for ; Thu, 20 Jun 2024 16:13:44 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718925224; x=1719530024; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=RkNkM6mewnoLT1ZDzP6dyIrgO4uv3nwMETptakYX1vA=; b=Bed9KK7VEzxCtH2TdhBbuz7yRvVKJz3X0hYKtUn9kUxnP6qit8h7P0XXp4gdNxfhc6 VblrVHKohaJSj13EHR2tuvjYCT+eKh1eb/xP7dGcKKk3oShulWjCNg/kVE2BVbSxVNIx vSCHM9MpTgNLPVvUpeTTK4hcqxsqFPvyWXQPDDzRgK/sGrozZAKrMJMW8VfX7ZMdQN7/ 7cWjaRmQNdGTbIIu2V2VISOay8tyJKTAG+XTR1jdV/lMTRaK/rSoxxkm+2PrYtxhEeF9 //ucrelv56oOmNJp4yaKEZINnpZ/vs0kSAMcqplIMQ7IG5VkUxr88/TTTylauDpwCSrf EXHQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718925224; x=1719530024; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=RkNkM6mewnoLT1ZDzP6dyIrgO4uv3nwMETptakYX1vA=; b=vGEUlQ25Bbtjxaey4FsBQZ43Ca1GJ8Xs2+sBQrgYuJxmcFTUsNqFFQkzHJZBeZtlMY bnMbpm+3MVcR1Og4gGx9T+Cwkf1YeiYSPpCVktVLdT5Da2yjRFd0CpL5jDANpLHghGCe PQWPs/MuJw/WpJsoAgKHGpku5UKVfi20eGgmPGCMwvU2B4UCD4r7szYcvdeuz0rQgpM7 RvpzacLZXzMil79OqboZxBRt5vXZh7gynI1UbVTl/O97N0JMO4Mwz7NlMDOngj38kfHL AMKGE8aaP8ynm0pyDAEIPLKfe6brk5gf07yhq1B9qSzodWz5XBvBVypRz+Bf89Sl/Cyw fM8Q== X-Forwarded-Encrypted: i=1; AJvYcCXS8K+/r2vDjfK4SRywwVWrgtKAw+iy3Zfb5IlkeQZ31kx1w+HBAVDzAUExqj5n7ywnoRAVnq2FEfWgEyBYzLTkphz9hXVgJ+3K/xWZtWo9ZbBBaC4= X-Gm-Message-State: AOJu0YzjBdWumFEMtglbOOZnANEs95n/XiAIsRtTe/psMJ+nDNmdHmMH dNO5uEJpo0Lc1acOdFYCPd5daDmUfyNvQ/Z2iiIy0hx6rmNCdaKyUqs5uwKLuoZ1fp8axKRXxxq r X-Google-Smtp-Source: AGHT+IGfkOlBFdyPdZRGs6qV8pLK9RhP7EnEMBcc7d5J9xrNECGWhpxHFFlYHN0jJINI3/NMS9s1qA== X-Received: by 2002:a4a:3c11:0:b0:5bb:1ae0:17f0 with SMTP id 006d021491bc7-5c1ba65aa73mr5170181eaf.6.1718925223835; Thu, 20 Jun 2024 16:13:43 -0700 (PDT) Received: from localhost ([136.62.192.75]) by smtp.gmail.com with ESMTPSA id 006d021491bc7-5c1d6b7d691sm22699eaf.4.2024.06.20.16.13.43 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 16:13:43 -0700 (PDT) From: Sam Protsenko To: =?utf-8?q?=C5=81ukasz_Stelmach?= , Krzysztof Kozlowski , Rob Herring , Conor Dooley Cc: Anand Moon , Olivia Mackall , Herbert Xu , Alim Akhtar , linux-samsung-soc@vger.kernel.org, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 5/6] hwrng: exynos: Add SMC based TRNG operation Date: Thu, 20 Jun 2024 18:13:38 -0500 Message-Id: <20240620231339.1574-6-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240620231339.1574-1-semen.protsenko@linaro.org> References: <20240620231339.1574-1-semen.protsenko@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240620_161345_149444_C3F2FDA2 X-CRM114-Status: GOOD ( 26.19 ) 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 On some Exynos chips like Exynos850 the access to Security Sub System (SSS) registers is protected with TrustZone, and therefore only possible from EL3 monitor software. The Linux kernel is running in EL1, so the only way for the driver to obtain TRNG data is via SMC calls to EL3 monitor. Implement such SMC operation and use it when EXYNOS_SMC flag is set in the corresponding chip driver data. Signed-off-by: Sam Protsenko Reviewed-by: Krzysztof Kozlowski --- Changes in v3: - Added appropriate error messages for the case when init SMC command fails Changes in v2: - Used the "reversed Christmas tree" style in the variable declaration block in exynos_trng_do_read_smc() - Renamed .quirks to .flags in the driver structure - Added Krzysztof's R-b tag drivers/char/hw_random/exynos-trng.c | 140 +++++++++++++++++++++++++-- 1 file changed, 130 insertions(+), 10 deletions(-) diff --git a/drivers/char/hw_random/exynos-trng.c b/drivers/char/hw_random/exynos-trng.c index 6ef2ee6c9804..9fa30583cc86 100644 --- a/drivers/char/hw_random/exynos-trng.c +++ b/drivers/char/hw_random/exynos-trng.c @@ -10,6 +10,7 @@ * Krzysztof Kozłowski */ +#include #include #include #include @@ -22,6 +23,7 @@ #include #include #include +#include #define EXYNOS_TRNG_CLKDIV 0x0 @@ -44,16 +46,41 @@ #define EXYNOS_TRNG_FIFO_LEN 8 #define EXYNOS_TRNG_CLOCK_RATE 500000 +/* Driver feature flags */ +#define EXYNOS_SMC BIT(0) + +#define EXYNOS_SMC_CALL_VAL(func_num) \ + ARM_SMCCC_CALL_VAL(ARM_SMCCC_FAST_CALL, \ + ARM_SMCCC_SMC_32, \ + ARM_SMCCC_OWNER_SIP, \ + func_num) + +/* SMC command for DTRNG access */ +#define SMC_CMD_RANDOM EXYNOS_SMC_CALL_VAL(0x1012) + +/* SMC_CMD_RANDOM: arguments */ +#define HWRNG_INIT 0x0 +#define HWRNG_EXIT 0x1 +#define HWRNG_GET_DATA 0x2 +#define HWRNG_RESUME 0x3 + +/* SMC_CMD_RANDOM: return values */ +#define HWRNG_RET_OK 0x0 +#define HWRNG_RET_RETRY_ERROR 0x2 + +#define HWRNG_MAX_TRIES 100 + struct exynos_trng_dev { struct device *dev; void __iomem *mem; struct clk *clk; /* operating clock */ struct clk *pclk; /* bus clock */ struct hwrng rng; + unsigned long flags; }; -static int exynos_trng_do_read(struct hwrng *rng, void *data, size_t max, - bool wait) +static int exynos_trng_do_read_reg(struct hwrng *rng, void *data, size_t max, + bool wait) { struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv; int val; @@ -70,7 +97,40 @@ static int exynos_trng_do_read(struct hwrng *rng, void *data, size_t max, return max; } -static int exynos_trng_init(struct hwrng *rng) +static int exynos_trng_do_read_smc(struct hwrng *rng, void *data, size_t max, + bool wait) +{ + struct arm_smccc_res res; + unsigned int copied = 0; + u32 *buf = data; + int tries = 0; + + while (copied < max) { + arm_smccc_smc(SMC_CMD_RANDOM, HWRNG_GET_DATA, 0, 0, 0, 0, 0, 0, + &res); + switch (res.a0) { + case HWRNG_RET_OK: + *buf++ = res.a2; + *buf++ = res.a3; + copied += 8; + tries = 0; + break; + case HWRNG_RET_RETRY_ERROR: + if (!wait) + return copied; + if (++tries >= HWRNG_MAX_TRIES) + return copied; + cond_resched(); + break; + default: + return -EIO; + } + } + + return copied; +} + +static int exynos_trng_init_reg(struct hwrng *rng) { struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv; unsigned long sss_rate; @@ -103,6 +163,24 @@ static int exynos_trng_init(struct hwrng *rng) return 0; } +static int exynos_trng_init_smc(struct hwrng *rng) +{ + struct exynos_trng_dev *trng = (struct exynos_trng_dev *)rng->priv; + struct arm_smccc_res res; + int ret = 0; + + arm_smccc_smc(SMC_CMD_RANDOM, HWRNG_INIT, 0, 0, 0, 0, 0, 0, &res); + if (res.a0 != HWRNG_RET_OK) { + dev_err(trng->dev, "SMC command for TRNG init failed (%d)\n", + (int)res.a0); + ret = -EIO; + } + if ((int)res.a0 == -1) + dev_info(trng->dev, "Make sure LDFW is loaded by your BL\n"); + + return ret; +} + static int exynos_trng_probe(struct platform_device *pdev) { struct exynos_trng_dev *trng; @@ -112,21 +190,29 @@ static int exynos_trng_probe(struct platform_device *pdev) if (!trng) return ret; + platform_set_drvdata(pdev, trng); + trng->dev = &pdev->dev; + + trng->flags = (unsigned long)device_get_match_data(&pdev->dev); + trng->rng.name = devm_kstrdup(&pdev->dev, dev_name(&pdev->dev), GFP_KERNEL); if (!trng->rng.name) return ret; - trng->rng.init = exynos_trng_init; - trng->rng.read = exynos_trng_do_read; trng->rng.priv = (unsigned long)trng; - platform_set_drvdata(pdev, trng); - trng->dev = &pdev->dev; + if (trng->flags & EXYNOS_SMC) { + trng->rng.init = exynos_trng_init_smc; + trng->rng.read = exynos_trng_do_read_smc; + } else { + trng->rng.init = exynos_trng_init_reg; + trng->rng.read = exynos_trng_do_read_reg; - trng->mem = devm_platform_ioremap_resource(pdev, 0); - if (IS_ERR(trng->mem)) - return PTR_ERR(trng->mem); + trng->mem = devm_platform_ioremap_resource(pdev, 0); + if (IS_ERR(trng->mem)) + return PTR_ERR(trng->mem); + } pm_runtime_enable(&pdev->dev); ret = pm_runtime_resume_and_get(&pdev->dev); @@ -170,12 +256,31 @@ static int exynos_trng_probe(struct platform_device *pdev) static void exynos_trng_remove(struct platform_device *pdev) { + struct exynos_trng_dev *trng = platform_get_drvdata(pdev); + + if (trng->flags & EXYNOS_SMC) { + struct arm_smccc_res res; + + arm_smccc_smc(SMC_CMD_RANDOM, HWRNG_EXIT, 0, 0, 0, 0, 0, 0, + &res); + } + pm_runtime_put_sync(&pdev->dev); pm_runtime_disable(&pdev->dev); } static int exynos_trng_suspend(struct device *dev) { + struct exynos_trng_dev *trng = dev_get_drvdata(dev); + struct arm_smccc_res res; + + if (trng->flags & EXYNOS_SMC) { + arm_smccc_smc(SMC_CMD_RANDOM, HWRNG_EXIT, 0, 0, 0, 0, 0, 0, + &res); + if (res.a0 != HWRNG_RET_OK) + return -EIO; + } + pm_runtime_put_sync(dev); return 0; @@ -183,6 +288,7 @@ static int exynos_trng_suspend(struct device *dev) static int exynos_trng_resume(struct device *dev) { + struct exynos_trng_dev *trng = dev_get_drvdata(dev); int ret; ret = pm_runtime_resume_and_get(dev); @@ -191,6 +297,20 @@ static int exynos_trng_resume(struct device *dev) return ret; } + if (trng->flags & EXYNOS_SMC) { + struct arm_smccc_res res; + + arm_smccc_smc(SMC_CMD_RANDOM, HWRNG_RESUME, 0, 0, 0, 0, 0, 0, + &res); + if (res.a0 != HWRNG_RET_OK) + return -EIO; + + arm_smccc_smc(SMC_CMD_RANDOM, HWRNG_INIT, 0, 0, 0, 0, 0, 0, + &res); + if (res.a0 != HWRNG_RET_OK) + return -EIO; + } + return 0; } From patchwork Thu Jun 20 23:13:39 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Patchwork-Submitter: Sam Protsenko X-Patchwork-Id: 13706544 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 808BAC2BA18 for ; Thu, 20 Jun 2024 23:14:11 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type: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=Zz8ynrGU4z42Aj9sdj4ptAZtRt0FzTqPDvedxGwGE2Y=; b=cv0CYLBqc4NreRU99+01eY/Pwa yn88X4Xi/uuySlZGeN6HFvwAAXzBacOGBEITqNMvO3a5eiRBizx3jr7cpE70jJZ/SuzFE7Qk47/TT 2HmbvFy12tE+Ehy0wOo/sfTUqNcGUqJcwHvhd+63IAOb2wu1KiEi/ousq58HXcduzg62jMMzfPL78 5szM3+5QpxaiAWvJuk9ZG8cu2sJzU80MFq4QR/wbAowcwo3BAtRbIy3X/FTWqZkYDDX2pI3KtWJaM lKn9bEu7jMRQeMcbX2XwK2GaOOm9jhEHwjpg4wicGAFHE5hpKP4ewsZCsynz/JgHrr84DZGAxcdcn v70r/HBA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyd-00000007597-03LJ; Thu, 20 Jun 2024 23:13:59 +0000 Received: from mail-oi1-x234.google.com ([2607:f8b0:4864:20::234]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sKQyP-0000000751U-3TD6 for linux-arm-kernel@lists.infradead.org; Thu, 20 Jun 2024 23:13:47 +0000 Received: by mail-oi1-x234.google.com with SMTP id 5614622812f47-3d2472450d6so753901b6e.3 for ; Thu, 20 Jun 2024 16:13:45 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1718925224; x=1719530024; darn=lists.infradead.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Zz8ynrGU4z42Aj9sdj4ptAZtRt0FzTqPDvedxGwGE2Y=; b=V0TyoUVemjH0yhG31rRlhjCkXSfG+wUoLroIB0D0nql3VNSNCbrKqv/prNFmQTt+Aq 60yeqAqJTymLCzuJIxlogZwl1xHB9YafDPI3UuJ1sDn4V4IdJ62SiHhOUs5NChaq6Lxo xmrIBoR7Di5ilmg5/9951iPlbEJatqf3OfUjTGEilNX+pzg9nho7V169EhHKhvEZil6i pe/VINl+3gsQO9KMzHIgDR62yHHKCO5F+TIe/yUsE2D0C9qh7MBVe2cPOIB1lrnVyBoM cL5q2Xdvq5czIYUbB2BzRpaXrGQUTyJyQ00QIo1xWLxQhzYrZraOZyynKp5DA7DpB/Vw cWJA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1718925224; x=1719530024; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Zz8ynrGU4z42Aj9sdj4ptAZtRt0FzTqPDvedxGwGE2Y=; b=Oo4fLcfeJSdAE99Cvvjt8Vz23d/5NlZ5ItUNaDqFi3tpBxvBy2bkPWMZP82l9MRL4u SxcVtmxc9fq/0wRsnaLKvd5UQ1ixkuOfhk78/NU4U2t10SneJJPJHI21iDXavZ9J/q36 G5xebPGh9gVbghwQ8mFIOlTagvba7G90P2Z+x1Y5t+FpD14X1qT79/aa67qI70pfIFr4 6rLgv28U8+0tr9uwGGSFy+/Coo9JRxp+WzBx4ofKI9LqKxwSxSI7let7hTuiCyJsCPju Aun3tSWqDclnqYzEx+v5HU5bB7+UgpEVRpvBTcbRXbMGGB4rXt5qOpSSX6S4jXmJEDa6 j38Q== X-Forwarded-Encrypted: i=1; AJvYcCXQFLtA+XVBT2lbnU8qts1vwkX/qlf7iV/7rWmvHmEh35HMrv4RlIaA54WSizMXRu/J8OCq82H1Ty1ZCHMr6QdYKf1MpOc6a4R34oeoDSEdIIbv83I= X-Gm-Message-State: AOJu0YwyLSQpcIrvEv5M4BSNMg7Gyk9ijB3v3is9pDcvwXMrLh45Qi3U Gow+oZ8sAyFOjj52pSpGMEy3UxDcbhZ/yd2F0c7fqjU7Ejrgalb02yKs3kucTp0= X-Google-Smtp-Source: AGHT+IGMxuLpMKjIuYdJYrob79SDg2RZvql0ouDIgVaa+eFVMNZbWP3rPhPLCBOfG/l5X2eomxjBsA== X-Received: by 2002:a05:6808:300f:b0:3d2:2b8e:a7e2 with SMTP id 5614622812f47-3d51baf503fmr6570385b6e.48.1718925224517; Thu, 20 Jun 2024 16:13:44 -0700 (PDT) Received: from localhost ([136.62.192.75]) by smtp.gmail.com with ESMTPSA id 5614622812f47-3d5344de45bsm86185b6e.3.2024.06.20.16.13.44 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 20 Jun 2024 16:13:44 -0700 (PDT) From: Sam Protsenko To: =?utf-8?q?=C5=81ukasz_Stelmach?= , Krzysztof Kozlowski , Rob Herring , Conor Dooley Cc: Anand Moon , Olivia Mackall , Herbert Xu , Alim Akhtar , linux-samsung-soc@vger.kernel.org, linux-crypto@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH v3 6/6] hwrng: exynos: Enable Exynos850 support Date: Thu, 20 Jun 2024 18:13:39 -0500 Message-Id: <20240620231339.1574-7-semen.protsenko@linaro.org> X-Mailer: git-send-email 2.39.2 In-Reply-To: <20240620231339.1574-1-semen.protsenko@linaro.org> References: <20240620231339.1574-1-semen.protsenko@linaro.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240620_161346_072124_C791BAFC X-CRM114-Status: GOOD ( 13.33 ) 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 Add Exynos850 compatible and its driver data. It's only possible to access TRNG block via SMC calls in Exynos850, so specify that fact using EXYNOS_SMC flag in the driver data. Signed-off-by: Sam Protsenko Reviewed-by: Krzysztof Kozlowski Acked-by: Łukasz Stelmach --- Changes in v3: - Added R-b tag from Krzysztof - Added A-b tag from Łukasz Changes in v2: - Changed QUIRK_SMC to EXYNOS_SMC to reflect the name change in the previous patch drivers/char/hw_random/exynos-trng.c | 3 +++ 1 file changed, 3 insertions(+) diff --git a/drivers/char/hw_random/exynos-trng.c b/drivers/char/hw_random/exynos-trng.c index 9fa30583cc86..9f039fddaee3 100644 --- a/drivers/char/hw_random/exynos-trng.c +++ b/drivers/char/hw_random/exynos-trng.c @@ -320,6 +320,9 @@ static DEFINE_SIMPLE_DEV_PM_OPS(exynos_trng_pm_ops, exynos_trng_suspend, static const struct of_device_id exynos_trng_dt_match[] = { { .compatible = "samsung,exynos5250-trng", + }, { + .compatible = "samsung,exynos850-trng", + .data = (void *)EXYNOS_SMC, }, { }, };