1762ed313SSrinivas Pandruvada /* SPDX-License-Identifier: GPL-2.0-only */ 2762ed313SSrinivas Pandruvada /* 3762ed313SSrinivas Pandruvada * intel_tpmi.h: Intel TPMI core external interface 4762ed313SSrinivas Pandruvada */ 5762ed313SSrinivas Pandruvada 6762ed313SSrinivas Pandruvada #ifndef _INTEL_TPMI_H_ 7762ed313SSrinivas Pandruvada #define _INTEL_TPMI_H_ 8762ed313SSrinivas Pandruvada 98874e414SSrinivas Pandruvada #include <linux/bitfield.h> 108874e414SSrinivas Pandruvada 118874e414SSrinivas Pandruvada #define TPMI_VERSION_INVALID 0xff 128874e414SSrinivas Pandruvada #define TPMI_MINOR_VERSION(val) FIELD_GET(GENMASK(4, 0), val) 138874e414SSrinivas Pandruvada #define TPMI_MAJOR_VERSION(val) FIELD_GET(GENMASK(7, 5), val) 148874e414SSrinivas Pandruvada 15046d7be6SSrinivas Pandruvada /* 16046d7be6SSrinivas Pandruvada * List of supported TMPI IDs. 17046d7be6SSrinivas Pandruvada * Some TMPI IDs are not used by Linux, so the numbers are not consecutive. 18046d7be6SSrinivas Pandruvada */ 19046d7be6SSrinivas Pandruvada enum intel_tpmi_id { 20046d7be6SSrinivas Pandruvada TPMI_ID_RAPL = 0, /* Running Average Power Limit */ 21046d7be6SSrinivas Pandruvada TPMI_ID_PEM = 1, /* Power and Perf excursion Monitor */ 22046d7be6SSrinivas Pandruvada TPMI_ID_UNCORE = 2, /* Uncore Frequency Scaling */ 23046d7be6SSrinivas Pandruvada TPMI_ID_SST = 5, /* Speed Select Technology */ 24b44d79d6STero Kristo TPMI_ID_PLR = 0xc, /* Performance Limit Reasons */ 25046d7be6SSrinivas Pandruvada TPMI_CONTROL_ID = 0x80, /* Special ID for getting feature status */ 26046d7be6SSrinivas Pandruvada TPMI_INFO_ID = 0x81, /* Special ID for PCI BDF and Package ID information */ 27046d7be6SSrinivas Pandruvada }; 28046d7be6SSrinivas Pandruvada 29762ed313SSrinivas Pandruvada /** 30762ed313SSrinivas Pandruvada * struct intel_tpmi_plat_info - Platform information for a TPMI device instance 31c8405cc8SSrinivas Pandruvada * @cdie_mask: Mask of all compute dies in the partition 32762ed313SSrinivas Pandruvada * @package_id: CPU Package id 33c8405cc8SSrinivas Pandruvada * @partition: Package partition id when multiple VSEC PCI devices per package 34c8405cc8SSrinivas Pandruvada * @segment: PCI segment ID 35762ed313SSrinivas Pandruvada * @bus_number: PCI bus number 36762ed313SSrinivas Pandruvada * @device_number: PCI device number 37762ed313SSrinivas Pandruvada * @function_number: PCI function number 38762ed313SSrinivas Pandruvada * 39762ed313SSrinivas Pandruvada * Structure to store platform data for a TPMI device instance. This 40762ed313SSrinivas Pandruvada * struct is used to return data via tpmi_get_platform_data(). 41762ed313SSrinivas Pandruvada */ 42762ed313SSrinivas Pandruvada struct intel_tpmi_plat_info { 43c8405cc8SSrinivas Pandruvada u16 cdie_mask; 44762ed313SSrinivas Pandruvada u8 package_id; 45c8405cc8SSrinivas Pandruvada u8 partition; 46c8405cc8SSrinivas Pandruvada u8 segment; 47762ed313SSrinivas Pandruvada u8 bus_number; 48762ed313SSrinivas Pandruvada u8 device_number; 49762ed313SSrinivas Pandruvada u8 function_number; 50762ed313SSrinivas Pandruvada }; 51762ed313SSrinivas Pandruvada 52762ed313SSrinivas Pandruvada struct intel_tpmi_plat_info *tpmi_get_platform_data(struct auxiliary_device *auxdev); 536d957f1eSSrinivas Pandruvada struct resource *tpmi_get_resource_at_index(struct auxiliary_device *auxdev, int index); 546d957f1eSSrinivas Pandruvada int tpmi_get_resource_count(struct auxiliary_device *auxdev); 5572dd14d2SSrinivas Pandruvada int tpmi_get_feature_status(struct auxiliary_device *auxdev, int feature_id, bool *read_blocked, 5672dd14d2SSrinivas Pandruvada bool *write_blocked); 57*d36842baSTero Kristo struct dentry *tpmi_get_debugfs_dir(struct auxiliary_device *auxdev); 58762ed313SSrinivas Pandruvada #endif 59