Received: by 2002:a05:7412:37c9:b0:e2:908c:2ebd with SMTP id jz9csp582017rdb; Tue, 19 Sep 2023 04:38:54 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEQbcwydpxEUg78Es26iVWQf6vseOTe6wYNZ8F33aLE0+8noVz2UGlXBCPifsFg17kQiFo2 X-Received: by 2002:a17:90a:ca10:b0:26d:b12:8383 with SMTP id x16-20020a17090aca1000b0026d0b128383mr9876122pjt.8.1695123533886; Tue, 19 Sep 2023 04:38:53 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1695123533; cv=none; d=google.com; s=arc-20160816; b=awk+v7YSgYKgq2p5mL2qHyxNL/whQLAVsncHX1t3BeMJ1w4MYcMb+GRF8UwRfFij+k 0dfkduffbun3+PjuwkHb5r2NdabXchpkS3UVfSgo2bzxCImVHpDZtVT08B52BoNp7hxS bFSsQYtFNm5vIuGBhkL0bF5TUisP9GRI2ZPDpLNcYnAoOBMZg+knpmLC3nnghBRfDtiA yJa35X+ioyCJeujAlYz1tg8H30fuCTsynwxLM/D8o8IieigYjBEF3Dc0fmiQlTlyj/rv iOpttMT9LEOwiNooiNS1tMCeuWpJZ/m5WcMsKRUcFMkvUnyd3UviAgRzseMZNu18KrGc KGsg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:subject:user-agent:mime-version:date:message-id; bh=LebZDIbm6mAZIwfDVgwGvgR61PHeuA701JSNggX5SF0=; fh=1a3QGmPTxYx3IBgiQ6SIbW9F7Xq7bUvaoyldCVrvxRI=; b=kcvmhdf6kbeP9NlH9G5yeVyiV1ewTgxXDYWQHJViz0LAJmVqi7nx7GXS4ANv2gsdzO On58anCz7ZWtV4KOq1W0rHkqmcj/cCe4lfWMrHP8T/9DLVAVLr9Lo1Wt0e1vIF9fcFXm 9QlCcmpFNThN2DukaTcoq4smMY2u6LQDaj6fF97yZ7ysBC/0RevvEARilZGfuf9NXuG9 v6vkE3Lv3rjsml9iYUtzirJJYUtI0tsfEx9C8/uD+VnChbUpRj2++EbaTxkKoY8rGo7m 6eDXvwDlPPwb3zNpn4Uc/ZGo65LiceDgArFNXUiemgUfonY92seAF+9rhFb0b9IoD41T WyWg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 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 fry.vger.email (fry.vger.email. [23.128.96.38]) by mx.google.com with ESMTPS id f18-20020a17090aa79200b00273fd5cbf0bsi9384084pjq.69.2023.09.19.04.38.53 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 Sep 2023 04:38:53 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) client-ip=23.128.96.38; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.38 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by fry.vger.email (Postfix) with ESMTP id DD11E80C6DE3; Tue, 19 Sep 2023 04:26:34 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at fry.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230404AbjISL0b (ORCPT + 99 others); Tue, 19 Sep 2023 07:26:31 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43788 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230349AbjISL03 (ORCPT ); Tue, 19 Sep 2023 07:26:29 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 251B399; Tue, 19 Sep 2023 04:26:23 -0700 (PDT) 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 3B162C15; Tue, 19 Sep 2023 04:27:00 -0700 (PDT) Received: from [10.1.25.36] (FVFF763DQ05P.cambridge.arm.com [10.1.25.36]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 75AE13F67D; Tue, 19 Sep 2023 04:26:21 -0700 (PDT) Message-ID: <3cd57606-5a82-8978-b057-8b3cfea8c62d@arm.com> Date: Tue, 19 Sep 2023 12:26:20 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.15.1 Subject: Re: [PATCH V5 - RESEND 1/3] coresight: etm: Override TRCIDR3.CCITMIN on errata affected cpus To: Anshuman Khandual , linux-arm-kernel@lists.infradead.org Cc: Catalin Marinas , Will Deacon , Mike Leach , James Clark , Leo Yan , Jonathan Corbet , linux-doc@vger.kernel.org, coresight@lists.linaro.org, linux-kernel@vger.kernel.org References: <20230915093649.435163-1-anshuman.khandual@arm.com> <20230915093649.435163-2-anshuman.khandual@arm.com> From: Suzuki K Poulose In-Reply-To: <20230915093649.435163-2-anshuman.khandual@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-2.2 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on fry.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (fry.vger.email [0.0.0.0]); Tue, 19 Sep 2023 04:26:35 -0700 (PDT) Hi Anshuman On 15/09/2023 10:36, Anshuman Khandual wrote: > This work arounds errata 1490853 on Cortex-A76, and Neoverse-N1, errata > 1491015 on Cortex-A77, errata 1502854 on Cortex-X1, and errata 1619801 on > Neoverse-V1, based affected cpus, where software read for TRCIDR3.CCITMIN > field in ETM gets an wrong value. > > If software uses the value returned by the TRCIDR3.CCITMIN register field, > then it will limit the range which could be used for programming the ETM. > In reality, the ETM could be programmed with a much smaller value than what > is indicated by the TRCIDR3.CCITMIN field and still function correctly. > > If software reads the TRCIDR3.CCITMIN register field, corresponding to the > instruction trace counting minimum threshold, observe the value 0x100 or a > minimum cycle count threshold of 256. The correct value should be 0x4 or a > minimum cycle count threshold of 4. > > This work arounds the problem via storing 4 in drvdata->ccitmin on affected > systems where the TRCIDR3.CCITMIN has been 256, thus preserving cycle count > threshold granularity. > The patch looks good to me, please find a minor change below. > These errata information has been updated in arch/arm64/silicon-errata.rst, > but without their corresponding configs because these have been implemented > directly in the driver. > > Cc: Catalin Marinas > Cc: Will Deacon > Cc: Suzuki K Poulose > Cc: Mike Leach > Cc: James Clark > Cc: Jonathan Corbet > Cc: linux-doc@vger.kernel.org > Cc: coresight@lists.linaro.org > Cc: linux-arm-kernel@lists.infradead.org > Cc: linux-kernel@vger.kernel.org > Signed-off-by: Anshuman Khandual > --- > Documentation/arch/arm64/silicon-errata.rst | 10 ++++++ > .../coresight/coresight-etm4x-core.c | 36 +++++++++++++++++++ > 2 files changed, 46 insertions(+) > > diff --git a/Documentation/arch/arm64/silicon-errata.rst b/Documentation/arch/arm64/silicon-errata.rst > index e96f057ea2a0..8f1be5da68b7 100644 > --- a/Documentation/arch/arm64/silicon-errata.rst > +++ b/Documentation/arch/arm64/silicon-errata.rst > @@ -115,6 +115,10 @@ stable kernels. > +----------------+-----------------+-----------------+-----------------------------+ > | ARM | Cortex-A76 | #1463225 | ARM64_ERRATUM_1463225 | > +----------------+-----------------+-----------------+-----------------------------+ > +| ARM | Cortex-A76 | #1490853 | N/A | > ++----------------+-----------------+-----------------+-----------------------------+ > +| ARM | Cortex-A77 | #1491015 | N/A | > ++----------------+-----------------+-----------------+-----------------------------+ > | ARM | Cortex-A77 | #1508412 | ARM64_ERRATUM_1508412 | > +----------------+-----------------+-----------------+-----------------------------+ > | ARM | Cortex-A710 | #2119858 | ARM64_ERRATUM_2119858 | > @@ -125,6 +129,8 @@ stable kernels. > +----------------+-----------------+-----------------+-----------------------------+ > | ARM | Cortex-A715 | #2645198 | ARM64_ERRATUM_2645198 | > +----------------+-----------------+-----------------+-----------------------------+ > +| ARM | Cortex-X1 | #1502854 | N/A | > ++----------------+-----------------+-----------------+-----------------------------+ > | ARM | Cortex-X2 | #2119858 | ARM64_ERRATUM_2119858 | > +----------------+-----------------+-----------------+-----------------------------+ > | ARM | Cortex-X2 | #2224489 | ARM64_ERRATUM_2224489 | > @@ -133,6 +139,8 @@ stable kernels. > +----------------+-----------------+-----------------+-----------------------------+ > | ARM | Neoverse-N1 | #1349291 | N/A | > +----------------+-----------------+-----------------+-----------------------------+ > +| ARM | Neoverse-N1 | #1490853 | N/A | > ++----------------+-----------------+-----------------+-----------------------------+ > | ARM | Neoverse-N1 | #1542419 | ARM64_ERRATUM_1542419 | > +----------------+-----------------+-----------------+-----------------------------+ > | ARM | Neoverse-N2 | #2139208 | ARM64_ERRATUM_2139208 | > @@ -141,6 +149,8 @@ stable kernels. > +----------------+-----------------+-----------------+-----------------------------+ > | ARM | Neoverse-N2 | #2253138 | ARM64_ERRATUM_2253138 | > +----------------+-----------------+-----------------+-----------------------------+ > +| ARM | Neoverse-V1 | #1619801 | N/A | > ++----------------+-----------------+-----------------+-----------------------------+ > | ARM | MMU-500 | #841119,826419 | N/A | > +----------------+-----------------+-----------------+-----------------------------+ > | ARM | MMU-600 | #1076982,1209401| N/A | > diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c > index 77b0271ce6eb..c01455bb1caf 100644 > --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c > +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c > @@ -1150,6 +1150,39 @@ static void cpu_detect_trace_filtering(struct etmv4_drvdata *drvdata) > drvdata->trfcr = trfcr; > } > > +/* > + * The following errata on applicable cpu ranges, affect the CCITMIN filed > + * in TCRIDR3 register. Software read for the field returns 0x100 limiting > + * the cycle threshold granularity, whereas the right value should have > + * been 0x4, which is well supported in the hardware. > + */ > +static struct midr_range etm_wrong_ccitmin_cpus[] = { > + /* Erratum #1490853 - Cortex-A76 */ > + MIDR_RANGE(MIDR_CORTEX_A76, 0, 0, 4, 0), > + /* Erratum #1490853 - Neoverse-N1 */ > + MIDR_RANGE(MIDR_NEOVERSE_N1, 0, 0, 4, 0), > + /* Erratum #1491015 - Cortex-A77 */ > + MIDR_RANGE(MIDR_CORTEX_A77, 0, 0, 1, 0), > + /* Erratum #1502854 - Cortex-X1 */ > + MIDR_REV(MIDR_CORTEX_X1, 0, 0), > + /* Erratum #1619801 - Neoverse-V1 */ > + MIDR_REV(MIDR_NEOVERSE_V1, 0, 0), > + {}, > +}; > + > +static bool etm4_core_reads_wrong_ccitmin(struct etmv4_drvdata *drvdata) > +{ > + /* > + * Erratum affected cpus will read 256 as the minimum > + * instruction trace cycle counting threshold whereas > + * the correct value should be 4 instead. Override the > + * recorded value for 'drvdata->ccitmin' to workaround > + * this problem. > + */ > + return is_midr_in_range_list(read_cpuid_id(), etm_wrong_ccitmin_cpus) && > + (drvdata->ccitmin == 256); minor nit: Having looked at this, it feels like, fixing the ccitmin value to 4, could be moved into this function. Otherwise, we have all the required information about the erratum and the real application of work around is left in the caller, which kind of feels disconnected. So, please could we rename the above function to: static void etm4_fixup_wrong_ccitmin(str..) { /* Comment as above */ if (....) drvdata->ccitmin = 4; } Rest looks fine to me. Suzuki > +} > + > static void etm4_init_arch_data(void *info) > { > u32 etmidr0; > @@ -1214,6 +1247,9 @@ static void etm4_init_arch_data(void *info) > etmidr3 = etm4x_relaxed_read32(csa, TRCIDR3); > /* CCITMIN, bits[11:0] minimum threshold value that can be programmed */ > drvdata->ccitmin = FIELD_GET(TRCIDR3_CCITMIN_MASK, etmidr3); > + if (etm4_core_reads_wrong_ccitmin(drvdata)) > + drvdata->ccitmin = 4; > + > /* EXLEVEL_S, bits[19:16] Secure state instruction tracing */ > drvdata->s_ex_level = FIELD_GET(TRCIDR3_EXLEVEL_S_MASK, etmidr3); > drvdata->config.s_ex_level = drvdata->s_ex_level;