@@ -808,10 +808,119 @@ static ssize_t show_freqdomain_cpus(struct cpufreq_policy *policy, char *buf)
808808
809809 return cpufreq_show_cpus (cpu_data -> shared_cpu_map , buf );
810810}
811+
812+ static ssize_t show_auto_select (struct cpufreq_policy * policy , char * buf )
813+ {
814+ bool val ;
815+ int ret ;
816+
817+ ret = cppc_get_auto_sel (policy -> cpu , & val );
818+
819+ /* show "<unsupported>" when this register is not supported by cpc */
820+ if (ret == - EOPNOTSUPP )
821+ return sysfs_emit (buf , "<unsupported>\n" );
822+
823+ if (ret )
824+ return ret ;
825+
826+ return sysfs_emit (buf , "%d\n" , val );
827+ }
828+
829+ static ssize_t store_auto_select (struct cpufreq_policy * policy ,
830+ const char * buf , size_t count )
831+ {
832+ bool val ;
833+ int ret ;
834+
835+ ret = kstrtobool (buf , & val );
836+ if (ret )
837+ return ret ;
838+
839+ ret = cppc_set_auto_sel (policy -> cpu , val );
840+ if (ret )
841+ return ret ;
842+
843+ return count ;
844+ }
845+
846+ static ssize_t show_auto_act_window (struct cpufreq_policy * policy , char * buf )
847+ {
848+ u64 val ;
849+ int ret ;
850+
851+ ret = cppc_get_auto_act_window (policy -> cpu , & val );
852+
853+ /* show "<unsupported>" when this register is not supported by cpc */
854+ if (ret == - EOPNOTSUPP )
855+ return sysfs_emit (buf , "<unsupported>\n" );
856+
857+ if (ret )
858+ return ret ;
859+
860+ return sysfs_emit (buf , "%llu\n" , val );
861+ }
862+
863+ static ssize_t store_auto_act_window (struct cpufreq_policy * policy ,
864+ const char * buf , size_t count )
865+ {
866+ u64 usec ;
867+ int ret ;
868+
869+ ret = kstrtou64 (buf , 0 , & usec );
870+ if (ret )
871+ return ret ;
872+
873+ ret = cppc_set_auto_act_window (policy -> cpu , usec );
874+ if (ret )
875+ return ret ;
876+
877+ return count ;
878+ }
879+
880+ static ssize_t show_energy_performance_preference_val (struct cpufreq_policy * policy , char * buf )
881+ {
882+ u64 val ;
883+ int ret ;
884+
885+ ret = cppc_get_epp_perf (policy -> cpu , & val );
886+
887+ /* show "<unsupported>" when this register is not supported by cpc */
888+ if (ret == - EOPNOTSUPP )
889+ return sysfs_emit (buf , "<unsupported>\n" );
890+
891+ if (ret )
892+ return ret ;
893+
894+ return sysfs_emit (buf , "%llu\n" , val );
895+ }
896+
897+ static ssize_t store_energy_performance_preference_val (struct cpufreq_policy * policy ,
898+ const char * buf , size_t count )
899+ {
900+ u64 val ;
901+ int ret ;
902+
903+ ret = kstrtou64 (buf , 0 , & val );
904+ if (ret )
905+ return ret ;
906+
907+ ret = cppc_set_epp (policy -> cpu , val );
908+ if (ret )
909+ return ret ;
910+
911+ return count ;
912+ }
913+
811914cpufreq_freq_attr_ro (freqdomain_cpus );
915+ cpufreq_freq_attr_rw (auto_select );
916+ cpufreq_freq_attr_rw (auto_act_window );
917+ cpufreq_freq_attr_rw (energy_performance_preference_val );
812918
813919static struct freq_attr * cppc_cpufreq_attr [] = {
814920 & freqdomain_cpus ,
921+ & auto_select ,
922+ & auto_act_window ,
923+ & energy_performance_preference_val ,
815924 NULL ,
816925};
817926
0 commit comments