Lines Matching refs:rp
132 if (rd->rp->priv->type == RAPL_IF_TPMI) {
149 if (rd->rp->priv->limits[rd->id] & BIT(POWER_LIMIT2))
160 if (prim == PL_CLAMP && rd->rp->priv->type != RAPL_IF_TPMI)
174 if (prim == PL_CLAMP && rd->rp->priv->type != RAPL_IF_TPMI)
217 static struct rapl_defaults *get_defaults(struct rapl_package *rp)
219 return rp->priv->defaults;
250 static void rapl_init_domains(struct rapl_package *rp);
265 static void package_power_limit_irq_save(struct rapl_package *rp);
311 struct rapl_package *rp = rd->rp;
318 rp->domains = NULL;
340 struct rapl_defaults *defaults = get_defaults(rd->rp);
439 struct rapl_package *rp;
446 rp = rd->rp;
450 package_power_limit_irq_save(rp);
562 static int get_rid(struct rapl_package *rp)
564 return rp->lead_cpu >= 0 ? rp->lead_cpu : rp->id;
568 static void rapl_init_domains(struct rapl_package *rp)
572 struct rapl_domain *rd = rp->domains;
575 unsigned int mask = rp->domain_map & (1 << i);
581 rd->rp = rp;
583 if (i == RAPL_DOMAIN_PLATFORM && rp->id > 0) {
585 rp->lead_cpu >= 0 ? topology_physical_package_id(rp->lead_cpu) :
586 rp->id);
595 rp->priv->limits[i] |= BIT(POWER_LIMIT1);
598 if (rp->priv->limits[i] & BIT(t))
603 rd->regs[j] = rp->priv->regs[i][j];
613 struct rapl_defaults *defaults = get_defaults(rd->rp);
737 static struct rapl_primitive_info *get_rpi(struct rapl_package *rp, int prim)
739 struct rapl_primitive_info *rpi = rp->priv->rpi;
747 static int rapl_config(struct rapl_package *rp)
749 switch (rp->priv->type) {
753 rp->priv->defaults = (void *)defaults_msr;
754 rp->priv->rpi = (void *)rpi_msr;
757 rp->priv->defaults = (void *)&defaults_tpmi;
758 rp->priv->rpi = (void *)rpi_tpmi;
765 if (!rp->priv->defaults || !rp->priv->rpi)
774 struct rapl_defaults *defaults = get_defaults(rd->rp);
818 struct rapl_primitive_info *rpi = get_rpi(rd->rp, prim_fixed);
836 if (rd->rp->priv->read_raw(get_rid(rd->rp), &ra)) {
837 pr_debug("failed to read reg 0x%llx for %s:%s\n", ra.reg.val, rd->rp->name, rd->name);
857 struct rapl_primitive_info *rpi = get_rpi(rd->rp, prim_fixed);
875 ret = rd->rp->priv->write_raw(get_rid(rd->rp), &ra);
901 pr_debug("%s:%s:%s locked by BIOS\n", rd->rp->name, rd->name, pl_names[pl]);
925 if (rd->rp->priv->read_raw(get_rid(rd->rp), &ra)) {
927 ra.reg.val, rd->rp->name, rd->name);
941 rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit);
953 if (rd->rp->priv->read_raw(get_rid(rd->rp), &ra)) {
955 ra.reg.val, rd->rp->name, rd->name);
969 rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit);
977 struct rapl_package *rp = (struct rapl_package *)info;
981 if (!(rp->power_limit_irq & PACKAGE_PLN_INT_SAVED)) {
982 rp->power_limit_irq = l & PACKAGE_THERM_INT_PLN_ENABLE;
983 rp->power_limit_irq |= PACKAGE_PLN_INT_SAVED;
999 static void package_power_limit_irq_save(struct rapl_package *rp)
1001 if (rp->lead_cpu < 0)
1007 smp_call_function_single(rp->lead_cpu, power_limit_irq_save_cpu, rp, 1);
1014 static void package_power_limit_irq_restore(struct rapl_package *rp)
1018 if (rp->lead_cpu < 0)
1025 if (!(rp->power_limit_irq & PACKAGE_PLN_INT_SAVED))
1030 if (rp->power_limit_irq & PACKAGE_THERM_INT_PLN_ENABLE)
1056 struct rapl_defaults *defaults = get_defaults(rd->rp);
1140 if (rd->rp->priv->read_raw(get_rid(rd->rp), &ra)) {
1142 ra.reg.val, rd->rp->name, rd->name);
1156 rd->rp->name, rd->name, rd->energy_unit, rd->time_unit, rd->power_unit);
1289 static void rapl_update_domain_data(struct rapl_package *rp)
1294 for (dmn = 0; dmn < rp->nr_domains; dmn++) {
1295 pr_debug("update %s domain %s data\n", rp->name,
1296 rp->domains[dmn].name);
1299 struct rapl_primitive_info *rpi = get_rpi(rp, prim);
1301 if (!rapl_read_data_raw(&rp->domains[dmn], prim,
1303 rp->domains[dmn].rdd.primitives[prim] = val;
1309 static int rapl_package_register_powercap(struct rapl_package *rp)
1316 rapl_update_domain_data(rp);
1319 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) {
1322 pr_debug("register package domain %s\n", rp->name);
1324 rp->priv->control_type, rp->name,
1329 rp->name);
1333 rp->power_zone = power_zone;
1343 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) {
1344 struct powercap_zone *parent = rp->power_zone;
1353 rp->priv->control_type,
1360 rp->name, rd->name);
1372 while (--rd >= rp->domains) {
1373 pr_debug("unregister %s domain %s\n", rp->name, rd->name);
1374 powercap_unregister_zone(rp->priv->control_type,
1381 static int rapl_check_domain(int domain, struct rapl_package *rp)
1391 ra.reg = rp->priv->regs[domain][RAPL_DOMAIN_REG_STATUS];
1402 if (rp->priv->read_raw(get_rid(rp), &ra) || !ra.value)
1415 struct rapl_defaults *defaults = get_defaults(rd->rp);
1419 if (!rd->rp->priv->reg_unit.val) {
1423 rd->regs[RAPL_DOMAIN_REG_UNIT] = rd->rp->priv->reg_unit;
1461 rd->rp->name, rd->name, pl_names[i]);
1473 static int rapl_detect_domains(struct rapl_package *rp)
1480 if (!rapl_check_domain(i, rp)) {
1481 rp->domain_map |= 1 << i;
1485 rp->nr_domains = bitmap_weight(&rp->domain_map, RAPL_DOMAIN_MAX);
1486 if (!rp->nr_domains) {
1487 pr_debug("no valid rapl domains found in %s\n", rp->name);
1490 pr_debug("found %d domains on %s\n", rp->nr_domains, rp->name);
1492 rp->domains = kcalloc(rp->nr_domains, sizeof(struct rapl_domain),
1494 if (!rp->domains)
1497 rapl_init_domains(rp);
1499 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) {
1508 void rapl_remove_package_cpuslocked(struct rapl_package *rp)
1512 package_power_limit_irq_restore(rp);
1514 for (rd = rp->domains; rd < rp->domains + rp->nr_domains; rd++) {
1527 rp->name, rd->name);
1528 powercap_unregister_zone(rp->priv->control_type,
1532 powercap_unregister_zone(rp->priv->control_type,
1534 list_del(&rp->plist);
1535 kfree(rp);
1539 void rapl_remove_package(struct rapl_package *rp)
1542 rapl_remove_package_cpuslocked(rp);
1550 struct rapl_package *rp;
1558 list_for_each_entry(rp, &rapl_packages, plist) {
1559 if (rp->id == uid
1560 && rp->priv->control_type == priv->control_type)
1561 return rp;
1578 struct rapl_package *rp;
1581 rp = kzalloc(sizeof(struct rapl_package), GFP_KERNEL);
1582 if (!rp)
1586 rp->id = topology_logical_die_id(id);
1587 rp->lead_cpu = id;
1589 snprintf(rp->name, PACKAGE_DOMAIN_NAME_LENGTH, "package-%d-die-%d",
1592 snprintf(rp->name, PACKAGE_DOMAIN_NAME_LENGTH, "package-%d",
1595 rp->id = id;
1596 rp->lead_cpu = -1;
1597 snprintf(rp->name, PACKAGE_DOMAIN_NAME_LENGTH, "package-%d", id);
1600 rp->priv = priv;
1601 ret = rapl_config(rp);
1606 if (rapl_detect_domains(rp)) {
1610 ret = rapl_package_register_powercap(rp);
1612 INIT_LIST_HEAD(&rp->plist);
1613 list_add(&rp->plist, &rapl_packages);
1614 return rp;
1618 kfree(rp->domains);
1619 kfree(rp);
1633 struct rapl_package *rp;
1638 list_for_each_entry(rp, &rapl_packages, plist) {
1639 if (!rp->power_zone)
1641 rd = power_zone_to_rapl_domain(rp->power_zone);
1654 struct rapl_package *rp;
1659 list_for_each_entry(rp, &rapl_packages, plist) {
1660 if (!rp->power_zone)
1662 rd = power_zone_to_rapl_domain(rp->power_zone);