Lines Matching refs:tdata

150 static bool is_pkg_temp_data(struct temp_data *tdata)  in is_pkg_temp_data()  argument
152 return tdata->index < 0; in is_pkg_temp_data()
273 static int get_tjmax(struct temp_data *tdata, struct device *dev) in get_tjmax() argument
275 struct cpuinfo_x86 *c = &cpu_data(tdata->cpu); in get_tjmax()
281 if (tdata->tjmax) in get_tjmax()
282 return tdata->tjmax; in get_tjmax()
288 err = rdmsr_safe_on_cpu(tdata->cpu, MSR_IA32_TEMPERATURE_TARGET, &eax, &edx); in get_tjmax()
291 dev_warn(dev, "Unable to read TjMax from CPU %u\n", tdata->cpu); in get_tjmax()
301 tdata->tjmax = force_tjmax * 1000; in get_tjmax()
307 tdata->tjmax = adjust_tjmax(c, tdata->cpu, dev); in get_tjmax()
309 return tdata->tjmax; in get_tjmax()
312 static int get_ttarget(struct temp_data *tdata, struct device *dev) in get_ttarget() argument
321 if (tdata->tjmax) in get_ttarget()
324 ret = rdmsr_safe_on_cpu(tdata->cpu, MSR_IA32_TEMPERATURE_TARGET, &eax, &edx); in get_ttarget()
345 struct temp_data *tdata = container_of(devattr, struct temp_data, sd_attrs[ATTR_LABEL]); in show_label() local
347 if (is_pkg_temp_data(tdata)) in show_label()
350 return sprintf(buf, "Core %u\n", tdata->cpu_core_id); in show_label()
357 struct temp_data *tdata = container_of(devattr, struct temp_data, in show_crit_alarm() local
360 mutex_lock(&tdata->update_lock); in show_crit_alarm()
361 rdmsr_on_cpu(tdata->cpu, tdata->status_reg, &eax, &edx); in show_crit_alarm()
362 mutex_unlock(&tdata->update_lock); in show_crit_alarm()
370 struct temp_data *tdata = container_of(devattr, struct temp_data, sd_attrs[ATTR_TJMAX]); in show_tjmax() local
373 mutex_lock(&tdata->update_lock); in show_tjmax()
374 tjmax = get_tjmax(tdata, dev); in show_tjmax()
375 mutex_unlock(&tdata->update_lock); in show_tjmax()
383 struct temp_data *tdata = container_of(devattr, struct temp_data, sd_attrs[ATTR_TTARGET]); in show_ttarget() local
386 mutex_lock(&tdata->update_lock); in show_ttarget()
387 ttarget = get_ttarget(tdata, dev); in show_ttarget()
388 mutex_unlock(&tdata->update_lock); in show_ttarget()
399 struct temp_data *tdata = container_of(devattr, struct temp_data, sd_attrs[ATTR_TEMP]); in show_temp() local
402 mutex_lock(&tdata->update_lock); in show_temp()
404 tjmax = get_tjmax(tdata, dev); in show_temp()
406 if (time_after(jiffies, tdata->last_updated + HZ)) { in show_temp()
407 rdmsr_on_cpu(tdata->cpu, tdata->status_reg, &eax, &edx); in show_temp()
414 tdata->temp = tjmax - ((eax >> 16) & 0xff) * 1000; in show_temp()
415 tdata->last_updated = jiffies; in show_temp()
418 mutex_unlock(&tdata->update_lock); in show_temp()
419 return sprintf(buf, "%d\n", tdata->temp); in show_temp()
422 static int create_core_attrs(struct temp_data *tdata, struct device *dev) in create_core_attrs() argument
433 for (i = 0; i < tdata->attr_size; i++) { in create_core_attrs()
439 int attr_no = is_pkg_temp_data(tdata) ? 1 : tdata->cpu_core_id + 2; in create_core_attrs()
441 snprintf(tdata->attr_name[i], CORETEMP_NAME_LENGTH, in create_core_attrs()
443 sysfs_attr_init(&tdata->sd_attrs[i].attr); in create_core_attrs()
444 tdata->sd_attrs[i].attr.name = tdata->attr_name[i]; in create_core_attrs()
445 tdata->sd_attrs[i].attr.mode = 0444; in create_core_attrs()
446 tdata->sd_attrs[i].show = rd_ptr[i]; in create_core_attrs()
447 tdata->attrs[i] = &tdata->sd_attrs[i].attr; in create_core_attrs()
449 tdata->attr_group.attrs = tdata->attrs; in create_core_attrs()
450 return sysfs_create_group(&dev->kobj, &tdata->attr_group); in create_core_attrs()
482 struct temp_data *tdata; in init_temp_data() local
498 tdata = kzalloc(sizeof(struct temp_data), GFP_KERNEL); in init_temp_data()
499 if (!tdata) in init_temp_data()
503 pdata->pkg_data = tdata; in init_temp_data()
505 tdata->index = -1; in init_temp_data()
507 tdata->index = ida_alloc_max(&pdata->ida, pdata->nr_cores - 1, GFP_KERNEL); in init_temp_data()
508 if (tdata->index < 0) { in init_temp_data()
509 kfree(tdata); in init_temp_data()
512 pdata->core_data[tdata->index] = tdata; in init_temp_data()
515 tdata->status_reg = pkg_flag ? MSR_IA32_PACKAGE_THERM_STATUS : in init_temp_data()
517 tdata->cpu = cpu; in init_temp_data()
518 tdata->cpu_core_id = topology_core_id(cpu); in init_temp_data()
519 tdata->attr_size = MAX_CORE_ATTRS; in init_temp_data()
520 mutex_init(&tdata->update_lock); in init_temp_data()
521 return tdata; in init_temp_data()
524 static void destroy_temp_data(struct platform_data *pdata, struct temp_data *tdata) in destroy_temp_data() argument
526 if (is_pkg_temp_data(tdata)) { in destroy_temp_data()
532 pdata->core_data[tdata->index] = NULL; in destroy_temp_data()
533 ida_free(&pdata->ida, tdata->index); in destroy_temp_data()
535 kfree(tdata); in destroy_temp_data()
557 struct temp_data *tdata; in create_core_data() local
566 tdata = init_temp_data(pdata, cpu, pkg_flag); in create_core_data()
567 if (!tdata) in create_core_data()
571 err = rdmsr_safe_on_cpu(cpu, tdata->status_reg, &eax, &edx); in create_core_data()
576 get_tjmax(tdata, &pdev->dev); in create_core_data()
584 if (get_ttarget(tdata, &pdev->dev) >= 0) in create_core_data()
585 tdata->attr_size++; in create_core_data()
588 err = create_core_attrs(tdata, pdata->hwmon_dev); in create_core_data()
595 destroy_temp_data(pdata, tdata); in create_core_data()
606 static void coretemp_remove_core(struct platform_data *pdata, struct temp_data *tdata) in coretemp_remove_core() argument
609 if (!tdata) in coretemp_remove_core()
613 sysfs_remove_group(&pdata->hwmon_dev->kobj, &tdata->attr_group); in coretemp_remove_core()
615 destroy_temp_data(pdata, tdata); in coretemp_remove_core()
727 struct temp_data *tdata; in coretemp_cpu_offline() local
739 tdata = get_temp_data(pd, cpu); in coretemp_cpu_offline()
750 coretemp_remove_core(pd, tdata); in coretemp_cpu_offline()
751 } else if (tdata && tdata->cpu == cpu) { in coretemp_cpu_offline()
752 mutex_lock(&tdata->update_lock); in coretemp_cpu_offline()
753 tdata->cpu = target; in coretemp_cpu_offline()
754 mutex_unlock(&tdata->update_lock); in coretemp_cpu_offline()
760 tdata = get_temp_data(pd, -1); in coretemp_cpu_offline()
762 if (tdata) in coretemp_cpu_offline()
763 coretemp_remove_core(pd, tdata); in coretemp_cpu_offline()
773 if (tdata && tdata->cpu == cpu) { in coretemp_cpu_offline()
775 mutex_lock(&tdata->update_lock); in coretemp_cpu_offline()
776 tdata->cpu = target; in coretemp_cpu_offline()
777 mutex_unlock(&tdata->update_lock); in coretemp_cpu_offline()