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.ku...@intel.com>
>>>
>>> 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.ku...@intel.com>
>>> ---
>>>   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@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/intel-gfx

Reply via email to