Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp312693ybl; Tue, 28 Jan 2020 03:44:06 -0800 (PST) X-Google-Smtp-Source: APXvYqydhcOFN6Gbu6RPY8br3CICRx9QLrrdtPm3Ks7nTBOIdrx2ZVctXQXDAS8CE7li3EE4VYgQ X-Received: by 2002:aca:1e11:: with SMTP id m17mr2532986oic.5.1580211846201; Tue, 28 Jan 2020 03:44:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1580211846; cv=none; d=google.com; s=arc-20160816; b=VjI/yD2FUB/aSBFCjFVnUu2T7Ei1io+0u4GRJ6l6NtW1TPbGrrX7mjwc4skj1nsu2S pF7Zu9tllFpJOXW18hEymdyIqJsGzi1hvAD/5VttLOwqJB9qf5gStixDOu1yRs7mZGUl xlWKjmGGdmix0XjmpeEoyh0W5Gaft1INooWWNjzt2d+hY1LHjJpGIALbL47ZgCYroy7I 5npy9lwWgOEJswCWwECN/bvA2PPLoiE5OFB/uT8L/bQFNP7zSO/y5vTt/ilyH8b5NPD1 JZ1FQf6uo9shWmwCfTeYTFPaT7awqHtwwXOUSvxNs4x9UTBkV6sUT8drKZBbdsEBSOs3 5wpw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=7jzFdkCSvTPQvaaUOvvW72J7gRlE7VD5dnuoER2ZPjo=; b=cEmVRLKd3oXhuK8pgz2Qajvx/6sfkNyinvIS4r6HTNlgacuRhCRqK4aR9lm/KCl4bK T6AWeKJAY7Z4e2m/mJXH92c4iXV9h45yxv1ypH0Znk6s41vz3MJDJfgPyn/WInCsri1n gsJEUOeO7txZWPUzOkFQ3ZUD1gHBXjxMxTWkfeFkvdrXWYlNqwiO1aTy3sxG6iT3obb/ Wo6+LE8j5qpPgUv20aFy6/Gk5smYJkAWV2ZRObKHhtt19Dcu09iMlTvM9m8HZ08Lx97q JB/CXCcHDtO5xa6qvK2j7FXTkDw/Gr8pGLQGKzTpyJNVSmmhZbtmtJDMp1gGIBSs0k5q FHyA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id x137si4900379oif.42.2020.01.28.03.43.54; Tue, 28 Jan 2020 03:44:06 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-crypto-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726307AbgA1Ln1 (ORCPT + 99 others); Tue, 28 Jan 2020 06:43:27 -0500 Received: from viti.kaiser.cx ([85.214.81.225]:39574 "EHLO viti.kaiser.cx" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726290AbgA1LnY (ORCPT ); Tue, 28 Jan 2020 06:43:24 -0500 Received: from dslb-088-068-095-017.088.068.pools.vodafone-ip.de ([88.68.95.17] helo=martin-debian-1.paytec.ch) by viti.kaiser.cx with esmtpsa (TLS1.2:ECDHE_RSA_AES_128_GCM_SHA256:128) (Exim 4.89) (envelope-from ) id 1iwOck-0008Dy-Jl; Tue, 28 Jan 2020 12:01:38 +0100 From: Martin Kaiser To: Herbert Xu , PrasannaKumar Muralidharan , NXP Linux Team Cc: linux-crypto@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Martin Kaiser Subject: [PATCH 5/6] hwrng: imx-rngc - check the rng type Date: Tue, 28 Jan 2020 12:01:01 +0100 Message-Id: <20200128110102.11522-6-martin@kaiser.cx> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200128110102.11522-1-martin@kaiser.cx> References: <20200128110102.11522-1-martin@kaiser.cx> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-crypto-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org Read the rng type and hardware revision during probe. Fail the probe operation if the type is not one of rngc or rngb. (There's also an rnga type, which needs a different driver.) Display the type and revision in a debug print if probe was successful. Signed-off-by: Martin Kaiser --- drivers/char/hw_random/imx-rngc.c | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/drivers/char/hw_random/imx-rngc.c b/drivers/char/hw_random/imx-rngc.c index 8222055b9e9b..27d85fced30b 100644 --- a/drivers/char/hw_random/imx-rngc.c +++ b/drivers/char/hw_random/imx-rngc.c @@ -18,12 +18,22 @@ #include #include +#define RNGC_VER_ID 0x0000 #define RNGC_COMMAND 0x0004 #define RNGC_CONTROL 0x0008 #define RNGC_STATUS 0x000C #define RNGC_ERROR 0x0010 #define RNGC_FIFO 0x0014 +/* the fields in the ver id register */ +#define RNGC_TYPE_SHIFT 28 +#define RNGC_VER_MAJ_SHIFT 8 + +/* the rng_type field */ +#define RNGC_TYPE_RNGB 0x1 +#define RNGC_TYPE_RNGC 0x2 + + #define RNGC_CMD_CLR_ERR 0x00000020 #define RNGC_CMD_CLR_INT 0x00000010 #define RNGC_CMD_SEED 0x00000002 @@ -212,6 +222,8 @@ static int imx_rngc_probe(struct platform_device *pdev) struct imx_rngc *rngc; int ret; int irq; + u32 ver_id; + u8 rng_type; rngc = devm_kzalloc(&pdev->dev, sizeof(*rngc), GFP_KERNEL); if (!rngc) @@ -237,6 +249,17 @@ static int imx_rngc_probe(struct platform_device *pdev) if (ret) return ret; + ver_id = readl(rngc->base + RNGC_VER_ID); + rng_type = ver_id >> RNGC_TYPE_SHIFT; + /* + * This driver supports only RNGC and RNGB. (There's a different + * driver for RNGA.) + */ + if (rng_type != RNGC_TYPE_RNGC && rng_type != RNGC_TYPE_RNGB) { + ret = -ENODEV; + goto err; + } + ret = devm_request_irq(&pdev->dev, irq, imx_rngc_irq, 0, pdev->name, (void *)rngc); if (ret) { @@ -269,7 +292,10 @@ static int imx_rngc_probe(struct platform_device *pdev) goto err; } - dev_info(&pdev->dev, "Freescale RNGC registered.\n"); + dev_info(&pdev->dev, + "Freescale RNG%c registered (HW revision %d.%02d)\n", + rng_type == RNGC_TYPE_RNGB ? 'B' : 'C', + (ver_id >> RNGC_VER_MAJ_SHIFT) & 0xff, ver_id & 0xff); return 0; err: -- 2.20.1