From: "Suzuki K. Poulose" <suzuki.poulose@arm.com> To: linux-arm-kernel@lists.infradead.org Cc: linux-kernel@vger.kernel.org, mark.rutland@arm.com, punit.agrawal@arm.com, arm@kernel.org, "Suzuki K. Poulose" <suzuki.poulose@arm.com> Subject: [PATCHv4 00/12] arm-cci: PMU updates Date: Thu, 17 Dec 2015 17:49:07 +0000 [thread overview] Message-ID: <1450374559-23315-1-git-send-email-suzuki.poulose@arm.com> (raw) This series includes: - Introduction of transaction hooks for CCI PMU to batch the CCI counter programming (Patches 1-5) - Work around for writing to CCI-500/550(introduced later) PMU counters (Patches 6-10) - Support for CCI-550 PMU (11-12) with Acked-bys. Since all of these are related I am clubbing it all in one series so that it is easier to carry them around (and merge it possibly). The CCI PMU driver sets the event counter to the half of the maximum value(2^31) it can count before we start the counters via pmu_event_set_period(). This is done to give us the best chance to handle the overflow interrupt, taking care of extreme interrupt latencies. However, CCI-500 comes with advanced power saving schemes, which disables the clock to the event counters unless the counters are enabled to count (PMCR.CEN). This prevents the driver from writing the period to the counters before starting them. Also, there is no way we can reset the individual event counter to 0 (PMCR.RST resets all the counters, losing their current readings). However the value of the counter is preserved and could be read back, when the counters are not enabled. So we cannot reliably use the counters and compute the number of events generated during the sampling period since we don't have the value of the counter at start. Here are the possible solutions: 1) Disable clock gating on CCI-500 by setting Control_Override_Reg[bit3]. - The Control_Override_Reg is secure (and hence not programmable from Linux), and also has an impact on power consumption. 2) Change the order of operations i.e, a) Program and enable individual counters b) Enable counting on all the counters by setting PMCR.CEN c) Write the period to the individual counters d) Disable the counters - This could cause in unnecessary noise in the other counters and is costly (we should repeat this for all enabled counters). 3) Don't set the counter value, instead use the current count as the starting count and compute the delta at the end of sampling. 4) Modified version of 2, which disables all the other counters, except the target counter, with the target counter programmed with an invalid event code(which guarantees that the counter won't change during the operation). This patch implements option 4 for CCI-500. CCI-400 behavior remains unchanged. Changes sinces V3: - Added transaction hooks to batch the writes to PMU counters for group events. - Pulled ARM CCI 550 PMU support patches Changes since V2: - Rebased to 4.4-rc1 + Mark's patch to simply PMU syfs attributes [1] - Address comments on v2. - Split the introduction of write_counter hook to a separate patch Changes since V1: - Choose 4 instead of 3 above, suggested by Mark Rutland [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/373129.html Suzuki K. Poulose (12): arm-cci: Define CCI counter period arm-cci: Refactor pmu_write_counter arm-cci: Group writes to counter arm-cci: Fix the flags for pmu_start called from pmu_add arm-cci: PMU: Add support for transactions arm-cci: Refactor CCI PMU enable/disable methods arm-cci: Get the status of a counter arm-cci: Add routines to save/restore all counters arm-cci: Provide hook for writing to PMU counters arm-cci: CCI-500: Work around PMU counter writes arm-cci500: Rearrange PMU driver for code sharing with CCI-550 PMU arm-cci: CoreLink CCI-550 PMU driver Documentation/devicetree/bindings/arm/cci.txt | 2 + drivers/bus/Kconfig | 10 +- drivers/bus/arm-cci.c | 599 +++++++++++++++++++------ 3 files changed, 479 insertions(+), 132 deletions(-) -- 1.7.9.5
WARNING: multiple messages have this Message-ID (diff)
From: suzuki.poulose@arm.com (Suzuki K. Poulose) To: linux-arm-kernel@lists.infradead.org Subject: [PATCHv4 00/12] arm-cci: PMU updates Date: Thu, 17 Dec 2015 17:49:07 +0000 [thread overview] Message-ID: <1450374559-23315-1-git-send-email-suzuki.poulose@arm.com> (raw) This series includes: - Introduction of transaction hooks for CCI PMU to batch the CCI counter programming (Patches 1-5) - Work around for writing to CCI-500/550(introduced later) PMU counters (Patches 6-10) - Support for CCI-550 PMU (11-12) with Acked-bys. Since all of these are related I am clubbing it all in one series so that it is easier to carry them around (and merge it possibly). The CCI PMU driver sets the event counter to the half of the maximum value(2^31) it can count before we start the counters via pmu_event_set_period(). This is done to give us the best chance to handle the overflow interrupt, taking care of extreme interrupt latencies. However, CCI-500 comes with advanced power saving schemes, which disables the clock to the event counters unless the counters are enabled to count (PMCR.CEN). This prevents the driver from writing the period to the counters before starting them. Also, there is no way we can reset the individual event counter to 0 (PMCR.RST resets all the counters, losing their current readings). However the value of the counter is preserved and could be read back, when the counters are not enabled. So we cannot reliably use the counters and compute the number of events generated during the sampling period since we don't have the value of the counter at start. Here are the possible solutions: 1) Disable clock gating on CCI-500 by setting Control_Override_Reg[bit3]. - The Control_Override_Reg is secure (and hence not programmable from Linux), and also has an impact on power consumption. 2) Change the order of operations i.e, a) Program and enable individual counters b) Enable counting on all the counters by setting PMCR.CEN c) Write the period to the individual counters d) Disable the counters - This could cause in unnecessary noise in the other counters and is costly (we should repeat this for all enabled counters). 3) Don't set the counter value, instead use the current count as the starting count and compute the delta at the end of sampling. 4) Modified version of 2, which disables all the other counters, except the target counter, with the target counter programmed with an invalid event code(which guarantees that the counter won't change during the operation). This patch implements option 4 for CCI-500. CCI-400 behavior remains unchanged. Changes sinces V3: - Added transaction hooks to batch the writes to PMU counters for group events. - Pulled ARM CCI 550 PMU support patches Changes since V2: - Rebased to 4.4-rc1 + Mark's patch to simply PMU syfs attributes [1] - Address comments on v2. - Split the introduction of write_counter hook to a separate patch Changes since V1: - Choose 4 instead of 3 above, suggested by Mark Rutland [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2015-September/373129.html Suzuki K. Poulose (12): arm-cci: Define CCI counter period arm-cci: Refactor pmu_write_counter arm-cci: Group writes to counter arm-cci: Fix the flags for pmu_start called from pmu_add arm-cci: PMU: Add support for transactions arm-cci: Refactor CCI PMU enable/disable methods arm-cci: Get the status of a counter arm-cci: Add routines to save/restore all counters arm-cci: Provide hook for writing to PMU counters arm-cci: CCI-500: Work around PMU counter writes arm-cci500: Rearrange PMU driver for code sharing with CCI-550 PMU arm-cci: CoreLink CCI-550 PMU driver Documentation/devicetree/bindings/arm/cci.txt | 2 + drivers/bus/Kconfig | 10 +- drivers/bus/arm-cci.c | 599 +++++++++++++++++++------ 3 files changed, 479 insertions(+), 132 deletions(-) -- 1.7.9.5
next reply other threads:[~2015-12-17 17:49 UTC|newest] Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top 2015-12-17 17:49 Suzuki K. Poulose [this message] 2015-12-17 17:49 ` [PATCHv4 00/12] arm-cci: PMU updates Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 01/12] arm-cci: Define CCI counter period Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 02/12] arm-cci: Refactor pmu_write_counter Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 03/12] arm-cci: Group writes to counter Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 04/12] arm-cci: Fix the flags for pmu_start called from pmu_add Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 05/12] arm-cci: PMU: Add support for transactions Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 18:42 ` Peter Zijlstra 2015-12-17 18:42 ` Peter Zijlstra 2015-12-18 10:28 ` Suzuki K. Poulose 2015-12-18 10:28 ` Suzuki K. Poulose 2015-12-18 10:42 ` Peter Zijlstra 2015-12-18 10:42 ` Peter Zijlstra 2015-12-18 10:58 ` Suzuki K. Poulose 2015-12-18 10:58 ` Suzuki K. Poulose 2015-12-18 11:47 ` Peter Zijlstra 2015-12-18 11:47 ` Peter Zijlstra 2015-12-21 10:55 ` Suzuki K. Poulose 2015-12-21 10:55 ` Suzuki K. Poulose 2016-01-05 13:37 ` Peter Zijlstra 2016-01-05 13:37 ` Peter Zijlstra 2016-01-05 13:43 ` Suzuki K. Poulose 2016-01-05 13:43 ` Suzuki K. Poulose 2016-01-05 14:53 ` Peter Zijlstra 2016-01-05 14:53 ` Peter Zijlstra 2015-12-17 17:49 ` [PATCH v4 06/12] arm-cci: Refactor CCI PMU enable/disable methods Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 07/12] arm-cci: Get the status of a counter Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 08/12] arm-cci: Add routines to save/restore all counters Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 09/12] arm-cci: Provide hook for writing to PMU counters Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 10/12] arm-cci: CCI-500: Work around PMU counter writes Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 11/12] arm-cci500: Rearrange PMU driver for code sharing with CCI-550 PMU Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose 2015-12-17 17:49 ` [PATCH v4 12/12] arm-cci: CoreLink CCI-550 PMU driver Suzuki K. Poulose 2015-12-17 17:49 ` Suzuki K. Poulose
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=1450374559-23315-1-git-send-email-suzuki.poulose@arm.com \ --to=suzuki.poulose@arm.com \ --cc=arm@kernel.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-kernel@vger.kernel.org \ --cc=mark.rutland@arm.com \ --cc=punit.agrawal@arm.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.