1from devlib.module import Module 2 3 4class 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