From: Thomas Zimmermann <tzimmermann@suse.de>
To: airlied@linux.ie, daniel@ffwll.ch, b.zolnierkie@samsung.com
Cc: linux-fbdev@vger.kernel.org,
Thomas Zimmermann <tzimmermann@suse.de>,
dri-devel@lists.freedesktop.org
Subject: [PATCH 07/11] drm/fbdevdrm: Add DRM <-> fbdev pixel-format conversion
Date: Tue, 26 Mar 2019 09:17:40 +0000 [thread overview]
Message-ID: <20190326091744.11542-8-tzimmermann@suse.de> (raw)
In-Reply-To: <20190326091744.11542-1-tzimmermann@suse.de>
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de>
---
drivers/gpu/drm/fbdevdrm/Makefile | 1 +
drivers/gpu/drm/fbdevdrm/fbdevdrm_format.c | 441 +++++++++++++++++++++
drivers/gpu/drm/fbdevdrm/fbdevdrm_format.h | 26 ++
3 files changed, 468 insertions(+)
create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_format.c
create mode 100644 drivers/gpu/drm/fbdevdrm/fbdevdrm_format.h
diff --git a/drivers/gpu/drm/fbdevdrm/Makefile b/drivers/gpu/drm/fbdevdrm/Makefile
index b8fab9d52faa..aef60d0f4888 100644
--- a/drivers/gpu/drm/fbdevdrm/Makefile
+++ b/drivers/gpu/drm/fbdevdrm/Makefile
@@ -2,6 +2,7 @@ ccflags-y = -Iinclude/drm
fbdevdrm-y := fbdevdrm_bo.o \
fbdevdrm_device.o \
fbdevdrm_drv.o \
+ fbdevdrm_format.o \
fbdevdrm_modeset.o \
fbdevdrm_ttm.o
diff --git a/drivers/gpu/drm/fbdevdrm/fbdevdrm_format.c b/drivers/gpu/drm/fbdevdrm/fbdevdrm_format.c
new file mode 100644
index 000000000000..208f7c60e525
--- /dev/null
+++ b/drivers/gpu/drm/fbdevdrm/fbdevdrm_format.c
@@ -0,0 +1,441 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * One purpose of this driver is to allow for easy conversion of framebuffer
+ * drivers to DRM. As a special exception to the GNU GPL, you are allowed to
+ * relicense this file under the terms of a license of your choice if you're
+ * porting a framebuffer driver. In order to do so, update the SPDX license
+ * identifier to the new license and remove this exception.
+ *
+ * If you add code to this file, please ensure that it's compatible with the
+ * stated exception.
+ */
+
+#include "fbdevdrm_format.h"
+#include <asm/byteorder.h>
+#include <linux/fb.h>
+
+#if defined __BIG_ENDIAN
+#define HOST_FUNC(_func) \
+ _func ## _be
+#elif defined __LITTLE_ENDIAN
+#define HOST_FUNC(_func) \
+ _func ## _le
+#else
+#error "Unsupported endianess"
+#endif
+
+static bool is_c8(const struct fb_info* fb_info)
+{
+ return fb_info->var.bits_per_pixel = 8;
+}
+
+static bool is_rgb565_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 16) &&
+ (fb_info->var.red.offset = 0) &&
+ (fb_info->var.red.length = 5) &&
+ (fb_info->var.green.offset = 5) &&
+ (fb_info->var.green.length = 6) &&
+ (fb_info->var.blue.offset = 11) &&
+ (fb_info->var.blue.length = 5);
+}
+
+static bool is_bgr565_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 16) &&
+ (fb_info->var.red.offset = 11) &&
+ (fb_info->var.red.length = 5) &&
+ (fb_info->var.green.offset = 5) &&
+ (fb_info->var.green.length = 6) &&
+ (fb_info->var.blue.offset = 0) &&
+ (fb_info->var.blue.length = 5);
+}
+
+static bool is_rgb888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 24) &&
+ (fb_info->var.red.offset = 0) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 8) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 16) &&
+ (fb_info->var.blue.length = 8);
+}
+
+static bool is_bgr888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 24) &&
+ (fb_info->var.red.offset = 16) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 8) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 0) &&
+ (fb_info->var.blue.length = 8);
+}
+
+static bool is_xrgb8888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 32) &&
+ (fb_info->var.red.offset = 8) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 16) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 24) &&
+ (fb_info->var.blue.length = 8) &&
+ (fb_info->var.transp.length = 0);
+}
+
+static bool is_xbgr8888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 32) &&
+ (fb_info->var.red.offset = 24) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 16) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 8) &&
+ (fb_info->var.blue.length = 8) &&
+ (fb_info->var.transp.length = 0);
+}
+
+static bool is_rgbx8888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 32) &&
+ (fb_info->var.red.offset = 0) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 8) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 16) &&
+ (fb_info->var.blue.length = 8) &&
+ (fb_info->var.transp.length = 0);
+}
+
+static bool is_bgrx8888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 32) &&
+ (fb_info->var.red.offset = 16) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 8) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 0) &&
+ (fb_info->var.blue.length = 8) &&
+ (fb_info->var.transp.length = 0);
+}
+
+static bool is_argb8888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 32) &&
+ (fb_info->var.red.offset = 8) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 16) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 24) &&
+ (fb_info->var.blue.length = 8) &&
+ (fb_info->var.transp.offset = 0) &&
+ (fb_info->var.transp.length = 8);
+}
+
+static bool is_abgr8888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 32) &&
+ (fb_info->var.red.offset = 24) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 16) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 8) &&
+ (fb_info->var.blue.length = 8) &&
+ (fb_info->var.transp.offset = 0) &&
+ (fb_info->var.transp.length = 8);
+}
+
+static bool is_rgba8888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 32) &&
+ (fb_info->var.red.offset = 0) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 8) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 16) &&
+ (fb_info->var.blue.length = 8) &&
+ (fb_info->var.transp.offset = 24) &&
+ (fb_info->var.transp.length = 8);
+}
+
+static bool is_bgra8888_be(const struct fb_info* fb_info)
+{
+ return (fb_info->var.bits_per_pixel = 32) &&
+ (fb_info->var.red.offset = 16) &&
+ (fb_info->var.red.length = 8) &&
+ (fb_info->var.green.offset = 8) &&
+ (fb_info->var.green.length = 8) &&
+ (fb_info->var.blue.offset = 0) &&
+ (fb_info->var.blue.length = 8) &&
+ (fb_info->var.transp.offset = 24) &&
+ (fb_info->var.transp.length = 8);
+}
+
+#define is_rgb565_le is_bgr565_be
+#define is_bgr565_le is_rgb565_be
+#define is_rgb888_le is_bgr888_be
+#define is_bgr888_le is_rgb888_be
+#define is_xrgb8888_le is_bgrx8888_be
+#define is_xbgr8888_le is_rgbx8888_be
+#define is_rgbx8888_le is_xbgr8888_be
+#define is_bgrx8888_le is_xrgb8888_be
+#define is_argb8888_le is_bgra8888_be
+#define is_abgr8888_le is_rgba8888_be
+#define is_rgba8888_le is_abgr8888_be
+#define is_bgra8888_le is_argb8888_be
+
+struct format_map {
+ bool (*is_format)(const struct fb_info*);
+ uint32_t format;
+};
+
+uint32_t fbdevdrm_format_of_fb_info(const struct fb_info *fb_info)
+{
+ static const struct format_map map[] = {
+ { is_c8, DRM_FORMAT_C8 }, /* 256-color palette */
+ { HOST_FUNC(is_rgb565), DRM_FORMAT_RGB565 },
+ { HOST_FUNC(is_bgr565), DRM_FORMAT_BGR565 },
+ { HOST_FUNC(is_rgb888), DRM_FORMAT_RGB888 },
+ { HOST_FUNC(is_bgr888), DRM_FORMAT_BGR888 },
+ { HOST_FUNC(is_xrgb8888), DRM_FORMAT_XRGB8888 },
+ { HOST_FUNC(is_xbgr8888), DRM_FORMAT_XBGR8888 },
+ { HOST_FUNC(is_rgbx8888), DRM_FORMAT_RGBX8888 },
+ { HOST_FUNC(is_bgrx8888), DRM_FORMAT_BGRX8888 },
+ { HOST_FUNC(is_argb8888), DRM_FORMAT_ARGB8888 },
+ { HOST_FUNC(is_abgr8888), DRM_FORMAT_ABGR8888 },
+ { HOST_FUNC(is_rgba8888), DRM_FORMAT_RGBA8888 },
+ { HOST_FUNC(is_bgra8888), DRM_FORMAT_BGRA8888 }
+ };
+
+ size_t i;
+
+ if (fb_info->fix.type != FB_TYPE_PACKED_PIXELS)
+ goto err; /* multi-plane formats are not supported */
+ if (fb_info->var.bits_per_pixel < 8)
+ goto err; /* at least 8-bit color required */
+ if (fb_info->var.grayscale = 1)
+ goto err; /* grayscale output is not supported */
+
+ for (i = 0; i < ARRAY_SIZE(map); ++i) {
+ if (map[i].is_format(fb_info))
+ return map[i].format;
+ }
+
+err:
+ return DRM_FORMAT_INVALID;
+}
+
+static void set_fb_bitfield(struct fb_bitfield *bits, __u32 offset,
+ __u32 length)
+{
+ bits->offset = offset;
+ bits->length = length;
+ bits->msb_right = 0;
+}
+
+static void set_c8(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 8;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 0, 8);
+ set_fb_bitfield(&fb_var->green, 0, 8);
+ set_fb_bitfield(&fb_var->blue, 0, 8);
+ set_fb_bitfield(&fb_var->transp, 0, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_rgb565_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 16;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 0, 5);
+ set_fb_bitfield(&fb_var->green, 5, 6);
+ set_fb_bitfield(&fb_var->blue, 11, 5);
+ set_fb_bitfield(&fb_var->transp, 0, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_bgr565_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 16;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 11, 5);
+ set_fb_bitfield(&fb_var->green, 5, 6);
+ set_fb_bitfield(&fb_var->blue, 0, 5);
+ set_fb_bitfield(&fb_var->transp, 0, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_rgb888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 24;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 0, 8);
+ set_fb_bitfield(&fb_var->green, 8, 8);
+ set_fb_bitfield(&fb_var->blue, 16, 8);
+ set_fb_bitfield(&fb_var->transp, 0, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_bgr888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 24;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 16, 8);
+ set_fb_bitfield(&fb_var->green, 8, 8);
+ set_fb_bitfield(&fb_var->blue, 0, 8);
+ set_fb_bitfield(&fb_var->transp, 0, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_xrgb8888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 32;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 8, 8);
+ set_fb_bitfield(&fb_var->green, 16, 8);
+ set_fb_bitfield(&fb_var->blue, 24, 8);
+ set_fb_bitfield(&fb_var->transp, 0, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_xbgr8888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 32;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 24, 8);
+ set_fb_bitfield(&fb_var->green, 16, 8);
+ set_fb_bitfield(&fb_var->blue, 8, 8);
+ set_fb_bitfield(&fb_var->transp, 0, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_rgbx8888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 32;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 0, 8);
+ set_fb_bitfield(&fb_var->green, 8, 8);
+ set_fb_bitfield(&fb_var->blue, 16, 8);
+ set_fb_bitfield(&fb_var->transp, 24, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_bgrx8888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 32;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 16, 8);
+ set_fb_bitfield(&fb_var->green, 8, 8);
+ set_fb_bitfield(&fb_var->blue, 0, 8);
+ set_fb_bitfield(&fb_var->transp, 24, 0);
+ fb_var->nonstd = 0;
+}
+
+static void set_argb8888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 32;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 8, 8);
+ set_fb_bitfield(&fb_var->green, 16, 8);
+ set_fb_bitfield(&fb_var->blue, 24, 8);
+ set_fb_bitfield(&fb_var->transp, 0, 8);
+ fb_var->nonstd = 0;
+}
+
+static void set_abgr8888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 32;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 24, 8);
+ set_fb_bitfield(&fb_var->green, 16, 8);
+ set_fb_bitfield(&fb_var->blue, 8, 8);
+ set_fb_bitfield(&fb_var->transp, 0, 8);
+ fb_var->nonstd = 0;
+}
+
+static void set_rgba8888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 32;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 0, 8);
+ set_fb_bitfield(&fb_var->green, 8, 8);
+ set_fb_bitfield(&fb_var->blue, 16, 8);
+ set_fb_bitfield(&fb_var->transp, 24, 8);
+ fb_var->nonstd = 0;
+}
+
+static void set_bgra8888_be(struct fb_var_screeninfo *fb_var)
+{
+ fb_var->bits_per_pixel = 32;
+ fb_var->grayscale = 0;
+ set_fb_bitfield(&fb_var->red, 16, 8);
+ set_fb_bitfield(&fb_var->green, 8, 8);
+ set_fb_bitfield(&fb_var->blue, 0, 8);
+ set_fb_bitfield(&fb_var->transp, 24, 8);
+ fb_var->nonstd = 0;
+}
+
+#define set_rgb565_le set_bgr565_be
+#define set_bgr565_le set_rgb565_be
+#define set_rgb888_le set_bgr888_be
+#define set_bgr888_le set_rgb888_be
+#define set_xrgb8888_le set_bgrx8888_be
+#define set_xbgr8888_le set_rgbx8888_be
+#define set_rgbx8888_le set_xbgr8888_be
+#define set_bgrx8888_le set_xrgb8888_be
+#define set_argb8888_le set_bgra8888_be
+#define set_abgr8888_le set_rgba8888_be
+#define set_rgba8888_le set_abgr8888_be
+#define set_bgra8888_le set_argb8888_be
+
+int fbdevdrm_update_fb_var_screeninfo_from_format(
+ struct fb_var_screeninfo *fb_var, uint32_t format)
+{
+ switch (format) {
+ case DRM_FORMAT_C8:
+ set_c8(fb_var);
+ break;
+ case DRM_FORMAT_RGB565:
+ HOST_FUNC(set_rgb565)(fb_var);
+ break;
+ case DRM_FORMAT_BGR565:
+ HOST_FUNC(set_bgr565)(fb_var);
+ break;
+ case DRM_FORMAT_RGB888:
+ HOST_FUNC(set_rgb888)(fb_var);
+ break;
+ case DRM_FORMAT_BGR888:
+ HOST_FUNC(set_bgr888)(fb_var);
+ break;
+ case DRM_FORMAT_XRGB8888:
+ HOST_FUNC(set_xrgb8888)(fb_var);
+ break;
+ case DRM_FORMAT_XBGR8888:
+ HOST_FUNC(set_xbgr8888)(fb_var);
+ break;
+ case DRM_FORMAT_RGBX8888:
+ HOST_FUNC(set_rgbx8888)(fb_var);
+ break;
+ case DRM_FORMAT_BGRX8888:
+ HOST_FUNC(set_bgrx8888)(fb_var);
+ break;
+ case DRM_FORMAT_ARGB8888:
+ HOST_FUNC(set_argb8888)(fb_var);
+ break;
+ case DRM_FORMAT_ABGR8888:
+ HOST_FUNC(set_abgr8888)(fb_var);
+ break;
+ case DRM_FORMAT_RGBA8888:
+ HOST_FUNC(set_rgba8888)(fb_var);
+ break;
+ case DRM_FORMAT_BGRA8888:
+ HOST_FUNC(set_bgra8888)(fb_var);
+ break;
+ default:
+ return -EINVAL;
+ }
+ return 0;
+}
diff --git a/drivers/gpu/drm/fbdevdrm/fbdevdrm_format.h b/drivers/gpu/drm/fbdevdrm/fbdevdrm_format.h
new file mode 100644
index 000000000000..e837978ac8fc
--- /dev/null
+++ b/drivers/gpu/drm/fbdevdrm/fbdevdrm_format.h
@@ -0,0 +1,26 @@
+/* SPDX-License-Identifier: GPL-2.0-or-later
+ *
+ * One purpose of this driver is to allow for easy conversion of framebuffer
+ * drivers to DRM. As a special exception to the GNU GPL, you are allowed to
+ * relicense this file under the terms of a license of your choice if you're
+ * porting a framebuffer driver. In order to do so, update the SPDX license
+ * identifier to the new license and remove this exception.
+ *
+ * If you add code to this file, please ensure that it's compatible with the
+ * stated exception.
+ */
+
+#ifndef FBDEVDRM_FORMAT_H
+#define FBDEVDRM_FORMAT_H
+
+#include <drm/drm_fourcc.h>
+
+struct fb_info;
+struct fb_var_screeninfo;
+
+uint32_t fbdevdrm_format_of_fb_info(const struct fb_info *fb_info);
+
+int fbdevdrm_update_fb_var_screeninfo_from_format(
+ struct fb_var_screeninfo *fb_var, uint32_t format);
+
+#endif
--
2.21.0
next prev parent reply other threads:[~2019-03-26 9:17 UTC|newest]
Thread overview: 32+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-03-26 9:17 [RFC][PATCH 00/11] DRM driver for fbdev devices Thomas Zimmermann
2019-03-26 9:17 ` [PATCH 01/11] drm/fbdevdrm: Add driver skeleton Thomas Zimmermann
2019-03-26 9:17 ` [PATCH 02/11] drm/fbdevdrm: Add fbdevdrm device Thomas Zimmermann
2019-03-26 16:03 ` Adam Jackson
2019-03-27 7:55 ` Thomas Zimmermann
2019-03-27 8:03 ` Daniel Vetter
2019-03-26 9:17 ` [PATCH 03/11] drm/fbdevdrm: Add memory management Thomas Zimmermann
2019-03-26 9:17 ` [PATCH 04/11] drm/fbdevdrm: Add file operations Thomas Zimmermann
2019-03-26 9:17 ` [PATCH 05/11] drm/fbdevdrm: Add GEM and dumb interfaces Thomas Zimmermann
2019-03-26 9:17 ` [PATCH 06/11] drm/fbdevdrm: Add modesetting infrastructure Thomas Zimmermann
2019-03-26 9:17 ` Thomas Zimmermann [this message]
2019-03-26 16:29 ` [PATCH 07/11] drm/fbdevdrm: Add DRM <-> fbdev pixel-format conversion Ville Syrjälä
2019-03-27 8:28 ` Thomas Zimmermann
2019-03-27 10:00 ` Ville Syrjälä
2019-03-26 9:17 ` [PATCH 08/11] drm/fbdevdrm: Add mode conversion DRM <-> fbdev Thomas Zimmermann
2019-03-26 9:17 ` [PATCH 09/11] drm/fbdevdrm: Add primary plane Thomas Zimmermann
2019-03-26 13:33 ` Mathieu Malaterre
2019-03-26 13:57 ` Thomas Zimmermann
2019-03-27 9:37 ` Thomas Zimmermann
2019-04-02 7:08 ` Mathieu Malaterre
2019-03-26 9:17 ` [PATCH 10/11] drm/fbdevdrm: Add CRTC Thomas Zimmermann
2019-03-26 9:17 ` [PATCH 11/11] drm/fbdevdrm: Detect and validate display modes Thomas Zimmermann
2019-03-26 16:47 ` Ville Syrjälä
2019-03-26 18:20 ` Daniel Vetter
2019-03-27 8:31 ` Thomas Zimmermann
2019-03-26 14:53 ` [RFC][PATCH 00/11] DRM driver for fbdev devices Daniel Vetter
2019-03-27 9:10 ` Thomas Zimmermann
2019-03-27 9:41 ` Daniel Vetter
2019-03-27 9:55 ` Michel Dänzer
2019-03-27 10:58 ` Daniel Vetter
2019-03-27 14:46 ` Thomas Zimmermann
2019-03-27 17:05 ` Daniel Vetter
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190326091744.11542-8-tzimmermann@suse.de \
--to=tzimmermann@suse.de \
--cc=airlied@linux.ie \
--cc=b.zolnierkie@samsung.com \
--cc=daniel@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=linux-fbdev@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).