Received: by 2002:a05:6358:d09b:b0:dc:cd0c:909e with SMTP id jc27csp1270452rwb; Sun, 6 Nov 2022 22:42:55 -0800 (PST) X-Google-Smtp-Source: AMsMyM724iRUFWq5s0cbz+0RvLMlUtuIGkVXN401TCIfynClVGDHbY15lFx6WjZ05yDnN+Tj/uAN X-Received: by 2002:a17:907:744:b0:741:36b9:d2cc with SMTP id xc4-20020a170907074400b0074136b9d2ccmr44980804ejb.613.1667803374937; Sun, 06 Nov 2022 22:42:54 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1667803374; cv=none; d=google.com; s=arc-20160816; b=KdptYUrTVYUkf+xkXzzzX7VHiUCEMJo0SQ0E1846Lz+AAQJzG3ISKqFFmYBiRvkzcg bqaJqvINms91lVMNPOLV5pMIvf1mMcRKg3D6a1xwsdwrrSfGFDLb4Czru7ukteMtfmaW pS0fAzBsyGSFqc/dMhe7LKmSsDBQ/ePOWSJ1D4dNoZ5rWC0lsJIVRdthiKBd+7acyYo6 Srz01dkkvXtrX0SePvD5TzuDxdHlM/tBJrCaoymsbmVn+q0h0Z0DiWOJlja7+qt9sHp+ E1yLu/VqOfHpDCO76voeyfu3GPSdVmN+5kh6rhSjHybDWDHNGdo0vyAtg3TcYsaUbEAD 10Zg== 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=jmKfVqBDx6Q1JsVfcf2bav3tkpdhoe5RzNBcN7OyJnU=; b=ZV5W+W7RhqfCEk24fWBQO94RSDbH6yNtkqaUsfmT8Swe1FYI2z0wcflv9CzE5r6ure gC1W37mB5XmSrZdWR8F+1UER+a9EYHQgYQC057lJOL7IinIf7Ne1UwX2XEFFXxx0Qe1y Z+db4/3eKGh9O/s4gjVmqjoZBPinx/xT14zS+u/7JXGNJLItTTUaqkFPEC77GzLumYzn zLloFBiw1S6VVAEZgX+pGGRhty6Z+ULhwVPVzBM/NHu89RPeSKSfJb46GqMMdjC9qohw wFDuzaCqB+I43eBiLWxJGx80q+zklQn2VZ3qCSto/EI5eaSw2T1a232DekfLBz2Zo2KO gHdQ== 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:20 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 out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id w11-20020a05640234cb00b00462b89cc2c6si10135809edc.267.2022.11.06.22.42.32; Sun, 06 Nov 2022 22:42:54 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 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 S229840AbiKGG0G (ORCPT + 95 others); Mon, 7 Nov 2022 01:26:06 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:40716 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231180AbiKGG0B (ORCPT ); Mon, 7 Nov 2022 01:26:01 -0500 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id EF32512A93; Sun, 6 Nov 2022 22:25:57 -0800 (PST) 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 DF2191FB; Sun, 6 Nov 2022 22:26:03 -0800 (PST) Received: from a077893.blr.arm.com (unknown [10.162.42.7]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 0DB8B3F534; Sun, 6 Nov 2022 22:25:52 -0800 (PST) From: Anshuman Khandual To: linux-kernel@vger.kernel.org, linux-perf-users@vger.kernel.org, linux-arm-kernel@lists.infradead.org, peterz@infradead.org, acme@kernel.org, mark.rutland@arm.com, will@kernel.org, catalin.marinas@arm.com Cc: Anshuman Khandual , Mark Brown , James Clark , Rob Herring , Marc Zyngier , Suzuki Poulose , Ingo Molnar Subject: [PATCH V5 4/7] driver/perf/arm_pmu_platform: Add support for BRBE attributes detection Date: Mon, 7 Nov 2022 11:55:11 +0530 Message-Id: <20221107062514.2851047-5-anshuman.khandual@arm.com> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20221107062514.2851047-1-anshuman.khandual@arm.com> References: <20221107062514.2851047-1-anshuman.khandual@arm.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-4.2 required=5.0 tests=BAYES_00,RCVD_IN_DNSWL_MED, 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 This adds arm pmu infrastrure to probe BRBE implementation's attributes via driver exported callbacks later. The actual BRBE feature detection will be added by the driver itself. CPU specific BRBE entries, cycle count, format support gets detected during PMU init. This information gets saved in per-cpu struct pmu_hw_events which later helps in operating BRBE during a perf event context. Cc: Will Deacon Cc: Mark Rutland Cc: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org Signed-off-by: Anshuman Khandual --- drivers/perf/arm_pmu_platform.c | 34 +++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/drivers/perf/arm_pmu_platform.c b/drivers/perf/arm_pmu_platform.c index 933b96e243b8..acdc445081aa 100644 --- a/drivers/perf/arm_pmu_platform.c +++ b/drivers/perf/arm_pmu_platform.c @@ -172,6 +172,36 @@ static int armpmu_request_irqs(struct arm_pmu *armpmu) return err; } +static void arm_brbe_probe_cpu(void *info) +{ + struct pmu_hw_events *hw_events; + struct arm_pmu *armpmu = info; + + /* + * Return from here, if BRBE driver has not been + * implemented for this PMU. This helps prevent + * kernel crash later when brbe_probe() will be + * called on the PMU. + */ + if (!armpmu->brbe_probe) + return; + + hw_events = per_cpu_ptr(armpmu->hw_events, smp_processor_id()); + armpmu->brbe_probe(hw_events); +} + +static int armpmu_request_brbe(struct arm_pmu *armpmu) +{ + int cpu, err = 0; + + for_each_cpu(cpu, &armpmu->supported_cpus) { + err = smp_call_function_single(cpu, arm_brbe_probe_cpu, armpmu, 1); + if (err) + return err; + } + return err; +} + static void armpmu_free_irqs(struct arm_pmu *armpmu) { int cpu; @@ -229,6 +259,10 @@ int arm_pmu_device_probe(struct platform_device *pdev, if (ret) goto out_free_irqs; + ret = armpmu_request_brbe(pmu); + if (ret) + goto out_free_irqs; + ret = armpmu_register(pmu); if (ret) { dev_err(dev, "failed to register PMU devices!\n"); -- 2.25.1