Received: by 2002:a05:6a10:8a4d:0:0:0:0 with SMTP id dn13csp558032pxb; Fri, 13 Aug 2021 00:47:54 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzN0CjuvolFGIjfVZy7XagBvQHkQudhfMu4mrXPRYmK7PlRtslt/jDgndhNZrXfho6lLIZV X-Received: by 2002:a6b:670a:: with SMTP id b10mr1035025ioc.137.1628840873940; Fri, 13 Aug 2021 00:47:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628840873; cv=none; d=google.com; s=arc-20160816; b=wuatpB2s1t5w4qIP0AoIWe88LWAG9jtKwYghnScwL/+iu6uK8tEZRfdmDPDGxhx2q+ q7KMHFg9F4vSzhfDAOp4KQ3koDP/FMTIdlaaa//DNgwZU+CF2lpp39P/3tSCD5E0xNqn s92uacRIpUBGBWloYO+Q5JnoAT+RiUTNOh0AaPM25E5K3vWFFU+2le2nwr+L4h3eg1Ep 4IwBHXfN55gAEo3vE3mYIJDnggWTYVWzydatfQbuTKrF4HhpQP6sQ//Eu2twwmkRAFLT hbgIClRIZU2ICodlhPwxiEMOM5rHlFmNaqpK5Upl8uzEHQTsmLkQ3M7LyQPMetsGwwZO 5b5g== 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=CikKiQkaSuHEaECnlIulccf5Hzf9QRwBXW9c0QobVoM=; b=eeLaHLeSTeYLJ0a+4Ek/VjlcURBYF+Hs9Kpu5GJaNnlD0ego3oeGP+2+/BwCQICu6W aM0eQvg8mpgoWWpWk6MhIEpfTGB3PSfBDZVGHeAk4wRQrXPB4elRhyx165BIiRiS6KgI F9EYcFNLQkibcWYemGlTMUbNRQ/JGNsgPmGCsGoyQevMGmbXI47G6q7yNT9dR1oeH0qk +BTO9/MwjFF/ma0Or5I8EfK7JcmR7b/v//8vwD2KZGqh9StpcGh+r1KQcnjytAGteomR 5JAWdsWuw2YzeUKjDb3KqfXUNrUvvlLxnU++ywAVHU8vA5HfSiBaoi238ecvgsO8qim1 ef/A== 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 y15si795670ily.49.2021.08.13.00.47.42; Fri, 13 Aug 2021 00:47:53 -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 S239624AbhHMHme (ORCPT + 99 others); Fri, 13 Aug 2021 03:42:34 -0400 Received: from szxga02-in.huawei.com ([45.249.212.188]:13419 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S239590AbhHMHme (ORCPT ); Fri, 13 Aug 2021 03:42:34 -0400 Received: from dggemv704-chm.china.huawei.com (unknown [172.30.72.53]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4GmFm12733zdZXX; Fri, 13 Aug 2021 15:38:25 +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, 13 Aug 2021 15:42:04 +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, 13 Aug 2021 15:42:04 +0800 From: Kai Ye To: CC: , , , Subject: [PATCH v4 2/2] crypto: hisilicon/sec - modify the hardware endian configuration Date: Fri, 13 Aug 2021 15:41:02 +0800 Message-ID: <1628840462-25437-3-git-send-email-yekai13@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1628840462-25437-1-git-send-email-yekai13@huawei.com> References: <1628840462-25437-1-git-send-email-yekai13@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.69.192.56] X-ClientProxiedBy: dggems705-chm.china.huawei.com (10.3.19.182) 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 8c3621d..34c9c22 100644 --- a/drivers/crypto/hisilicon/sec2/sec.h +++ b/drivers/crypto/hisilicon/sec2/sec.h @@ -206,11 +206,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 45a1ddd..2250c81 100644 --- a/drivers/crypto/hisilicon/sec2/sec_main.c +++ b/drivers/crypto/hisilicon/sec2/sec_main.c @@ -318,31 +318,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) @@ -463,9 +452,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); sec_enable_clock_gate(qm); -- 2.7.4