Received: by 2002:a05:6a10:c604:0:0:0:0 with SMTP id y4csp323488pxt; Fri, 6 Aug 2021 03:00:11 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyv9RRv4o02/WzSmDuxk9GFcsu3H11Xs/vDHHGDSF/qHqKTRNM095sL4Xr8aRE1rqUgAaO7 X-Received: by 2002:a17:906:c0cd:: with SMTP id bn13mr9159658ejb.251.1628244010791; Fri, 06 Aug 2021 03:00:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628244010; cv=none; d=google.com; s=arc-20160816; b=PrBU/K5+6CSqJjslfxx1wjLLw2unvfWe+7a/FPms0Uh1eIpTcl0SuqoVYGRBxyorPd KPdauDwCqhbeI1iLWWS/3N9/moyJNss4pAmgDrilrvYq14ggZAS2++/3iWcncaITI48B ESnvkkAFrr6t8+pvT46SUwZITNngrD5WNyWrBdNjVOhuFA6KtUJve08Dm7DFgx4RRwwY nIKHwo603J877cjWcjiPzUQC5hub5kfYff5b1ezXN0MJ5LXj5yJshQbRF413aq0XF8Su plGQIplZbyKfKiqrQAYFRRtEnFWwgrTKganoehzMvTNw3NzYLvt0SsaesTZXcY3XcoU/ +Jbw== 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=GqrF938VEZEzg5RbPJAAFHRx11A9Dd7u+UqZaRWxDFs=; b=qPHX0U1oHbX21jzKcxYydLPfdLPxdjpDHiP7UVuumk1iUafIr+b9lbHYnC0+qCHKP5 BUHrfR6ZPnJub1CL2lAGuEkQ9PG2ayNqB1VdqgM3yDrDHAbjM+heZ0K/H/3MaGOuf9jU 9nXQqqFGQnbtiRBb51YIAsnGoyGoxGVULek7r8qA4LaFsZxEUv1/x2eWKoIDdUP92lMj FoBMd8Rf2tMuCYlD4IqCtcapZcOwQvEDW5IqP2Ae1IpEIZf4vrjVA4x0U/kf/xdzhU34 984R+ugQRo9B54u25S8zdmkn1X8OafMnIlVoaQ/jC+MIp6gv2JsqyZybF51SM3vIqgTl Y/rA== 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 p7si8597086edw.488.2021.08.06.02.59.41; Fri, 06 Aug 2021 03:00:10 -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 S244771AbhHFJ7t (ORCPT + 99 others); Fri, 6 Aug 2021 05:59:49 -0400 Received: from szxga01-in.huawei.com ([45.249.212.187]:7801 "EHLO szxga01-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S244700AbhHFJ7t (ORCPT ); Fri, 6 Aug 2021 05:59:49 -0400 Received: from dggemv704-chm.china.huawei.com (unknown [172.30.72.57]) by szxga01-in.huawei.com (SkyGuard) with ESMTP id 4Gh1Cv4FM6zYlmS; Fri, 6 Aug 2021 17:59:23 +0800 (CST) Received: from dggpeml500012.china.huawei.com (7.185.36.15) by dggemv704-chm.china.huawei.com (10.3.19.47) with Microsoft SMTP Server (version=TLS1_2, cipher=TLS_ECDHE_RSA_WITH_AES_128_GCM_SHA256) id 15.1.2176.2; Fri, 6 Aug 2021 17:59:31 +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; Fri, 6 Aug 2021 17:59:30 +0800 From: Kai Ye To: CC: , , , Subject: [PATCH 2/2] crypto: hisilicon/sec - modify the hardware endian configuration Date: Fri, 6 Aug 2021 17:58:34 +0800 Message-ID: <1628243914-33224-3-git-send-email-yekai13@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1628243914-33224-1-git-send-email-yekai13@huawei.com> References: <1628243914-33224-1-git-send-email-yekai13@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems706-chm.china.huawei.com (10.3.19.183) 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 | 35 ++++++++++---------------------- 2 files changed, 11 insertions(+), 29 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..f637fc8 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; - - /* BD 32-bits big endian mode */ - else if (!(reg & BIT(1))) - return SEC_32BE; - - /* BD 64-bits big endian mode */ - else - return SEC_64BE; + reg &= ~(BIT(1) | BIT(0)); +#ifndef CONFIG_64BIT + reg |= BIT(1); +#endif + +#ifndef CONFIG_CPU_LITTLE_ENDIAN + reg |= BIT(0); +#endif + 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