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@chris-wilson.co.uk Signed-off-by: Jordan Crouse jcrouse@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++)
} err_puts(m, "\n");error_puts(m, ascii85_encode(obj->pages[page][i], out));
} 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@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/freedreno