Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp221252pxb; Mon, 13 Sep 2021 17:31:55 -0700 (PDT) X-Google-Smtp-Source: ABdhPJydaNxdkqQMjOWJtuz7dgUOMJXu5sdxSTDQtCAh34Y+dOnHlFQg5KxTjbAwo3fO3XqpTA2o X-Received: by 2002:a17:906:1289:: with SMTP id k9mr15988603ejb.2.1631579515088; Mon, 13 Sep 2021 17:31:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631579515; cv=none; d=google.com; s=arc-20160816; b=maAjGm4M8aJQ30R3E/dpKMIIKM4Zhi12kOZ2w9O4HaKyW/k9SkuqhzrjO51+zDxd2X h2HYyBXf3XcnkPIZuULmAmH2CapHvtviYGAuubaC5bHg9j6zEnS8akwfzXg1xtkce/FR m3r73GtJEY4+vWQk14AlMspMlygeN8Zdwknmv4U2rMA+hKBP4/nL2wlMSm6+ci3OCtLk JGATSylV+5RYsxxP/7986GJ6DSng84G/dKlGB6YhewcxhJdzhqBeLBymZ7vMwrYoXVXW e0PCIVxPLCNgoxAycQjpDUcOX2zrdyjiaay9U4QBBjaKGHwRUqaWT1gYJWnlIUxggRhp TNzA== 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 :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=fGMnHJvJv4igqMeDAW6nmTLIgqoMiZj3SWZnhqYQ8TE=; b=GzkxlPSTCPkiUxEN8ka0qykLZEV9x1eagYEm2Rh7ObbCTfoNvtYJ5C2KMd+c0uU6uZ 9P/P1paJtxfmkyzzFIb7o9+jkYi7Ytj6IVeMN1XIp21DCzVPSoWMYppaeNlUNC/jytOa 8lsE6x6dZ/z8A4RPCDdbtl7FyRRXEiPinNlLLTZgFkrbouDWOR7Ze92eIRtyEmcdtYhv LUgUArU3ktoVS6Nl6iiWmv10VnVckB+mmEfzrlNYiy4QwdqtK1JMRSyLqA+zrwvXxi0S FFCbWRxlXyT7a2jaJVbmBKHhaio7jDjWRzPLnB95WvgnbuTxX4+5hmC5r0AdxWGLlbC3 rM0Q== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=vykpUDQq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id og42si6106795ejc.692.2021.09.13.17.31.31; Mon, 13 Sep 2021 17:31:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-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=@linuxfoundation.org header.s=korg header.b=vykpUDQq; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=linuxfoundation.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1345728AbhIMOZK (ORCPT + 99 others); Mon, 13 Sep 2021 10:25:10 -0400 Received: from mail.kernel.org ([198.145.29.99]:41744 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1345883AbhIMOUZ (ORCPT ); Mon, 13 Sep 2021 10:20:25 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id D6B6A60F26; Mon, 13 Sep 2021 13:46:29 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631540790; bh=AayjKb2k5+zVPxEVCcXziF7Kj/gs+4rbeig7KBZivlk=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=vykpUDQqPzaxCpcPiv5ZgdZUqKNNJy3/SJxO5r/P+9/PMNWLuWcIu3bDoXKQPoxfL O+gqPC4ewlnHtzjRNeHhqlytoRexcnMIniVVsTlU4Zq4M/Ndt+9RRqM/HDVeaYj92P 4HIdaakOqBXWT1MSzH4NK3000plbJu6sVGQsOiqM= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Kai Ye , Herbert Xu , Sasha Levin Subject: [PATCH 5.14 036/334] crypto: hisilicon/sec - modify the hardware endian configuration Date: Mon, 13 Sep 2021 15:11:30 +0200 Message-Id: <20210913131114.645213782@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210913131113.390368911@linuxfoundation.org> References: <20210913131113.390368911@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Kai Ye [ Upstream commit a52626106d6f7edf3d106c065e13a0313cfeb82f ] 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 Signed-off-by: Herbert Xu Signed-off-by: Sasha Levin --- 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 018415b9840a..d97cf02b1df7 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 8addbd7a3339..a0cc46b649a3 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.30.2