Received: by 2002:a05:6a11:4021:0:0:0:0 with SMTP id ky33csp2742978pxb; Tue, 21 Sep 2021 06:46:52 -0700 (PDT) X-Google-Smtp-Source: ABdhPJyB3Dru/6rpv0fpnyZBGEMzQPcwcEJTFj9lul+9o1a3Fu88nSOPr6jOL+M7v/DqeZ6Cz7OM X-Received: by 2002:a50:f1d9:: with SMTP id y25mr35850488edl.116.1632232011906; Tue, 21 Sep 2021 06:46:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1632232011; cv=none; d=google.com; s=arc-20160816; b=ksfc0pULL8kW26oUokbzROOk7Sv3inRQmqavfsPe5OFpOUzqdc4d1zgrTgO0FJYDve zg44wj7oeAu6g40wgJarjFO/2ENXUhYSrdPM1fyxTpnChJdqxniU9sPL7VP6r25l9aBI lFcitT+iryisFyGFdG8N4w0/qoMGKgPwg0PN5IPqLJo5ZX5hogAYvH5TeCtfwsrRQoQt gK6VTVqVMtfj4grjL7KXlatEcIhp1filQpGxvJTElZEXWIHuX1NW7c9kdBPy0YQB+qbJ BhxHqRYpAkhFdM1nil0pDlwx8UtXdMling4UN289o+WM6NRclAjjTZQs6DjlxATBsA2x T0pA== 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 :references:in-reply-to:message-id:date:subject:cc:to:from; bh=7aN18aYMM6uvMauRuMu1X8kcGE1wAsRKU8paVOEvI2Q=; b=a2qaDLTY8WnV9NOtKygJlSCnYxPvFKUub5HuH4NSpKgt1+n91hOXzwxjXPtpj+NfH2 KnKxsQt48kXJPRqc7iOtiioVmCyuDNSI54ett+WVZwQyWnvA345m5ZiVPrVO9pX4J+5e 5FtN0qfkaFlh8gbTnahy336VFPo8lfEFa84TXXsvbKzuVmupRtWXWZRPHJ3+lYkHhWOQ 3cGdkx2/if0r+W1K4sFfMtQEskVziRq4hcE6evO36sCwb9UDfgYGGJY3UldoEpl3wIsK /7bFO61EopKsaJmIb+j5qVSsmB3XD1gEQ/tKVifMtEK9fUc4YpKcTHdslEut+TSJxXpC Guow== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p3si15947602ejy.556.2021.09.21.06.46.11; Tue, 21 Sep 2021 06:46:51 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233372AbhIUNnl (ORCPT + 99 others); Tue, 21 Sep 2021 09:43:41 -0400 Received: from foss.arm.com ([217.140.110.172]:33956 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233401AbhIUNn2 (ORCPT ); Tue, 21 Sep 2021 09:43:28 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id B6CFC12FC; Tue, 21 Sep 2021 06:41:59 -0700 (PDT) Received: from ewhatever.cambridge.arm.com (ewhatever.cambridge.arm.com [10.1.197.1]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id EFD593F40C; Tue, 21 Sep 2021 06:41:57 -0700 (PDT) From: Suzuki K Poulose To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, maz@kernel.org, catalin.marinas@arm.com, mark.rutland@arm.com, james.morse@arm.com, anshuman.khandual@arm.com, leo.yan@linaro.org, mike.leach@linaro.org, mathieu.poirier@linaro.org, will@kernel.org, lcherian@marvell.com, coresight@lists.linaro.org, Suzuki K Poulose Subject: [PATCH v2 15/17] arm64: Add erratum detection for TRBE write to out-of-range Date: Tue, 21 Sep 2021 14:41:19 +0100 Message-Id: <20210921134121.2423546-16-suzuki.poulose@arm.com> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20210921134121.2423546-1-suzuki.poulose@arm.com> References: <20210921134121.2423546-1-suzuki.poulose@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Arm Neoverse-N2 and Cortex-A710 cores are affected by an erratum where the trbe, under some circumstances, might write upto 64bytes to an address after the Limit as programmed by the TRBLIMITR_EL1.LIMIT. This might - - Corrupt a page in the ring buffer, which may corrupt trace from a previous session, consumed by userspace. - Hit the guard page at the end of the vmalloc area and raise a fault. To keep the handling simpler, we always leave the last page from the range, which TRBE is allowed to write. This can be achieved by ensuring that we always have more than a PAGE worth space in the range, while calculating the LIMIT for TRBE. And then the LIMIT pointer can be adjusted to leave the PAGE (TRBLIMITR.LIMIT -= PAGE_SIZE), out of the TRBE range while enabling it. This makes sure that the TRBE will only write to an area within its allowed limit (i.e, [head-head+size]) and we do not have to handle address faults within the driver. Cc: Anshuman Khandual Cc: Mathieu Poirier Cc: Mike Leach Cc: Leo Yan Signed-off-by: Suzuki K Poulose --- arch/arm64/kernel/cpu_errata.c | 20 ++++++++++++++++++++ arch/arm64/tools/cpucaps | 1 + 2 files changed, 21 insertions(+) diff --git a/arch/arm64/kernel/cpu_errata.c b/arch/arm64/kernel/cpu_errata.c index bdbeac75ead6..e2978b89d4b8 100644 --- a/arch/arm64/kernel/cpu_errata.c +++ b/arch/arm64/kernel/cpu_errata.c @@ -364,6 +364,18 @@ static const struct midr_range tsb_flush_fail_cpus[] = { }; #endif /* CONFIG_ARM64_WORKAROUND_TSB_FLUSH_FAILURE */ +#ifdef CONFIG_ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE +static struct midr_range trbe_write_out_of_range_cpus[] = { +#ifdef CONFIG_ARM64_ERRATUM_2253138 + MIDR_ALL_VERSIONS(MIDR_NEOVERSE_N2), +#endif +#ifdef CONFIG_ARM64_ERRATUM_2224489 + MIDR_ALL_VERSIONS(MIDR_CORTEX_A710), +#endif + {}, +}; +#endif /* CONFIG_ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE */ + const struct arm64_cpu_capabilities arm64_errata[] = { #ifdef CONFIG_ARM64_WORKAROUND_CLEAN_CACHE { @@ -577,6 +589,14 @@ const struct arm64_cpu_capabilities arm64_errata[] = { .capability = ARM64_WORKAROUND_TSB_FLUSH_FAILURE, ERRATA_MIDR_RANGE_LIST(tsb_flush_fail_cpus), }, +#endif +#ifdef CONFIG_ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE + { + .desc = "ARM erratum 2253138 or 2224489", + .capability = ARM64_WORKAROUND_TRBE_WRITE_OUT_OF_RANGE, + .type = ARM64_CPUCAP_WEAK_LOCAL_CPU_FEATURE, + CAP_MIDR_RANGE_LIST(trbe_write_out_of_range_cpus), + }, #endif { } diff --git a/arch/arm64/tools/cpucaps b/arch/arm64/tools/cpucaps index 2102e15af43d..90628638e0f9 100644 --- a/arch/arm64/tools/cpucaps +++ b/arch/arm64/tools/cpucaps @@ -55,6 +55,7 @@ WORKAROUND_1508412 WORKAROUND_1542419 WORKAROUND_TRBE_OVERWRITE_FILL_MODE WORKAROUND_TSB_FLUSH_FAILURE +WORKAROUND_TRBE_WRITE_OUT_OF_RANGE WORKAROUND_CAVIUM_23154 WORKAROUND_CAVIUM_27456 WORKAROUND_CAVIUM_30115 -- 2.24.1