From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.4 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED, USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 898AAC4338F for ; Fri, 30 Jul 2021 10:52:27 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id 6EE8361008 for ; Fri, 30 Jul 2021 10:52:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238595AbhG3Kwa (ORCPT ); Fri, 30 Jul 2021 06:52:30 -0400 Received: from foss.arm.com ([217.140.110.172]:40342 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S238487AbhG3Kw3 (ORCPT ); Fri, 30 Jul 2021 06:52:29 -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 0B7301FB; Fri, 30 Jul 2021 03:52:25 -0700 (PDT) Received: from [10.163.66.9] (unknown [10.163.66.9]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 42AF43F73D; Fri, 30 Jul 2021 03:52:20 -0700 (PDT) Subject: Re: [PATCH 04/10] coresight: trbe: Decouple buffer base from the hardware base To: Suzuki K Poulose , linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, coresight@lists.linaro.org, will@kernel.org, catalin.marinas@arm.com, james.morse@arm.com, mathieu.poirier@linaro.org, mike.leach@linaro.org, leo.yan@linaro.org, maz@kernel.org, mark.rutland@arm.com References: <20210728135217.591173-1-suzuki.poulose@arm.com> <20210728135217.591173-5-suzuki.poulose@arm.com> From: Anshuman Khandual Message-ID: <54e9f562-08ef-f198-e865-a6cf94746704@arm.com> Date: Fri, 30 Jul 2021 16:23:09 +0530 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.10.0 MIME-Version: 1.0 In-Reply-To: <20210728135217.591173-5-suzuki.poulose@arm.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 7/28/21 7:22 PM, Suzuki K Poulose wrote: > We always set the TRBBASER_EL1 to the base of the virtual ring > buffer. We are about to change this for working around an erratum. > So, in preparation to that, allow the driver to choose a different > base for the TRBBASER_EL1 (which is within the buffer range). > > Cc: Anshuman Khandual > Cc: Mike Leach > Cc: Mathieu Poirier > Cc: Leo Yan > Signed-off-by: Suzuki K Poulose > --- > drivers/hwtracing/coresight/coresight-trbe.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) > > diff --git a/drivers/hwtracing/coresight/coresight-trbe.c b/drivers/hwtracing/coresight/coresight-trbe.c > index 0af644331b99..9735d514c5e1 100644 > --- a/drivers/hwtracing/coresight/coresight-trbe.c > +++ b/drivers/hwtracing/coresight/coresight-trbe.c > @@ -59,6 +59,8 @@ struct trbe_buf { > * trbe_limit sibling pointers. > */ > unsigned long trbe_base; > + /* The base programmed into the TRBE */ > + unsigned long trbe_hw_base; > unsigned long trbe_limit; > unsigned long trbe_write; > int nr_pages; > @@ -504,7 +506,7 @@ static void trbe_enable_hw(struct trbe_buf *buf) > set_trbe_disabled(); > isb(); > clr_trbe_status(); > - set_trbe_base_pointer(buf->trbe_base); > + set_trbe_base_pointer(buf->trbe_hw_base); It might be better to add a sanity check asserting 'buf->trbe_hw_base' to be within [buf->trbe_base..buf->trbe_base + nr_pages * PAGE_SIZE] before writing that into TRBBASER_EL1. > set_trbe_write_pointer(buf->trbe_write); > > /* > @@ -709,6 +711,8 @@ static int __arm_trbe_enable(struct trbe_buf *buf, > trbe_stop_and_truncate_event(handle); > return -ENOSPC; > } > + /* Set the base of the TRBE to the buffer base */ > + buf->trbe_hw_base = buf->trbe_base; So applicable 'buf->trbe_hw_base' will be derived from 'buf->trbe_base' after taking into account workarounds (if any). Makes sense. > *this_cpu_ptr(buf->cpudata->drvdata->handle) = handle; > trbe_enable_hw(buf); > return 0; > @@ -808,7 +812,7 @@ static bool is_perf_trbe(struct perf_output_handle *handle) > struct trbe_drvdata *drvdata = cpudata->drvdata; > int cpu = smp_processor_id(); > > - WARN_ON(buf->trbe_base != get_trbe_base_pointer()); > + WARN_ON(buf->trbe_hw_base != get_trbe_base_pointer()); > WARN_ON(buf->trbe_limit != get_trbe_limit_pointer()); > > if (cpudata->mode != CS_MODE_PERF) > With or without the above sanity check. Reviewed-by: Anshuman Khandual