Lines Matching defs:hwmon
6 #include <linux/hwmon.h>
7 #include <linux/hwmon-sysfs.h>
21 * SF_* - scale factors for particular quantities according to hwmon spec.
56 struct i915_hwmon *hwmon;
81 struct i915_hwmon *hwmon = ddat->hwmon;
86 mutex_lock(&hwmon->hwmon_lock);
90 mutex_unlock(&hwmon->hwmon_lock);
130 * the hwmon API. Using x86_64 128 bit arithmetic (see mul_u64_u32_shr()),
132 * hwmon->scl_shift_energy of 14 bits we have 57 (63 - 20 + 14) bits before
139 struct i915_hwmon *hwmon = ddat->hwmon;
146 rgaddr = hwmon->rg.energy_status_tile;
148 rgaddr = hwmon->rg.energy_status_all;
151 mutex_lock(&hwmon->hwmon_lock);
162 hwmon->scl_shift_energy);
163 mutex_unlock(&hwmon->hwmon_lock);
172 struct i915_hwmon *hwmon = ddat->hwmon;
178 r = intel_uncore_read(ddat->uncore, hwmon->rg.pkg_rapl_limit);
191 /* val in hwmon interface units (millisec) */
192 out = mul_u64_u32_shr(tau4, SF_TIME, hwmon->scl_shift_time + x_w);
203 struct i915_hwmon *hwmon = ddat->hwmon;
215 * The hwmon->scl_shift_time default of 0xa results in a max tau of 256 seconds
220 * val must be < max in hwmon interface units. The steps below are
227 max_win = mul_u64_u32_shr(tau4, SF_TIME, hwmon->scl_shift_time + x_w);
233 val = DIV_ROUND_CLOSEST_ULL((u64)val << hwmon->scl_shift_time, SF_TIME);
247 hwm_locked_with_pm_intel_uncore_rmw(ddat, hwmon->rg.pkg_rapl_limit,
266 struct i915_hwmon *hwmon = ddat->hwmon;
269 return i915_mmio_reg_valid(hwmon->rg.pkg_rapl_limit) ? attr->mode : 0;
319 struct i915_hwmon *hwmon = ddat->hwmon;
321 if (attr == hwmon_temp_input && i915_mmio_reg_valid(hwmon->rg.pkg_temp))
330 struct i915_hwmon *hwmon = ddat->hwmon;
337 reg_val = intel_uncore_read(ddat->uncore, hwmon->rg.pkg_temp);
363 struct i915_hwmon *hwmon = ddat->hwmon;
370 reg_value = intel_uncore_read(ddat->uncore, hwmon->rg.gt_perf_status);
383 struct i915_hwmon *hwmon = ddat->hwmon;
388 return i915_mmio_reg_valid(hwmon->rg.pkg_rapl_limit) ? 0664 : 0;
390 return i915_mmio_reg_valid(hwmon->rg.pkg_power_sku) ? 0444 : 0;
410 struct i915_hwmon *hwmon = ddat->hwmon;
416 r = intel_uncore_read(ddat->uncore, hwmon->rg.pkg_rapl_limit);
423 hwmon->rg.pkg_rapl_limit,
425 hwmon->scl_shift_power,
429 r = intel_uncore_read64(ddat->uncore, hwmon->rg.pkg_power_sku);
431 min = mul_u64_u32_shr(min, SF_POWER, hwmon->scl_shift_power);
433 max = mul_u64_u32_shr(max, SF_POWER, hwmon->scl_shift_power);
444 struct i915_hwmon *hwmon = ddat->hwmon;
453 mutex_lock(&hwmon->hwmon_lock);
457 if (!hwmon->ddat.reset_in_progress)
465 mutex_unlock(&hwmon->hwmon_lock);
476 intel_uncore_rmw(ddat->uncore, hwmon->rg.pkg_rapl_limit,
478 nval = intel_uncore_read(ddat->uncore, hwmon->rg.pkg_rapl_limit);
486 nval = DIV_ROUND_CLOSEST_ULL((u64)val << hwmon->scl_shift_power, SF_POWER);
489 intel_uncore_rmw(ddat->uncore, hwmon->rg.pkg_rapl_limit,
492 mutex_unlock(&hwmon->hwmon_lock);
500 struct i915_hwmon *hwmon = ddat->hwmon;
509 hwmon->rg.pkg_power_sku,
511 hwmon->scl_shift_power,
546 struct i915_hwmon *hwmon = i915->hwmon;
549 if (!hwmon || !i915_mmio_reg_valid(hwmon->rg.pkg_rapl_limit))
552 mutex_lock(&hwmon->hwmon_lock);
554 hwmon->ddat.reset_in_progress = true;
555 r = intel_uncore_rmw(hwmon->ddat.uncore, hwmon->rg.pkg_rapl_limit,
559 mutex_unlock(&hwmon->hwmon_lock);
564 struct i915_hwmon *hwmon = i915->hwmon;
566 if (!hwmon || !i915_mmio_reg_valid(hwmon->rg.pkg_rapl_limit))
569 mutex_lock(&hwmon->hwmon_lock);
571 intel_uncore_rmw(hwmon->ddat.uncore, hwmon->rg.pkg_rapl_limit,
573 hwmon->ddat.reset_in_progress = false;
574 wake_up_all(&hwmon->ddat.waitq);
576 mutex_unlock(&hwmon->hwmon_lock);
582 struct i915_hwmon *hwmon = ddat->hwmon;
588 rgaddr = hwmon->rg.energy_status_tile;
590 rgaddr = hwmon->rg.energy_status_all;
662 struct i915_hwmon *hwmon = ddat->hwmon;
664 if (attr == hwmon_fan_input && i915_mmio_reg_valid(hwmon->rg.fan_speed))
673 struct i915_hwmon *hwmon = ddat->hwmon;
681 mutex_lock(&hwmon->hwmon_lock);
683 reg_val = intel_uncore_read(ddat->uncore, hwmon->rg.fan_speed);
708 mutex_unlock(&hwmon->hwmon_lock);
838 struct i915_hwmon *hwmon = i915->hwmon;
840 struct hwm_drvdata *ddat = &hwmon->ddat;
848 hwmon->rg.gt_perf_status = GEN12_RPSTAT1;
851 hwmon->rg.pkg_temp = PCU_PACKAGE_TEMPERATURE;
852 hwmon->rg.pkg_power_sku_unit = PCU_PACKAGE_POWER_SKU_UNIT;
853 hwmon->rg.pkg_power_sku = PCU_PACKAGE_POWER_SKU;
854 hwmon->rg.pkg_rapl_limit = PCU_PACKAGE_RAPL_LIMIT;
855 hwmon->rg.energy_status_all = PCU_PACKAGE_ENERGY_STATUS;
856 hwmon->rg.energy_status_tile = INVALID_MMIO_REG;
857 hwmon->rg.fan_speed = PCU_PWM_FAN_SPEED;
859 hwmon->rg.pkg_temp = INVALID_MMIO_REG;
860 hwmon->rg.pkg_power_sku_unit = INVALID_MMIO_REG;
861 hwmon->rg.pkg_power_sku = INVALID_MMIO_REG;
862 hwmon->rg.pkg_rapl_limit = INVALID_MMIO_REG;
863 hwmon->rg.energy_status_all = INVALID_MMIO_REG;
864 hwmon->rg.energy_status_tile = INVALID_MMIO_REG;
865 hwmon->rg.fan_speed = INVALID_MMIO_REG;
870 * The contents of register hwmon->rg.pkg_power_sku_unit do not change,
873 if (i915_mmio_reg_valid(hwmon->rg.pkg_power_sku_unit))
875 hwmon->rg.pkg_power_sku_unit);
881 if (i915_mmio_reg_valid(hwmon->rg.fan_speed)) {
883 hwmon->rg.fan_speed);
888 hwmon->scl_shift_power = REG_FIELD_GET(PKG_PWR_UNIT, val_sku_unit);
889 hwmon->scl_shift_energy = REG_FIELD_GET(PKG_ENERGY_UNIT, val_sku_unit);
890 hwmon->scl_shift_time = REG_FIELD_GET(PKG_TIME_UNIT, val_sku_unit);
896 if (i915_mmio_reg_valid(hwmon->rg.energy_status_all))
898 if (i915_mmio_reg_valid(hwmon->rg.energy_status_tile)) {
900 hwm_energy(&hwmon->ddat_gt[i], &energy);
907 struct i915_hwmon *hwmon;
914 /* hwmon is available only for dGfx */
918 hwmon = kzalloc(sizeof(*hwmon), GFP_KERNEL);
919 if (!hwmon)
922 i915->hwmon = hwmon;
923 mutex_init(&hwmon->hwmon_lock);
924 ddat = &hwmon->ddat;
926 ddat->hwmon = hwmon;
933 ddat_gt = hwmon->ddat_gt + i;
935 ddat_gt->hwmon = hwmon;
943 /* hwmon_dev points to device hwmon<i> */
954 ddat_gt = hwmon->ddat_gt + i;
976 struct i915_hwmon *hwmon = i915->hwmon;
980 if (!hwmon)
984 if (hwmon->ddat_gt[i].hwmon_dev)
985 hwmon_device_unregister(hwmon->ddat_gt[i].hwmon_dev);
987 if (hwmon->ddat.hwmon_dev)
988 hwmon_device_unregister(hwmon->ddat.hwmon_dev);
990 mutex_destroy(&hwmon->hwmon_lock);
992 kfree(i915->hwmon);
993 i915->hwmon = NULL;