Linux Audio

Check our new training course

Loading...
 1/* SPDX-License-Identifier: GPL-2.0 */
 2/*
 3 * Intel Uncore Frequency Control: Common defines and prototypes
 4 * Copyright (c) 2022, Intel Corporation.
 5 * All rights reserved.
 6 *
 7 */
 8
 9#ifndef __INTEL_UNCORE_FREQ_COMMON_H
10#define __INTEL_UNCORE_FREQ_COMMON_H
11
12#include <linux/device.h>
13
14/**
15 * struct uncore_data - Encapsulate all uncore data
16 * @stored_uncore_data: Last user changed MSR 620 value, which will be restored
17 *			on system resume.
18 * @initial_min_freq_khz: Sampled minimum uncore frequency at driver init
19 * @initial_max_freq_khz: Sampled maximum uncore frequency at driver init
20 * @control_cpu:	Designated CPU for a die to read/write
21 * @valid:		Mark the data valid/invalid
22 * @package_id:	Package id for this instance
23 * @die_id:		Die id for this instance
24 * @domain_id:		Power domain id for this instance
25 * @cluster_id:		cluster id in a domain
26 * @instance_id:	Unique instance id to append to directory name
27 * @name:		Sysfs entry name for this instance
28 * @uncore_attr_group:	Attribute group storage
29 * @max_freq_khz_kobj_attr: Storage for kobject attribute max_freq_khz
30 * @mix_freq_khz_kobj_attr: Storage for kobject attribute min_freq_khz
31 * @initial_max_freq_khz_kobj_attr: Storage for kobject attribute initial_max_freq_khz
32 * @initial_min_freq_khz_kobj_attr: Storage for kobject attribute initial_min_freq_khz
33 * @current_freq_khz_kobj_attr: Storage for kobject attribute current_freq_khz
34 * @domain_id_kobj_attr: Storage for kobject attribute domain_id
35 * @fabric_cluster_id_kobj_attr: Storage for kobject attribute fabric_cluster_id
36 * @package_id_kobj_attr: Storage for kobject attribute package_id
37 * @uncore_attrs:	Attribute storage for group creation
38 *
39 * This structure is used to encapsulate all data related to uncore sysfs
40 * settings for a die/package.
41 */
42struct uncore_data {
43	u64 stored_uncore_data;
44	u32 initial_min_freq_khz;
45	u32 initial_max_freq_khz;
46	int control_cpu;
47	bool valid;
48	int package_id;
49	int die_id;
50	int domain_id;
51	int cluster_id;
52	int instance_id;
53	char name[32];
54
55	struct attribute_group uncore_attr_group;
56	struct kobj_attribute max_freq_khz_kobj_attr;
57	struct kobj_attribute min_freq_khz_kobj_attr;
58	struct kobj_attribute initial_max_freq_khz_kobj_attr;
59	struct kobj_attribute initial_min_freq_khz_kobj_attr;
60	struct kobj_attribute current_freq_khz_kobj_attr;
61	struct kobj_attribute domain_id_kobj_attr;
62	struct kobj_attribute fabric_cluster_id_kobj_attr;
63	struct kobj_attribute package_id_kobj_attr;
64	struct attribute *uncore_attrs[9];
65};
66
67#define UNCORE_DOMAIN_ID_INVALID	-1
68
69int uncore_freq_common_init(int (*read_control_freq)(struct uncore_data *data, unsigned int *min, unsigned int *max),
70			     int (*write_control_freq)(struct uncore_data *data, unsigned int input, unsigned int min_max),
71			     int (*uncore_read_freq)(struct uncore_data *data, unsigned int *freq));
72void uncore_freq_common_exit(void);
73int uncore_freq_add_entry(struct uncore_data *data, int cpu);
74void uncore_freq_remove_die_entry(struct uncore_data *data);
75
76#endif