On Thu, Apr 05, 2018 at 04:00:47PM -0600, Jordan Crouse wrote:
> The i915 DRM driver very cleverly used ascii85 encoding for their
> GPU state file. Move the encode functions to a general header file to
> support other drivers that might be interested in the same
> functionality.

In a previous version of this patch, Chris asked what tree I wanted this applied
to, and the answer is: I'm not sure?  I'm hoping that Rob will be cool with
picking the rest up for msm-next for 4.18 but I'm okay with putting this
particular patch wherever it is easiest for the maintainers.

Jordan

> Reviewed-by: Chris Wilson <ch...@chris-wilson.co.uk>
> Signed-off-by: Jordan Crouse <jcro...@codeaurora.org>
>  drivers/gpu/drm/i915/i915_gpu_error.c | 35 ++++---------------------------
>  include/linux/ascii85.h               | 39 
> +++++++++++++++++++++++++++++++++++
>  2 files changed, 43 insertions(+), 31 deletions(-)
>  create mode 100644 include/linux/ascii85.h
> 
> diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c 
> b/drivers/gpu/drm/i915/i915_gpu_error.c
> index 67c902412193..969d967e58c7 100644
> --- a/drivers/gpu/drm/i915/i915_gpu_error.c
> +++ b/drivers/gpu/drm/i915/i915_gpu_error.c
> @@ -31,7 +31,7 @@
>  #include <linux/stop_machine.h>
>  #include <linux/zlib.h>
>  #include <drm/drm_print.h>
> -
> +#include <linux/ascii85.h>
>  #include "i915_drv.h"
>  
>  static inline const struct intel_engine_cs *
> @@ -518,35 +518,12 @@ void i915_error_printf(struct drm_i915_error_state_buf 
> *e, const char *f, ...)
>       va_end(args);
>  }
>  
> -static int
> -ascii85_encode_len(int len)
> -{
> -     return DIV_ROUND_UP(len, 4);
> -}
> -
> -static bool
> -ascii85_encode(u32 in, char *out)
> -{
> -     int i;
> -
> -     if (in == 0)
> -             return false;
> -
> -     out[5] = '\0';
> -     for (i = 5; i--; ) {
> -             out[i] = '!' + in % 85;
> -             in /= 85;
> -     }
> -
> -     return true;
> -}
> -
>  static void print_error_obj(struct drm_i915_error_state_buf *m,
>                           struct intel_engine_cs *engine,
>                           const char *name,
>                           struct drm_i915_error_object *obj)
>  {
> -     char out[6];
> +     char out[ASCII85_BUFSZ];
>       int page;
>  
>       if (!obj)
> @@ -568,12 +545,8 @@ static void print_error_obj(struct 
> drm_i915_error_state_buf *m,
>                       len -= obj->unused;
>               len = ascii85_encode_len(len);
>  
> -             for (i = 0; i < len; i++) {
> -                     if (ascii85_encode(obj->pages[page][i], out))
> -                             err_puts(m, out);
> -                     else
> -                             err_puts(m, "z");
> -             }
> +             for (i = 0; i < len; i++)
> +                     error_puts(m, ascii85_encode(obj->pages[page][i], out));
>       }
>       err_puts(m, "\n");
>  }
> diff --git a/include/linux/ascii85.h b/include/linux/ascii85.h
> new file mode 100644
> index 000000000000..322bbed731ae
> --- /dev/null
> +++ b/include/linux/ascii85.h
> @@ -0,0 +1,39 @@
> +
> +/*
> + * SPDX-License-Identifier: GPL-2.0
> + *
> + * Copyright (c) 2008 Intel Corporation
> + * Copyright (c) The Linux Foundation. All rights reserved.
> + */
> +
> +#ifndef _ASCII85_H_
> +#define _ASCII85_H_
> +
> +#include <linux/kernel.h>
> +
> +#define ASCII85_BUFSZ 6
> +
> +static inline long
> +ascii85_encode_len(long len)
> +{
> +     return DIV_ROUND_UP(len, 4);
> +}
> +
> +static inline char *
> +ascii85_encode(u32 in, char *out)
> +{
> +     int i;
> +
> +     if (in == 0)
> +             return "z";
> +
> +     out[5] = '\0';
> +     for (i = 5; i--; ) {
> +             out[i] = '!' + in % 85;
> +             in /= 85;
> +     }
> +
> +     return out;
> +}
> +
> +#endif
> -- 
> 2.16.1
> 
> _______________________________________________
> Freedreno mailing list
> freedr...@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/freedreno

-- 
The Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,
a Linux Foundation Collaborative Project
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Reply via email to