Re: [PATCH 8/8] drm/i915/skl+: debugfs entry to control IPC

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Op 10-08-17 om 10:56 schreef Mahesh Kumar:
> Hi,
>
>
> On Wednesday 09 August 2017 03:16 PM, Maarten Lankhorst wrote:
>> Op 18-07-17 om 14:49 schreef Mahesh Kumar:
>>> From: "Kumar, Mahesh" <mahesh1.kumar@xxxxxxxxx>
>>>
>>> This patch creates an entry in debugfs to check the status of IPC.
>>> This can also be used to enable/disable IPC in supported platforms.
>>>
>>> Signed-off-by: Mahesh Kumar <mahesh1.kumar@xxxxxxxxx>
>>> ---
>>>   drivers/gpu/drm/i915/i915_debugfs.c | 73 ++++++++++++++++++++++++++++++++++++-
>>>   1 file changed, 72 insertions(+), 1 deletion(-)
>>>
>>> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
>>> index 2ef75c1a6119..368f64de0fdc 100644
>>> --- a/drivers/gpu/drm/i915/i915_debugfs.c
>>> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
>>> @@ -3592,6 +3592,76 @@ static int i915_wa_registers(struct seq_file *m, void *unused)
>>>       return 0;
>>>   }
>>>   +static int i915_ipc_status_show(struct seq_file *m, void *data)
>>> +{
>>> +    struct drm_i915_private *dev_priv = m->private;
>>> +
>>> +    seq_printf(m, "Isochronous Priority Control: %s\n",
>>> +            enableddisabled(dev_priv->ipc_enabled));
>>> +    return 0;
>>> +}
>>> +
>>> +static int i915_ipc_status_open(struct inode *inode, struct file *file)
>>> +{
>>> +    struct drm_i915_private *dev_priv = inode->i_private;
>>> +
>>> +    if (HAS_IPC(dev_priv))
>>> +        return -ENODEV;
>>> +
>>> +    return single_open(file, i915_ipc_status_show, dev_priv);
>>> +}
>>> +
>>> +static ssize_t i915_ipc_status_write(struct file *file, const char __user *ubuf,
>>> +                     size_t len, loff_t *offp)
>>> +{
>>> +    struct seq_file *m = file->private_data;
>>> +    struct drm_i915_private *dev_priv = m->private;
>>> +    char *newline;
>>> +    char tmp[16];
>>> +    bool enable;
>>> +
>>> +    if (HAS_IPC(dev_priv))
>>> +        return -ENODEV;
>>> +
>>> +    if (len >= sizeof(tmp))
>>> +        return -EINVAL;
>>> +
>>> +    if (copy_from_user(tmp, ubuf, len))
>>> +        return -EFAULT;
>>> +
>>> +    tmp[len] = '\0';
>>> +
>>> +    /* Strip newline, if any */
>>> +    newline = strchr(tmp, '\n');
>>> +    if (newline)
>>> +        *newline = '\0';
>>> +
>>> +    if (strcmp(tmp, "0") == 0 || strcmp(tmp, "disable") == 0 ||
>>> +        strcmp(tmp, "off") == 0 || strcmp(tmp, "dis") == 0)
>>> +        enable = false;
>>> +    else if (strcmp(tmp, "1") == 0 || strcmp(tmp, "enable") == 0 ||
>>> +        strcmp(tmp, "on") == 0 || strcmp(tmp, "en") == 0)
>>> +        enable = true;
>>> +    else
>>> +        return -EINVAL;
>>> +
>>> +    intel_runtime_pm_get(dev_priv);
>>> +    dev_priv->ipc_enabled = enable;
>>> +    intel_enable_ipc(dev_priv);
>>> +    intel_runtime_pm_put(dev_priv);
>> Hm, intel_enable_ipc should take a bool on whether to enable ipc.
> intel_enable_ipc takes decision to enable/disable ipc based on dev_priv->ipc_enabled value. which is anyway input to function.
>>
>> Forcefully enabling IPC here might give weird effects until the next plane update. The transition watermarks are not updated yet until the next commit. This could probably be handled here, but that would be overkill..
> yes, agree, but I don't wanted to call a commit internally. Will add a drm_info when changing IPC disable => enable as suggested. 

True, perhaps we could set dev_priv->wm.distrust_bios_wm to force recalculation next time?

~Maarten

_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]
  Powered by Linux