• Srinivas Pandruvada's avatar
    platform/x86/intel: Intel TPMI enumeration driver · 47731fd2
    Srinivas Pandruvada authored
    The TPMI (Topology Aware Register and PM Capsule Interface) provides a
    flexible, extendable and PCIe enumerable MMIO interface for PM features.
    
    For example Intel RAPL (Running Average Power Limit) provides a MMIO
    interface using TPMI. This has advantage over traditional MSR
    (Model Specific Register) interface, where a thread needs to be scheduled
    on the target CPU to read or write. Also the RAPL features vary between
    CPU models, and hence lot of model specific code. Here TPMI provides an
    architectural interface by providing hierarchical tables and fields,
    which will not need any model specific implementation.
    
    The TPMI interface uses a PCI VSEC structure to expose the location of
    MMIO region.
    
    This VSEC structure is present in the PCI configuration space of the
    Intel Out-of-Band (OOB) device, which  is handled by the Intel VSEC
    driver. The Intel VSEC driver parses VSEC structures present in the PCI
    configuration space of the given device and creates an auxiliary device
    object for each of them. In particular, it creates an auxiliary device
    object representing TPMI that can be bound by an auxiliary driver.
    
    Introduce a TPMI driver that will bind to the TPMI auxiliary device
    object created by the Intel VSEC driver.
    
    The TPMI specification defines a PFS (PM Feature Structure) table.
    This table is present in the TPMI MMIO region. The starting address
    of PFS is derived from the tBIR (Bar Indicator Register) and "Address"
    field from the VSEC header.
    
    Each TPMI PM feature has one entry in the PFS with a unique TPMI
    ID and its access details. The TPMI driver creates device nodes
    for the supported PM features.
    
    The names of the devices created by the TPMI driver start with the
    "intel_vsec.tpmi-" prefix which is followed by a specific name of the
    given PM feature (for example, "intel_vsec.tpmi-rapl.0").
    
    The device nodes are create by using interface "intel_vsec_add_aux()"
    provided by the Intel VSEC driver.
    Signed-off-by: default avatarSrinivas Pandruvada <srinivas.pandruvada@linux.intel.com>
    Reviewed-by: default avatarPierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Acked-by: default avatarRafael J. Wysocki <rafael.j.wysocki@intel.com>
    Link: https://lore.kernel.org/r/20230202010738.2186174-5-srinivas.pandruvada@linux.intel.comReviewed-by: default avatarHans de Goede <hdegoede@redhat.com>
    Signed-off-by: default avatarHans de Goede <hdegoede@redhat.com>
    47731fd2
Kconfig 8.02 KB