Received: by 2002:a05:6a10:8a4d:0:0:0:0 with SMTP id dn13csp379688pxb; Thu, 12 Aug 2021 19:23:13 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy6leNXQOg3D5CUn40OQT5LBTB80+ASotbuuOp+Keb1fkE5oLVoT2VmM/5MGz0ZsGQf3WjN X-Received: by 2002:a17:906:2a8e:: with SMTP id l14mr210655eje.321.1628821393373; Thu, 12 Aug 2021 19:23:13 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1628821393; cv=none; d=google.com; s=arc-20160816; b=tNZWzrXqr/B9M7atLEy2KHdKgDegVGg5I3QuSiUwYLLvLtm0vO2MIu1Y0YfRKORBtg gD5VSXtegLZwFoUpx9thqzYLtiQm/6goq7FiLy2ayCCZ5L36PHYfLZpk7r5lgOzZYbaZ XmfBh6XOzM1A3YNVRzC0HKPCpSiG3GRa2qdNiGD7+iLV11uw1zTAPaw8gZMezfCVVRbI bE5tLtg1t9Bht1JZ7tF2q9Zy4O/RBAhF+JSJ9NCLy0uGHnD0l2iH15Bt6kUNMsn+M46D dy4+5EmfBcX1Mh0IW49qT2aR/vS6OXxRbJ/wAOxEFBdDnDcmtYWg4CjTBcCH1QkS97jf SYcw== 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=A3TnXfmWgwpOP2xVyQCgY7TLdbjvS+2UpIpH7JxRAxU=; b=1BgMleQTKWaZihztkXlUnsR2ALGPoYKTqv9sv4Ib/y1eMMgzIhyPn/RhKnsea70pSQ e9uVfhPBDGfNG1+NTHYnzRhldMCEqMK/kyU+323KaVoyAga6LR/pYkua290M5v/hNVDh yNNvOxXfSSRRZR9BBf2wHFEYIFZutxzPih9vCMhsWSQEsZQ2dBxou46ds0l04m607Yld 4/T+dvzZWNX+J7+eT/V1gq9qjaqPpNgfh6kDoNWqLEo0ZCzRCfd2QUkIY+hzkCUEcvb5 0swPLXNnhgJijJ4n2yHWTm+f8ClnuSoBuSjb9ISDmTtEJ/0vVHp9lrE9p+pI5IGtRplT XCSA== 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 br21si166217ejb.258.2021.08.12.19.22.37; Thu, 12 Aug 2021 19:23:13 -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 S235385AbhHMCW6 (ORCPT + 99 others); Thu, 12 Aug 2021 22:22:58 -0400 Received: from szxga02-in.huawei.com ([45.249.212.188]:13418 "EHLO szxga02-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234716AbhHMCW5 (ORCPT ); Thu, 12 Aug 2021 22:22:57 -0400 Received: from dggemv711-chm.china.huawei.com (unknown [172.30.72.55]) by szxga02-in.huawei.com (SkyGuard) with ESMTP id 4Gm6gF19JGzdZZw; Fri, 13 Aug 2021 10:18:49 +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; Fri, 13 Aug 2021 10:22:29 +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 10:22:29 +0800 From: Kai Ye To: CC: , , , Subject: [PATCH v3 2/2] crypto: hisilicon/sec - modify the hardware endian configuration Date: Fri, 13 Aug 2021 10:21:27 +0800 Message-ID: <1628821287-49924-3-git-send-email-yekai13@huawei.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1628821287-49924-1-git-send-email-yekai13@huawei.com> References: <1628821287-49924-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 | 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 45a1ddd..a76542e 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_get_endian(qm); sec_enable_clock_gate(qm); -- 2.7.4