Received: by 2002:a05:7412:bc1a:b0:d7:7d3a:4fe2 with SMTP id ki26csp624489rdb; Sat, 19 Aug 2023 16:51:28 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEEtoPQJhdd9BcjeghGlRCnDLO3TZQ43IzZFyqAvHzjcM5v8XQXLBBHF2ZX9NwhlZB39cF9 X-Received: by 2002:a17:90a:9e2:b0:26d:1eff:619f with SMTP id 89-20020a17090a09e200b0026d1eff619fmr2711322pjo.2.1692489088023; Sat, 19 Aug 2023 16:51:28 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1692489088; cv=none; d=google.com; s=arc-20160816; b=D4xwVVb7cHdw7rDhRFW6a7NysDmKCf7jAF2JK0i7AzgCApsew1PkkhxB+IQSVcToLR RUF2z9TfPLnx89o9NdxerHcOMyL/PLWLD4I+eXQspGDWk+0U/nOYltd5jhWTEgYRa2u8 TMuZ9h4vCT1ISv+kE/wL1Ayi6kZOgord4bdn+nRu4pjXx486LIv9FCeregO0ph9d/R74 3uJgXNubAc/v91csUFzMwEBx1+BsMu6daZVWICjz21/fUfEE33J+2KRkcFeXT1CYmQpw /axUfErAQhmwTI3U/TzQNutFpnY5aX15KAM40gmbXL5Wws/uL44thkewvAXATg4PeSR4 uTYA== 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=ou817NwSkPzFrtvKYEjFVgWPr8KWugcqaC/4cuNVjEw=; fh=vyegD1uge25gS9P8DWdyox+VkX63XDyookScsmxB/68=; b=pRuf+Pa6XQG1F7sx9TXy95DDxcAxSGc+LX1kx9s8VBNsp413bnSGfQgxvFqsyLfsEc /9DEJymp5jjmu/jgoot4Jq57q9YTO07Mhl+Ow9ts++AT4bGZkbe/AwAMeMKD6YwqYKQd A1m+xAdVcnTj7iDYSPjOo1thTAzyimBfPayX7UYatvpEoxMsoqO3rm+UWpKAi1FkEsmC NazKGQi4ecnhaO86N2xTuKd/5uyU+HJPiZBmigBLI/ODCtsh4dRx24NVVLsxstwS1L9P zM4+ChNy0/VmAOh6uobpGcyge92+2JgfACSKQGGOJAaLZRDcEi8HVKX3QcPMbOHWgtsz SHGw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1: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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [2620:137:e000::1:18]) by mx.google.com with ESMTPS id bb12-20020a17090b008c00b002694b5c3a6asi4155869pjb.190.2023.08.19.16.51.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 19 Aug 2023 16:51:28 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:18 as permitted sender) client-ip=2620:137:e000::1:18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1: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: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 78848AC389; Sat, 19 Aug 2023 11:06:10 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1358762AbjHRIvB (ORCPT + 99 others); Fri, 18 Aug 2023 04:51:01 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:33718 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1358757AbjHRIud (ORCPT ); Fri, 18 Aug 2023 04:50:33 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 79AD23A96; Fri, 18 Aug 2023 01:50:28 -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 9EC4ED75; Fri, 18 Aug 2023 01:51:08 -0700 (PDT) Received: from [10.57.4.78] (unknown [10.57.4.78]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id CBC253F762; Fri, 18 Aug 2023 01:50:26 -0700 (PDT) Message-ID: <99811457-740c-69a0-7662-dbe24fa2a1c1@arm.com> Date: Fri, 18 Aug 2023 09:50:25 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.14.0 Subject: Re: [PATCH V3 1/3] coresight: etm: Override TRCIDR3.CCITMIN on errata affected cpus To: Anshuman Khandual , Mike Leach Cc: linux-arm-kernel@lists.infradead.org, Catalin Marinas , Will Deacon , James Clark , Leo Yan , Jonathan Corbet , linux-doc@vger.kernel.org, coresight@lists.linaro.org, linux-kernel@vger.kernel.org References: <20230811034600.944386-1-anshuman.khandual@arm.com> <20230811034600.944386-2-anshuman.khandual@arm.com> <9b9d8928-ab4a-990e-9391-41657f5a54ae@arm.com> From: Suzuki K Poulose In-Reply-To: <9b9d8928-ab4a-990e-9391-41657f5a54ae@arm.com> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-5.4 required=5.0 tests=BAYES_00,NICE_REPLY_A, RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_NONE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 18/08/2023 09:45, Anshuman Khandual wrote: > > > On 8/11/23 14:33, Mike Leach wrote: >> Hi Anshuman, >> >> A few minor points. >> >> On Fri, 11 Aug 2023 at 04:46, 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. >>> >>> 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 | 37 +++++++++++++++++++ >>> 2 files changed, 47 insertions(+) >>> >>> diff --git a/Documentation/arch/arm64/silicon-errata.rst b/Documentation/arch/arm64/silicon-errata.rst >>> index bedd3a1d7b42..b08f33eda5f1 100644 >>> --- a/Documentation/arch/arm64/silicon-errata.rst >>> +++ b/Documentation/arch/arm64/silicon-errata.rst >>> @@ -107,6 +107,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-A510 | #2051678 | ARM64_ERRATUM_2051678 | >>> @@ -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 | >> >> Could these doc changes not go in patch 3? > > As Suzuki had explained earlier, will keep this errata documentation here in this patch. > >> >>> diff --git a/drivers/hwtracing/coresight/coresight-etm4x-core.c b/drivers/hwtracing/coresight/coresight-etm4x-core.c >>> index 703b6fcbb6a5..1f3d29a639ff 100644 >>> --- a/drivers/hwtracing/coresight/coresight-etm4x-core.c >>> +++ b/drivers/hwtracing/coresight/coresight-etm4x-core.c >>> @@ -1150,6 +1150,31 @@ static void cpu_detect_trace_filtering(struct etmv4_drvdata *drvdata) >>> drvdata->trfcr = trfcr; >>> } >>> >>> +/* >>> + * The following errata on applicable cpu rangess affect the CCITMIN filed >> >> s/rangess/ranges > > Fixed. > >> >>> + * in TCRIDR3 register. Software read for the field returns 0x100 limiting >>> + * the cycle threshold granularity, where as 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_work_around_wrong_ccitmin(void) >> >> This is not the actual work around - perhaps this should be >> etm4_core_reads_wrong_ccitmin()? > > Sounds better, will rename the function. Or even move the drvdata->ccitmin == 256 check to this function, pass in the drvdata as an argument. That way, the function completes its meaning. i.e., it reads wrong value only if the value is 256. Suzuki