Commit 97e94b22 authored by Damien Lespiau's avatar Damien Lespiau Committed by Daniel Vetter

drm/i915/skl: Augment the latency debugfs files for SKL

v2: Use the gen >= 9 in the debugfs file condition (Ville)
Reviewed-by: default avatarVille Syrjälä <ville.syrjala@linux.intel.com>
Signed-off-by: default avatarDamien Lespiau <damien.lespiau@intel.com>
Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent a269c583
...@@ -3523,7 +3523,7 @@ static const struct file_operations i915_display_crc_ctl_fops = { ...@@ -3523,7 +3523,7 @@ static const struct file_operations i915_display_crc_ctl_fops = {
.write = display_crc_ctl_write .write = display_crc_ctl_write
}; };
static void wm_latency_show(struct seq_file *m, const uint16_t wm[5]) static void wm_latency_show(struct seq_file *m, const uint16_t wm[8])
{ {
struct drm_device *dev = m->private; struct drm_device *dev = m->private;
int num_levels = ilk_wm_max_level(dev) + 1; int num_levels = ilk_wm_max_level(dev) + 1;
...@@ -3534,13 +3534,17 @@ static void wm_latency_show(struct seq_file *m, const uint16_t wm[5]) ...@@ -3534,13 +3534,17 @@ static void wm_latency_show(struct seq_file *m, const uint16_t wm[5])
for (level = 0; level < num_levels; level++) { for (level = 0; level < num_levels; level++) {
unsigned int latency = wm[level]; unsigned int latency = wm[level];
/* WM1+ latency values in 0.5us units */ /*
if (level > 0) * - WM1+ latency values in 0.5us units
* - latencies are in us on gen9
*/
if (INTEL_INFO(dev)->gen >= 9)
latency *= 10;
else if (level > 0)
latency *= 5; latency *= 5;
seq_printf(m, "WM%d %u (%u.%u usec)\n", seq_printf(m, "WM%d %u (%u.%u usec)\n",
level, wm[level], level, wm[level], latency / 10, latency % 10);
latency / 10, latency % 10);
} }
drm_modeset_unlock_all(dev); drm_modeset_unlock_all(dev);
...@@ -3549,8 +3553,15 @@ static void wm_latency_show(struct seq_file *m, const uint16_t wm[5]) ...@@ -3549,8 +3553,15 @@ static void wm_latency_show(struct seq_file *m, const uint16_t wm[5])
static int pri_wm_latency_show(struct seq_file *m, void *data) static int pri_wm_latency_show(struct seq_file *m, void *data)
{ {
struct drm_device *dev = m->private; struct drm_device *dev = m->private;
struct drm_i915_private *dev_priv = dev->dev_private;
const uint16_t *latencies;
if (INTEL_INFO(dev)->gen >= 9)
latencies = dev_priv->wm.skl_latency;
else
latencies = to_i915(dev)->wm.pri_latency;
wm_latency_show(m, to_i915(dev)->wm.pri_latency); wm_latency_show(m, latencies);
return 0; return 0;
} }
...@@ -3558,8 +3569,15 @@ static int pri_wm_latency_show(struct seq_file *m, void *data) ...@@ -3558,8 +3569,15 @@ static int pri_wm_latency_show(struct seq_file *m, void *data)
static int spr_wm_latency_show(struct seq_file *m, void *data) static int spr_wm_latency_show(struct seq_file *m, void *data)
{ {
struct drm_device *dev = m->private; struct drm_device *dev = m->private;
struct drm_i915_private *dev_priv = dev->dev_private;
const uint16_t *latencies;
if (INTEL_INFO(dev)->gen >= 9)
latencies = dev_priv->wm.skl_latency;
else
latencies = to_i915(dev)->wm.spr_latency;
wm_latency_show(m, to_i915(dev)->wm.spr_latency); wm_latency_show(m, latencies);
return 0; return 0;
} }
...@@ -3567,8 +3585,15 @@ static int spr_wm_latency_show(struct seq_file *m, void *data) ...@@ -3567,8 +3585,15 @@ static int spr_wm_latency_show(struct seq_file *m, void *data)
static int cur_wm_latency_show(struct seq_file *m, void *data) static int cur_wm_latency_show(struct seq_file *m, void *data)
{ {
struct drm_device *dev = m->private; struct drm_device *dev = m->private;
struct drm_i915_private *dev_priv = dev->dev_private;
const uint16_t *latencies;
if (INTEL_INFO(dev)->gen >= 9)
latencies = dev_priv->wm.skl_latency;
else
latencies = to_i915(dev)->wm.cur_latency;
wm_latency_show(m, to_i915(dev)->wm.cur_latency); wm_latency_show(m, latencies);
return 0; return 0;
} }
...@@ -3604,11 +3629,11 @@ static int cur_wm_latency_open(struct inode *inode, struct file *file) ...@@ -3604,11 +3629,11 @@ static int cur_wm_latency_open(struct inode *inode, struct file *file)
} }
static ssize_t wm_latency_write(struct file *file, const char __user *ubuf, static ssize_t wm_latency_write(struct file *file, const char __user *ubuf,
size_t len, loff_t *offp, uint16_t wm[5]) size_t len, loff_t *offp, uint16_t wm[8])
{ {
struct seq_file *m = file->private_data; struct seq_file *m = file->private_data;
struct drm_device *dev = m->private; struct drm_device *dev = m->private;
uint16_t new[5] = { 0 }; uint16_t new[8] = { 0 };
int num_levels = ilk_wm_max_level(dev) + 1; int num_levels = ilk_wm_max_level(dev) + 1;
int level; int level;
int ret; int ret;
...@@ -3622,7 +3647,9 @@ static ssize_t wm_latency_write(struct file *file, const char __user *ubuf, ...@@ -3622,7 +3647,9 @@ static ssize_t wm_latency_write(struct file *file, const char __user *ubuf,
tmp[len] = '\0'; tmp[len] = '\0';
ret = sscanf(tmp, "%hu %hu %hu %hu %hu", &new[0], &new[1], &new[2], &new[3], &new[4]); ret = sscanf(tmp, "%hu %hu %hu %hu %hu %hu %hu %hu",
&new[0], &new[1], &new[2], &new[3],
&new[4], &new[5], &new[6], &new[7]);
if (ret != num_levels) if (ret != num_levels)
return -EINVAL; return -EINVAL;
...@@ -3642,8 +3669,15 @@ static ssize_t pri_wm_latency_write(struct file *file, const char __user *ubuf, ...@@ -3642,8 +3669,15 @@ static ssize_t pri_wm_latency_write(struct file *file, const char __user *ubuf,
{ {
struct seq_file *m = file->private_data; struct seq_file *m = file->private_data;
struct drm_device *dev = m->private; struct drm_device *dev = m->private;
struct drm_i915_private *dev_priv = dev->dev_private;
uint16_t *latencies;
return wm_latency_write(file, ubuf, len, offp, to_i915(dev)->wm.pri_latency); if (INTEL_INFO(dev)->gen >= 9)
latencies = dev_priv->wm.skl_latency;
else
latencies = to_i915(dev)->wm.pri_latency;
return wm_latency_write(file, ubuf, len, offp, latencies);
} }
static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf, static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf,
...@@ -3651,8 +3685,15 @@ static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf, ...@@ -3651,8 +3685,15 @@ static ssize_t spr_wm_latency_write(struct file *file, const char __user *ubuf,
{ {
struct seq_file *m = file->private_data; struct seq_file *m = file->private_data;
struct drm_device *dev = m->private; struct drm_device *dev = m->private;
struct drm_i915_private *dev_priv = dev->dev_private;
uint16_t *latencies;
return wm_latency_write(file, ubuf, len, offp, to_i915(dev)->wm.spr_latency); if (INTEL_INFO(dev)->gen >= 9)
latencies = dev_priv->wm.skl_latency;
else
latencies = to_i915(dev)->wm.spr_latency;
return wm_latency_write(file, ubuf, len, offp, latencies);
} }
static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf, static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf,
...@@ -3660,8 +3701,15 @@ static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf, ...@@ -3660,8 +3701,15 @@ static ssize_t cur_wm_latency_write(struct file *file, const char __user *ubuf,
{ {
struct seq_file *m = file->private_data; struct seq_file *m = file->private_data;
struct drm_device *dev = m->private; struct drm_device *dev = m->private;
struct drm_i915_private *dev_priv = dev->dev_private;
uint16_t *latencies;
if (INTEL_INFO(dev)->gen >= 9)
latencies = dev_priv->wm.skl_latency;
else
latencies = to_i915(dev)->wm.cur_latency;
return wm_latency_write(file, ubuf, len, offp, to_i915(dev)->wm.cur_latency); return wm_latency_write(file, ubuf, len, offp, latencies);
} }
static const struct file_operations i915_pri_wm_latency_fops = { static const struct file_operations i915_pri_wm_latency_fops = {
......
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