Lines Matching refs:tdata
159 static bool is_pkg_temp_data(struct temp_data *tdata) in is_pkg_temp_data() argument
161 return tdata->index < 0; in is_pkg_temp_data()
277 static int get_tjmax(struct temp_data *tdata, struct device *dev) in get_tjmax() argument
279 struct cpuinfo_x86 *c = &cpu_data(tdata->cpu); in get_tjmax()
285 if (tdata->tjmax) in get_tjmax()
286 return tdata->tjmax; in get_tjmax()
292 err = rdmsr_safe_on_cpu(tdata->cpu, MSR_IA32_TEMPERATURE_TARGET, &eax, &edx); in get_tjmax()
294 dev_warn_once(dev, "Unable to read TjMax from CPU %u\n", tdata->cpu); in get_tjmax()
304 tdata->tjmax = force_tjmax * 1000; in get_tjmax()
310 tdata->tjmax = adjust_tjmax(c, tdata->cpu, dev); in get_tjmax()
312 return tdata->tjmax; in get_tjmax()
315 static int get_ttarget(struct temp_data *tdata, struct device *dev) in get_ttarget() argument
324 if (tdata->tjmax) in get_ttarget()
327 ret = rdmsr_safe_on_cpu(tdata->cpu, MSR_IA32_TEMPERATURE_TARGET, &eax, &edx); in get_ttarget()
348 struct temp_data *tdata = container_of(devattr, struct temp_data, sd_attrs[ATTR_LABEL]); in show_label() local
350 if (is_pkg_temp_data(tdata)) in show_label()
353 return sprintf(buf, "Core %u\n", tdata->cpu_core_id); in show_label()
360 struct temp_data *tdata = container_of(devattr, struct temp_data, in show_crit_alarm() local
363 mutex_lock(&tdata->update_lock); in show_crit_alarm()
364 rdmsr_on_cpu(tdata->cpu, tdata->status_reg, &eax, &edx); in show_crit_alarm()
365 mutex_unlock(&tdata->update_lock); in show_crit_alarm()
373 struct temp_data *tdata = container_of(devattr, struct temp_data, sd_attrs[ATTR_TJMAX]); in show_tjmax() local
376 mutex_lock(&tdata->update_lock); in show_tjmax()
377 tjmax = get_tjmax(tdata, dev); in show_tjmax()
378 mutex_unlock(&tdata->update_lock); in show_tjmax()
386 struct temp_data *tdata = container_of(devattr, struct temp_data, sd_attrs[ATTR_TTARGET]); in show_ttarget() local
389 mutex_lock(&tdata->update_lock); in show_ttarget()
390 ttarget = get_ttarget(tdata, dev); in show_ttarget()
391 mutex_unlock(&tdata->update_lock); in show_ttarget()
402 struct temp_data *tdata = container_of(devattr, struct temp_data, sd_attrs[ATTR_TEMP]); in show_temp() local
405 mutex_lock(&tdata->update_lock); in show_temp()
407 tjmax = get_tjmax(tdata, dev); in show_temp()
409 if (time_after(jiffies, tdata->last_updated + HZ)) { in show_temp()
410 rdmsr_on_cpu(tdata->cpu, tdata->status_reg, &eax, &edx); in show_temp()
417 tdata->temp = tjmax - ((eax >> 16) & 0xff) * 1000; in show_temp()
418 tdata->last_updated = jiffies; in show_temp()
421 mutex_unlock(&tdata->update_lock); in show_temp()
422 return sprintf(buf, "%d\n", tdata->temp); in show_temp()
425 static int create_core_attrs(struct temp_data *tdata, struct device *dev) in create_core_attrs() argument
436 for (i = 0; i < tdata->attr_size; i++) { in create_core_attrs()
442 int attr_no = is_pkg_temp_data(tdata) ? 1 : tdata->cpu_core_id + 2; in create_core_attrs()
444 snprintf(tdata->attr_name[i], CORETEMP_NAME_LENGTH, in create_core_attrs()
446 sysfs_attr_init(&tdata->sd_attrs[i].attr); in create_core_attrs()
447 tdata->sd_attrs[i].attr.name = tdata->attr_name[i]; in create_core_attrs()
448 tdata->sd_attrs[i].attr.mode = 0444; in create_core_attrs()
449 tdata->sd_attrs[i].show = rd_ptr[i]; in create_core_attrs()
450 tdata->attrs[i] = &tdata->sd_attrs[i].attr; in create_core_attrs()
452 tdata->attr_group.attrs = tdata->attrs; in create_core_attrs()
453 return sysfs_create_group(&dev->kobj, &tdata->attr_group); in create_core_attrs()
485 struct temp_data *tdata; in init_temp_data() local
501 tdata = kzalloc_obj(struct temp_data); in init_temp_data()
502 if (!tdata) in init_temp_data()
506 pdata->pkg_data = tdata; in init_temp_data()
508 tdata->index = -1; in init_temp_data()
510 tdata->index = ida_alloc_max(&pdata->ida, pdata->nr_cores - 1, GFP_KERNEL); in init_temp_data()
511 if (tdata->index < 0) { in init_temp_data()
512 kfree(tdata); in init_temp_data()
515 pdata->core_data[tdata->index] = tdata; in init_temp_data()
518 tdata->status_reg = pkg_flag ? MSR_IA32_PACKAGE_THERM_STATUS : in init_temp_data()
520 tdata->cpu = cpu; in init_temp_data()
521 tdata->cpu_core_id = topology_core_id(cpu); in init_temp_data()
522 tdata->attr_size = MAX_CORE_ATTRS; in init_temp_data()
523 mutex_init(&tdata->update_lock); in init_temp_data()
524 return tdata; in init_temp_data()
527 static void destroy_temp_data(struct platform_data *pdata, struct temp_data *tdata) in destroy_temp_data() argument
529 if (is_pkg_temp_data(tdata)) { in destroy_temp_data()
535 pdata->core_data[tdata->index] = NULL; in destroy_temp_data()
536 ida_free(&pdata->ida, tdata->index); in destroy_temp_data()
538 kfree(tdata); in destroy_temp_data()
560 struct temp_data *tdata; in create_core_data() local
569 tdata = init_temp_data(pdata, cpu, pkg_flag); in create_core_data()
570 if (!tdata) in create_core_data()
574 err = rdmsr_safe_on_cpu(cpu, tdata->status_reg, &eax, &edx); in create_core_data()
579 get_tjmax(tdata, &pdev->dev); in create_core_data()
587 if (get_ttarget(tdata, &pdev->dev) >= 0) in create_core_data()
588 tdata->attr_size++; in create_core_data()
591 err = create_core_attrs(tdata, pdata->hwmon_dev); in create_core_data()
598 destroy_temp_data(pdata, tdata); in create_core_data()
609 static void coretemp_remove_core(struct platform_data *pdata, struct temp_data *tdata) in coretemp_remove_core() argument
612 if (!tdata) in coretemp_remove_core()
616 sysfs_remove_group(&pdata->hwmon_dev->kobj, &tdata->attr_group); in coretemp_remove_core()
618 destroy_temp_data(pdata, tdata); in coretemp_remove_core()
730 struct temp_data *tdata; in coretemp_cpu_offline() local
742 tdata = get_temp_data(pd, cpu); in coretemp_cpu_offline()
753 coretemp_remove_core(pd, tdata); in coretemp_cpu_offline()
754 } else if (tdata && tdata->cpu == cpu) { in coretemp_cpu_offline()
755 mutex_lock(&tdata->update_lock); in coretemp_cpu_offline()
756 tdata->cpu = target; in coretemp_cpu_offline()
757 mutex_unlock(&tdata->update_lock); in coretemp_cpu_offline()
763 tdata = get_temp_data(pd, -1); in coretemp_cpu_offline()
765 if (tdata) in coretemp_cpu_offline()
766 coretemp_remove_core(pd, tdata); in coretemp_cpu_offline()
776 if (tdata && tdata->cpu == cpu) { in coretemp_cpu_offline()
778 mutex_lock(&tdata->update_lock); in coretemp_cpu_offline()
779 tdata->cpu = target; in coretemp_cpu_offline()
780 mutex_unlock(&tdata->update_lock); in coretemp_cpu_offline()