Lines Matching refs:rp
176 struct rapl_package *rp; member
205 int (*check_unit)(struct rapl_package *rp, int cpu);
207 u64 (*compute_time_window)(struct rapl_package *rp, u64 val,
241 static void rapl_init_domains(struct rapl_package *rp);
251 static void package_power_limit_irq_save(struct rapl_package *rp);
269 struct rapl_package *rp; in find_package_by_id() local
271 list_for_each_entry(rp, &rapl_packages, plist) { in find_package_by_id()
272 if (rp->id == id) in find_package_by_id()
273 return rp; in find_package_by_id()
312 struct rapl_package *rp = rd->rp; in release_zone() local
319 rp->domains = NULL; in release_zone()
443 struct rapl_package *rp; in set_power_limit() local
455 rp = rd->rp; in set_power_limit()
475 package_power_limit_irq_save(rp); in set_power_limit()
641 static void rapl_init_domains(struct rapl_package *rp) in rapl_init_domains() argument
644 struct rapl_domain *rd = rp->domains; in rapl_init_domains()
647 unsigned int mask = rp->domain_map & (1 << i); in rapl_init_domains()
702 rd->rp = rp; in rapl_init_domains()
712 struct rapl_package *rp = rd->rp; in rapl_unit_xlate() local
717 units = rp->power_unit; in rapl_unit_xlate()
725 units = rp->energy_unit; in rapl_unit_xlate()
728 return rapl_defaults->compute_time_window(rp, value, to_raw); in rapl_unit_xlate()
802 struct rapl_primitive_info *rp = &rpi[prim]; in rapl_read_data_raw() local
805 if (!rp->name || rp->flag & RAPL_PRIMITIVE_DUMMY) in rapl_read_data_raw()
808 msr = rd->msrs[rp->id]; in rapl_read_data_raw()
812 cpu = rd->rp->lead_cpu; in rapl_read_data_raw()
816 rp->mask = POWER_PACKAGE_LOCK; in rapl_read_data_raw()
817 rp->shift = 63; in rapl_read_data_raw()
820 if (rp->flag & RAPL_PRIMITIVE_DERIVED) { in rapl_read_data_raw()
830 final = value & rp->mask; in rapl_read_data_raw()
831 final = final >> rp->shift; in rapl_read_data_raw()
833 *data = rapl_unit_xlate(rd, rp->unit, final, 0); in rapl_read_data_raw()
871 struct rapl_primitive_info *rp = &rpi[prim]; in rapl_write_data_raw() local
877 cpu = rd->rp->lead_cpu; in rapl_write_data_raw()
878 bits = rapl_unit_xlate(rd, rp->unit, value, 1); in rapl_write_data_raw()
879 bits <<= rp->shift; in rapl_write_data_raw()
880 bits &= rp->mask; in rapl_write_data_raw()
884 ma.msr_no = rd->msrs[rp->id]; in rapl_write_data_raw()
885 ma.clear_mask = rp->mask; in rapl_write_data_raw()
908 static int rapl_check_unit_core(struct rapl_package *rp, int cpu) in rapl_check_unit_core() argument
920 rp->energy_unit = ENERGY_UNIT_SCALE * 1000000 / (1 << value); in rapl_check_unit_core()
923 rp->power_unit = 1000000 / (1 << value); in rapl_check_unit_core()
926 rp->time_unit = 1000000 / (1 << value); in rapl_check_unit_core()
929 rp->id, rp->energy_unit, rp->time_unit, rp->power_unit); in rapl_check_unit_core()
934 static int rapl_check_unit_atom(struct rapl_package *rp, int cpu) in rapl_check_unit_atom() argument
945 rp->energy_unit = ENERGY_UNIT_SCALE * 1 << value; in rapl_check_unit_atom()
948 rp->power_unit = (1 << value) * 1000; in rapl_check_unit_atom()
951 rp->time_unit = 1000000 / (1 << value); in rapl_check_unit_atom()
954 rp->id, rp->energy_unit, rp->time_unit, rp->power_unit); in rapl_check_unit_atom()
962 struct rapl_package *rp = (struct rapl_package *)info; in power_limit_irq_save_cpu() local
966 if (!(rp->power_limit_irq & PACKAGE_PLN_INT_SAVED)) { in power_limit_irq_save_cpu()
967 rp->power_limit_irq = l & PACKAGE_THERM_INT_PLN_ENABLE; in power_limit_irq_save_cpu()
968 rp->power_limit_irq |= PACKAGE_PLN_INT_SAVED; in power_limit_irq_save_cpu()
985 static void package_power_limit_irq_save(struct rapl_package *rp) in package_power_limit_irq_save() argument
990 smp_call_function_single(rp->lead_cpu, power_limit_irq_save_cpu, rp, 1); in package_power_limit_irq_save()
997 static void package_power_limit_irq_restore(struct rapl_package *rp) in package_power_limit_irq_restore() argument
1005 if (!(rp->power_limit_irq & PACKAGE_PLN_INT_SAVED)) in package_power_limit_irq_restore()
1010 if (rp->power_limit_irq & PACKAGE_THERM_INT_PLN_ENABLE) in package_power_limit_irq_restore()
1057 static u64 rapl_compute_time_window_core(struct rapl_package *rp, u64 value, in rapl_compute_time_window_core() argument
1069 value = (1 << y) * (4 + f) * rp->time_unit / 4; in rapl_compute_time_window_core()
1071 do_div(value, rp->time_unit); in rapl_compute_time_window_core()
1079 static u64 rapl_compute_time_window_atom(struct rapl_package *rp, u64 value, in rapl_compute_time_window_atom() argument
1087 return (value) ? value *= rp->time_unit : rp->time_unit; in rapl_compute_time_window_atom()
1089 value = div64_u64(value, rp->time_unit); in rapl_compute_time_window_atom()
1182 static void rapl_update_domain_data(struct rapl_package *rp) in rapl_update_domain_data() argument
1187 for (dmn = 0; dmn < rp->nr_domains; dmn++) { in rapl_update_domain_data()
1188 pr_debug("update package %d domain %s data\n", rp->id, in rapl_update_domain_data()
1189 rp->domains[dmn].name); in rapl_update_domain_data()
1192 if (!rapl_read_data_raw(&rp->domains[dmn], prim, in rapl_update_domain_data()
1194 rp->domains[dmn].rdd.primitives[prim] = val; in rapl_update_domain_data()
1210 static int rapl_package_register_powercap(struct rapl_package *rp) in rapl_package_register_powercap() argument
1218 rapl_update_domain_data(rp); in rapl_package_register_powercap()
1221 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_package_register_powercap()
1225 rp->id, rd->name); in rapl_package_register_powercap()
1228 rd->name, rp->id); in rapl_package_register_powercap()
1237 rp->id); in rapl_package_register_powercap()
1241 rp->power_zone = power_zone; in rapl_package_register_powercap()
1251 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_package_register_powercap()
1258 rp->power_zone, in rapl_package_register_powercap()
1264 rp->id, rd->name, dev_name); in rapl_package_register_powercap()
1276 while (--rd >= rp->domains) { in rapl_package_register_powercap()
1277 pr_debug("unregister package %d domain %s\n", rp->id, rd->name); in rapl_package_register_powercap()
1308 rd->rp = find_package_by_id(0); in rapl_register_psys()
1388 rd->rp->id, rd->name); in rapl_detect_powerlimit()
1403 static int rapl_detect_domains(struct rapl_package *rp, int cpu) in rapl_detect_domains() argument
1411 rp->domain_map |= 1 << i; in rapl_detect_domains()
1415 rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX); in rapl_detect_domains()
1416 if (!rp->nr_domains) { in rapl_detect_domains()
1417 pr_debug("no valid rapl domains found in package %d\n", rp->id); in rapl_detect_domains()
1420 pr_debug("found %d domains on package %d\n", rp->nr_domains, rp->id); in rapl_detect_domains()
1422 rp->domains = kcalloc(rp->nr_domains + 1, sizeof(struct rapl_domain), in rapl_detect_domains()
1424 if (!rp->domains) in rapl_detect_domains()
1427 rapl_init_domains(rp); in rapl_detect_domains()
1429 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) in rapl_detect_domains()
1436 static void rapl_remove_package(struct rapl_package *rp) in rapl_remove_package() argument
1440 package_power_limit_irq_restore(rp); in rapl_remove_package()
1442 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) { in rapl_remove_package()
1454 rp->id, rd->name); in rapl_remove_package()
1459 list_del(&rp->plist); in rapl_remove_package()
1460 kfree(rp); in rapl_remove_package()
1466 struct rapl_package *rp; in rapl_add_package() local
1469 rp = kzalloc(sizeof(struct rapl_package), GFP_KERNEL); in rapl_add_package()
1470 if (!rp) in rapl_add_package()
1474 rp->id = pkgid; in rapl_add_package()
1475 rp->lead_cpu = cpu; in rapl_add_package()
1478 if (rapl_detect_domains(rp, cpu) || in rapl_add_package()
1479 rapl_defaults->check_unit(rp, cpu)) { in rapl_add_package()
1483 ret = rapl_package_register_powercap(rp); in rapl_add_package()
1485 INIT_LIST_HEAD(&rp->plist); in rapl_add_package()
1486 list_add(&rp->plist, &rapl_packages); in rapl_add_package()
1487 return rp; in rapl_add_package()
1491 kfree(rp->domains); in rapl_add_package()
1492 kfree(rp); in rapl_add_package()
1506 struct rapl_package *rp; in rapl_cpu_online() local
1508 rp = find_package_by_id(pkgid); in rapl_cpu_online()
1509 if (!rp) { in rapl_cpu_online()
1510 rp = rapl_add_package(cpu, pkgid); in rapl_cpu_online()
1511 if (IS_ERR(rp)) in rapl_cpu_online()
1512 return PTR_ERR(rp); in rapl_cpu_online()
1514 cpumask_set_cpu(cpu, &rp->cpumask); in rapl_cpu_online()
1521 struct rapl_package *rp; in rapl_cpu_down_prep() local
1524 rp = find_package_by_id(pkgid); in rapl_cpu_down_prep()
1525 if (!rp) in rapl_cpu_down_prep()
1528 cpumask_clear_cpu(cpu, &rp->cpumask); in rapl_cpu_down_prep()
1529 lead_cpu = cpumask_first(&rp->cpumask); in rapl_cpu_down_prep()
1531 rapl_remove_package(rp); in rapl_cpu_down_prep()
1532 else if (rp->lead_cpu == cpu) in rapl_cpu_down_prep()
1533 rp->lead_cpu = lead_cpu; in rapl_cpu_down_prep()
1541 struct rapl_package *rp; in power_limit_state_save() local
1546 list_for_each_entry(rp, &rapl_packages, plist) { in power_limit_state_save()
1547 if (!rp->power_zone) in power_limit_state_save()
1549 rd = power_zone_to_rapl_domain(rp->power_zone); in power_limit_state_save()
1577 struct rapl_package *rp; in power_limit_state_restore() local
1582 list_for_each_entry(rp, &rapl_packages, plist) { in power_limit_state_restore()
1583 if (!rp->power_zone) in power_limit_state_restore()
1585 rd = power_zone_to_rapl_domain(rp->power_zone); in power_limit_state_restore()