Expose MIDR register to user space
Introduction
Some tools may want to get access to raw value of MIDR register. This register's value is obtained with PMU_CTL_QUERY_HW_CFG query now.
We are exposing this value through wperf's test command both in human readable form and in JSON output.
Note: THIS CHANGE BREAKS Binary API between Kernel driver and application. Because version check between these two is strict we are able to bring this change to release 2.3.x.
You can now access MIDR register raw value in hexadecimal format with wperf command line option test, see:
>wperf test [-json]
Testing of wperf test
Command line (human readable form)
See value of PMU_CTL_QUERY_HW_CFG [midr_value] is 0x000000000000413fd0c1.
>wperf test
Test Name Result
========= ======
request.ioctl_events [EVT_CORE] False
request.ioctl_events [EVT_DSU] False
request.ioctl_events [EVT_DMC_CLK/EVT_DMC_CLKDIV2] False
pmu_device.vendor_name Arm Limited
pmu_device.events_query(events) [EVT_CORE] 79
pmu_device.events_query(events) [EVT_DSU] 9
pmu_device.events_query(events) [EVT_DMC_CLK] 3
pmu_device.events_query(events) [EVT_DMC_CLKDIV2] 26
PMU_CTL_QUERY_HW_CFG [arch_id] 0x000f
PMU_CTL_QUERY_HW_CFG [core_num] 0x0050
PMU_CTL_QUERY_HW_CFG [fpc_num] 0x0001
PMU_CTL_QUERY_HW_CFG [gpc_num] 0x0006
PMU_CTL_QUERY_HW_CFG [part_id] 0x0d0c
PMU_CTL_QUERY_HW_CFG [pmu_ver] 0x0004
PMU_CTL_QUERY_HW_CFG [rev_id] 0x0001
PMU_CTL_QUERY_HW_CFG [variant_id] 0x0003
PMU_CTL_QUERY_HW_CFG [vendor_id] 0x0041
PMU_CTL_QUERY_HW_CFG [midr_value] 0x000000000000413fd0c1
gpc_nums[EVT_CORE] 6
gpc_nums[EVT_DSU] 6
gpc_nums[EVT_DMC_CLK] 2
gpc_nums[EVT_DMC_CLKDIV2] 8
ioctl_events[EVT_CORE].index
ioctl_events[EVT_CORE].note
ioctl_events[EVT_DSU].index
ioctl_events[EVT_DSU].note
ioctl_events[EVT_DMC_CLK].index
ioctl_events[EVT_DMC_CLK].note
ioctl_events[EVT_DMC_CLKDIV2].index
ioctl_events[EVT_DMC_CLKDIV2].note
JSON output for wperf test command
See:
{
"Result": "0x000000000000413fd0c1",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [midr_value]"
}
>wperf test -json | python -m json.tool
{
"Test_Results": [
{
"Result": "False",
"Test_Name": "request.ioctl_events [EVT_CORE]"
},
{
"Result": "False",
"Test_Name": "request.ioctl_events [EVT_DSU]"
},
{
"Result": "False",
"Test_Name": "request.ioctl_events [EVT_DMC_CLK/EVT_DMC_CLKDIV2]"
},
{
"Result": "Arm Limited",
"Test_Name": "pmu_device.vendor_name"
},
{
"Result": "79",
"Test_Name": "pmu_device.events_query(events) [EVT_CORE]"
},
{
"Result": "9",
"Test_Name": "pmu_device.events_query(events) [EVT_DSU]"
},
{
"Result": "3",
"Test_Name": "pmu_device.events_query(events) [EVT_DMC_CLK]"
},
{
"Result": "26",
"Test_Name": "pmu_device.events_query(events) [EVT_DMC_CLKDIV2]"
},
{
"Result": "0x000f",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [arch_id]"
},
{
"Result": "0x0050",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [core_num]"
},
{
"Result": "0x0001",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [fpc_num]"
},
{
"Result": "0x0006",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [gpc_num]"
},
{
"Result": "0x0d0c",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [part_id]"
},
{
"Result": "0x0004",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [pmu_ver]"
},
{
"Result": "0x0001",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [rev_id]"
},
{
"Result": "0x0003",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [variant_id]"
},
{
"Result": "0x0041",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [vendor_id]"
},
{
"Result": "0x000000000000413fd0c1",
"Test_Name": "PMU_CTL_QUERY_HW_CFG [midr_value]"
},
{
"Result": "6",
"Test_Name": "gpc_nums[EVT_CORE]"
},
{
"Result": "6",
"Test_Name": "gpc_nums[EVT_DSU]"
},
{
"Result": "2",
"Test_Name": "gpc_nums[EVT_DMC_CLK]"
},
{
"Result": "8",
"Test_Name": "gpc_nums[EVT_DMC_CLKDIV2]"
},
{
"Result": "",
"Test_Name": "ioctl_events[EVT_CORE].index"
},
{
"Result": "",
"Test_Name": "ioctl_events[EVT_CORE].note"
},
{
"Result": "",
"Test_Name": "ioctl_events[EVT_DSU].index"
},
{
"Result": "",
"Test_Name": "ioctl_events[EVT_DSU].note"
},
{
"Result": "",
"Test_Name": "ioctl_events[EVT_DMC_CLK].index"
},
{
"Result": "",
"Test_Name": "ioctl_events[EVT_DMC_CLK].note"
},
{
"Result": "",
"Test_Name": "ioctl_events[EVT_DMC_CLKDIV2].index"
},
{
"Result": "",
"Test_Name": "ioctl_events[EVT_DMC_CLKDIV2].note"
}
]
}
Regression
>pytest
================================================= test session starts =================================================
platform win32 -- Python 3.11.1, pytest-7.2.0, pluggy-1.0.0
rootdir: C:\Users\przemek\Desktop\wperf\merge-retquest\_events
collected 71 items
wperf_cli_common_test.py .... [ 5%]
wperf_cli_json_validator_test.py .... [ 11%]
wperf_cli_list_test.py ... [ 15%]
wperf_cli_metrics_test.py ........ [ 26%]
wperf_cli_padding_test.py ......... [ 39%]
wperf_cli_stat_test.py ....................................... [ 94%]
wperf_cli_test_test.py .... [100%]
=========================================== 71 passed in 153.52s (0:02:33) ============================================
Edited by Przemyslaw Wirkus