Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp851147pxb; Wed, 15 Sep 2021 15:03:46 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxsMNDWlzlHFSkPlxxGV7k99PXHtD1vci866cBzCDVjaCOXxent8a4lA8sdk6Gude3MqXa4 X-Received: by 2002:a02:5b83:: with SMTP id g125mr1785133jab.146.1631743426467; Wed, 15 Sep 2021 15:03:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631743426; cv=none; d=google.com; s=arc-20160816; b=UveYtVagnWAotPsqc4GLWVCg3t6FOw2DMJAJhDD7wFeOVebY0GQFo51a1dFxLSHp8Q kBSKOLM2EoN+ZXwfgJIjqW0VIvB5e8ewMnDDjuJUhtFE3nc5lNJ9FDqBchqpn8qgiylg r9agAxytcwGATmjifBIXcFdyJ5rboWcOIt87w6I/xMvyfcZbNjBCzq1kF3HGPMPXElME 9nP+0ZNjZhUH5JaimsR70KcOVP2BqIrcSf7BG/45Ksda/QJ2DVYo98sy8penazw8Y0Js SAjFSAXCTG6YgnjU7k7/R7eCx77QAr6sPaeieSfpLr0CTgHVzFBR1P//GE2KxqBCQxXi 749g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=az8ndf9MuAUOd7G3bxNNPg7S0H1T8m0GdpfKSF24zG0=; b=Bbg4sb4XCxIkVHmWgPhMyRVuevEL+xPn95XoYk8mDp3zKalfuwnxRgOP+iahMK4uZP my36lzPa6aGV2nAnnpWs39Ll6R2wgSN2kO39B7hpUilWQW/LZ5h7ajA2qIyV+PsqVxpt gqv5yVGHFdCA79Kec9iiCyL0BzqzboZaPN4citsBHe1ofScGGmxOtofkoC3i+gqYlCCs c45lWyfSvl3DLCDvWvTc5s+b1p4DqqHjj3FNs8nHIWsPlxKhMlv2aqNS9hiGBR1SvJB7 4zAP57JhHeLPE60EgkUQ4srlGl53aSo9HcHJciO8rg5cjNxfVGM2TWkZpkey/Y+5rdC1 /fnw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@walle.cc header.s=mail2016061301 header.b=pU+t95OF; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id z14si1104676ill.35.2021.09.15.15.03.23; Wed, 15 Sep 2021 15:03:46 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@walle.cc header.s=mail2016061301 header.b=pU+t95OF; spf=pass (google.com: domain of linux-crypto-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-crypto-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229461AbhIOWEl (ORCPT + 99 others); Wed, 15 Sep 2021 18:04:41 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51492 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229710AbhIOWEl (ORCPT ); Wed, 15 Sep 2021 18:04:41 -0400 Received: from ssl.serverraum.org (ssl.serverraum.org [IPv6:2a01:4f8:151:8464::1:2]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1026CC061574; Wed, 15 Sep 2021 15:03:18 -0700 (PDT) Received: from mwalle01.kontron.local. (unknown [213.135.10.150]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange ECDHE (P-384) server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by ssl.serverraum.org (Postfix) with ESMTPSA id DF2C9221E6; Thu, 16 Sep 2021 00:03:12 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=walle.cc; s=mail2016061301; t=1631743395; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version: content-transfer-encoding:content-transfer-encoding; bh=az8ndf9MuAUOd7G3bxNNPg7S0H1T8m0GdpfKSF24zG0=; b=pU+t95OFg9TKtLKsgqlIndLPplLY04i72BEsJQF3dliY5F5qSAEdQe89xRcVPYf2mFkgBS 9ayA8vFolAflqrfZClenOG95fhxeE74x1WxKSEiMQpKRPZv3Y2BB/689jI9TjrMO/19vXp 4AtVRA1Ej1hxVvjAdTi48UpOkxp3MOU= From: Michael Walle To: linux-crypto@vger.kernel.org, linux-kernel@vger.kernel.org Cc: =?UTF-8?q?Horia=20Geant=C4=83?= , Pankaj Gupta , Herbert Xu , "David S . Miller" , Michael Walle Subject: [PATCH] crypto: caam: disable pkc for non-E SoCs Date: Thu, 16 Sep 2021 00:03:07 +0200 Message-Id: <20210915220307.3079917-1-michael@walle.cc> X-Mailer: git-send-email 2.30.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org On newer CAAM versions, not all accelerators are disabled if the SoC is a non-E variant. While the driver checks most of the modules for availability, there is one - PKHA - which sticks out. On non-E variants it is still reported as available, that is the number of instances is non-zero, but it has limited functionality. In particular it doesn't support encryption and decryption, but just signing and verifying. This is indicated by a bit in the PKHA_MISC field. Take this bit into account if we are checking for availablitly. This will the following error: [ 8.167817] caam_jr 8020000.jr: 20000b0f: CCB: desc idx 11: : Invalid CHA selected. Tested on an NXP LS1028A (non-E) SoC. Fixes: d239b10d4ceb ("crypto: caam - add register map changes cf. Era 10") Signed-off-by: Michael Walle --- drivers/crypto/caam/caampkc.c | 19 +++++++++++++++---- drivers/crypto/caam/regs.h | 3 +++ 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/drivers/crypto/caam/caampkc.c b/drivers/crypto/caam/caampkc.c index e313233ec6de..bf6275ffc4aa 100644 --- a/drivers/crypto/caam/caampkc.c +++ b/drivers/crypto/caam/caampkc.c @@ -1153,16 +1153,27 @@ static struct caam_akcipher_alg caam_rsa = { int caam_pkc_init(struct device *ctrldev) { struct caam_drv_private *priv = dev_get_drvdata(ctrldev); - u32 pk_inst; + u32 pk_inst, pkha; int err; init_done = false; /* Determine public key hardware accelerator presence. */ - if (priv->era < 10) + if (priv->era < 10) { pk_inst = (rd_reg32(&priv->ctrl->perfmon.cha_num_ls) & CHA_ID_LS_PK_MASK) >> CHA_ID_LS_PK_SHIFT; - else - pk_inst = rd_reg32(&priv->ctrl->vreg.pkha) & CHA_VER_NUM_MASK; + } else { + pkha = rd_reg32(&priv->ctrl->vreg.pkha); + pk_inst = pkha & CHA_VER_NUM_MASK; + + /* + * Newer CAAMs support partially disabled functionality. If this is the + * case, the number is non-zero, but this bit is set to indicate that + * no encryption or decryption is supported. Only signing and verifying + * is supported. + */ + if (pkha & CHA_VER_MISC_PKHA_NO_CRYPT) + pk_inst = 0; + } /* Do not register algorithms if PKHA is not present. */ if (!pk_inst) diff --git a/drivers/crypto/caam/regs.h b/drivers/crypto/caam/regs.h index af61f3a2c0d4..3738625c0250 100644 --- a/drivers/crypto/caam/regs.h +++ b/drivers/crypto/caam/regs.h @@ -322,6 +322,9 @@ struct version_regs { /* CHA Miscellaneous Information - AESA_MISC specific */ #define CHA_VER_MISC_AES_GCM BIT(1 + CHA_VER_MISC_SHIFT) +/* CHA Miscellaneous Information - PKHA_MISC specific */ +#define CHA_VER_MISC_PKHA_NO_CRYPT BIT(7 + CHA_VER_MISC_SHIFT) + /* * caam_perfmon - Performance Monitor/Secure Memory Status/ * CAAM Global Status/Component Version IDs -- 2.30.2