Lines Matching +full:micro +full:- +full:watts
1 // SPDX-License-Identifier: GPL-2.0
5 * Copyright (C) 2017-2018 Intel Corporation, Inc.
18 #include <linux/hwmon-sysfs.h>
23 #include <linux/fpga-dfl.h>
26 #include "dfl-fme.h"
147 struct dfl_fpga_cdev *cdev = fdata->dfl_cdev; in fme_hdr_ioctl_release_port()
151 return -EFAULT; in fme_hdr_ioctl_release_port()
159 struct dfl_fpga_cdev *cdev = fdata->dfl_cdev; in fme_hdr_ioctl_assign_port()
163 return -EFAULT; in fme_hdr_ioctl_assign_port()
172 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(&pdev->dev); in fme_hdr_ioctl()
181 return -ENODEV; in fme_hdr_ioctl()
201 /* threshold1 policy: 0 - AP2 (90% throttle) / 1 - AP1 (50% throttle) */
229 return fme_thermal_throttle_support(feature->ioaddr) ? 0444 : 0; in thermal_hwmon_attrs_visible()
240 v = readq(feature->ioaddr + FME_THERM_RDSENSOR_FMT1); in thermal_hwmon_read()
244 v = readq(feature->ioaddr + FME_THERM_THRESHOLD); in thermal_hwmon_read()
248 v = readq(feature->ioaddr + FME_THERM_THRESHOLD); in thermal_hwmon_read()
252 v = readq(feature->ioaddr + FME_THERM_THRESHOLD); in thermal_hwmon_read()
256 v = readq(feature->ioaddr + FME_THERM_THRESHOLD); in thermal_hwmon_read()
260 v = readq(feature->ioaddr + FME_THERM_THRESHOLD); in thermal_hwmon_read()
264 return -EOPNOTSUPP; in thermal_hwmon_read()
293 v = readq(feature->ioaddr + FME_THERM_THRESHOLD); in temp1_max_policy_show()
312 return fme_thermal_throttle_support(feature->ioaddr) ? attr->mode : 0; in thermal_extra_attrs_visible()
330 * temp1_input -> FPGA device temperature in fme_thermal_mgmt_init()
331 * temp1_max -> hardware threshold 1 -> 50% or 90% throttling in fme_thermal_mgmt_init()
332 * temp1_crit -> hardware threshold 2 -> 100% throttling in fme_thermal_mgmt_init()
333 * temp1_emergency -> hardware trip_threshold to shutdown FPGA in fme_thermal_mgmt_init()
334 * temp1_max_alarm -> hardware threshold 1 alarm in fme_thermal_mgmt_init()
335 * temp1_crit_alarm -> hardware threshold 2 alarm in fme_thermal_mgmt_init()
344 hwmon = devm_hwmon_device_register_with_info(&pdev->dev, in fme_thermal_mgmt_init()
349 dev_err(&pdev->dev, "Fail to register thermal hwmon\n"); in fme_thermal_mgmt_init()
370 #define PWR_THRESHOLD1 GENMASK_ULL(6, 0) /* in Watts */
371 #define PWR_THRESHOLD2 GENMASK_ULL(14, 8) /* in Watts */
372 #define PWR_THRESHOLD_MAX 0x7f /* in Watts */
377 #define XEON_PWR_LIMIT GENMASK_ULL(14, 0) /* in 0.1 Watts */
380 #define FPGA_PWR_LIMIT GENMASK_ULL(14, 0) /* in 0.1 Watts */
391 v = readq(feature->ioaddr + FME_PWR_STATUS); in power_hwmon_read()
392 *val = (long)(FIELD_GET(PWR_CONSUMED, v) * MICRO); in power_hwmon_read()
395 v = readq(feature->ioaddr + FME_PWR_THRESHOLD); in power_hwmon_read()
396 *val = (long)(FIELD_GET(PWR_THRESHOLD1, v) * MICRO); in power_hwmon_read()
399 v = readq(feature->ioaddr + FME_PWR_THRESHOLD); in power_hwmon_read()
400 *val = (long)(FIELD_GET(PWR_THRESHOLD2, v) * MICRO); in power_hwmon_read()
403 v = readq(feature->ioaddr + FME_PWR_THRESHOLD); in power_hwmon_read()
407 v = readq(feature->ioaddr + FME_PWR_THRESHOLD); in power_hwmon_read()
411 return -EOPNOTSUPP; in power_hwmon_read()
420 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(dev->parent); in power_hwmon_write()
425 val = clamp_val(val / MICRO, 0, PWR_THRESHOLD_MAX); in power_hwmon_write()
427 mutex_lock(&fdata->lock); in power_hwmon_write()
431 v = readq(feature->ioaddr + FME_PWR_THRESHOLD); in power_hwmon_write()
434 writeq(v, feature->ioaddr + FME_PWR_THRESHOLD); in power_hwmon_write()
437 v = readq(feature->ioaddr + FME_PWR_THRESHOLD); in power_hwmon_write()
440 writeq(v, feature->ioaddr + FME_PWR_THRESHOLD); in power_hwmon_write()
443 ret = -EOPNOTSUPP; in power_hwmon_write()
447 mutex_unlock(&fdata->lock); in power_hwmon_write()
494 v = readq(feature->ioaddr + FME_PWR_XEON_LIMIT); in power1_xeon_limit_show()
509 v = readq(feature->ioaddr + FME_PWR_FPGA_LIMIT); in power1_fpga_limit_show()
523 v = readq(feature->ioaddr + FME_PWR_STATUS); in power1_ltr_show()
547 hwmon = devm_hwmon_device_register_with_info(&pdev->dev, in fme_power_mgmt_init()
552 dev_err(&pdev->dev, "Fail to register power hwmon\n"); in fme_power_mgmt_init()
608 struct platform_device *fdev = fdata->dev; in fme_open()
611 mutex_lock(&fdata->lock); in fme_open()
612 ret = dfl_feature_dev_use_begin(fdata, filp->f_flags & O_EXCL); in fme_open()
614 dev_dbg(&fdev->dev, "Device File Opened %d Times\n", in fme_open()
616 filp->private_data = fdata; in fme_open()
618 mutex_unlock(&fdata->lock); in fme_open()
625 struct dfl_feature_dev_data *fdata = filp->private_data; in fme_release()
626 struct platform_device *pdev = fdata->dev; in fme_release()
629 dev_dbg(&pdev->dev, "Device File Release\n"); in fme_release()
631 mutex_lock(&fdata->lock); in fme_release()
637 feature->nr_irqs, NULL); in fme_release()
638 mutex_unlock(&fdata->lock); in fme_release()
645 struct dfl_feature_dev_data *fdata = filp->private_data; in fme_ioctl()
646 struct platform_device *pdev = fdata->dev; in fme_ioctl()
650 dev_dbg(&pdev->dev, "%s cmd 0x%x\n", __func__, cmd); in fme_ioctl()
659 * Let sub-feature's ioctl function to handle the cmd. in fme_ioctl()
660 * Sub-feature's ioctl returns -ENODEV when cmd is not in fme_ioctl()
665 if (f->ops && f->ops->ioctl) { in fme_ioctl()
666 ret = f->ops->ioctl(pdev, f, cmd, arg); in fme_ioctl()
667 if (ret != -ENODEV) in fme_ioctl()
673 return -EINVAL; in fme_ioctl()
678 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(&pdev->dev); in fme_dev_init()
681 fme = devm_kzalloc(&pdev->dev, sizeof(*fme), GFP_KERNEL); in fme_dev_init()
683 return -ENOMEM; in fme_dev_init()
685 mutex_lock(&fdata->lock); in fme_dev_init()
687 mutex_unlock(&fdata->lock); in fme_dev_init()
694 struct dfl_feature_dev_data *fdata = to_dfl_feature_dev_data(&pdev->dev); in fme_dev_destroy()
696 mutex_lock(&fdata->lock); in fme_dev_destroy()
698 mutex_unlock(&fdata->lock); in fme_dev_destroy()
761 MODULE_ALIAS("platform:dfl-fme");