Commit 63fb32df authored by Rajkumar Manoharan's avatar Rajkumar Manoharan Committed by Kalle Valo

ath10k: add debugfs entry to configure quiet period

Add support to configure quiet period (in milliseconds) via debugfs.
This is useful to experiment different quiet period values along with
different throttle ratio.

echo 100 > /sys/kernel/debug/ieee80211/phyX/ath10k/quiet_period
Signed-off-by: default avatarRajkumar Manoharan <rmanohar@qti.qualcomm.com>
Signed-off-by: default avatarKalle Valo <kvalo@qca.qualcomm.com>
parent 4705e34e
...@@ -1991,6 +1991,49 @@ static const struct file_operations fops_pktlog_filter = { ...@@ -1991,6 +1991,49 @@ static const struct file_operations fops_pktlog_filter = {
.open = simple_open .open = simple_open
}; };
static ssize_t ath10k_write_quiet_period(struct file *file,
const char __user *ubuf,
size_t count, loff_t *ppos)
{
struct ath10k *ar = file->private_data;
u32 period;
if (kstrtouint_from_user(ubuf, count, 0, &period))
return -EINVAL;
if (period < ATH10K_QUIET_PERIOD_MIN) {
ath10k_warn(ar, "Quiet period %u can not be lesser than 25ms\n",
period);
return -EINVAL;
}
mutex_lock(&ar->conf_mutex);
ar->thermal.quiet_period = period;
mutex_unlock(&ar->conf_mutex);
return count;
}
static ssize_t ath10k_read_quiet_period(struct file *file, char __user *ubuf,
size_t count, loff_t *ppos)
{
char buf[32];
struct ath10k *ar = file->private_data;
int len = 0;
mutex_lock(&ar->conf_mutex);
len = scnprintf(buf, sizeof(buf) - len, "%d\n",
ar->thermal.quiet_period);
mutex_unlock(&ar->conf_mutex);
return simple_read_from_buffer(ubuf, count, ppos, buf, len);
}
static const struct file_operations fops_quiet_period = {
.read = ath10k_read_quiet_period,
.write = ath10k_write_quiet_period,
.open = simple_open
};
int ath10k_debug_create(struct ath10k *ar) int ath10k_debug_create(struct ath10k *ar)
{ {
ar->debug.fw_crash_data = vzalloc(sizeof(*ar->debug.fw_crash_data)); ar->debug.fw_crash_data = vzalloc(sizeof(*ar->debug.fw_crash_data));
...@@ -2088,6 +2131,9 @@ int ath10k_debug_register(struct ath10k *ar) ...@@ -2088,6 +2131,9 @@ int ath10k_debug_register(struct ath10k *ar)
debugfs_create_file("pktlog_filter", S_IRUGO | S_IWUSR, debugfs_create_file("pktlog_filter", S_IRUGO | S_IWUSR,
ar->debug.debugfs_phy, ar, &fops_pktlog_filter); ar->debug.debugfs_phy, ar, &fops_pktlog_filter);
debugfs_create_file("quiet_period", S_IRUGO | S_IWUSR,
ar->debug.debugfs_phy, ar, &fops_quiet_period);
return 0; return 0;
} }
......
...@@ -96,8 +96,7 @@ static int ath10k_thermal_set_cur_dutycycle(struct thermal_cooling_device *cdev, ...@@ -96,8 +96,7 @@ static int ath10k_thermal_set_cur_dutycycle(struct thermal_cooling_device *cdev,
ret = -ENETDOWN; ret = -ENETDOWN;
goto out; goto out;
} }
period = max(ATH10K_QUIET_PERIOD_MIN, period = ar->thermal.quiet_period;
(ATH10K_QUIET_PERIOD_DEFAULT / num_bss));
duration = (period * duty_cycle) / 100; duration = (period * duty_cycle) / 100;
enabled = duration ? 1 : 0; enabled = duration ? 1 : 0;
...@@ -207,6 +206,7 @@ int ath10k_thermal_register(struct ath10k *ar) ...@@ -207,6 +206,7 @@ int ath10k_thermal_register(struct ath10k *ar)
} }
ar->thermal.cdev = cdev; ar->thermal.cdev = cdev;
ar->thermal.quiet_period = ATH10K_QUIET_PERIOD_DEFAULT;
/* Do not register hwmon device when temperature reading is not /* Do not register hwmon device when temperature reading is not
* supported by firmware * supported by firmware
......
...@@ -29,6 +29,7 @@ struct ath10k_thermal { ...@@ -29,6 +29,7 @@ struct ath10k_thermal {
/* protected by conf_mutex */ /* protected by conf_mutex */
u32 duty_cycle; u32 duty_cycle;
u32 quiet_period;
/* temperature value in Celcius degree /* temperature value in Celcius degree
* protected by data_lock * protected by data_lock
*/ */
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment