enum cpufreq_string {
        SCALING_DRIVER,
        SCALING_GOVERNOR,
+       ENERGY_PERFORMANCE_PREFERENCE,
        MAX_CPUFREQ_STRING_FILES
 };
 
 static const char *cpufreq_string_files[MAX_CPUFREQ_STRING_FILES] = {
        [SCALING_DRIVER] = "scaling_driver",
        [SCALING_GOVERNOR] = "scaling_governor",
+       [ENERGY_PERFORMANCE_PREFERENCE] = "energy_performance_preference",
 };
 
 
        return sysfs_cpufreq_get_one_value(cpu, CPUINFO_LATENCY);
 }
 
+char *cpufreq_get_energy_performance_preference(unsigned int cpu)
+{
+       return sysfs_cpufreq_get_one_string(cpu, ENERGY_PERFORMANCE_PREFERENCE);
+}
+
+void cpufreq_put_energy_performance_preference(char *ptr)
+{
+       if (!ptr)
+               return;
+       free(ptr);
+}
+
 int cpufreq_get_hardware_limits(unsigned int cpu,
                                unsigned long *min,
                                unsigned long *max)
 
 unsigned long cpufreq_get_transition_latency(unsigned int cpu);
 
 
+/* determine energy performance preference
+ *
+ * returns NULL on failure, else the string that represents the energy performance
+ * preference requested.
+ */
+char *cpufreq_get_energy_performance_preference(unsigned int cpu);
+void cpufreq_put_energy_performance_preference(char *ptr);
+
 /* determine hardware CPU frequency limits
  *
  * These may be limited further by thermal, energy or other
 
        return 0;
 }
 
+/* --epp / -z */
+
+static int get_epp(unsigned int cpu, bool interactive)
+{
+       char *epp;
+
+       epp = cpufreq_get_energy_performance_preference(cpu);
+       if (!epp)
+               return -EINVAL;
+       if (interactive)
+               printf(_("  energy performance preference: %s\n"), epp);
+
+       cpufreq_put_energy_performance_preference(epp);
+
+       return 0;
+}
+
 /* --latency / -y */
 
 static int get_latency(unsigned int cpu, unsigned int human)
        get_related_cpus(cpu);
        get_affected_cpus(cpu);
        get_latency(cpu, 1);
+       get_epp(cpu, true);
        get_hardware_limits(cpu, 1);
 
        freqs = cpufreq_get_available_frequencies(cpu);
        {"human",        no_argument,            NULL,   'm'},
        {"no-rounding", no_argument,     NULL,   'n'},
        {"performance", no_argument,     NULL,   'c'},
+       {"epp",          no_argument,            NULL,   'z'},
        { },
 };
 
        int output_param = 0;
 
        do {
-               ret = getopt_long(argc, argv, "oefwldpgrasmybnc", info_opts,
+               ret = getopt_long(argc, argv, "oefwldpgrasmybncz", info_opts,
                                  NULL);
                switch (ret) {
                case '?':
                case 's':
                case 'y':
                case 'c':
+               case 'z':
                        if (output_param) {
                                output_param = -1;
                                cont = 0;
                case 'c':
                        ret = get_perf_cap(cpu);
                        break;
+               case 'z':
+                       ret = get_epp(cpu, true);
+                       break;
                }
                if (ret)
                        return ret;