File Index
Files and directories
Sign in
FILE

event_alternatives_tests_p10.c

File preview with syntax highlighting.

linux-6.19.14/tools/testing/selftests/powerpc/pmu/event_code_tests/event_alternatives_tests_p10.c C
  1// SPDX-License-Identifier: GPL-2.0-only
  2/*
  3 * Copyright 2022, Athira Rajeev, IBM Corp.
  4 */
  5
  6#include <stdio.h>
  7#include "../event.h"
  8#include "../sampling_tests/misc.h"
  9
 10#define PM_RUN_CYC_ALT 0x200f4
 11#define PM_INST_DISP 0x200f2
 12#define PM_BR_2PATH 0x20036
 13#define PM_LD_MISS_L1 0x3e054
 14#define PM_RUN_INST_CMPL_ALT 0x400fa
 15
 16#define EventCode_1 0x100fc
 17#define EventCode_2 0x200fa
 18#define EventCode_3 0x300fc
 19#define EventCode_4 0x400fc
 20
 21/*
 22 * Check for event alternatives.
 23 */
 24
 25static int event_alternatives_tests_p10(void)
 26{
 27	struct event *e, events[5];
 28	int i;
 29	int pvr = PVR_VER(mfspr(SPRN_PVR));
 30
 31	/* Check for platform support for the test */
 32	SKIP_IF(platform_check_for_tests());
 33
 34	/*
 35	 * PVR check is used here since PMU specific data like
 36	 * alternative events is handled by respective PMU driver
 37	 * code and using PVR will work correctly for all cases
 38	 * including generic compat mode.
 39	 */
 40	SKIP_IF((pvr != POWER10) && (pvr != POWER11));
 41
 42	SKIP_IF(check_for_generic_compat_pmu());
 43
 44	/*
 45	 * Test for event alternative for 0x0001e
 46	 * and 0x00002.
 47	 */
 48	e = &events[0];
 49	event_init(e, 0x0001e);
 50
 51	e = &events[1];
 52	event_init(e, EventCode_1);
 53
 54	e = &events[2];
 55	event_init(e, EventCode_2);
 56
 57	e = &events[3];
 58	event_init(e, EventCode_3);
 59
 60	e = &events[4];
 61	event_init(e, EventCode_4);
 62
 63	FAIL_IF(event_open(&events[0]));
 64
 65	/*
 66	 * Expected to pass since 0x0001e has alternative event
 67	 * 0x600f4 in PMC6. So it can go in with other events
 68	 * in PMC1 to PMC4.
 69	 */
 70	for (i = 1; i < 5; i++)
 71		FAIL_IF(event_open_with_group(&events[i], events[0].fd));
 72
 73	for (i = 0; i < 5; i++)
 74		event_close(&events[i]);
 75
 76	e = &events[0];
 77	event_init(e, 0x00002);
 78
 79	e = &events[1];
 80	event_init(e, EventCode_1);
 81
 82	e = &events[2];
 83	event_init(e, EventCode_2);
 84
 85	e = &events[3];
 86	event_init(e, EventCode_3);
 87
 88	e = &events[4];
 89	event_init(e, EventCode_4);
 90
 91	FAIL_IF(event_open(&events[0]));
 92
 93	/*
 94	 * Expected to pass since 0x00020 has alternative event
 95	 * 0x500fa in PMC5. So it can go in with other events
 96	 * in PMC1 to PMC4.
 97	 */
 98	for (i = 1; i < 5; i++)
 99		FAIL_IF(event_open_with_group(&events[i], events[0].fd));
100
101	for (i = 0; i < 5; i++)
102		event_close(&events[i]);
103
104	return 0;
105}
106
107int main(void)
108{
109	return test_harness(event_alternatives_tests_p10, "event_alternatives_tests_p10");
110}
~/ Read-only file preview.