Re: [PATCH 10/15] drm/i915: Enable GuC firmware log

Chris Wilson
2015-06-15T21:40:42Z

On Mon, Jun 15, 2015 at 07:36:28PM +0100, Dave Gordon wrote:
> From: Alex Dai <yu.dai@intel.com>
>
> Allocate a GEM object to hold GuC log data. A debugfs interface
> (i915_guc_log_dump) is provided to print out the log content.
>
> Issue: VIZ-4884
> Signed-off-by: Alex Dai <yu.dai@intel.com>
> Signed-off-by: Dave Gordon <david.s.gordon@intel.com>
> ---
> drivers/gpu/drm/i915/i915_debugfs.c | 29 +++++++++++++++++++
> drivers/gpu/drm/i915/i915_guc_submission.c | 43 ++++++++++++++++++++++++++++
> 2 files changed, 72 insertions(+)
>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index c52a745..b0aa4af 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -2388,6 +2388,34 @@ static int i915_guc_load_status_info(struct seq_file *m, void *data)
> return 0;
> }
>
> +static int i915_guc_log_dump(struct seq_file *m, void *data)
> +{
> + struct drm_info_node *node = m->private;
> + struct drm_device *dev = node->minor->dev;
> + struct drm_i915_private *dev_priv = dev->dev_private;
> + struct drm_i915_gem_object *log_obj = dev_priv->guc.log_obj;
> + u32 *log;
> + int i = 0, pg;
> +
> + if (!log_obj)
> + return 0;
> +
> + for (pg = 0; pg < log_obj->base.size / PAGE_SIZE; pg++) {
> + log = kmap_atomic(i915_gem_object_get_page(log_obj, pg));

Coherency? You don't mention in the changelong how you expect this to be
used. Do you have some parser that polls the debugfs for changes? If
this is likely to become API, use a context parameter instead to return
a handle to the log bo.

> +
> + for (i = 0; i < PAGE_SIZE / sizeof(u32); i += 4)
> + seq_printf(m, "0x%08x 0x%08x 0x%08x 0x%08x\n",
> + *(log + i), *(log + i + 1),
> + *(log + i + 2), *(log + i + 3));
> +
> + kunmap_atomic(log);
> + }
> +
> + seq_putc(m, '\n');

You already have a newline at the end.
-Chris

--
Chris Wilson, Intel Open Source Technology Centre