Home | History | Annotate | Download | only in module
      1 from devlib.module import Module
      2 
      3 
      4 class BigLittleModule(Module):
      5 
      6     name = 'bl'
      7 
      8     @staticmethod
      9     def probe(target):
     10         return target.big_core is not None
     11 
     12     @property
     13     def bigs(self):
     14         return [i for i, c in enumerate(self.target.platform.core_names)
     15                 if c == self.target.platform.big_core]
     16 
     17     @property
     18     def littles(self):
     19         return [i for i, c in enumerate(self.target.platform.core_names)
     20                 if c == self.target.platform.little_core]
     21 
     22     @property
     23     def bigs_online(self):
     24         return list(sorted(set(self.bigs).intersection(self.target.list_online_cpus())))
     25 
     26     @property
     27     def littles_online(self):
     28         return list(sorted(set(self.littles).intersection(self.target.list_online_cpus())))
     29 
     30     # hotplug
     31 
     32     def online_all_bigs(self):
     33         self.target.hotplug.online(*self.bigs)
     34 
     35     def offline_all_bigs(self):
     36         self.target.hotplug.offline(*self.bigs)
     37 
     38     def online_all_littles(self):
     39         self.target.hotplug.online(*self.littles)
     40 
     41     def offline_all_littles(self):
     42         self.target.hotplug.offline(*self.littles)
     43 
     44     # cpufreq
     45 
     46     def list_bigs_frequencies(self):
     47         bigs_online = self.bigs_online
     48         if len(bigs_online) > 0:
     49             return self.target.cpufreq.list_frequencies(bigs_online[0])
     50 
     51     def list_bigs_governors(self):
     52         bigs_online = self.bigs_online
     53         if len(bigs_online) > 0:
     54             return self.target.cpufreq.list_governors(bigs_online[0])
     55 
     56     def list_bigs_governor_tunables(self):
     57         bigs_online = self.bigs_online
     58         if len(bigs_online) > 0:
     59             return self.target.cpufreq.list_governor_tunables(bigs_online[0])
     60 
     61     def list_littles_frequencies(self):
     62         littles_online = self.littles_online
     63         if len(littles_online) > 0:
     64             return self.target.cpufreq.list_frequencies(littles_online[0])
     65 
     66     def list_littles_governors(self):
     67         littles_online = self.littles_online
     68         if len(littles_online) > 0:
     69             return self.target.cpufreq.list_governors(littles_online[0])
     70 
     71     def list_littles_governor_tunables(self):
     72         littles_online = self.littles_online
     73         if len(littles_online) > 0:
     74             return self.target.cpufreq.list_governor_tunables(littles_online[0])
     75 
     76     def get_bigs_governor(self):
     77         bigs_online = self.bigs_online
     78         if len(bigs_online) > 0:
     79             return self.target.cpufreq.get_governor(bigs_online[0])
     80 
     81     def get_bigs_governor_tunables(self):
     82         bigs_online = self.bigs_online
     83         if len(bigs_online) > 0:
     84             return self.target.cpufreq.get_governor_tunables(bigs_online[0])
     85 
     86     def get_bigs_frequency(self):
     87         bigs_online = self.bigs_online
     88         if len(bigs_online) > 0:
     89             return self.target.cpufreq.get_frequency(bigs_online[0])
     90 
     91     def get_bigs_min_frequency(self):
     92         bigs_online = self.bigs_online
     93         if len(bigs_online) > 0:
     94             return self.target.cpufreq.get_min_frequency(bigs_online[0])
     95 
     96     def get_bigs_max_frequency(self):
     97         bigs_online = self.bigs_online
     98         if len(bigs_online) > 0:
     99             return self.target.cpufreq.get_max_frequency(bigs_online[0])
    100 
    101     def get_littles_governor(self):
    102         littles_online = self.littles_online
    103         if len(littles_online) > 0:
    104             return self.target.cpufreq.get_governor(littles_online[0])
    105 
    106     def get_littles_governor_tunables(self):
    107         littles_online = self.littles_online
    108         if len(littles_online) > 0:
    109             return self.target.cpufreq.get_governor_tunables(littles_online[0])
    110 
    111     def get_littles_frequency(self):
    112         littles_online = self.littles_online
    113         if len(littles_online) > 0:
    114             return self.target.cpufreq.get_frequency(littles_online[0])
    115 
    116     def get_littles_min_frequency(self):
    117         littles_online = self.littles_online
    118         if len(littles_online) > 0:
    119             return self.target.cpufreq.get_min_frequency(littles_online[0])
    120 
    121     def get_littles_max_frequency(self):
    122         littles_online = self.littles_online
    123         if len(littles_online) > 0:
    124             return self.target.cpufreq.get_max_frequency(littles_online[0])
    125 
    126     def set_bigs_governor(self, governor, **kwargs):
    127         bigs_online = self.bigs_online
    128         if len(bigs_online) > 0:
    129             self.target.cpufreq.set_governor(bigs_online[0], governor, **kwargs)
    130         else:
    131             raise ValueError("All bigs appear to be offline")
    132 
    133     def set_bigs_governor_tunables(self, governor, **kwargs):
    134         bigs_online = self.bigs_online
    135         if len(bigs_online) > 0:
    136             self.target.cpufreq.set_governor_tunables(bigs_online[0], governor, **kwargs)
    137         else:
    138             raise ValueError("All bigs appear to be offline")
    139 
    140     def set_bigs_frequency(self, frequency, exact=True):
    141         bigs_online = self.bigs_online
    142         if len(bigs_online) > 0:
    143             self.target.cpufreq.set_frequency(bigs_online[0], frequency, exact)
    144         else:
    145             raise ValueError("All bigs appear to be offline")
    146 
    147     def set_bigs_min_frequency(self, frequency, exact=True):
    148         bigs_online = self.bigs_online
    149         if len(bigs_online) > 0:
    150             self.target.cpufreq.set_min_frequency(bigs_online[0], frequency, exact)
    151         else:
    152             raise ValueError("All bigs appear to be offline")
    153 
    154     def set_bigs_max_frequency(self, frequency, exact=True):
    155         bigs_online = self.bigs_online
    156         if len(bigs_online) > 0:
    157             self.target.cpufreq.set_max_frequency(bigs_online[0], frequency, exact)
    158         else:
    159             raise ValueError("All bigs appear to be offline")
    160 
    161     def set_littles_governor(self, governor, **kwargs):
    162         littles_online = self.littles_online
    163         if len(littles_online) > 0:
    164             self.target.cpufreq.set_governor(littles_online[0], governor, **kwargs)
    165         else:
    166             raise ValueError("All littles appear to be offline")
    167 
    168     def set_littles_governor_tunables(self, governor, **kwargs):
    169         littles_online = self.littles_online
    170         if len(littles_online) > 0:
    171             self.target.cpufreq.set_governor_tunables(littles_online[0], governor, **kwargs)
    172         else:
    173             raise ValueError("All littles appear to be offline")
    174 
    175     def set_littles_frequency(self, frequency, exact=True):
    176         littles_online = self.littles_online
    177         if len(littles_online) > 0:
    178             self.target.cpufreq.set_frequency(littles_online[0], frequency, exact)
    179         else:
    180             raise ValueError("All littles appear to be offline")
    181 
    182     def set_littles_min_frequency(self, frequency, exact=True):
    183         littles_online = self.littles_online
    184         if len(littles_online) > 0:
    185             self.target.cpufreq.set_min_frequency(littles_online[0], frequency, exact)
    186         else:
    187             raise ValueError("All littles appear to be offline")
    188 
    189     def set_littles_max_frequency(self, frequency, exact=True):
    190         littles_online = self.littles_online
    191         if len(littles_online) > 0:
    192             self.target.cpufreq.set_max_frequency(littles_online[0], frequency, exact)
    193         else:
    194             raise ValueError("All littles appear to be offline")
    195