Received: by 2002:a25:1985:0:0:0:0:0 with SMTP id 127csp4457650ybz; Tue, 28 Apr 2020 11:37:18 -0700 (PDT) X-Google-Smtp-Source: APiQypJHbkS5vF27m+vBx3tj37L0/6IW9wVzcAZi/dZfcutR541Pc76JQv0k0P3ZWebHAzmKwiWZ X-Received: by 2002:aa7:dcd4:: with SMTP id w20mr24709084edu.282.1588099038682; Tue, 28 Apr 2020 11:37:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1588099038; cv=none; d=google.com; s=arc-20160816; b=r6jzy7zmZpe1DlgraRPIItjll8Qr99+OjT1lscyAgRPlEKwD8Y7eSA9pnT2TBv1y0x EQ8vhvSPJT2Mc0bzcEalPqUVHSNTEar+cCfUgWE5wlPmVrUHPoUFbpKvOkgBiQ8YpA6O xc5/20lltnt9v/hBYPTU2zJEOribBBPGm/E7rBPz/2xb80qa7/adkzPpGbxYCI2EThft lNNJeWTipWqTh/4CvbjhiMSG7JRO/SLGgkTLwixW2syeHH0LdKyBtjp4Kub1IiNJgHh7 RP6NI5AWQ3kbhl6x6yrHzdjZGzdQnEpZRzBV7EjqP1xAU805QTecebohpvAbHYGGRHat zVMQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=QCSQM+L8o3AHi0hiD+aIst8LdrsjYGRhCwMSLZnVMR8=; b=aXtIDqrqIk7TDNcwjI38RnuhY95PK+uR2ZZu9SqigMG3gtNkyOaaHuHMfx2mR/OFrD TTbM4d7P4EB0k0m3ebKUpNPwZqI3NyYM3/rCMmEO+Q1Vl+Eb0e+3C3vvWu2SfJqpqHAl SUfVMn4SaOPl5V90WKrgzJ6PH1HMmrQqZPmO1giQgNa0RMSDc7uCiFjr2DrArsO3fyIt Qko6h4GiET85gsdXkGabzsgZDAyZUO9ATei0PGNnJo2Yn31h5nnA0qiHKCNZXVpYqXGm Nt6e8JQF3uP7qbadCCp1ru00ScvirxLDvICeXUrHfAkP4Aw+79+flbaiFsyBqL5eeuux kHuQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=kX0I9lJa; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id t10si1962939edi.492.2020.04.28.11.36.55; Tue, 28 Apr 2020 11:37:18 -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=@kernel.org header.s=default header.b=kX0I9lJa; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729788AbgD1ScN (ORCPT + 99 others); Tue, 28 Apr 2020 14:32:13 -0400 Received: from mail.kernel.org ([198.145.29.99]:48182 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729776AbgD1ScJ (ORCPT ); Tue, 28 Apr 2020 14:32:09 -0400 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 949242076A; Tue, 28 Apr 2020 18:32:08 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1588098729; bh=0ai72RUas7AA88Oaqv4xlYhEj4QfUyXkTPaK6hfLJes=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=kX0I9lJabdBMj+ofTF0QhQOowaYnwKxL1s/UFyfiL+Xt/PhTo+AYM6DhkYKN80x5x md4AVo1ZMxAB137WzjOCavi6icsBirmT202DSRXl4pWP+mU4rl1iBaRC+q4/nkxOUI mZLnfRV/ZWJFdAEWrempCNjkQXxCyE28Yc59i9no= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, James Morse , Suzuki K Poulose , Catalin Marinas , Sasha Levin Subject: [PATCH 5.4 005/168] arm64: Fake the IminLine size on systems affected by Neoverse-N1 #1542419 Date: Tue, 28 Apr 2020 20:22:59 +0200 Message-Id: <20200428182232.362254984@linuxfoundation.org> X-Mailer: git-send-email 2.26.2 In-Reply-To: <20200428182231.704304409@linuxfoundation.org> References: <20200428182231.704304409@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: James Morse [ Upstream commit ee9d90be9ddace01b7fb126567e4b539fbe1f82f ] Systems affected by Neoverse-N1 #1542419 support DIC so do not need to perform icache maintenance once new instructions are cleaned to the PoU. For the errata workaround, the kernel hides DIC from user-space, so that the unnecessary cache maintenance can be trapped by firmware. To reduce the number of traps, produce a fake IminLine value based on PAGE_SIZE. Signed-off-by: James Morse Reviewed-by: Suzuki K Poulose Signed-off-by: Catalin Marinas Signed-off-by: James Morse Signed-off-by: Sasha Levin --- arch/arm64/include/asm/cache.h | 3 ++- arch/arm64/kernel/traps.c | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/arch/arm64/include/asm/cache.h b/arch/arm64/include/asm/cache.h index 43da6dd295920..806e9dc2a852a 100644 --- a/arch/arm64/include/asm/cache.h +++ b/arch/arm64/include/asm/cache.h @@ -11,6 +11,7 @@ #define CTR_L1IP_MASK 3 #define CTR_DMINLINE_SHIFT 16 #define CTR_IMINLINE_SHIFT 0 +#define CTR_IMINLINE_MASK 0xf #define CTR_ERG_SHIFT 20 #define CTR_CWG_SHIFT 24 #define CTR_CWG_MASK 15 @@ -18,7 +19,7 @@ #define CTR_DIC_SHIFT 29 #define CTR_CACHE_MINLINE_MASK \ - (0xf << CTR_DMINLINE_SHIFT | 0xf << CTR_IMINLINE_SHIFT) + (0xf << CTR_DMINLINE_SHIFT | CTR_IMINLINE_MASK << CTR_IMINLINE_SHIFT) #define CTR_L1IP(ctr) (((ctr) >> CTR_L1IP_SHIFT) & CTR_L1IP_MASK) diff --git a/arch/arm64/kernel/traps.c b/arch/arm64/kernel/traps.c index 465f0a0f8f0ab..4e3e9d9c81517 100644 --- a/arch/arm64/kernel/traps.c +++ b/arch/arm64/kernel/traps.c @@ -470,9 +470,15 @@ static void ctr_read_handler(unsigned int esr, struct pt_regs *regs) int rt = ESR_ELx_SYS64_ISS_RT(esr); unsigned long val = arm64_ftr_reg_user_value(&arm64_ftr_reg_ctrel0); - if (cpus_have_const_cap(ARM64_WORKAROUND_1542419)) + if (cpus_have_const_cap(ARM64_WORKAROUND_1542419)) { + /* Hide DIC so that we can trap the unnecessary maintenance...*/ val &= ~BIT(CTR_DIC_SHIFT); + /* ... and fake IminLine to reduce the number of traps. */ + val &= ~CTR_IMINLINE_MASK; + val |= (PAGE_SHIFT - 2) & CTR_IMINLINE_MASK; + } + pt_regs_write_reg(regs, rt, val); arm64_skip_faulting_instruction(regs, AARCH64_INSN_SIZE); -- 2.20.1