Skip to content

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

Merge request reports

Loading