@@ -60,11 +60,16 @@ static ssize_t show_attr(struct uncore_data *data, char *buf, enum uncore_index
6060static ssize_t store_attr (struct uncore_data * data , const char * buf , ssize_t count ,
6161 enum uncore_index index )
6262{
63- unsigned int input ;
63+ unsigned int input = 0 ;
6464 int ret ;
6565
66- if (kstrtouint (buf , 10 , & input ))
67- return - EINVAL ;
66+ if (index == UNCORE_INDEX_EFF_LAT_CTRL_HIGH_THRESHOLD_ENABLE ) {
67+ if (kstrtobool (buf , (bool * )& input ))
68+ return - EINVAL ;
69+ } else {
70+ if (kstrtouint (buf , 10 , & input ))
71+ return - EINVAL ;
72+ }
6873
6974 mutex_lock (& uncore_lock );
7075 ret = uncore_write (data , input , index );
@@ -103,6 +108,18 @@ show_uncore_attr(max_freq_khz, UNCORE_INDEX_MAX_FREQ);
103108
104109show_uncore_attr (current_freq_khz , UNCORE_INDEX_CURRENT_FREQ );
105110
111+ store_uncore_attr (elc_low_threshold_percent , UNCORE_INDEX_EFF_LAT_CTRL_LOW_THRESHOLD );
112+ store_uncore_attr (elc_high_threshold_percent , UNCORE_INDEX_EFF_LAT_CTRL_HIGH_THRESHOLD );
113+ store_uncore_attr (elc_high_threshold_enable ,
114+ UNCORE_INDEX_EFF_LAT_CTRL_HIGH_THRESHOLD_ENABLE );
115+ store_uncore_attr (elc_floor_freq_khz , UNCORE_INDEX_EFF_LAT_CTRL_FREQ );
116+
117+ show_uncore_attr (elc_low_threshold_percent , UNCORE_INDEX_EFF_LAT_CTRL_LOW_THRESHOLD );
118+ show_uncore_attr (elc_high_threshold_percent , UNCORE_INDEX_EFF_LAT_CTRL_HIGH_THRESHOLD );
119+ show_uncore_attr (elc_high_threshold_enable ,
120+ UNCORE_INDEX_EFF_LAT_CTRL_HIGH_THRESHOLD_ENABLE );
121+ show_uncore_attr (elc_floor_freq_khz , UNCORE_INDEX_EFF_LAT_CTRL_FREQ );
122+
106123#define show_uncore_data (member_name ) \
107124 static ssize_t show_##member_name(struct kobject *kobj, \
108125 struct kobj_attribute *attr, char *buf)\
@@ -146,7 +163,8 @@ show_uncore_data(initial_max_freq_khz);
146163
147164static int create_attr_group (struct uncore_data * data , char * name )
148165{
149- int ret , freq , index = 0 ;
166+ int ret , index = 0 ;
167+ unsigned int val ;
150168
151169 init_attribute_rw (max_freq_khz );
152170 init_attribute_rw (min_freq_khz );
@@ -168,10 +186,24 @@ static int create_attr_group(struct uncore_data *data, char *name)
168186 data -> uncore_attrs [index ++ ] = & data -> initial_min_freq_khz_kobj_attr .attr ;
169187 data -> uncore_attrs [index ++ ] = & data -> initial_max_freq_khz_kobj_attr .attr ;
170188
171- ret = uncore_read (data , & freq , UNCORE_INDEX_CURRENT_FREQ );
189+ ret = uncore_read (data , & val , UNCORE_INDEX_CURRENT_FREQ );
172190 if (!ret )
173191 data -> uncore_attrs [index ++ ] = & data -> current_freq_khz_kobj_attr .attr ;
174192
193+ ret = uncore_read (data , & val , UNCORE_INDEX_EFF_LAT_CTRL_LOW_THRESHOLD );
194+ if (!ret ) {
195+ init_attribute_rw (elc_low_threshold_percent );
196+ init_attribute_rw (elc_high_threshold_percent );
197+ init_attribute_rw (elc_high_threshold_enable );
198+ init_attribute_rw (elc_floor_freq_khz );
199+
200+ data -> uncore_attrs [index ++ ] = & data -> elc_low_threshold_percent_kobj_attr .attr ;
201+ data -> uncore_attrs [index ++ ] = & data -> elc_high_threshold_percent_kobj_attr .attr ;
202+ data -> uncore_attrs [index ++ ] =
203+ & data -> elc_high_threshold_enable_kobj_attr .attr ;
204+ data -> uncore_attrs [index ++ ] = & data -> elc_floor_freq_khz_kobj_attr .attr ;
205+ }
206+
175207 data -> uncore_attrs [index ] = NULL ;
176208
177209 data -> uncore_attr_group .name = name ;
0 commit comments