Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp116377pxb; Mon, 13 Sep 2021 14:34:17 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzwh5EqgvmvEecQwo/NNu8iKfw3w+dezInE1taoXzVqAYhjyvFv7nUedtILMqL52trP9Pp2 X-Received: by 2002:a17:906:368e:: with SMTP id a14mr14776535ejc.60.1631568857427; Mon, 13 Sep 2021 14:34:17 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1631568857; cv=none; d=google.com; s=arc-20160816; b=XzkTIhsvtT0//igpucV9cxKttjC/gdd12q6cau2QBAcIviq8UTAsnAPh/1Dk+/cjLp FXf6uFld8Kt+do4UFHYylNlOycebSeOMg2an8shiw5F1p7f8kOzfLOdBTbclV7ebJTLX w3+3Gy3j9PLK2e4V/cfkHT5ME9UBrzE1628Ww73C4yRQfVWi5CfF5XVn2C1sz5AFkHKE 0ZnTWBjVM2jq5ZrGx8L2+db1tRJDhr2sbSNF9tLVdHu9ZAs05d5rur1ZVIs0TNGB6ldD oAp+7P/8G0zG3+BUp3SCpsMvqiLxqzMOAAODsFsdCStHHjTHrhXdP2s3TzShWPismPPd VUcQ== 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=hdtTpBoUHZ7cvUW81Eg2FNC5ShvvktB08+iptWpVHo4=; b=D4QXD7YRkWr4HSqLSllSMfIZJaHcmcrpCAPwotmLNHuC4GWed7Dwi/cn3OqJuHstxe Ab39OssY9VPm0fa3xLBUelehv59HVlXO+uiOj2n7m3CfRInCyxgxwpHQfzqxLEjq5G7z ZMcMnxDnkeMznOMWgBHbH1yL2VWEiykxX3dGjZuu3PiYOp3mOg8wnMcOTDw5L37W9DQq bD8eAjuVYlmHLR5IpORysF1FOyLTcnmyoEtYmaNCdLmFHlCKtL+Kmo/Cvltl/o62d8us dzeZAB/83l6juVkWGqSqP+WiI6hIqdNsk4lhgIXvY34g8Y0hK+JE8ZoP6JIYcWSfcjUK DTXQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@linuxfoundation.org header.s=korg header.b=JK5BxUY1; 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 e20si7985939edv.335.2021.09.13.14.33.53; Mon, 13 Sep 2021 14:34:17 -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=JK5BxUY1; 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 S244869AbhIMNzp (ORCPT + 99 others); Mon, 13 Sep 2021 09:55:45 -0400 Received: from mail.kernel.org ([198.145.29.99]:34380 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242897AbhIMNwn (ORCPT ); Mon, 13 Sep 2021 09:52:43 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id 1440C6187D; Mon, 13 Sep 2021 13:34:22 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=linuxfoundation.org; s=korg; t=1631540063; bh=+ObXvCSoshHtRVhorgytPBy98rQ8dGpq0PmrcjzPfEc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=JK5BxUY1xZ9XQ3nT4B6Q1uDGou4+Ze5/gWRXxjoai6DzrUilHBplSB6CbThxFahiH 9FehLkKo+wkKMHSYBa0jksJrK4Kf8RLN4HeFFE7OGzmlU79z/fkaNjLSe83an49DC1 lS7z9aUBZc2EeS0z5AJhY8uK9wsmeM3sJe7uBnJQ= 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.13 036/300] crypto: hisilicon/sec - modify the hardware endian configuration Date: Mon, 13 Sep 2021 15:11:37 +0200 Message-Id: <20210913131110.547357488@linuxfoundation.org> X-Mailer: git-send-email 2.33.0 In-Reply-To: <20210913131109.253835823@linuxfoundation.org> References: <20210913131109.253835823@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 dfdce2f21e65..1aeb53f28edd 100644 --- a/drivers/crypto/hisilicon/sec2/sec.h +++ b/drivers/crypto/hisilicon/sec2/sec.h @@ -140,11 +140,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 e682e2a77b70..0305e656b477 100644 --- a/drivers/crypto/hisilicon/sec2/sec_main.c +++ b/drivers/crypto/hisilicon/sec2/sec_main.c @@ -304,31 +304,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 int sec_engine_init(struct hisi_qm *qm) @@ -382,9 +371,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