• Kan Liang's avatar
    perf/x86/intel/uncore: Parse uncore discovery tables · edae1f06
    Kan Liang authored
    A self-describing mechanism for the uncore PerfMon hardware has been
    introduced with the latest Intel platforms. By reading through an MMIO
    page worth of information, perf can 'discover' all the standard uncore
    PerfMon registers in a machine.
    
    The discovery mechanism relies on BIOS's support. With a proper BIOS,
    a PCI device with the unique capability ID 0x23 can be found on each
    die. Perf can retrieve the information of all available uncore PerfMons
    from the device via MMIO. The information is composed of one global
    discovery table and several unit discovery tables.
    - The global discovery table includes global uncore information of the
      die, e.g., the address of the global control register, the offset of
      the global status register, the number of uncore units, the offset of
      unit discovery tables, etc.
    - The unit discovery table includes generic uncore unit information,
      e.g., the access type, the counter width, the address of counters,
      the address of the counter control, the unit ID, the unit type, etc.
      The unit is also called "box" in the code.
    Perf can provide basic uncore support based on this information
    with the following patches.
    
    To locate the PCI device with the discovery tables, check the generic
    PCI ID first. If it doesn't match, go through the entire PCI device tree
    and locate the device with the unique capability ID.
    
    The uncore information is similar among dies. To save parsing time and
    space, only completely parse and store the discovery tables on the first
    die and the first box of each die. The parsed information is stored in
    an
    RB tree structure, intel_uncore_discovery_type. The size of the stored
    discovery tables varies among platforms. It's around 4KB for a Sapphire
    Rapids server.
    
    If a BIOS doesn't support the 'discovery' mechanism, the uncore driver
    will exit with -ENODEV. There is nothing changed.
    
    Add a module parameter to disable the discovery feature. If a BIOS gets
    the discovery tables wrong, users can have an option to disable the
    feature. For the current patchset, the uncore driver will exit with
    -ENODEV. In the future, it may fall back to the hardcode uncore driver
    on a known platform.
    Signed-off-by: default avatarKan Liang <kan.liang@linux.intel.com>
    Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
    Link: https://lkml.kernel.org/r/1616003977-90612-2-git-send-email-kan.liang@linux.intel.com
    edae1f06
uncore_discovery.c 7.42 KB