-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
selftests/powerpc: EBB selftest for MMCR0 control for PMU SPRs in ISA…
… v3.1 With the MMCR0 control bit (PMCCEXT) in ISA v3.1, read access to group B registers is restricted when MMCR0 PMCC=0b00. In other platforms (like power9), the older behaviour works where group B PMU SPRs are readable. Patch creates a selftest which verifies that the test takes a SIGILL when attempting to read PMU registers via helper function "dump_ebb_state" for ISA v3.1. Signed-off-by: Athira Rajeev <atrajeev@linux.vnet.ibm.com> Tested-by: Nageswara R Sastry <rnsastry@linux.ibm.com <mailto:rnsastry@linux.ibm.com>> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/1621950703-1532-3-git-send-email-atrajeev@linux.vnet.ibm.com
- Loading branch information
Athira Rajeev
authored and
Michael Ellerman
committed
Jun 16, 2021
1 parent
45677c9
commit d81090e
Showing
2 changed files
with
64 additions
and
1 deletion.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
63 changes: 63 additions & 0 deletions
63
tools/testing/selftests/powerpc/pmu/ebb/regs_access_pmccext_test.c
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,63 @@ | ||
// SPDX-License-Identifier: GPL-2.0-only | ||
/* | ||
* Copyright 2021, Athira Rajeev, IBM Corp. | ||
*/ | ||
|
||
#include <stdio.h> | ||
#include <stdlib.h> | ||
#include <setjmp.h> | ||
#include <signal.h> | ||
|
||
#include "ebb.h" | ||
|
||
|
||
/* | ||
* Test that closing the EBB event clears MMCR0_PMCC and | ||
* sets MMCR0_PMCCEXT preventing further read access to the | ||
* group B PMU registers. | ||
*/ | ||
|
||
static int regs_access_pmccext(void) | ||
{ | ||
struct event event; | ||
|
||
SKIP_IF(!ebb_is_supported()); | ||
|
||
event_init_named(&event, 0x1001e, "cycles"); | ||
event_leader_ebb_init(&event); | ||
|
||
FAIL_IF(event_open(&event)); | ||
|
||
ebb_enable_pmc_counting(1); | ||
setup_ebb_handler(standard_ebb_callee); | ||
ebb_global_enable(); | ||
FAIL_IF(ebb_event_enable(&event)); | ||
|
||
mtspr(SPRN_PMC1, pmc_sample_period(sample_period)); | ||
|
||
while (ebb_state.stats.ebb_count < 1) | ||
FAIL_IF(core_busy_loop()); | ||
|
||
ebb_global_disable(); | ||
event_close(&event); | ||
|
||
FAIL_IF(ebb_state.stats.ebb_count == 0); | ||
|
||
/* | ||
* For ISA v3.1, verify the test takes a SIGILL when reading | ||
* PMU regs after the event is closed. With the control bit | ||
* in MMCR0 (PMCCEXT) restricting access to group B PMU regs, | ||
* sigill is expected. | ||
*/ | ||
if (have_hwcap2(PPC_FEATURE2_ARCH_3_1)) | ||
FAIL_IF(catch_sigill(dump_ebb_state)); | ||
else | ||
dump_ebb_state(); | ||
|
||
return 0; | ||
} | ||
|
||
int main(void) | ||
{ | ||
return test_harness(regs_access_pmccext, "regs_access_pmccext"); | ||
} |