Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp596875pxt; Thu, 12 Aug 2021 05:38:47 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzj64NQMM4llbzseO8vOsimn+2fGPtC2vI/GNUqBAcT3u9MnXG7Y5jSAEgqRpdTzGXqwgAg X-Received: by 2002:a17:906:831a:: with SMTP id j26mr3383601ejx.12.1628771926898; Thu, 12 Aug 2021 05:38:46 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628771926; cv=none; d=google.com; s=arc-20160816; b=yCMPRXJpUV4cD6j8uU619boiL+afxKXt/ecbiWevyTG0xtXlCiigY22x2tBJYS97aH TGR1xAcOGKiQLtyKPlHBUQ+41TsnzhlD44bwZykMqOhpQTjJqsbp/D38zxZeboCCNByt oR+WlaPPgWTnQwDrpNLQTRTONjxFDqVjNcLyoTM5aiG3SaI/gvYlDLVZ+kKwiF0TZiCY 8scK+lIg+BQOhs/016ucFCXDfqkkRmHROVEIUcOe2/nPWZD2dh5J/GWEoLagBhzwrEeV ZhYzPdjHw6imFpAxDTTQZIPviHguXwMMGp+leyuI8Gdp+04O64dDme4RPWiQL0TPfVgS gUMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:references:in-reply-to:message-id :date:subject:cc:to:from; bh=3BXssg8cw3TX9RW6ZCFJ7HCyFRoh8dJBnwabKWKrdUk=; b=UdULTwbJGb1CZDWz7M/v0l9Je0saPk/ZIdDMaaudLEWEoywmm+RiuCL1BQni+ZQcF/ 8HakcbJNphiGQ8v2As/8mmMECVWdQSWCe2WHBWvagNFVcMOmriU93drUwOWtG3tNkTEM hR1QmZzPnaDu0n43d3F+k0OYUzNshMWWePH1npx3Kr1E9h5Bx+yUuYqO/Medfd5bn7yY uKFPg0U4HG2015B5DF/353IFd2BESJBpu9FE7AkMPz/djcMFqWpUw8Aah3vhxCyNyazn ktxsZElhjHHhpK8L6ZnvXjRL5aYMffQPoWBPc+J/SMR8F5ZRed1IReALt5UVPKR7ym7a gY/Q== ARC-Authentication-Results: i=1; mx.google.com; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id ee28si2377604edb.265.2021.08.12.05.38.13; Thu, 12 Aug 2021 05:38: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; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=huawei.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S236544AbhHLL4w (ORCPT + 99 others); Thu, 12 Aug 2021 07:56:52 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]:17008 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236383AbhHLL4v (ORCPT ); Thu, 12 Aug 2021 07:56:51 -0400 Received: from dggemv711-chm.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4GllRt3R2rzb19W; Thu, 12 Aug 2021 19:52:42 +0800 (CST) Received: from dggpeml500012.china.huawei.com (7.185.36.15) by dggemv711-chm.china.huawei.com (10.1.198.66) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Thu, 12 Aug 2021 19:56:22 +0800 Received: from huawei.com (10.69.192.56) by dggpeml500012.china.huawei.com (7.185.36.15) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Thu, 12 Aug 2021 19:56:22 +0800 From: Kai Ye To: CC: , , , Subject: [PATCH v2 2/2] crypto: hisilicon/sec - modify the hardware endian configuration Date: Thu, 12 Aug 2021 19:55:21 +0800 Message-ID: <1628769321-25192-3-git-send-email-yekai13@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1628769321-25192-1-git-send-email-yekai13@huawei.com> References: <1628769321-25192-1-git-send-email-yekai13@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems702-chm.china.huawei.com (10.3.19.179) To dggpeml500012.china.huawei.com (7.185.36.15) X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-crypto@vger.kernel.org When the endian configuration of the hardware is abnormal, it will cause the SEC engine is faulty that reports empty message. And it will affect the normal function of the hardware. Currently the soft configuration method can't restore the faulty device. The endian needs to be configured according to the system properties. So fix it. Signed-off-by: Kai Ye --- drivers/crypto/hisilicon/sec2/sec.h | 5 ----- drivers/crypto/hisilicon/sec2/sec_main.c | 31 +++++++++---------------------- 2 files changed, 9 insertions(+), 27 deletions(-) diff --git a/drivers/crypto/hisilicon/sec2/sec.h b/drivers/crypto/hisilicon/sec2/sec.h index 018415b..d97cf02 100644 --- a/drivers/crypto/hisilicon/sec2/sec.h +++ b/drivers/crypto/hisilicon/sec2/sec.h @@ -157,11 +157,6 @@ struct sec_ctx { struct device *dev; }; -enum sec_endian { - SEC_LE = 0, - SEC_32BE, - SEC_64BE -}; enum sec_debug_file_index { SEC_CLEAR_ENABLE, diff --git a/drivers/crypto/hisilicon/sec2/sec_main.c b/drivers/crypto/hisilicon/sec2/sec_main.c index 8addbd7..a0cc46b 100644 --- a/drivers/crypto/hisilicon/sec2/sec_main.c +++ b/drivers/crypto/hisilicon/sec2/sec_main.c @@ -312,31 +312,20 @@ static const struct pci_device_id sec_dev_ids[] = { }; MODULE_DEVICE_TABLE(pci, sec_dev_ids); -static u8 sec_get_endian(struct hisi_qm *qm) +static void sec_set_endian(struct hisi_qm *qm) { u32 reg; - /* - * As for VF, it is a wrong way to get endian setting by - * reading a register of the engine - */ - if (qm->pdev->is_virtfn) { - dev_err_ratelimited(&qm->pdev->dev, - "cannot access a register in VF!\n"); - return SEC_LE; - } reg = readl_relaxed(qm->io_base + SEC_CONTROL_REG); - /* BD little endian mode */ - if (!(reg & BIT(0))) - return SEC_LE; + reg &= ~(BIT(1) | BIT(0)); + if (!IS_ENABLED(CONFIG_64BIT)) + reg |= BIT(1); - /* BD 32-bits big endian mode */ - else if (!(reg & BIT(1))) - return SEC_32BE; - /* BD 64-bits big endian mode */ - else - return SEC_64BE; + if (!IS_ENABLED(CONFIG_CPU_LITTLE_ENDIAN)) + reg |= BIT(0); + + writel_relaxed(reg, qm->io_base + SEC_CONTROL_REG); } static void sec_open_sva_prefetch(struct hisi_qm *qm) @@ -429,9 +418,7 @@ static int sec_engine_init(struct hisi_qm *qm) qm->io_base + SEC_BD_ERR_CHK_EN_REG3); /* config endian */ - reg = readl_relaxed(qm->io_base + SEC_CONTROL_REG); - reg |= sec_get_endian(qm); - writel_relaxed(reg, qm->io_base + SEC_CONTROL_REG); + sec_set_endian(qm); return 0; } -- 2.7.4