[Freedreno] [PATCH 01/10] include: Move ascii85 functions from i915 to linux/ascii85.h

Jordan Crouse jcrouse at codeaurora.org
Thu Apr 5 22:06:53 UTC 2018


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 <chris at chris-wilson.co.uk>
> Signed-off-by: Jordan Crouse <jcrouse at 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
> Freedreno at 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


More information about the Freedreno mailing list