From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752787AbbJTNHc (ORCPT ); Tue, 20 Oct 2015 09:07:32 -0400 Received: from eu-smtp-delivery-143.mimecast.com ([207.82.80.143]:38900 "EHLO eu-smtp-delivery-143.mimecast.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752364AbbJTNGj (ORCPT ); Tue, 20 Oct 2015 09:06:39 -0400 From: "Suzuki K. Poulose" To: linux-arm-kernel@lists.infradead.org Cc: punit.agrawal@arm.com, mark.rutland@arm.com, arm@kernel.org, linux-kernel@vger.kernel.org, "Suzuki K. Poulose" Subject: [PATCHv2 3/4] arm-cci: Add routines to enable/disable all counters Date: Tue, 20 Oct 2015 14:05:25 +0100 Message-Id: <1445346326-30820-4-git-send-email-suzuki.poulose@arm.com> X-Mailer: git-send-email 1.7.9.5 In-Reply-To: <1445346326-30820-1-git-send-email-suzuki.poulose@arm.com> References: <1445346326-30820-1-git-send-email-suzuki.poulose@arm.com> X-OriginalArrivalTime: 20 Oct 2015 13:06:13.0057 (UTC) FILETIME=[18ADC310:01D10B38] X-MC-Unique: 36cwOFG6QqC1VI7LkV4Ckw-7 Content-Type: text/plain; charset=WINDOWS-1252 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from quoted-printable to 8bit by mail.home.local id t9KD7bkL016536 Adds helper routines to manipulate the counter controls for all the counters on the CCI PMU. pmu_disable_counters_ctrl: Iterates over the counters, checking the status of each counter and disabling any enabled counters. For each such changed counter, the mask is updated so that one can restore the state later using pmu_enable_counters_ctrl. Cc: Punit Agrawal Cc: Mark Rutland Cc: arm@kernel.org Signed-off-by: Suzuki K. Poulose --- drivers/bus/arm-cci.c | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) diff --git a/drivers/bus/arm-cci.c b/drivers/bus/arm-cci.c index 1a75010..7f4a266 100644 --- a/drivers/bus/arm-cci.c +++ b/drivers/bus/arm-cci.c @@ -663,6 +663,36 @@ static u32 pmu_get_event(struct cci_pmu *cci_pmu, int idx) } /* + * Restore the status of the counters. + * For each counter set in the mask, enable the counter back. + */ +static void pmu_restore_counters_ctrl(struct cci_pmu *cci_pmu, unsigned long *mask) +{ + int i; + + for_each_set_bit(i, mask, cci_pmu->num_cntrs) + pmu_enable_counter(cci_pmu, i); +} + +/* + * For all counters on the CCI-PMU, disable any 'enabled' counters, + * saving the changed counters in the mask, so that we can restore + * it later using pmu_restore_counters_ctrl. + */ +static void pmu_disable_counters_ctrl(struct cci_pmu *cci_pmu, unsigned long *mask) +{ + int i; + + for (i = 0; i < cci_pmu->num_cntrs; i++) { + clear_bit(i, mask); + if (pmu_get_counter_ctrl(cci_pmu, i)) { + set_bit(i, mask); + pmu_disable_counter(cci_pmu, i); + } + } +} + +/* * Returns the number of programmable counters actually implemented * by the cci */ -- 1.7.9.5