linux-arm-kernel.lists.infradead.org archive mirror
 help / color / mirror / Atom feed
* [PATCH 1/4] drm: pl111: Credit where credit is due
@ 2020-06-09 20:04 Linus Walleij
  2020-06-09 20:04 ` [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver Linus Walleij
                   ` (2 more replies)
  0 siblings, 3 replies; 17+ messages in thread
From: Linus Walleij @ 2020-06-09 20:04 UTC (permalink / raw)
  To: dri-devel, Maarten Lankhorst, Maxime Ripard, Sean Paul,
	Eric Anholt, Russell King
  Cc: Linus Walleij, linux-arm-kernel

This moves over some of the credit for the development of this
driver from the old fbdev driver that I used as reference when
getting this in place.

Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/gpu/drm/pl111/pl111_versatile.c | 9 +++++++++
 1 file changed, 9 insertions(+)

diff --git a/drivers/gpu/drm/pl111/pl111_versatile.c b/drivers/gpu/drm/pl111/pl111_versatile.c
index 64f01a4e6767..1127082e9a60 100644
--- a/drivers/gpu/drm/pl111/pl111_versatile.c
+++ b/drivers/gpu/drm/pl111/pl111_versatile.c
@@ -1,5 +1,14 @@
 // SPDX-License-Identifier: GPL-2.0-only
 
+/*
+ * Versatile family (ARM reference designs) handling for the PL11x.
+ * This is based on code and know-how in the previous frame buffer
+ * driver in drivers/video/fbdev/amba-clcd.c:
+ * Copyright (C) 2001 ARM Limited, by David A Rusling
+ * Updated to 2.5 by Deep Blue Solutions Ltd.
+ * Major contributions and discoveries by Russell King.
+ */
+
 #include <linux/amba/clcd-regs.h>
 #include <linux/bitops.h>
 #include <linux/device.h>
-- 
2.25.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver
  2020-06-09 20:04 [PATCH 1/4] drm: pl111: Credit where credit is due Linus Walleij
@ 2020-06-09 20:04 ` Linus Walleij
  2020-09-15  1:10   ` Peter Collingbourne
  2020-06-09 20:04 ` [PATCH 3/4] drm: pl111: Absorb the external register header Linus Walleij
  2020-06-09 20:04 ` [PATCH 4/4] drm: pl111: Update documentation Linus Walleij
  2 siblings, 1 reply; 17+ messages in thread
From: Linus Walleij @ 2020-06-09 20:04 UTC (permalink / raw)
  To: dri-devel, Maarten Lankhorst, Maxime Ripard, Sean Paul,
	Eric Anholt, Russell King
  Cc: Linus Walleij, linux-arm-kernel

All the functionality in this driver has been reimplemented
in the new DRM driver in drivers/gpu/drm/pl111/* and all
the boards using it have been migrated to use the DRM driver
with all configuration coming from the device tree.

I started the work to migrate the CLCD driver to DRM in
april 2017 and it took a little more than 3 years to do this
properly without leaving any platforms behind.

Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
As the framebuffer subsystem is orphaned I expect this to
go in through the drm-misc tree.
---
 MAINTAINERS                     |   5 -
 drivers/video/fbdev/Kconfig     |  20 -
 drivers/video/fbdev/Makefile    |   1 -
 drivers/video/fbdev/amba-clcd.c | 989 --------------------------------
 include/linux/amba/clcd.h       | 290 ----------
 5 files changed, 1305 deletions(-)
 delete mode 100644 drivers/video/fbdev/amba-clcd.c
 delete mode 100644 include/linux/amba/clcd.h

diff --git a/MAINTAINERS b/MAINTAINERS
index df86f6f06000..086894075397 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -1432,11 +1432,6 @@ S:	Odd Fixes
 F:	drivers/amba/
 F:	include/linux/amba/bus.h
 
-ARM PRIMECELL CLCD PL110 DRIVER
-M:	Russell King <linux@armlinux.org.uk>
-S:	Odd Fixes
-F:	drivers/video/fbdev/amba-clcd.*
-
 ARM PRIMECELL KMI PL050 DRIVER
 M:	Russell King <linux@armlinux.org.uk>
 S:	Odd Fixes
diff --git a/drivers/video/fbdev/Kconfig b/drivers/video/fbdev/Kconfig
index fa88e8b9a83d..0a5fc63e05d2 100644
--- a/drivers/video/fbdev/Kconfig
+++ b/drivers/video/fbdev/Kconfig
@@ -272,26 +272,6 @@ config FB_PM2_FIFO_DISCONNECT
 	help
 	  Support the Permedia2 FIFO disconnect feature.
 
-config FB_ARMCLCD
-	tristate "ARM PrimeCell PL110 support"
-	depends on ARM || ARM64 || COMPILE_TEST
-	depends on FB && ARM_AMBA && HAS_IOMEM
-	select FB_CFB_FILLRECT
-	select FB_CFB_COPYAREA
-	select FB_CFB_IMAGEBLIT
-	select FB_MODE_HELPERS if OF
-	select VIDEOMODE_HELPERS if OF
-	select BACKLIGHT_CLASS_DEVICE if OF
-	help
-	  This framebuffer device driver is for the ARM PrimeCell PL110
-	  Colour LCD controller.  ARM PrimeCells provide the building
-	  blocks for System on a Chip devices.
-
-	  If you want to compile this as a module (=code which can be
-	  inserted into and removed from the running kernel), say M
-	  here and read <file:Documentation/kbuild/modules.rst>.  The module
-	  will be called amba-clcd.
-
 config FB_ACORN
 	bool "Acorn VIDC support"
 	depends on (FB = y) && ARM && ARCH_ACORN
diff --git a/drivers/video/fbdev/Makefile b/drivers/video/fbdev/Makefile
index aa6352798cf4..76a43ec8f24c 100644
--- a/drivers/video/fbdev/Makefile
+++ b/drivers/video/fbdev/Makefile
@@ -75,7 +75,6 @@ obj-$(CONFIG_FB_HIT)              += hitfb.o
 obj-$(CONFIG_FB_ATMEL)		  += atmel_lcdfb.o
 obj-$(CONFIG_FB_PVR2)             += pvr2fb.o
 obj-$(CONFIG_FB_VOODOO1)          += sstfb.o
-obj-$(CONFIG_FB_ARMCLCD)	  += amba-clcd.o
 obj-$(CONFIG_FB_GOLDFISH)         += goldfishfb.o
 obj-$(CONFIG_FB_68328)            += 68328fb.o
 obj-$(CONFIG_FB_GBE)              += gbefb.o
diff --git a/drivers/video/fbdev/amba-clcd.c b/drivers/video/fbdev/amba-clcd.c
deleted file mode 100644
index c3d55fc6c4e0..000000000000
--- a/drivers/video/fbdev/amba-clcd.c
+++ /dev/null
@@ -1,989 +0,0 @@
-/*
- *  linux/drivers/video/amba-clcd.c
- *
- * Copyright (C) 2001 ARM Limited, by David A Rusling
- * Updated to 2.5, Deep Blue Solutions Ltd.
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file COPYING in the main directory of this archive
- * for more details.
- *
- *  ARM PrimeCell PL110 Color LCD Controller
- */
-#include <linux/amba/bus.h>
-#include <linux/amba/clcd.h>
-#include <linux/backlight.h>
-#include <linux/clk.h>
-#include <linux/delay.h>
-#include <linux/dma-mapping.h>
-#include <linux/fb.h>
-#include <linux/init.h>
-#include <linux/ioport.h>
-#include <linux/list.h>
-#include <linux/mm.h>
-#include <linux/module.h>
-#include <linux/of_address.h>
-#include <linux/of_graph.h>
-#include <linux/slab.h>
-#include <linux/string.h>
-#include <video/display_timing.h>
-#include <video/of_display_timing.h>
-#include <video/videomode.h>
-
-#define to_clcd(info)	container_of(info, struct clcd_fb, fb)
-
-/* This is limited to 16 characters when displayed by X startup */
-static const char *clcd_name = "CLCD FB";
-
-/*
- * Unfortunately, the enable/disable functions may be called either from
- * process or IRQ context, and we _need_ to delay.  This is _not_ good.
- */
-static inline void clcdfb_sleep(unsigned int ms)
-{
-	if (in_atomic()) {
-		mdelay(ms);
-	} else {
-		msleep(ms);
-	}
-}
-
-static inline void clcdfb_set_start(struct clcd_fb *fb)
-{
-	unsigned long ustart = fb->fb.fix.smem_start;
-	unsigned long lstart;
-
-	ustart += fb->fb.var.yoffset * fb->fb.fix.line_length;
-	lstart = ustart + fb->fb.var.yres * fb->fb.fix.line_length / 2;
-
-	writel(ustart, fb->regs + CLCD_UBAS);
-	writel(lstart, fb->regs + CLCD_LBAS);
-}
-
-static void clcdfb_disable(struct clcd_fb *fb)
-{
-	u32 val;
-
-	if (fb->board->disable)
-		fb->board->disable(fb);
-
-	if (fb->panel->backlight) {
-		fb->panel->backlight->props.power = FB_BLANK_POWERDOWN;
-		backlight_update_status(fb->panel->backlight);
-	}
-
-	val = readl(fb->regs + fb->off_cntl);
-	if (val & CNTL_LCDPWR) {
-		val &= ~CNTL_LCDPWR;
-		writel(val, fb->regs + fb->off_cntl);
-
-		clcdfb_sleep(20);
-	}
-	if (val & CNTL_LCDEN) {
-		val &= ~CNTL_LCDEN;
-		writel(val, fb->regs + fb->off_cntl);
-	}
-
-	/*
-	 * Disable CLCD clock source.
-	 */
-	if (fb->clk_enabled) {
-		fb->clk_enabled = false;
-		clk_disable(fb->clk);
-	}
-}
-
-static void clcdfb_enable(struct clcd_fb *fb, u32 cntl)
-{
-	/*
-	 * Enable the CLCD clock source.
-	 */
-	if (!fb->clk_enabled) {
-		fb->clk_enabled = true;
-		clk_enable(fb->clk);
-	}
-
-	/*
-	 * Bring up by first enabling..
-	 */
-	cntl |= CNTL_LCDEN;
-	writel(cntl, fb->regs + fb->off_cntl);
-
-	clcdfb_sleep(20);
-
-	/*
-	 * and now apply power.
-	 */
-	cntl |= CNTL_LCDPWR;
-	writel(cntl, fb->regs + fb->off_cntl);
-
-	/*
-	 * Turn on backlight
-	 */
-	if (fb->panel->backlight) {
-		fb->panel->backlight->props.power = FB_BLANK_UNBLANK;
-		backlight_update_status(fb->panel->backlight);
-	}
-
-	/*
-	 * finally, enable the interface.
-	 */
-	if (fb->board->enable)
-		fb->board->enable(fb);
-}
-
-static int
-clcdfb_set_bitfields(struct clcd_fb *fb, struct fb_var_screeninfo *var)
-{
-	u32 caps;
-	int ret = 0;
-
-	if (fb->panel->caps && fb->board->caps)
-		caps = fb->panel->caps & fb->board->caps;
-	else {
-		/* Old way of specifying what can be used */
-		caps = fb->panel->cntl & CNTL_BGR ?
-			CLCD_CAP_BGR : CLCD_CAP_RGB;
-		/* But mask out 444 modes as they weren't supported */
-		caps &= ~CLCD_CAP_444;
-	}
-
-	/* Only TFT panels can do RGB888/BGR888 */
-	if (!(fb->panel->cntl & CNTL_LCDTFT))
-		caps &= ~CLCD_CAP_888;
-
-	memset(&var->transp, 0, sizeof(var->transp));
-
-	var->red.msb_right = 0;
-	var->green.msb_right = 0;
-	var->blue.msb_right = 0;
-
-	switch (var->bits_per_pixel) {
-	case 1:
-	case 2:
-	case 4:
-	case 8:
-		/* If we can't do 5551, reject */
-		caps &= CLCD_CAP_5551;
-		if (!caps) {
-			ret = -EINVAL;
-			break;
-		}
-
-		var->red.length		= var->bits_per_pixel;
-		var->red.offset		= 0;
-		var->green.length	= var->bits_per_pixel;
-		var->green.offset	= 0;
-		var->blue.length	= var->bits_per_pixel;
-		var->blue.offset	= 0;
-		break;
-
-	case 16:
-		/* If we can't do 444, 5551 or 565, reject */
-		if (!(caps & (CLCD_CAP_444 | CLCD_CAP_5551 | CLCD_CAP_565))) {
-			ret = -EINVAL;
-			break;
-		}
-
-		/*
-		 * Green length can be 4, 5 or 6 depending whether
-		 * we're operating in 444, 5551 or 565 mode.
-		 */
-		if (var->green.length == 4 && caps & CLCD_CAP_444)
-			caps &= CLCD_CAP_444;
-		if (var->green.length == 5 && caps & CLCD_CAP_5551)
-			caps &= CLCD_CAP_5551;
-		else if (var->green.length == 6 && caps & CLCD_CAP_565)
-			caps &= CLCD_CAP_565;
-		else {
-			/*
-			 * PL110 officially only supports RGB555,
-			 * but may be wired up to allow RGB565.
-			 */
-			if (caps & CLCD_CAP_565) {
-				var->green.length = 6;
-				caps &= CLCD_CAP_565;
-			} else if (caps & CLCD_CAP_5551) {
-				var->green.length = 5;
-				caps &= CLCD_CAP_5551;
-			} else {
-				var->green.length = 4;
-				caps &= CLCD_CAP_444;
-			}
-		}
-
-		if (var->green.length >= 5) {
-			var->red.length = 5;
-			var->blue.length = 5;
-		} else {
-			var->red.length = 4;
-			var->blue.length = 4;
-		}
-		break;
-	case 32:
-		/* If we can't do 888, reject */
-		caps &= CLCD_CAP_888;
-		if (!caps) {
-			ret = -EINVAL;
-			break;
-		}
-
-		var->red.length = 8;
-		var->green.length = 8;
-		var->blue.length = 8;
-		break;
-	default:
-		ret = -EINVAL;
-		break;
-	}
-
-	/*
-	 * >= 16bpp displays have separate colour component bitfields
-	 * encoded in the pixel data.  Calculate their position from
-	 * the bitfield length defined above.
-	 */
-	if (ret == 0 && var->bits_per_pixel >= 16) {
-		bool bgr, rgb;
-
-		bgr = caps & CLCD_CAP_BGR && var->blue.offset == 0;
-		rgb = caps & CLCD_CAP_RGB && var->red.offset == 0;
-
-		if (!bgr && !rgb)
-			/*
-			 * The requested format was not possible, try just
-			 * our capabilities.  One of BGR or RGB must be
-			 * supported.
-			 */
-			bgr = caps & CLCD_CAP_BGR;
-
-		if (bgr) {
-			var->blue.offset = 0;
-			var->green.offset = var->blue.offset + var->blue.length;
-			var->red.offset = var->green.offset + var->green.length;
-		} else {
-			var->red.offset = 0;
-			var->green.offset = var->red.offset + var->red.length;
-			var->blue.offset = var->green.offset + var->green.length;
-		}
-	}
-
-	return ret;
-}
-
-static int clcdfb_check_var(struct fb_var_screeninfo *var, struct fb_info *info)
-{
-	struct clcd_fb *fb = to_clcd(info);
-	int ret = -EINVAL;
-
-	if (fb->board->check)
-		ret = fb->board->check(fb, var);
-
-	if (ret == 0 &&
-	    var->xres_virtual * var->bits_per_pixel / 8 *
-	    var->yres_virtual > fb->fb.fix.smem_len)
-		ret = -EINVAL;
-
-	if (ret == 0)
-		ret = clcdfb_set_bitfields(fb, var);
-
-	return ret;
-}
-
-static int clcdfb_set_par(struct fb_info *info)
-{
-	struct clcd_fb *fb = to_clcd(info);
-	struct clcd_regs regs;
-
-	fb->fb.fix.line_length = fb->fb.var.xres_virtual *
-				 fb->fb.var.bits_per_pixel / 8;
-
-	if (fb->fb.var.bits_per_pixel <= 8)
-		fb->fb.fix.visual = FB_VISUAL_PSEUDOCOLOR;
-	else
-		fb->fb.fix.visual = FB_VISUAL_TRUECOLOR;
-
-	fb->board->decode(fb, &regs);
-
-	clcdfb_disable(fb);
-
-	writel(regs.tim0, fb->regs + CLCD_TIM0);
-	writel(regs.tim1, fb->regs + CLCD_TIM1);
-	writel(regs.tim2, fb->regs + CLCD_TIM2);
-	writel(regs.tim3, fb->regs + CLCD_TIM3);
-
-	clcdfb_set_start(fb);
-
-	clk_set_rate(fb->clk, (1000000000 / regs.pixclock) * 1000);
-
-	fb->clcd_cntl = regs.cntl;
-
-	clcdfb_enable(fb, regs.cntl);
-
-#ifdef DEBUG
-	printk(KERN_INFO
-	       "CLCD: Registers set to\n"
-	       "  %08x %08x %08x %08x\n"
-	       "  %08x %08x %08x %08x\n",
-		readl(fb->regs + CLCD_TIM0), readl(fb->regs + CLCD_TIM1),
-		readl(fb->regs + CLCD_TIM2), readl(fb->regs + CLCD_TIM3),
-		readl(fb->regs + CLCD_UBAS), readl(fb->regs + CLCD_LBAS),
-		readl(fb->regs + fb->off_ienb), readl(fb->regs + fb->off_cntl));
-#endif
-
-	return 0;
-}
-
-static inline u32 convert_bitfield(int val, struct fb_bitfield *bf)
-{
-	unsigned int mask = (1 << bf->length) - 1;
-
-	return (val >> (16 - bf->length) & mask) << bf->offset;
-}
-
-/*
- *  Set a single color register. The values supplied have a 16 bit
- *  magnitude.  Return != 0 for invalid regno.
- */
-static int
-clcdfb_setcolreg(unsigned int regno, unsigned int red, unsigned int green,
-		 unsigned int blue, unsigned int transp, struct fb_info *info)
-{
-	struct clcd_fb *fb = to_clcd(info);
-
-	if (regno < 16)
-		fb->cmap[regno] = convert_bitfield(transp, &fb->fb.var.transp) |
-				  convert_bitfield(blue, &fb->fb.var.blue) |
-				  convert_bitfield(green, &fb->fb.var.green) |
-				  convert_bitfield(red, &fb->fb.var.red);
-
-	if (fb->fb.fix.visual == FB_VISUAL_PSEUDOCOLOR && regno < 256) {
-		int hw_reg = CLCD_PALETTE + ((regno * 2) & ~3);
-		u32 val, mask, newval;
-
-		newval  = (red >> 11)  & 0x001f;
-		newval |= (green >> 6) & 0x03e0;
-		newval |= (blue >> 1)  & 0x7c00;
-
-		/*
-		 * 3.2.11: if we're configured for big endian
-		 * byte order, the palette entries are swapped.
-		 */
-		if (fb->clcd_cntl & CNTL_BEBO)
-			regno ^= 1;
-
-		if (regno & 1) {
-			newval <<= 16;
-			mask = 0x0000ffff;
-		} else {
-			mask = 0xffff0000;
-		}
-
-		val = readl(fb->regs + hw_reg) & mask;
-		writel(val | newval, fb->regs + hw_reg);
-	}
-
-	return regno > 255;
-}
-
-/*
- *  Blank the screen if blank_mode != 0, else unblank. If blank == NULL
- *  then the caller blanks by setting the CLUT (Color Look Up Table) to all
- *  black. Return 0 if blanking succeeded, != 0 if un-/blanking failed due
- *  to e.g. a video mode which doesn't support it. Implements VESA suspend
- *  and powerdown modes on hardware that supports disabling hsync/vsync:
- *    blank_mode == 2: suspend vsync
- *    blank_mode == 3: suspend hsync
- *    blank_mode == 4: powerdown
- */
-static int clcdfb_blank(int blank_mode, struct fb_info *info)
-{
-	struct clcd_fb *fb = to_clcd(info);
-
-	if (blank_mode != 0) {
-		clcdfb_disable(fb);
-	} else {
-		clcdfb_enable(fb, fb->clcd_cntl);
-	}
-	return 0;
-}
-
-static int clcdfb_mmap(struct fb_info *info,
-		       struct vm_area_struct *vma)
-{
-	struct clcd_fb *fb = to_clcd(info);
-	unsigned long len, off = vma->vm_pgoff << PAGE_SHIFT;
-	int ret = -EINVAL;
-
-	len = info->fix.smem_len;
-
-	if (off <= len && vma->vm_end - vma->vm_start <= len - off &&
-	    fb->board->mmap)
-		ret = fb->board->mmap(fb, vma);
-
-	return ret;
-}
-
-static const struct fb_ops clcdfb_ops = {
-	.owner		= THIS_MODULE,
-	.fb_check_var	= clcdfb_check_var,
-	.fb_set_par	= clcdfb_set_par,
-	.fb_setcolreg	= clcdfb_setcolreg,
-	.fb_blank	= clcdfb_blank,
-	.fb_fillrect	= cfb_fillrect,
-	.fb_copyarea	= cfb_copyarea,
-	.fb_imageblit	= cfb_imageblit,
-	.fb_mmap	= clcdfb_mmap,
-};
-
-static int clcdfb_register(struct clcd_fb *fb)
-{
-	int ret;
-
-	/*
-	 * ARM PL111 always has IENB at 0x1c; it's only PL110
-	 * which is reversed on some platforms.
-	 */
-	if (amba_manf(fb->dev) == 0x41 && amba_part(fb->dev) == 0x111) {
-		fb->off_ienb = CLCD_PL111_IENB;
-		fb->off_cntl = CLCD_PL111_CNTL;
-	} else {
-		fb->off_ienb = CLCD_PL110_IENB;
-		fb->off_cntl = CLCD_PL110_CNTL;
-	}
-
-	fb->clk = clk_get(&fb->dev->dev, NULL);
-	if (IS_ERR(fb->clk)) {
-		ret = PTR_ERR(fb->clk);
-		goto out;
-	}
-
-	ret = clk_prepare(fb->clk);
-	if (ret)
-		goto free_clk;
-
-	fb->fb.device		= &fb->dev->dev;
-
-	fb->fb.fix.mmio_start	= fb->dev->res.start;
-	fb->fb.fix.mmio_len	= resource_size(&fb->dev->res);
-
-	fb->regs = ioremap(fb->fb.fix.mmio_start, fb->fb.fix.mmio_len);
-	if (!fb->regs) {
-		printk(KERN_ERR "CLCD: unable to remap registers\n");
-		ret = -ENOMEM;
-		goto clk_unprep;
-	}
-
-	fb->fb.fbops		= &clcdfb_ops;
-	fb->fb.flags		= FBINFO_FLAG_DEFAULT;
-	fb->fb.pseudo_palette	= fb->cmap;
-
-	strncpy(fb->fb.fix.id, clcd_name, sizeof(fb->fb.fix.id));
-	fb->fb.fix.type		= FB_TYPE_PACKED_PIXELS;
-	fb->fb.fix.type_aux	= 0;
-	fb->fb.fix.xpanstep	= 0;
-	fb->fb.fix.ypanstep	= 0;
-	fb->fb.fix.ywrapstep	= 0;
-	fb->fb.fix.accel	= FB_ACCEL_NONE;
-
-	fb->fb.var.xres		= fb->panel->mode.xres;
-	fb->fb.var.yres		= fb->panel->mode.yres;
-	fb->fb.var.xres_virtual	= fb->panel->mode.xres;
-	fb->fb.var.yres_virtual	= fb->panel->mode.yres;
-	fb->fb.var.bits_per_pixel = fb->panel->bpp;
-	fb->fb.var.grayscale	= fb->panel->grayscale;
-	fb->fb.var.pixclock	= fb->panel->mode.pixclock;
-	fb->fb.var.left_margin	= fb->panel->mode.left_margin;
-	fb->fb.var.right_margin	= fb->panel->mode.right_margin;
-	fb->fb.var.upper_margin	= fb->panel->mode.upper_margin;
-	fb->fb.var.lower_margin	= fb->panel->mode.lower_margin;
-	fb->fb.var.hsync_len	= fb->panel->mode.hsync_len;
-	fb->fb.var.vsync_len	= fb->panel->mode.vsync_len;
-	fb->fb.var.sync		= fb->panel->mode.sync;
-	fb->fb.var.vmode	= fb->panel->mode.vmode;
-	fb->fb.var.activate	= FB_ACTIVATE_NOW;
-	fb->fb.var.nonstd	= 0;
-	fb->fb.var.height	= fb->panel->height;
-	fb->fb.var.width	= fb->panel->width;
-	fb->fb.var.accel_flags	= 0;
-
-	fb->fb.monspecs.hfmin	= 0;
-	fb->fb.monspecs.hfmax   = 100000;
-	fb->fb.monspecs.vfmin	= 0;
-	fb->fb.monspecs.vfmax	= 400;
-	fb->fb.monspecs.dclkmin = 1000000;
-	fb->fb.monspecs.dclkmax	= 100000000;
-
-	/*
-	 * Make sure that the bitfields are set appropriately.
-	 */
-	clcdfb_set_bitfields(fb, &fb->fb.var);
-
-	/*
-	 * Allocate colourmap.
-	 */
-	ret = fb_alloc_cmap(&fb->fb.cmap, 256, 0);
-	if (ret)
-		goto unmap;
-
-	/*
-	 * Ensure interrupts are disabled.
-	 */
-	writel(0, fb->regs + fb->off_ienb);
-
-	fb_set_var(&fb->fb, &fb->fb.var);
-
-	dev_info(&fb->dev->dev, "%s hardware, %s display\n",
-	         fb->board->name, fb->panel->mode.name);
-
-	ret = register_framebuffer(&fb->fb);
-	if (ret == 0)
-		goto out;
-
-	printk(KERN_ERR "CLCD: cannot register framebuffer (%d)\n", ret);
-
-	fb_dealloc_cmap(&fb->fb.cmap);
- unmap:
-	iounmap(fb->regs);
- clk_unprep:
-	clk_unprepare(fb->clk);
- free_clk:
-	clk_put(fb->clk);
- out:
-	return ret;
-}
-
-#ifdef CONFIG_OF
-static int clcdfb_of_get_dpi_panel_mode(struct device_node *node,
-		struct clcd_panel *clcd_panel)
-{
-	int err;
-	struct display_timing timing;
-	struct videomode video;
-
-	err = of_get_display_timing(node, "panel-timing", &timing);
-	if (err) {
-		pr_err("%pOF: problems parsing panel-timing (%d)\n", node, err);
-		return err;
-	}
-
-	videomode_from_timing(&timing, &video);
-
-	err = fb_videomode_from_videomode(&video, &clcd_panel->mode);
-	if (err)
-		return err;
-
-	/* Set up some inversion flags */
-	if (timing.flags & DISPLAY_FLAGS_PIXDATA_NEGEDGE)
-		clcd_panel->tim2 |= TIM2_IPC;
-	else if (!(timing.flags & DISPLAY_FLAGS_PIXDATA_POSEDGE))
-		/*
-		 * To preserve backwards compatibility, the IPC (inverted
-		 * pixel clock) flag needs to be set on any display that
-		 * doesn't explicitly specify that the pixel clock is
-		 * active on the negative or positive edge.
-		 */
-		clcd_panel->tim2 |= TIM2_IPC;
-
-	if (timing.flags & DISPLAY_FLAGS_HSYNC_LOW)
-		clcd_panel->tim2 |= TIM2_IHS;
-
-	if (timing.flags & DISPLAY_FLAGS_VSYNC_LOW)
-		clcd_panel->tim2 |= TIM2_IVS;
-
-	if (timing.flags & DISPLAY_FLAGS_DE_LOW)
-		clcd_panel->tim2 |= TIM2_IOE;
-
-	return 0;
-}
-
-static int clcdfb_snprintf_mode(char *buf, int size, struct fb_videomode *mode)
-{
-	return snprintf(buf, size, "%ux%u@%u", mode->xres, mode->yres,
-			mode->refresh);
-}
-
-static int clcdfb_of_get_backlight(struct device_node *panel,
-				   struct clcd_panel *clcd_panel)
-{
-	struct device_node *backlight;
-
-	/* Look up the optional backlight phandle */
-	backlight = of_parse_phandle(panel, "backlight", 0);
-	if (backlight) {
-		clcd_panel->backlight = of_find_backlight_by_node(backlight);
-		of_node_put(backlight);
-
-		if (!clcd_panel->backlight)
-			return -EPROBE_DEFER;
-	}
-	return 0;
-}
-
-static int clcdfb_of_get_mode(struct device *dev, struct device_node *panel,
-			      struct clcd_panel *clcd_panel)
-{
-	int err;
-	struct fb_videomode *mode;
-	char *name;
-	int len;
-
-	/* Only directly connected DPI panels supported for now */
-	if (of_device_is_compatible(panel, "panel-dpi"))
-		err = clcdfb_of_get_dpi_panel_mode(panel, clcd_panel);
-	else
-		err = -ENOENT;
-	if (err)
-		return err;
-	mode = &clcd_panel->mode;
-
-	len = clcdfb_snprintf_mode(NULL, 0, mode);
-	name = devm_kzalloc(dev, len + 1, GFP_KERNEL);
-	if (!name)
-		return -ENOMEM;
-
-	clcdfb_snprintf_mode(name, len + 1, mode);
-	mode->name = name;
-
-	return 0;
-}
-
-static int clcdfb_of_init_tft_panel(struct clcd_fb *fb, u32 r0, u32 g0, u32 b0)
-{
-	static struct {
-		unsigned int part;
-		u32 r0, g0, b0;
-		u32 caps;
-	} panels[] = {
-		{ 0x110, 1,  7, 13, CLCD_CAP_5551 },
-		{ 0x110, 0,  8, 16, CLCD_CAP_888 },
-		{ 0x110, 16, 8, 0,  CLCD_CAP_888 },
-		{ 0x111, 4, 14, 20, CLCD_CAP_444 },
-		{ 0x111, 3, 11, 19, CLCD_CAP_444 | CLCD_CAP_5551 },
-		{ 0x111, 3, 10, 19, CLCD_CAP_444 | CLCD_CAP_5551 |
-				    CLCD_CAP_565 },
-		{ 0x111, 0,  8, 16, CLCD_CAP_444 | CLCD_CAP_5551 |
-				    CLCD_CAP_565 | CLCD_CAP_888 },
-	};
-	int i;
-
-	/* Bypass pixel clock divider */
-	fb->panel->tim2 |= TIM2_BCD;
-
-	/* TFT display, vert. comp. interrupt at the start of the back porch */
-	fb->panel->cntl |= CNTL_LCDTFT | CNTL_LCDVCOMP(1);
-
-	fb->panel->caps = 0;
-
-	/* Match the setup with known variants */
-	for (i = 0; i < ARRAY_SIZE(panels) && !fb->panel->caps; i++) {
-		if (amba_part(fb->dev) != panels[i].part)
-			continue;
-		if (g0 != panels[i].g0)
-			continue;
-		if (r0 == panels[i].r0 && b0 == panels[i].b0)
-			fb->panel->caps = panels[i].caps;
-	}
-
-	/*
-	 * If we actually physically connected the R lines to B and
-	 * vice versa
-	 */
-	if (r0 != 0 && b0 == 0)
-		fb->panel->bgr_connection = true;
-
-	return fb->panel->caps ? 0 : -EINVAL;
-}
-
-static int clcdfb_of_init_display(struct clcd_fb *fb)
-{
-	struct device_node *endpoint, *panel;
-	int err;
-	unsigned int bpp;
-	u32 max_bandwidth;
-	u32 tft_r0b0g0[3];
-
-	fb->panel = devm_kzalloc(&fb->dev->dev, sizeof(*fb->panel), GFP_KERNEL);
-	if (!fb->panel)
-		return -ENOMEM;
-
-	/*
-	 * Fetch the panel endpoint.
-	 */
-	endpoint = of_graph_get_next_endpoint(fb->dev->dev.of_node, NULL);
-	if (!endpoint)
-		return -ENODEV;
-
-	panel = of_graph_get_remote_port_parent(endpoint);
-	if (!panel)
-		return -ENODEV;
-
-	err = clcdfb_of_get_backlight(panel, fb->panel);
-	if (err)
-		return err;
-
-	err = clcdfb_of_get_mode(&fb->dev->dev, panel, fb->panel);
-	if (err)
-		return err;
-
-	err = of_property_read_u32(fb->dev->dev.of_node, "max-memory-bandwidth",
-			&max_bandwidth);
-	if (!err) {
-		/*
-		 * max_bandwidth is in bytes per second and pixclock in
-		 * pico-seconds, so the maximum allowed bits per pixel is
-		 *   8 * max_bandwidth / (PICOS2KHZ(pixclock) * 1000)
-		 * Rearrange this calculation to avoid overflow and then ensure
-		 * result is a valid format.
-		 */
-		bpp = max_bandwidth / (1000 / 8)
-			/ PICOS2KHZ(fb->panel->mode.pixclock);
-		bpp = rounddown_pow_of_two(bpp);
-		if (bpp > 32)
-			bpp = 32;
-	} else
-		bpp = 32;
-	fb->panel->bpp = bpp;
-
-#ifdef CONFIG_CPU_BIG_ENDIAN
-	fb->panel->cntl |= CNTL_BEBO;
-#endif
-	fb->panel->width = -1;
-	fb->panel->height = -1;
-
-	if (of_property_read_u32_array(endpoint,
-			"arm,pl11x,tft-r0g0b0-pads",
-			tft_r0b0g0, ARRAY_SIZE(tft_r0b0g0)) != 0)
-		return -ENOENT;
-
-	return clcdfb_of_init_tft_panel(fb, tft_r0b0g0[0],
-					tft_r0b0g0[1],  tft_r0b0g0[2]);
-}
-
-static int clcdfb_of_vram_setup(struct clcd_fb *fb)
-{
-	int err;
-	struct device_node *memory;
-	u64 size;
-
-	err = clcdfb_of_init_display(fb);
-	if (err)
-		return err;
-
-	memory = of_parse_phandle(fb->dev->dev.of_node, "memory-region", 0);
-	if (!memory)
-		return -ENODEV;
-
-	fb->fb.screen_base = of_iomap(memory, 0);
-	if (!fb->fb.screen_base)
-		return -ENOMEM;
-
-	fb->fb.fix.smem_start = of_translate_address(memory,
-			of_get_address(memory, 0, &size, NULL));
-	fb->fb.fix.smem_len = size;
-
-	return 0;
-}
-
-static int clcdfb_of_vram_mmap(struct clcd_fb *fb, struct vm_area_struct *vma)
-{
-	unsigned long off, user_size, kernel_size;
-
-
-	off = vma->vm_pgoff << PAGE_SHIFT;
-	user_size = vma->vm_end - vma->vm_start;
-	kernel_size = fb->fb.fix.smem_len;
-
-	if (off >= kernel_size || user_size > (kernel_size - off))
-		return -ENXIO;
-
-	return remap_pfn_range(vma, vma->vm_start,
-			__phys_to_pfn(fb->fb.fix.smem_start) + vma->vm_pgoff,
-			user_size,
-			pgprot_writecombine(vma->vm_page_prot));
-}
-
-static void clcdfb_of_vram_remove(struct clcd_fb *fb)
-{
-	iounmap(fb->fb.screen_base);
-}
-
-static int clcdfb_of_dma_setup(struct clcd_fb *fb)
-{
-	unsigned long framesize;
-	dma_addr_t dma;
-	int err;
-
-	err = clcdfb_of_init_display(fb);
-	if (err)
-		return err;
-
-	framesize = PAGE_ALIGN(fb->panel->mode.xres * fb->panel->mode.yres *
-			fb->panel->bpp / 8);
-	fb->fb.screen_base = dma_alloc_coherent(&fb->dev->dev, framesize,
-			&dma, GFP_KERNEL);
-	if (!fb->fb.screen_base)
-		return -ENOMEM;
-
-	fb->fb.fix.smem_start = dma;
-	fb->fb.fix.smem_len = framesize;
-
-	return 0;
-}
-
-static int clcdfb_of_dma_mmap(struct clcd_fb *fb, struct vm_area_struct *vma)
-{
-	return dma_mmap_wc(&fb->dev->dev, vma, fb->fb.screen_base,
-			   fb->fb.fix.smem_start, fb->fb.fix.smem_len);
-}
-
-static void clcdfb_of_dma_remove(struct clcd_fb *fb)
-{
-	dma_free_coherent(&fb->dev->dev, fb->fb.fix.smem_len,
-			fb->fb.screen_base, fb->fb.fix.smem_start);
-}
-
-static struct clcd_board *clcdfb_of_get_board(struct amba_device *dev)
-{
-	struct clcd_board *board = devm_kzalloc(&dev->dev, sizeof(*board),
-			GFP_KERNEL);
-	struct device_node *node = dev->dev.of_node;
-
-	if (!board)
-		return NULL;
-
-	board->name = of_node_full_name(node);
-	board->caps = CLCD_CAP_ALL;
-	board->check = clcdfb_check;
-	board->decode = clcdfb_decode;
-	if (of_find_property(node, "memory-region", NULL)) {
-		board->setup = clcdfb_of_vram_setup;
-		board->mmap = clcdfb_of_vram_mmap;
-		board->remove = clcdfb_of_vram_remove;
-	} else {
-		board->setup = clcdfb_of_dma_setup;
-		board->mmap = clcdfb_of_dma_mmap;
-		board->remove = clcdfb_of_dma_remove;
-	}
-
-	return board;
-}
-#else
-static struct clcd_board *clcdfb_of_get_board(struct amba_device *dev)
-{
-	return NULL;
-}
-#endif
-
-static int clcdfb_probe(struct amba_device *dev, const struct amba_id *id)
-{
-	struct clcd_board *board = dev_get_platdata(&dev->dev);
-	struct clcd_fb *fb;
-	int ret;
-
-	if (!board)
-		board = clcdfb_of_get_board(dev);
-
-	if (!board)
-		return -EINVAL;
-
-	ret = dma_set_mask_and_coherent(&dev->dev, DMA_BIT_MASK(32));
-	if (ret)
-		goto out;
-
-	ret = amba_request_regions(dev, NULL);
-	if (ret) {
-		printk(KERN_ERR "CLCD: unable to reserve regs region\n");
-		goto out;
-	}
-
-	fb = kzalloc(sizeof(*fb), GFP_KERNEL);
-	if (!fb) {
-		ret = -ENOMEM;
-		goto free_region;
-	}
-
-	fb->dev = dev;
-	fb->board = board;
-
-	dev_info(&fb->dev->dev, "PL%03x designer %02x rev%u at 0x%08llx\n",
-		amba_part(dev), amba_manf(dev), amba_rev(dev),
-		(unsigned long long)dev->res.start);
-
-	ret = fb->board->setup(fb);
-	if (ret)
-		goto free_fb;
-
-	ret = clcdfb_register(fb);
-	if (ret == 0) {
-		amba_set_drvdata(dev, fb);
-		goto out;
-	}
-
-	fb->board->remove(fb);
- free_fb:
-	kfree(fb);
- free_region:
-	amba_release_regions(dev);
- out:
-	return ret;
-}
-
-static int clcdfb_remove(struct amba_device *dev)
-{
-	struct clcd_fb *fb = amba_get_drvdata(dev);
-
-	clcdfb_disable(fb);
-	unregister_framebuffer(&fb->fb);
-	if (fb->fb.cmap.len)
-		fb_dealloc_cmap(&fb->fb.cmap);
-	iounmap(fb->regs);
-	clk_unprepare(fb->clk);
-	clk_put(fb->clk);
-
-	fb->board->remove(fb);
-
-	kfree(fb);
-
-	amba_release_regions(dev);
-
-	return 0;
-}
-
-static const struct amba_id clcdfb_id_table[] = {
-	{
-		.id	= 0x00041110,
-		.mask	= 0x000ffffe,
-	},
-	{ 0, 0 },
-};
-
-MODULE_DEVICE_TABLE(amba, clcdfb_id_table);
-
-static struct amba_driver clcd_driver = {
-	.drv 		= {
-		.name	= "clcd-pl11x",
-	},
-	.probe		= clcdfb_probe,
-	.remove		= clcdfb_remove,
-	.id_table	= clcdfb_id_table,
-};
-
-static int __init amba_clcdfb_init(void)
-{
-	if (fb_get_options("ambafb", NULL))
-		return -ENODEV;
-
-	return amba_driver_register(&clcd_driver);
-}
-
-module_init(amba_clcdfb_init);
-
-static void __exit amba_clcdfb_exit(void)
-{
-	amba_driver_unregister(&clcd_driver);
-}
-
-module_exit(amba_clcdfb_exit);
-
-MODULE_DESCRIPTION("ARM PrimeCell PL110 CLCD core driver");
-MODULE_LICENSE("GPL");
diff --git a/include/linux/amba/clcd.h b/include/linux/amba/clcd.h
deleted file mode 100644
index b6e0cbeaf533..000000000000
--- a/include/linux/amba/clcd.h
+++ /dev/null
@@ -1,290 +0,0 @@
-/*
- * linux/include/asm-arm/hardware/amba_clcd.h -- Integrator LCD panel.
- *
- * David A Rusling
- *
- * Copyright (C) 2001 ARM Limited
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file COPYING in the main directory of this archive
- * for more details.
- */
-#include <linux/fb.h>
-#include <linux/amba/clcd-regs.h>
-
-enum {
-	/* individual formats */
-	CLCD_CAP_RGB444		= (1 << 0),
-	CLCD_CAP_RGB5551	= (1 << 1),
-	CLCD_CAP_RGB565		= (1 << 2),
-	CLCD_CAP_RGB888		= (1 << 3),
-	CLCD_CAP_BGR444		= (1 << 4),
-	CLCD_CAP_BGR5551	= (1 << 5),
-	CLCD_CAP_BGR565		= (1 << 6),
-	CLCD_CAP_BGR888		= (1 << 7),
-
-	/* connection layouts */
-	CLCD_CAP_444		= CLCD_CAP_RGB444 | CLCD_CAP_BGR444,
-	CLCD_CAP_5551		= CLCD_CAP_RGB5551 | CLCD_CAP_BGR5551,
-	CLCD_CAP_565		= CLCD_CAP_RGB565 | CLCD_CAP_BGR565,
-	CLCD_CAP_888		= CLCD_CAP_RGB888 | CLCD_CAP_BGR888,
-
-	/* red/blue ordering */
-	CLCD_CAP_RGB		= CLCD_CAP_RGB444 | CLCD_CAP_RGB5551 |
-				  CLCD_CAP_RGB565 | CLCD_CAP_RGB888,
-	CLCD_CAP_BGR		= CLCD_CAP_BGR444 | CLCD_CAP_BGR5551 |
-				  CLCD_CAP_BGR565 | CLCD_CAP_BGR888,
-
-	CLCD_CAP_ALL		= CLCD_CAP_BGR | CLCD_CAP_RGB,
-};
-
-struct backlight_device;
-
-struct clcd_panel {
-	struct fb_videomode	mode;
-	signed short		width;	/* width in mm */
-	signed short		height;	/* height in mm */
-	u32			tim2;
-	u32			tim3;
-	u32			cntl;
-	u32			caps;
-	unsigned int		bpp:8,
-				fixedtimings:1,
-				grayscale:1;
-	unsigned int		connector;
-	struct backlight_device	*backlight;
-	/*
-	 * If the B/R lines are switched between the CLCD
-	 * and the panel we need to know this and not try to
-	 * compensate with the BGR bit in the control register.
-	 */
-	bool			bgr_connection;
-};
-
-struct clcd_regs {
-	u32			tim0;
-	u32			tim1;
-	u32			tim2;
-	u32			tim3;
-	u32			cntl;
-	unsigned long		pixclock;
-};
-
-struct clcd_fb;
-
-/*
- * the board-type specific routines
- */
-struct clcd_board {
-	const char *name;
-
-	/*
-	 * Optional.  Hardware capability flags.
-	 */
-	u32	caps;
-
-	/*
-	 * Optional.  Check whether the var structure is acceptable
-	 * for this display.
-	 */
-	int	(*check)(struct clcd_fb *fb, struct fb_var_screeninfo *var);
-
-	/*
-	 * Compulsory.  Decode fb->fb.var into regs->*.  In the case of
-	 * fixed timing, set regs->* to the register values required.
-	 */
-	void	(*decode)(struct clcd_fb *fb, struct clcd_regs *regs);
-
-	/*
-	 * Optional.  Disable any extra display hardware.
-	 */
-	void	(*disable)(struct clcd_fb *);
-
-	/*
-	 * Optional.  Enable any extra display hardware.
-	 */
-	void	(*enable)(struct clcd_fb *);
-
-	/*
-	 * Setup platform specific parts of CLCD driver
-	 */
-	int	(*setup)(struct clcd_fb *);
-
-	/*
-	 * mmap the framebuffer memory
-	 */
-	int	(*mmap)(struct clcd_fb *, struct vm_area_struct *);
-
-	/*
-	 * Remove platform specific parts of CLCD driver
-	 */
-	void	(*remove)(struct clcd_fb *);
-};
-
-struct amba_device;
-struct clk;
-
-/* this data structure describes each frame buffer device we find */
-struct clcd_fb {
-	struct fb_info		fb;
-	struct amba_device	*dev;
-	struct clk		*clk;
-	struct clcd_panel	*panel;
-	struct clcd_board	*board;
-	void			*board_data;
-	void __iomem		*regs;
-	u16			off_ienb;
-	u16			off_cntl;
-	u32			clcd_cntl;
-	u32			cmap[16];
-	bool			clk_enabled;
-};
-
-static inline void clcdfb_decode(struct clcd_fb *fb, struct clcd_regs *regs)
-{
-	struct fb_var_screeninfo *var = &fb->fb.var;
-	u32 val, cpl;
-
-	/*
-	 * Program the CLCD controller registers and start the CLCD
-	 */
-	val = ((var->xres / 16) - 1) << 2;
-	val |= (var->hsync_len - 1) << 8;
-	val |= (var->right_margin - 1) << 16;
-	val |= (var->left_margin - 1) << 24;
-	regs->tim0 = val;
-
-	val = var->yres;
-	if (fb->panel->cntl & CNTL_LCDDUAL)
-		val /= 2;
-	val -= 1;
-	val |= (var->vsync_len - 1) << 10;
-	val |= var->lower_margin << 16;
-	val |= var->upper_margin << 24;
-	regs->tim1 = val;
-
-	val = fb->panel->tim2;
-	val |= var->sync & FB_SYNC_HOR_HIGH_ACT  ? 0 : TIM2_IHS;
-	val |= var->sync & FB_SYNC_VERT_HIGH_ACT ? 0 : TIM2_IVS;
-
-	cpl = var->xres_virtual;
-	if (fb->panel->cntl & CNTL_LCDTFT)	  /* TFT */
-		/* / 1 */;
-	else if (!var->grayscale)		  /* STN color */
-		cpl = cpl * 8 / 3;
-	else if (fb->panel->cntl & CNTL_LCDMONO8) /* STN monochrome, 8bit */
-		cpl /= 8;
-	else					  /* STN monochrome, 4bit */
-		cpl /= 4;
-
-	regs->tim2 = val | ((cpl - 1) << 16);
-
-	regs->tim3 = fb->panel->tim3;
-
-	val = fb->panel->cntl;
-	if (var->grayscale)
-		val |= CNTL_LCDBW;
-
-	if (fb->panel->caps && fb->board->caps && var->bits_per_pixel >= 16) {
-		/*
-		 * if board and panel supply capabilities, we can support
-		 * changing BGR/RGB depending on supplied parameters. Here
-		 * we switch to what the framebuffer is providing if need
-		 * be, so if the framebuffer is BGR but the display connection
-		 * is RGB (first case) we switch it around. Vice versa mutatis
-		 * mutandis if the framebuffer is RGB but the display connection
-		 * is BGR, we flip it around.
-		 */
-		if (var->red.offset == 0)
-			val &= ~CNTL_BGR;
-		else
-			val |= CNTL_BGR;
-		if (fb->panel->bgr_connection)
-			val ^= CNTL_BGR;
-	}
-
-	switch (var->bits_per_pixel) {
-	case 1:
-		val |= CNTL_LCDBPP1;
-		break;
-	case 2:
-		val |= CNTL_LCDBPP2;
-		break;
-	case 4:
-		val |= CNTL_LCDBPP4;
-		break;
-	case 8:
-		val |= CNTL_LCDBPP8;
-		break;
-	case 16:
-		/*
-		 * PL110 cannot choose between 5551 and 565 modes in its
-		 * control register.  It is possible to use 565 with
-		 * custom external wiring.
-		 */
-		if (amba_part(fb->dev) == 0x110 ||
-		    var->green.length == 5)
-			val |= CNTL_LCDBPP16;
-		else if (var->green.length == 6)
-			val |= CNTL_LCDBPP16_565;
-		else
-			val |= CNTL_LCDBPP16_444;
-		break;
-	case 32:
-		val |= CNTL_LCDBPP24;
-		break;
-	}
-
-	regs->cntl = val;
-	regs->pixclock = var->pixclock;
-}
-
-static inline int clcdfb_check(struct clcd_fb *fb, struct fb_var_screeninfo *var)
-{
-	var->xres_virtual = var->xres = (var->xres + 15) & ~15;
-	var->yres_virtual = var->yres = (var->yres + 1) & ~1;
-
-#define CHECK(e,l,h) (var->e < l || var->e > h)
-	if (CHECK(right_margin, (5+1), 256) ||	/* back porch */
-	    CHECK(left_margin, (5+1), 256) ||	/* front porch */
-	    CHECK(hsync_len, (5+1), 256) ||
-	    var->xres > 4096 ||
-	    var->lower_margin > 255 ||		/* back porch */
-	    var->upper_margin > 255 ||		/* front porch */
-	    var->vsync_len > 32 ||
-	    var->yres > 1024)
-		return -EINVAL;
-#undef CHECK
-
-	/* single panel mode: PCD = max(PCD, 1) */
-	/* dual panel mode: PCD = max(PCD, 5) */
-
-	/*
-	 * You can't change the grayscale setting, and
-	 * we can only do non-interlaced video.
-	 */
-	if (var->grayscale != fb->fb.var.grayscale ||
-	    (var->vmode & FB_VMODE_MASK) != FB_VMODE_NONINTERLACED)
-		return -EINVAL;
-
-#define CHECK(e) (var->e != fb->fb.var.e)
-	if (fb->panel->fixedtimings &&
-	    (CHECK(xres)		||
-	     CHECK(yres)		||
-	     CHECK(bits_per_pixel)	||
-	     CHECK(pixclock)		||
-	     CHECK(left_margin)		||
-	     CHECK(right_margin)	||
-	     CHECK(upper_margin)	||
-	     CHECK(lower_margin)	||
-	     CHECK(hsync_len)		||
-	     CHECK(vsync_len)		||
-	     CHECK(sync)))
-		return -EINVAL;
-#undef CHECK
-
-	var->nonstd = 0;
-	var->accel_flags = 0;
-
-	return 0;
-}
-- 
2.25.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 3/4] drm: pl111: Absorb the external register header
  2020-06-09 20:04 [PATCH 1/4] drm: pl111: Credit where credit is due Linus Walleij
  2020-06-09 20:04 ` [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver Linus Walleij
@ 2020-06-09 20:04 ` Linus Walleij
  2020-06-09 20:04 ` [PATCH 4/4] drm: pl111: Update documentation Linus Walleij
  2 siblings, 0 replies; 17+ messages in thread
From: Linus Walleij @ 2020-06-09 20:04 UTC (permalink / raw)
  To: dri-devel, Maarten Lankhorst, Maxime Ripard, Sean Paul,
	Eric Anholt, Russell King
  Cc: Linus Walleij, linux-arm-kernel

The PL111 DRM driver is now the sole user of the external
CLCD registers header file, so let's absorb that into the
pl111_drm.h file and save the external include.

Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/gpu/drm/pl111/pl111_debugfs.c   |  1 -
 drivers/gpu/drm/pl111/pl111_display.c   |  1 -
 drivers/gpu/drm/pl111/pl111_drm.h       | 73 +++++++++++++++++++++
 drivers/gpu/drm/pl111/pl111_drv.c       |  1 -
 drivers/gpu/drm/pl111/pl111_versatile.c |  1 -
 include/linux/amba/clcd-regs.h          | 87 -------------------------
 6 files changed, 73 insertions(+), 91 deletions(-)
 delete mode 100644 include/linux/amba/clcd-regs.h

diff --git a/drivers/gpu/drm/pl111/pl111_debugfs.c b/drivers/gpu/drm/pl111/pl111_debugfs.c
index 26ca8cdf3e60..317f68abf18b 100644
--- a/drivers/gpu/drm/pl111/pl111_debugfs.c
+++ b/drivers/gpu/drm/pl111/pl111_debugfs.c
@@ -3,7 +3,6 @@
  *  Copyright © 2017 Broadcom
  */
 
-#include <linux/amba/clcd-regs.h>
 #include <linux/seq_file.h>
 
 #include <drm/drm_debugfs.h>
diff --git a/drivers/gpu/drm/pl111/pl111_display.c b/drivers/gpu/drm/pl111/pl111_display.c
index 703ddc803c55..b3e8697cafcf 100644
--- a/drivers/gpu/drm/pl111/pl111_display.c
+++ b/drivers/gpu/drm/pl111/pl111_display.c
@@ -9,7 +9,6 @@
  * Copyright (C) 2011 Texas Instruments
  */
 
-#include <linux/amba/clcd-regs.h>
 #include <linux/clk.h>
 #include <linux/delay.h>
 #include <linux/version.h>
diff --git a/drivers/gpu/drm/pl111/pl111_drm.h b/drivers/gpu/drm/pl111/pl111_drm.h
index ba399bcb792f..24df72afeb0d 100644
--- a/drivers/gpu/drm/pl111/pl111_drm.h
+++ b/drivers/gpu/drm/pl111/pl111_drm.h
@@ -23,6 +23,79 @@
 #include <drm/drm_panel.h>
 #include <drm/drm_simple_kms_helper.h>
 
+/*
+ * CLCD Controller Internal Register addresses
+ */
+#define CLCD_TIM0		0x00000000
+#define CLCD_TIM1 		0x00000004
+#define CLCD_TIM2 		0x00000008
+#define CLCD_TIM3 		0x0000000c
+#define CLCD_UBAS 		0x00000010
+#define CLCD_LBAS 		0x00000014
+
+#define CLCD_PL110_IENB		0x00000018
+#define CLCD_PL110_CNTL		0x0000001c
+#define CLCD_PL110_STAT		0x00000020
+#define CLCD_PL110_INTR 	0x00000024
+#define CLCD_PL110_UCUR		0x00000028
+#define CLCD_PL110_LCUR		0x0000002C
+
+#define CLCD_PL111_CNTL		0x00000018
+#define CLCD_PL111_IENB		0x0000001c
+#define CLCD_PL111_RIS		0x00000020
+#define CLCD_PL111_MIS		0x00000024
+#define CLCD_PL111_ICR		0x00000028
+#define CLCD_PL111_UCUR		0x0000002c
+#define CLCD_PL111_LCUR		0x00000030
+
+#define CLCD_PALL 		0x00000200
+#define CLCD_PALETTE		0x00000200
+
+#define TIM2_PCD_LO_MASK	GENMASK(4, 0)
+#define TIM2_PCD_LO_BITS	5
+#define TIM2_CLKSEL		(1 << 5)
+#define TIM2_ACB_MASK		GENMASK(10, 6)
+#define TIM2_IVS		(1 << 11)
+#define TIM2_IHS		(1 << 12)
+#define TIM2_IPC		(1 << 13)
+#define TIM2_IOE		(1 << 14)
+#define TIM2_BCD		(1 << 26)
+#define TIM2_PCD_HI_MASK	GENMASK(31, 27)
+#define TIM2_PCD_HI_BITS	5
+#define TIM2_PCD_HI_SHIFT	27
+
+#define CNTL_LCDEN		(1 << 0)
+#define CNTL_LCDBPP1		(0 << 1)
+#define CNTL_LCDBPP2		(1 << 1)
+#define CNTL_LCDBPP4		(2 << 1)
+#define CNTL_LCDBPP8		(3 << 1)
+#define CNTL_LCDBPP16		(4 << 1)
+#define CNTL_LCDBPP16_565	(6 << 1)
+#define CNTL_LCDBPP16_444	(7 << 1)
+#define CNTL_LCDBPP24		(5 << 1)
+#define CNTL_LCDBW		(1 << 4)
+#define CNTL_LCDTFT		(1 << 5)
+#define CNTL_LCDMONO8		(1 << 6)
+#define CNTL_LCDDUAL		(1 << 7)
+#define CNTL_BGR		(1 << 8)
+#define CNTL_BEBO		(1 << 9)
+#define CNTL_BEPO		(1 << 10)
+#define CNTL_LCDPWR		(1 << 11)
+#define CNTL_LCDVCOMP(x)	((x) << 12)
+#define CNTL_LDMAFIFOTIME	(1 << 15)
+#define CNTL_WATERMARK		(1 << 16)
+
+/* ST Microelectronics variant bits */
+#define CNTL_ST_1XBPP_444	0x0
+#define CNTL_ST_1XBPP_5551	(1 << 17)
+#define CNTL_ST_1XBPP_565	(1 << 18)
+#define CNTL_ST_CDWID_12	0x0
+#define CNTL_ST_CDWID_16	(1 << 19)
+#define CNTL_ST_CDWID_18	(1 << 20)
+#define CNTL_ST_CDWID_24	((1 << 19)|(1 << 20))
+#define CNTL_ST_CEAEN		(1 << 21)
+#define CNTL_ST_LCDBPP24_PACKED	(6 << 1)
+
 #define CLCD_IRQ_NEXTBASE_UPDATE BIT(2)
 
 struct drm_minor;
diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
index da0c39dae874..96e58fda75d8 100644
--- a/drivers/gpu/drm/pl111/pl111_drv.c
+++ b/drivers/gpu/drm/pl111/pl111_drv.c
@@ -47,7 +47,6 @@
  */
 
 #include <linux/amba/bus.h>
-#include <linux/amba/clcd-regs.h>
 #include <linux/dma-buf.h>
 #include <linux/module.h>
 #include <linux/of.h>
diff --git a/drivers/gpu/drm/pl111/pl111_versatile.c b/drivers/gpu/drm/pl111/pl111_versatile.c
index 1127082e9a60..bdd883f4f0da 100644
--- a/drivers/gpu/drm/pl111/pl111_versatile.c
+++ b/drivers/gpu/drm/pl111/pl111_versatile.c
@@ -9,7 +9,6 @@
  * Major contributions and discoveries by Russell King.
  */
 
-#include <linux/amba/clcd-regs.h>
 #include <linux/bitops.h>
 #include <linux/device.h>
 #include <linux/mfd/syscon.h>
diff --git a/include/linux/amba/clcd-regs.h b/include/linux/amba/clcd-regs.h
deleted file mode 100644
index 421b0fa90d6a..000000000000
--- a/include/linux/amba/clcd-regs.h
+++ /dev/null
@@ -1,87 +0,0 @@
-/*
- * David A Rusling
- *
- * Copyright (C) 2001 ARM Limited
- *
- * This file is subject to the terms and conditions of the GNU General Public
- * License.  See the file COPYING in the main directory of this archive
- * for more details.
- */
-
-#ifndef AMBA_CLCD_REGS_H
-#define AMBA_CLCD_REGS_H
-
-/*
- * CLCD Controller Internal Register addresses
- */
-#define CLCD_TIM0		0x00000000
-#define CLCD_TIM1 		0x00000004
-#define CLCD_TIM2 		0x00000008
-#define CLCD_TIM3 		0x0000000c
-#define CLCD_UBAS 		0x00000010
-#define CLCD_LBAS 		0x00000014
-
-#define CLCD_PL110_IENB		0x00000018
-#define CLCD_PL110_CNTL		0x0000001c
-#define CLCD_PL110_STAT		0x00000020
-#define CLCD_PL110_INTR 	0x00000024
-#define CLCD_PL110_UCUR		0x00000028
-#define CLCD_PL110_LCUR		0x0000002C
-
-#define CLCD_PL111_CNTL		0x00000018
-#define CLCD_PL111_IENB		0x0000001c
-#define CLCD_PL111_RIS		0x00000020
-#define CLCD_PL111_MIS		0x00000024
-#define CLCD_PL111_ICR		0x00000028
-#define CLCD_PL111_UCUR		0x0000002c
-#define CLCD_PL111_LCUR		0x00000030
-
-#define CLCD_PALL 		0x00000200
-#define CLCD_PALETTE		0x00000200
-
-#define TIM2_PCD_LO_MASK	GENMASK(4, 0)
-#define TIM2_PCD_LO_BITS	5
-#define TIM2_CLKSEL		(1 << 5)
-#define TIM2_ACB_MASK		GENMASK(10, 6)
-#define TIM2_IVS		(1 << 11)
-#define TIM2_IHS		(1 << 12)
-#define TIM2_IPC		(1 << 13)
-#define TIM2_IOE		(1 << 14)
-#define TIM2_BCD		(1 << 26)
-#define TIM2_PCD_HI_MASK	GENMASK(31, 27)
-#define TIM2_PCD_HI_BITS	5
-#define TIM2_PCD_HI_SHIFT	27
-
-#define CNTL_LCDEN		(1 << 0)
-#define CNTL_LCDBPP1		(0 << 1)
-#define CNTL_LCDBPP2		(1 << 1)
-#define CNTL_LCDBPP4		(2 << 1)
-#define CNTL_LCDBPP8		(3 << 1)
-#define CNTL_LCDBPP16		(4 << 1)
-#define CNTL_LCDBPP16_565	(6 << 1)
-#define CNTL_LCDBPP16_444	(7 << 1)
-#define CNTL_LCDBPP24		(5 << 1)
-#define CNTL_LCDBW		(1 << 4)
-#define CNTL_LCDTFT		(1 << 5)
-#define CNTL_LCDMONO8		(1 << 6)
-#define CNTL_LCDDUAL		(1 << 7)
-#define CNTL_BGR		(1 << 8)
-#define CNTL_BEBO		(1 << 9)
-#define CNTL_BEPO		(1 << 10)
-#define CNTL_LCDPWR		(1 << 11)
-#define CNTL_LCDVCOMP(x)	((x) << 12)
-#define CNTL_LDMAFIFOTIME	(1 << 15)
-#define CNTL_WATERMARK		(1 << 16)
-
-/* ST Microelectronics variant bits */
-#define CNTL_ST_1XBPP_444	0x0
-#define CNTL_ST_1XBPP_5551	(1 << 17)
-#define CNTL_ST_1XBPP_565	(1 << 18)
-#define CNTL_ST_CDWID_12	0x0
-#define CNTL_ST_CDWID_16	(1 << 19)
-#define CNTL_ST_CDWID_18	(1 << 20)
-#define CNTL_ST_CDWID_24	((1 << 19)|(1 << 20))
-#define CNTL_ST_CEAEN		(1 << 21)
-#define CNTL_ST_LCDBPP24_PACKED	(6 << 1)
-
-#endif /* AMBA_CLCD_REGS_H */
-- 
2.25.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* [PATCH 4/4] drm: pl111: Update documentation
  2020-06-09 20:04 [PATCH 1/4] drm: pl111: Credit where credit is due Linus Walleij
  2020-06-09 20:04 ` [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver Linus Walleij
  2020-06-09 20:04 ` [PATCH 3/4] drm: pl111: Absorb the external register header Linus Walleij
@ 2020-06-09 20:04 ` Linus Walleij
  2020-06-09 20:10   ` Eric Anholt
  2020-06-10  7:37   ` kernel test robot
  2 siblings, 2 replies; 17+ messages in thread
From: Linus Walleij @ 2020-06-09 20:04 UTC (permalink / raw)
  To: dri-devel, Maarten Lankhorst, Maxime Ripard, Sean Paul,
	Eric Anholt, Russell King
  Cc: Linus Walleij, linux-arm-kernel

Remove notes about migrating from the old driver which is
retired as all users are now migrated.

Update the text to reflect that we support PL110 and PL111
alike.

Drop the bullet on memory bandwidth scaling: this has been
implemented.

Cc: Russell King <linux@armlinux.org.uk>
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
---
 drivers/gpu/drm/pl111/pl111_drv.c | 20 +++++---------------
 1 file changed, 5 insertions(+), 15 deletions(-)

diff --git a/drivers/gpu/drm/pl111/pl111_drv.c b/drivers/gpu/drm/pl111/pl111_drv.c
index 96e58fda75d8..46b0d1c4a16c 100644
--- a/drivers/gpu/drm/pl111/pl111_drv.c
+++ b/drivers/gpu/drm/pl111/pl111_drv.c
@@ -10,18 +10,11 @@
  */
 
 /**
- * DOC: ARM PrimeCell PL111 CLCD Driver
+ * DOC: ARM PrimeCell PL110 and PL111 CLCD Driver
  *
- * The PL111 is a simple LCD controller that can support TFT and STN
- * displays.  This driver exposes a standard KMS interface for them.
- *
- * This driver uses the same Device Tree binding as the fbdev CLCD
- * driver.  While the fbdev driver supports panels that may be
- * connected to the CLCD internally to the CLCD driver, in DRM the
- * panels get split out to drivers/gpu/drm/panels/.  This means that,
- * in converting from using fbdev to using DRM, you also need to write
- * a panel driver (which may be as simple as an entry in
- * panel-simple.c).
+ * The PL110/PL111 is a simple LCD controller that can support TFT
+ * and STN displays. This driver exposes a standard KMS interface
+ * for them.
  *
  * The driver currently doesn't expose the cursor.  The DRM API for
  * cursors requires support for 64x64 ARGB8888 cursor images, while
@@ -29,16 +22,13 @@
  * cursors.  While one could imagine trying to hack something together
  * to look at the ARGB8888 and program reasonable in monochrome, we
  * just don't expose the cursor at all instead, and leave cursor
- * support to the X11 software cursor layer.
+ * support to the application software cursor layer.
  *
  * TODO:
  *
  * - Fix race between setting plane base address and getting IRQ for
  *   vsync firing the pageflip completion.
  *
- * - Use the "max-memory-bandwidth" DT property to filter the
- *   supported formats.
- *
  * - Read back hardware state at boot to skip reprogramming the
  *   hardware when doing a no-op modeset.
  *
-- 
2.25.4


_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-09 20:04 ` [PATCH 4/4] drm: pl111: Update documentation Linus Walleij
@ 2020-06-09 20:10   ` Eric Anholt
  2020-06-09 20:17     ` Linus Walleij
  2020-06-10  7:37   ` kernel test robot
  1 sibling, 1 reply; 17+ messages in thread
From: Eric Anholt @ 2020-06-09 20:10 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Maarten Lankhorst, Russell King, Maxime Ripard, DRI Development,
	Sean Paul, linux-arm-kernel

On Tue, Jun 9, 2020 at 1:08 PM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> Remove notes about migrating from the old driver which is
> retired as all users are now migrated.
>
> Update the text to reflect that we support PL110 and PL111
> alike.
>
> Drop the bullet on memory bandwidth scaling: this has been
> implemented.
>
> Cc: Russell King <linux@armlinux.org.uk>
> Signed-off-by: Linus Walleij <linus.walleij@linaro.org>

FWIW, series is Reviewed-by: Eric Anholt <eric@anholt.net>

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-09 20:10   ` Eric Anholt
@ 2020-06-09 20:17     ` Linus Walleij
  2020-06-09 20:53       ` Eric Anholt
  0 siblings, 1 reply; 17+ messages in thread
From: Linus Walleij @ 2020-06-09 20:17 UTC (permalink / raw)
  To: Eric Anholt
  Cc: Maarten Lankhorst, Russell King, Maxime Ripard, DRI Development,
	Sean Paul, Linux ARM

On Tue, Jun 9, 2020 at 10:11 PM Eric Anholt <eric@anholt.net> wrote:

> FWIW, series is Reviewed-by: Eric Anholt <eric@anholt.net>

Thanks Eric, do I remember correct that you were using this
driver for something like a clock display? Are you still using it
for that?

Nowadays the biggest user is arguably the ARM FVP emulator
which is running a full Android stack using this driver.

Yours,
Linus Walleij

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-09 20:17     ` Linus Walleij
@ 2020-06-09 20:53       ` Eric Anholt
  0 siblings, 0 replies; 17+ messages in thread
From: Eric Anholt @ 2020-06-09 20:53 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Maarten Lankhorst, Russell King, Maxime Ripard, DRI Development,
	Sean Paul, Linux ARM

On Tue, Jun 9, 2020 at 1:17 PM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> On Tue, Jun 9, 2020 at 10:11 PM Eric Anholt <eric@anholt.net> wrote:
>
> > FWIW, series is Reviewed-by: Eric Anholt <eric@anholt.net>
>
> Thanks Eric, do I remember correct that you were using this
> driver for something like a clock display? Are you still using it
> for that?
>
> Nowadays the biggest user is arguably the ARM FVP emulator
> which is running a full Android stack using this driver.

I've since moved on from Broadcom (now working at Google on open
source qualcomm graphics) but as far as I know the HW team at broadcom
making those phones will still be using this driver in combination
with vc4.  I had ported their phone as a vehicle to get vc4 onto more
versions of the graphics chip and hopefully get more of bcm invested
in open source graphics.

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-09 20:04 ` [PATCH 4/4] drm: pl111: Update documentation Linus Walleij
  2020-06-09 20:10   ` Eric Anholt
@ 2020-06-10  7:37   ` kernel test robot
  2020-06-12 11:04     ` Linus Walleij
  2020-06-16 16:12     ` Emil Velikov
  1 sibling, 2 replies; 17+ messages in thread
From: kernel test robot @ 2020-06-10  7:37 UTC (permalink / raw)
  To: Linus Walleij, dri-devel, Maarten Lankhorst, Maxime Ripard,
	Sean Paul, Eric Anholt, Russell King
  Cc: kbuild-all, linux-arm-kernel

[-- Attachment #1: Type: text/plain, Size: 25405 bytes --]

Hi Linus,

I love your patch! Perhaps something to improve:

[auto build test WARNING on drm-exynos/exynos-drm-next]
[also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next linus/master v5.7 next-20200609]
[cannot apply to drm-tip/drm-tip drm/drm-next]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]

url:    https://github.com/0day-ci/linux/commits/Linus-Walleij/drm-pl111-Credit-where-credit-is-due/20200610-041025
base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
reproduce: make htmldocs

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

All warnings (new ones prefixed by >>, old ones prefixed by <<):

include/kunit/test.h:182: warning: Function parameter or member 'debugfs' not described in 'kunit_suite'
include/kunit/test.h:182: warning: Function parameter or member 'log' not described in 'kunit_suite'
include/kunit/test.h:268: warning: Excess function parameter 'suites' description in 'kunit_test_suites'
include/net/mac80211.h:832: warning: Enum value 'IEEE80211_TX_CTRL_HW_80211_ENCAP' not described in enum 'mac80211_tx_control_flags'
net/mac80211/sta_info.h:104: warning: Enum value 'WLAN_STA_USES_ENCRYPTION' not described in enum 'ieee80211_sta_info_flags'
drivers/dma-buf/dma-buf.c:678: warning: Function parameter or member 'importer_ops' not described in 'dma_buf_dynamic_attach'
drivers/dma-buf/dma-buf.c:678: warning: Function parameter or member 'importer_priv' not described in 'dma_buf_dynamic_attach'
include/linux/dma-buf.h:347: warning: Incorrect use of kernel-doc format:          * @move_notify
include/linux/gpio/driver.h:499: warning: Function parameter or member 'gc' not described in 'gpiochip_add_data'
include/linux/gpio/driver.h:499: warning: Excess function parameter 'chip' description in 'gpiochip_add_data'
include/linux/iio/iio.h:574: warning: Function parameter or member 'read_buf' not described in 'iio_dev'
include/linux/iio/iio.h:574: warning: Function parameter or member 'read_buf_len' not described in 'iio_dev'
drivers/infiniband/core/umem_odp.c:161: warning: Function parameter or member 'ops' not described in 'ib_umem_odp_alloc_child'
drivers/infiniband/core/umem_odp.c:225: warning: Function parameter or member 'ops' not described in 'ib_umem_odp_get'
drivers/infiniband/ulp/iser/iscsi_iser.h:401: warning: Function parameter or member 'all_list' not described in 'iser_fr_desc'
drivers/infiniband/ulp/iser/iscsi_iser.h:415: warning: Function parameter or member 'all_list' not described in 'iser_fr_pool'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd0' not described in 'opa_vesw_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd1' not described in 'opa_vesw_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd2' not described in 'opa_vesw_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd3' not described in 'opa_vesw_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:148: warning: Function parameter or member 'rsvd4' not described in 'opa_vesw_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd0' not described in 'opa_per_veswport_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd1' not described in 'opa_per_veswport_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd2' not described in 'opa_per_veswport_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:205: warning: Function parameter or member 'rsvd3' not described in 'opa_per_veswport_info'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:342: warning: Function parameter or member 'reserved' not described in 'opa_veswport_summary_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd0' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd1' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd2' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd3' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd4' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd5' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd6' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd7' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd8' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:394: warning: Function parameter or member 'rsvd9' not described in 'opa_veswport_error_counters'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:460: warning: Function parameter or member 'reserved' not described in 'opa_vnic_vema_mad'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:485: warning: Function parameter or member 'reserved' not described in 'opa_vnic_notice_attr'
drivers/infiniband/ulp/opa_vnic/opa_vnic_encap.h:500: warning: Function parameter or member 'reserved' not described in 'opa_vnic_vema_mad_trap'
include/linux/input/sparse-keymap.h:43: warning: Function parameter or member 'sw' not described in 'key_entry'
include/linux/regulator/machine.h:196: warning: Function parameter or member 'max_uV_step' not described in 'regulation_constraints'
include/linux/regulator/driver.h:223: warning: Function parameter or member 'resume' not described in 'regulator_ops'
include/linux/spi/spi.h:664: warning: Function parameter or member 'buswidth_override_bits' not described in 'spi_controller'
include/linux/spi/spi.h:943: warning: Function parameter or member 'timestamped' not described in 'spi_transfer'
drivers/usb/typec/bus.c:1: warning: 'typec_altmode_register_driver' not found
drivers/usb/typec/bus.c:1: warning: 'typec_altmode_unregister_driver' not found
include/linux/usb.h:713: warning: Function parameter or member 'use_generic_driver' not described in 'usb_device'
include/linux/usb.h:1253: warning: Function parameter or member 'match' not described in 'usb_device_driver'
include/linux/usb.h:1253: warning: Function parameter or member 'id_table' not described in 'usb_device_driver'
drivers/gpu/drm/amd/amdgpu/amdgpu_xgmi.c:1: warning: no structured comments found
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c:1: warning: no structured comments found
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3389: warning: Excess function parameter 'suspend' description in 'amdgpu_device_suspend'
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3486: warning: Excess function parameter 'resume' description in 'amdgpu_device_resume'
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3389: warning: Excess function parameter 'suspend' description in 'amdgpu_device_suspend'
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3486: warning: Excess function parameter 'resume' description in 'amdgpu_device_resume'
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3389: warning: Excess function parameter 'suspend' description in 'amdgpu_device_suspend'
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3486: warning: Excess function parameter 'resume' description in 'amdgpu_device_resume'
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:418: warning: Excess function parameter 'tbo' description in 'amdgpu_vram_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:418: warning: Excess function parameter 'place' description in 'amdgpu_vram_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:418: warning: Excess function parameter 'tbo' description in 'amdgpu_vram_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:418: warning: Excess function parameter 'place' description in 'amdgpu_vram_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:418: warning: Excess function parameter 'tbo' description in 'amdgpu_vram_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:418: warning: Excess function parameter 'place' description in 'amdgpu_vram_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:418: warning: Excess function parameter 'tbo' description in 'amdgpu_vram_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c:418: warning: Excess function parameter 'place' description in 'amdgpu_vram_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c:279: warning: Excess function parameter 'tbo' description in 'amdgpu_gtt_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c:279: warning: Excess function parameter 'place' description in 'amdgpu_gtt_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c:279: warning: Excess function parameter 'tbo' description in 'amdgpu_gtt_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_gtt_mgr.c:279: warning: Excess function parameter 'place' description in 'amdgpu_gtt_mgr_del'
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3389: warning: Excess function parameter 'suspend' description in 'amdgpu_device_suspend'
drivers/gpu/drm/amd/amdgpu/amdgpu_device.c:3486: warning: Excess function parameter 'resume' description in 'amdgpu_device_resume'
drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h:331: warning: Function parameter or member 'hdcp_workqueue' not described in 'amdgpu_display_manager'
include/drm/drm_dp_helper.h:1767: warning: Function parameter or member 'hbr2_reset' not described in 'drm_dp_phy_test_params'
drivers/gpu/drm/drm_dp_helper.c:1599: warning: Function parameter or member 'dp_rev' not described in 'drm_dp_set_phy_test_pattern'
>> drivers/gpu/drm/pl111/pl111_drv.c:1: warning: 'ARM PrimeCell PL111 CLCD Driver' not found
include/linux/host1x.h:66: warning: Function parameter or member 'parent' not described in 'host1x_client'
include/linux/host1x.h:66: warning: Function parameter or member 'usecount' not described in 'host1x_client'
include/linux/host1x.h:66: warning: Function parameter or member 'lock' not described in 'host1x_client'
include/linux/phylink.h:54: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(advertising' not described in 'phylink_link_state'
include/linux/phylink.h:54: warning: Function parameter or member '__ETHTOOL_DECLARE_LINK_MODE_MASK(lp_advertising' not described in 'phylink_link_state'
include/linux/phylink.h:333: warning: Function parameter or member 'pcs_config' not described in 'int'
include/linux/phylink.h:333: warning: Excess function parameter 'config' description in 'int'
include/linux/phylink.h:333: warning: Excess function parameter 'mode' description in 'int'
include/linux/phylink.h:333: warning: Excess function parameter 'interface' description in 'int'
include/linux/phylink.h:333: warning: Excess function parameter 'advertising' description in 'int'
include/linux/phylink.h:342: warning: Function parameter or member 'pcs_an_restart' not described in 'void'
include/linux/phylink.h:342: warning: Excess function parameter 'config' description in 'void'
include/linux/phylink.h:358: warning: Function parameter or member 'pcs_link_up' not described in 'void'
include/linux/phylink.h:358: warning: Excess function parameter 'config' description in 'void'
include/linux/phylink.h:358: warning: Excess function parameter 'mode' description in 'void'
include/linux/phylink.h:358: warning: Excess function parameter 'interface' description in 'void'
include/linux/phylink.h:358: warning: Excess function parameter 'speed' description in 'void'
include/linux/phylink.h:358: warning: Excess function parameter 'duplex' description in 'void'
Documentation/PCI/boot-interrupts.rst:42: WARNING: Unexpected indentation.
Documentation/PCI/boot-interrupts.rst:52: WARNING: Block quote ends without a blank line; unexpected unindent.
Documentation/PCI/boot-interrupts.rst:92: WARNING: Unexpected indentation.
Documentation/PCI/boot-interrupts.rst:98: WARNING: Unexpected indentation.
Documentation/PCI/boot-interrupts.rst:136: WARNING: Unexpected indentation.
Documentation/PCI/endpoint/pci-endpoint.rst:164: WARNING: duplicate label pci/endpoint/pci-endpoint:apis for the pci endpoint function driver, other instance in Documentation/PCI/endpoint/pci-endpoint.rst
Documentation/PCI/endpoint/pci-endpoint.rst:208: WARNING: duplicate label pci/endpoint/pci-endpoint:other apis, other instance in Documentation/PCI/endpoint/pci-endpoint.rst
Documentation/RCU/Design/Data-Structures/Data-Structures.rst:377: WARNING: duplicate label rcu/design/data-structures/data-structures:grace-period tracking, other instance in Documentation/RCU/Design/Data-Structures/Data-Structures.rst
Documentation/admin-guide/LSM/Smack.rst:380: WARNING: duplicate label admin-guide/lsm/smack:smack, other instance in Documentation/admin-guide/LSM/Smack.rst
Documentation/admin-guide/cgroup-v2.rst:2508: WARNING: duplicate label admin-guide/cgroup-v2:memory, other instance in Documentation/admin-guide/cgroup-v2.rst
Documentation/admin-guide/device-mapper/thin-provisioning.rst:158: WARNING: duplicate label admin-guide/device-mapper/thin-provisioning:thin provisioning, other instance in Documentation/admin-guide/device-mapper/thin-provisioning.rst
Documentation/admin-guide/hw-vuln/spectre.rst:421: WARNING: duplicate label admin-guide/hw-vuln/spectre:spectre variant 1, other instance in Documentation/admin-guide/hw-vuln/spectre.rst
Documentation/admin-guide/hw-vuln/spectre.rst:439: WARNING: duplicate label admin-guide/hw-vuln/spectre:spectre variant 2, other instance in Documentation/admin-guide/hw-vuln/spectre.rst
Documentation/admin-guide/kdump/vmcoreinfo.rst:391: WARNING: duplicate label admin-guide/kdump/vmcoreinfo:kerneloffset, other instance in Documentation/admin-guide/kdump/vmcoreinfo.rst
Documentation/admin-guide/kdump/vmcoreinfo.rst:434: WARNING: duplicate label admin-guide/kdump/vmcoreinfo:contig_page_data, other instance in Documentation/admin-guide/kdump/vmcoreinfo.rst
Documentation/admin-guide/kdump/vmcoreinfo.rst:481: WARNING: duplicate label admin-guide/kdump/vmcoreinfo:node_data|(node_data, max_numnodes), other instance in Documentation/admin-guide/kdump/vmcoreinfo.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:623: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:procfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:631: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:sysfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:707: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:procfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:717: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:sysfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:791: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:procfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:820: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:sysfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:951: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:procfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:957: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:sysfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:1044: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:procfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:1053: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:sysfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:1276: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:procfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:1315: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:sysfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:1387: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:procfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:1395: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:sysfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:1424: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:procfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/laptops/thinkpad-acpi.rst:1449: WARNING: duplicate label admin-guide/laptops/thinkpad-acpi:sysfs notes, other instance in Documentation/admin-guide/laptops/thinkpad-acpi.rst
Documentation/admin-guide/mm/userfaultfd.rst:139: WARNING: Inline emphasis start-string without end-string.
Documentation/admin-guide/mm/userfaultfd.rst:139: WARNING: Inline emphasis start-string without end-string.
Documentation/admin-guide/ras.rst:358: WARNING: Definition list ends without a blank line; unexpected unindent.
Documentation/admin-guide/ras.rst:358: WARNING: Definition list ends without a blank line; unexpected unindent.
Documentation/admin-guide/ras.rst:363: WARNING: Definition list ends without a blank line; unexpected unindent.
Documentation/admin-guide/ras.rst:363: WARNING: Definition list ends without a blank line; unexpected unindent.
Documentation/admin-guide/sysctl/fs.rst:315: WARNING: duplicate label admin-guide/sysctl/fs:aio-nr & aio-max-nr, other instance in Documentation/admin-guide/sysctl/fs.rst
Documentation/arm64/amu.rst:26: WARNING: Unexpected indentation.
Documentation/arm64/amu.rst:60: WARNING: Unexpected indentation.
Documentation/arm64/amu.rst:81: WARNING: Unexpected indentation.
Documentation/arm64/amu.rst:108: WARNING: Unexpected indentation.
Documentation/arm64/booting.rst:253: WARNING: Unexpected indentation.
Documentation/arm64/booting.rst:259: WARNING: Block quote ends without a blank line; unexpected unindent.
Documentation/bpf/prog_cgroup_sockopt.rst:57: WARNING: duplicate label bpf/prog_cgroup_sockopt:return type, other instance in Documentation/bpf/prog_cgroup_sockopt.rst
lib/bitmap.c:189: WARNING: Unexpected indentation.
lib/bitmap.c:190: WARNING: Block quote ends without a blank line; unexpected unindent.
lib/bitmap.c:190: WARNING: Unexpected indentation.
lib/bitmap.c:191: WARNING: Line block ends without a blank line.
kernel/rcu/update.c:65: WARNING: Inline emphasis start-string without end-string.
kernel/rcu/update.c:65: WARNING: Inline emphasis start-string without end-string.
kernel/rcu/update.c:70: WARNING: Inline emphasis start-string without end-string.
kernel/rcu/update.c:82: WARNING: Inline emphasis start-string without end-string.
Documentation/crypto/devel-algos.rst:109: WARNING: duplicate label crypto/devel-algos:registration specifics, other instance in Documentation/crypto/devel-algos.rst
Documentation/dev-tools/coccinelle.rst:391: WARNING: duplicate label dev-tools/coccinelle:example, other instance in Documentation/dev-tools/coccinelle.rst
Documentation/dev-tools/coccinelle.rst:437: WARNING: duplicate label dev-tools/coccinelle:example, other instance in Documentation/dev-tools/coccinelle.rst
Documentation/dev-tools/coccinelle.rst:474: WARNING: duplicate label dev-tools/coccinelle:example, other instance in Documentation/dev-tools/coccinelle.rst
Documentation/dev-tools/kunit/start.rst:109: WARNING: duplicate label dev-tools/kunit/start:running the tests, other instance in Documentation/dev-tools/kunit/start.rst
include/uapi/linux/firewire-cdev.h:312: WARNING: Inline literal start-string without end-string.
drivers/firewire/core-transaction.c:606: WARNING: Inline strong start-string without end-string.
drivers/infiniband/core/verbs.c:2579: WARNING: Unexpected indentation.
drivers/infiniband/core/verbs.c:2581: WARNING: Block quote ends without a blank line; unexpected unindent.
drivers/infiniband/core/verbs.c:2613: WARNING: Unexpected indentation.
drivers/base/platform.c:153: WARNING: Unexpected indentation.
drivers/base/platform.c:232: WARNING: Unexpected indentation.
drivers/ata/libata-core.c:5212: WARNING: Unknown target name: "hw".
Documentation/driver-api/men-chameleon-bus.rst:59: WARNING: duplicate label driver-api/men-chameleon-bus:men chameleon bus, other instance in Documentation/driver-api/men-chameleon-bus.rst
drivers/message/fusion/mptbase.c:5057: WARNING: Definition list ends without a blank line; unexpected unindent.
Documentation/driver-api/parport-lowlevel.rst:246: WARNING: duplicate label driver-api/parport-lowlevel:synopsis, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:261: WARNING: duplicate label driver-api/parport-lowlevel:description, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:268: WARNING: duplicate label driver-api/parport-lowlevel:example, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:285: WARNING: duplicate label driver-api/parport-lowlevel:see also, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:295: WARNING: duplicate label driver-api/parport-lowlevel:synopsis, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:304: WARNING: duplicate label driver-api/parport-lowlevel:description, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:313: WARNING: duplicate label driver-api/parport-lowlevel:return value, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:319: WARNING: duplicate label driver-api/parport-lowlevel:errors, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:325: WARNING: duplicate label driver-api/parport-lowlevel:example, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:351: WARNING: duplicate label driver-api/parport-lowlevel:see also, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:361: WARNING: duplicate label driver-api/parport-lowlevel:synopsis, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:380: WARNING: duplicate label driver-api/parport-lowlevel:description, other instance in Documentation/driver-api/parport-lowlevel.rst
Documentation/driver-api/parport-lowlevel.rst:434: WARNING: duplicate label driver-api/parport-lowlevel:return value, other instance in Documentation/driver-api/parport-lowlevel.rst

vim +1 drivers/gpu/drm/pl111/pl111_drv.c

e559355a9da60a Thomas Gleixner 2019-06-01  @1  // SPDX-License-Identifier: GPL-2.0-only
bed41005e6174d Tom Cooksey     2017-04-12   2  /*
bed41005e6174d Tom Cooksey     2017-04-12   3   * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
bed41005e6174d Tom Cooksey     2017-04-12   4   *
bed41005e6174d Tom Cooksey     2017-04-12   5   * Parts of this file were based on sources as follows:
bed41005e6174d Tom Cooksey     2017-04-12   6   *
bed41005e6174d Tom Cooksey     2017-04-12   7   * Copyright (c) 2006-2008 Intel Corporation
bed41005e6174d Tom Cooksey     2017-04-12   8   * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
bed41005e6174d Tom Cooksey     2017-04-12   9   * Copyright (C) 2011 Texas Instruments
bed41005e6174d Tom Cooksey     2017-04-12  10   */
bed41005e6174d Tom Cooksey     2017-04-12  11  

:::::: The code at line 1 was first introduced by commit
:::::: e559355a9da60a2388893d9e9da66c79fd604b9a treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 443

:::::: TO: Thomas Gleixner <tglx@linutronix.de>
:::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org

[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 7356 bytes --]

[-- Attachment #3: Type: text/plain, Size: 176 bytes --]

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-10  7:37   ` kernel test robot
@ 2020-06-12 11:04     ` Linus Walleij
  2020-06-12 11:14       ` Sam Ravnborg
  2020-06-12 12:40       ` [kbuild-all] " Philip Li
  2020-06-16 16:12     ` Emil Velikov
  1 sibling, 2 replies; 17+ messages in thread
From: Linus Walleij @ 2020-06-12 11:04 UTC (permalink / raw)
  To: kernel test robot
  Cc: kbuild-all, Maarten Lankhorst, Russell King, Maxime Ripard,
	Eric Anholt, open list:DRM PANEL DRIVERS, Sean Paul, Linux ARM

On Wed, Jun 10, 2020 at 9:38 AM kernel test robot <lkp@intel.com> wrote:

> I love your patch! Perhaps something to improve:
>
> [auto build test WARNING on drm-exynos/exynos-drm-next]
> [also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next linus/master v5.7 next-20200609]
> [cannot apply to drm-tip/drm-tip drm/drm-next]
> [if your patch is applied to the wrong git tree, please drop us a note to help
> improve the system. BTW, we also suggest to use '--base' option to specify the
> base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
>
> url:    https://github.com/0day-ci/linux/commits/Linus-Walleij/drm-pl111-Credit-where-credit-is-due/20200610-041025
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
> reproduce: make htmldocs
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>

What on earth was that. The robot reports on a patch only adding a few lines
of comments as breaking the whole universe, and none of these systems
even use the PL111.

Yours,
Linus Walleij

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-12 11:04     ` Linus Walleij
@ 2020-06-12 11:14       ` Sam Ravnborg
  2020-06-12 12:40       ` [kbuild-all] " Philip Li
  1 sibling, 0 replies; 17+ messages in thread
From: Sam Ravnborg @ 2020-06-12 11:14 UTC (permalink / raw)
  To: Linus Walleij
  Cc: kbuild-all, kernel test robot, Russell King,
	open list:DRM PANEL DRIVERS, Sean Paul, Linux ARM

Hi Linus.
On Fri, Jun 12, 2020 at 01:04:02PM +0200, Linus Walleij wrote:
> On Wed, Jun 10, 2020 at 9:38 AM kernel test robot <lkp@intel.com> wrote:
> 
> > I love your patch! Perhaps something to improve:
> >
> > [auto build test WARNING on drm-exynos/exynos-drm-next]
> > [also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next linus/master v5.7 next-20200609]
> > [cannot apply to drm-tip/drm-tip drm/drm-next]
> > [if your patch is applied to the wrong git tree, please drop us a note to help
> > improve the system. BTW, we also suggest to use '--base' option to specify the
> > base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
> >
> > url:    https://github.com/0day-ci/linux/commits/Linus-Walleij/drm-pl111-Credit-where-credit-is-due/20200610-041025
> > base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
> > reproduce: make htmldocs
> >
> > If you fix the issue, kindly add following tag as appropriate
> > Reported-by: kernel test robot <lkp@intel.com>
> 
> What on earth was that. The robot reports on a patch only adding a few lines
> of comments as breaking the whole universe, and none of these systems
> even use the PL111.
The patch changes this:
/**
- * DOC: ARM PrimeCell PL111 CLCD Driver
+ * DOC: ARM PrimeCell PL110 and PL111 CLCD Driver

The "DOC: ARM PrimeCell PL111 CLCD Driver" is used by kernel-doc
to match the DOC section.
So this patch caused a new warning when one odes "make htmldocs".

See Documentation/gpu/pl111.rst

	Sam

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [kbuild-all] Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-12 11:04     ` Linus Walleij
  2020-06-12 11:14       ` Sam Ravnborg
@ 2020-06-12 12:40       ` Philip Li
  1 sibling, 0 replies; 17+ messages in thread
From: Philip Li @ 2020-06-12 12:40 UTC (permalink / raw)
  To: Linus Walleij
  Cc: kbuild-all, kernel test robot, Maarten Lankhorst, Russell King,
	Maxime Ripard, Eric Anholt, open list:DRM PANEL DRIVERS,
	Sean Paul, Linux ARM

On Fri, Jun 12, 2020 at 01:04:02PM +0200, Linus Walleij wrote:
> On Wed, Jun 10, 2020 at 9:38 AM kernel test robot <lkp@intel.com> wrote:
> 
> > I love your patch! Perhaps something to improve:
> >
> > [auto build test WARNING on drm-exynos/exynos-drm-next]
> > [also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next linus/master v5.7 next-20200609]
> > [cannot apply to drm-tip/drm-tip drm/drm-next]
> > [if your patch is applied to the wrong git tree, please drop us a note to help
> > improve the system. BTW, we also suggest to use '--base' option to specify the
> > base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
> >
> > url:    https://github.com/0day-ci/linux/commits/Linus-Walleij/drm-pl111-Credit-where-credit-is-due/20200610-041025
> > base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
> > reproduce: make htmldocs
> >
> > If you fix the issue, kindly add following tag as appropriate
> > Reported-by: kernel test robot <lkp@intel.com>
> 
> What on earth was that. The robot reports on a patch only adding a few lines
> of comments as breaking the whole universe, and none of these systems
> even use the PL111.
Thanks for feedback, this is supposed to check make htmldocs. We will double
check this to fix issue. Sorry for noise.

> 
> Yours,
> Linus Walleij
> _______________________________________________
> kbuild-all mailing list -- kbuild-all@lists.01.org
> To unsubscribe send an email to kbuild-all-leave@lists.01.org

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-10  7:37   ` kernel test robot
  2020-06-12 11:04     ` Linus Walleij
@ 2020-06-16 16:12     ` Emil Velikov
  2020-06-17  0:33       ` Philip Li
  1 sibling, 1 reply; 17+ messages in thread
From: Emil Velikov @ 2020-06-16 16:12 UTC (permalink / raw)
  To: kernel test robot
  Cc: kbuild-all, Linus Walleij, Maarten Lankhorst, Russell King,
	Maxime Ripard, Eric Anholt, ML dri-devel, Sean Paul, LAKML

Hi all,

Inspired by Linus and my personal confusion with the report, allow me
to put some suggestions. Followed by an illustrative example.

On Wed, 10 Jun 2020 at 08:38, kernel test robot <lkp@intel.com> wrote:
>
> Hi Linus,
>
> I love your patch! Perhaps something to improve:
>
> [auto build test WARNING on drm-exynos/exynos-drm-next]
> [also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next linus/master v5.7 next-20200609]
One thing which was always inclear me - is the warning identical in
all the branches listed.

> [cannot apply to drm-tip/drm-tip drm/drm-next]
> [if your patch is applied to the wrong git tree, please drop us a note to help
> improve the system. BTW, we also suggest to use '--base' option to specify the
> base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
>
Reference to the manual tends to be better than an old SO thread.

> url:    https://github.com/0day-ci/linux/commits/Linus-Walleij/drm-pl111-Credit-where-credit-is-due/20200610-041025
> base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
> reproduce: make htmldocs
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All warnings (new ones prefixed by >>, old ones prefixed by <<):
>
Please do not list old warnings/errors. They only distract and dilute
what/where the problem is.


> vim +1 drivers/gpu/drm/pl111/pl111_drv.c
>
> e559355a9da60a Thomas Gleixner 2019-06-01  @1  // SPDX-License-Identifier: GPL-2.0-only
> bed41005e6174d Tom Cooksey     2017-04-12   2  /*
> bed41005e6174d Tom Cooksey     2017-04-12   3   * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
> bed41005e6174d Tom Cooksey     2017-04-12   4   *
> bed41005e6174d Tom Cooksey     2017-04-12   5   * Parts of this file were based on sources as follows:
> bed41005e6174d Tom Cooksey     2017-04-12   6   *
> bed41005e6174d Tom Cooksey     2017-04-12   7   * Copyright (c) 2006-2008 Intel Corporation
> bed41005e6174d Tom Cooksey     2017-04-12   8   * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
> bed41005e6174d Tom Cooksey     2017-04-12   9   * Copyright (C) 2011 Texas Instruments
> bed41005e6174d Tom Cooksey     2017-04-12  10   */
> bed41005e6174d Tom Cooksey     2017-04-12  11
>
> :::::: The code at line 1 was first introduced by commit
> :::::: e559355a9da60a2388893d9e9da66c79fd604b9a treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 443
>
> :::::: TO: Thomas Gleixner <tglx@linutronix.de>
> :::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
>
All of this seems useful when debugging the kernel test robot itself.
Which in this case is misleading as hell.


Here is something which is much shorter, with clearer structure and
reads much easier.

---
Hi Linus,

This is an automated message from your friendly test robot.
We've noticed some issues with your patch although being a robot,
kindly double-check the results.

Branches:
[if the warning/errors are the same group them, otherwise split them
in separate sections]

- drm-exynos/exynos-drm-next [1]: WARNING
- drm-intel/for-linux-next [2]: WARNING
- .... : WARNING
drivers/gpu/drm/pl111/pl111_drv.c:1: warning: 'ARM PrimeCell PL111
CLCD Driver' not found
- tegra-drm/drm/tegra/for-next [3]: WARNING
some other warning
- drm-tip/drm-tip [4] drm/drm-next [5]: cannot apply series

Note: when submitting patches, please use `--base` as documented in
https://git-scm.com/docs/git-format-patch.


To reproduce:
 - wget https://url/to/build/toolchain // when applicable
 - wget https://url/to/config // when applicable
 - make htmldocs // use explicit make command instead of magic shell
script, as seen in the cross build reports


If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>

Thank you
The LKP team

[1] URI to the drm-exynos/exynos-drm-next repo
[2] URI to the drm-intel/for-linux-next repo
[3] URI to the ...

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 4/4] drm: pl111: Update documentation
  2020-06-16 16:12     ` Emil Velikov
@ 2020-06-17  0:33       ` Philip Li
  0 siblings, 0 replies; 17+ messages in thread
From: Philip Li @ 2020-06-17  0:33 UTC (permalink / raw)
  To: Emil Velikov
  Cc: kbuild-all, kernel test robot, Linus Walleij, Maarten Lankhorst,
	Russell King, Maxime Ripard, Eric Anholt, ML dri-devel,
	Sean Paul, LAKML

On Tue, Jun 16, 2020 at 05:12:51PM +0100, Emil Velikov wrote:
> Hi all,
> 
> Inspired by Linus and my personal confusion with the report, allow me
> to put some suggestions. Followed by an illustrative example.
thanks for all the suggestions, we will take them into consideration
to gradually improve the report.

> 
> On Wed, 10 Jun 2020 at 08:38, kernel test robot <lkp@intel.com> wrote:
> >
> > Hi Linus,
> >
> > I love your patch! Perhaps something to improve:
> >
> > [auto build test WARNING on drm-exynos/exynos-drm-next]
> > [also build test WARNING on drm-intel/for-linux-next tegra-drm/drm/tegra/for-next linus/master v5.7 next-20200609]
> One thing which was always inclear me - is the warning identical in
> all the branches listed.
yes, they contain same warning, we will clarify this.

> 
> > [cannot apply to drm-tip/drm-tip drm/drm-next]
> > [if your patch is applied to the wrong git tree, please drop us a note to help
> > improve the system. BTW, we also suggest to use '--base' option to specify the
> > base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
> >
> Reference to the manual tends to be better than an old SO thread.
got it, we will refer to your later example to enhance here.

> 
> > url:    https://github.com/0day-ci/linux/commits/Linus-Walleij/drm-pl111-Credit-where-credit-is-due/20200610-041025
> > base:   https://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos.git exynos-drm-next
> > reproduce: make htmldocs
> >
> > If you fix the issue, kindly add following tag as appropriate
> > Reported-by: kernel test robot <lkp@intel.com>
> >
> > All warnings (new ones prefixed by >>, old ones prefixed by <<):
> >
> Please do not list old warnings/errors. They only distract and dilute
> what/where the problem is.
early on, there's a request to view the old warning of modpost related
issue in case it is a false positive due to modpost output format changing.

we will think of this to limit to modpost only.

> 
> 
> > vim +1 drivers/gpu/drm/pl111/pl111_drv.c
> >
> > e559355a9da60a Thomas Gleixner 2019-06-01  @1  // SPDX-License-Identifier: GPL-2.0-only
> > bed41005e6174d Tom Cooksey     2017-04-12   2  /*
> > bed41005e6174d Tom Cooksey     2017-04-12   3   * (C) COPYRIGHT 2012-2013 ARM Limited. All rights reserved.
> > bed41005e6174d Tom Cooksey     2017-04-12   4   *
> > bed41005e6174d Tom Cooksey     2017-04-12   5   * Parts of this file were based on sources as follows:
> > bed41005e6174d Tom Cooksey     2017-04-12   6   *
> > bed41005e6174d Tom Cooksey     2017-04-12   7   * Copyright (c) 2006-2008 Intel Corporation
> > bed41005e6174d Tom Cooksey     2017-04-12   8   * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
> > bed41005e6174d Tom Cooksey     2017-04-12   9   * Copyright (C) 2011 Texas Instruments
> > bed41005e6174d Tom Cooksey     2017-04-12  10   */
> > bed41005e6174d Tom Cooksey     2017-04-12  11
> >
> > :::::: The code at line 1 was first introduced by commit
> > :::::: e559355a9da60a2388893d9e9da66c79fd604b9a treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 443
> >
> > :::::: TO: Thomas Gleixner <tglx@linutronix.de>
> > :::::: CC: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
> >
> All of this seems useful when debugging the kernel test robot itself.
> Which in this case is misleading as hell.
thanks, we will check above 4 lines with ::::: to adjust if needed.

> 
> 
> Here is something which is much shorter, with clearer structure and
> reads much easier.
this is very helpful and can provide a different perspective for how
the report is. We will learn from it to imporve the report.

> 
> ---
> Hi Linus,
> 
> This is an automated message from your friendly test robot.
> We've noticed some issues with your patch although being a robot,
> kindly double-check the results.
> 
> Branches:
> [if the warning/errors are the same group them, otherwise split them
> in separate sections]
> 
> - drm-exynos/exynos-drm-next [1]: WARNING
> - drm-intel/for-linux-next [2]: WARNING
> - .... : WARNING
> drivers/gpu/drm/pl111/pl111_drv.c:1: warning: 'ARM PrimeCell PL111
> CLCD Driver' not found
> - tegra-drm/drm/tegra/for-next [3]: WARNING
> some other warning
> - drm-tip/drm-tip [4] drm/drm-next [5]: cannot apply series
> 
> Note: when submitting patches, please use `--base` as documented in
> https://git-scm.com/docs/git-format-patch.
> 
> 
> To reproduce:
>  - wget https://url/to/build/toolchain // when applicable
>  - wget https://url/to/config // when applicable
>  - make htmldocs // use explicit make command instead of magic shell
> script, as seen in the cross build reports
> 
> 
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
> 
> Thank you
> The LKP team
> 
> [1] URI to the drm-exynos/exynos-drm-next repo
> [2] URI to the drm-intel/for-linux-next repo
> [3] URI to the ...
> 

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver
  2020-06-09 20:04 ` [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver Linus Walleij
@ 2020-09-15  1:10   ` Peter Collingbourne
  2020-09-21 21:32     ` Linus Walleij
  0 siblings, 1 reply; 17+ messages in thread
From: Peter Collingbourne @ 2020-09-15  1:10 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Kevin Brodsky, Maarten Lankhorst, Russell King, Maxime Ripard,
	Eric Anholt, ML dri-devel, Sean Paul, Linux ARM

On Tue, Jun 9, 2020 at 1:08 PM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> All the functionality in this driver has been reimplemented
> in the new DRM driver in drivers/gpu/drm/pl111/* and all
> the boards using it have been migrated to use the DRM driver
> with all configuration coming from the device tree.

Android's FVP configuration still uses FBDEV. While it would be great
to see it migrated to DRM, this first requires resolving a design
incompatibility between Android's composer and DRM devices that only
support software rendering. I proposed a patch that would help resolve
this [1], but there was disagreement about the approach and I haven't
had time to get back to this.

Can this please be reverted until FVP on Android can be migrated to DRM?

Peter

[1] https://www.spinics.net/lists/dri-devel/msg255883.html

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver
  2020-09-15  1:10   ` Peter Collingbourne
@ 2020-09-21 21:32     ` Linus Walleij
  2020-09-22  4:10       ` Peter Collingbourne
  0 siblings, 1 reply; 17+ messages in thread
From: Linus Walleij @ 2020-09-21 21:32 UTC (permalink / raw)
  To: Peter Collingbourne, John Stultz
  Cc: Kevin Brodsky, Maarten Lankhorst, Russell King, Maxime Ripard,
	Eric Anholt, ML dri-devel, Sean Paul, Linux ARM

On Tue, Sep 15, 2020 at 3:10 AM Peter Collingbourne <pcc@google.com> wrote:
> On Tue, Jun 9, 2020 at 1:08 PM Linus Walleij <linus.walleij@linaro.org> wrote:
> >
> > All the functionality in this driver has been reimplemented
> > in the new DRM driver in drivers/gpu/drm/pl111/* and all
> > the boards using it have been migrated to use the DRM driver
> > with all configuration coming from the device tree.
>
> Android's FVP configuration still uses FBDEV.

But all DRM drivers support frame buffer emulation so I don't
see how this can be a problem? The new DRM driver provides
a framebuffer.

I'm also confused about how this can be in use.
fvp-base-revc.dts includes rtsm_ve-motherboard.dtsi
where the PL111 is defined.

commit f1fe12c8bf33241e04c57a0fc5b25b16ba77ba2d
"ARM: dts: Modernize the Vexpress PL111 integration"
changes the DTS for the FVP such that only the new DRM
driver really works with it: it removes the panel-dpi encoded
panel and defines the panel
"arm,rtsm-display" for FVP and that is *only* supported
by drivers/gpu/drm/panel/panel-simple.c from DRM.

The upstream FVP has been using the new DRM driver
by default since
commit 37ad688497785c9ad1471236e28efda1e2f39741
"arm64: defconfig: Switch to PL11x DRM driver"
in january 2019.

Are you using old or outoftree devicetrees with a newer
kernel?

> While it would be great
> to see it migrated to DRM, this first requires resolving a design
> incompatibility between Android's composer and DRM devices that only
> support software rendering. I proposed a patch that would help resolve
> this [1], but there was disagreement about the approach and I haven't
> had time to get back to this.
>
> Can this please be reverted until FVP on Android can be migrated to DRM?

We need a clear technical reason, I understand that using DRM
directly might be a problem, but DRM supports full framebuffer
emulation and from a userspace point of view, what the new
driver provides should be equivalent.

I can think of problems like Android seeing the new fancy
DRM userspace ABI but surely it can be instructed to
ignore that and just use the framebuffer emulation instead?

If there is anything else making DRMs framebuffer emulation
substandard I am sure the DRM developers would like to know,
especially if it makes Android unhappy.

Yours,
Linus Walleij

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver
  2020-09-21 21:32     ` Linus Walleij
@ 2020-09-22  4:10       ` Peter Collingbourne
  2020-09-22 19:43         ` Peter Collingbourne
  0 siblings, 1 reply; 17+ messages in thread
From: Peter Collingbourne @ 2020-09-22  4:10 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Kevin Brodsky, Maarten Lankhorst, Russell King, Maxime Ripard,
	Eric Anholt, John Stultz, ML dri-devel, Sean Paul, Linux ARM

On Mon, Sep 21, 2020 at 2:32 PM Linus Walleij <linus.walleij@linaro.org> wrote:
>
> On Tue, Sep 15, 2020 at 3:10 AM Peter Collingbourne <pcc@google.com> wrote:
> > On Tue, Jun 9, 2020 at 1:08 PM Linus Walleij <linus.walleij@linaro.org> wrote:
> > >
> > > All the functionality in this driver has been reimplemented
> > > in the new DRM driver in drivers/gpu/drm/pl111/* and all
> > > the boards using it have been migrated to use the DRM driver
> > > with all configuration coming from the device tree.
> >
> > Android's FVP configuration still uses FBDEV.
>
> But all DRM drivers support frame buffer emulation so I don't
> see how this can be a problem? The new DRM driver provides
> a framebuffer.

Okay, I was unaware of that feature and it is disabled in Android
kernels. I am now testing the DRM driver by applying this diff to
FVP's kernel config:

diff --git a/fvp.fragment b/fvp.fragment
index b12be37278a4..481767c06ac9 100644
--- a/fvp.fragment
+++ b/fvp.fragment
@@ -1,5 +1,6 @@
-CONFIG_FB=m
-CONFIG_FB_ARMCLCD=m
+CONFIG_DRM_PANEL_SIMPLE=m
+CONFIG_DRM_PL111=m
+CONFIG_DRM_FBDEV_EMULATION=y
 CONFIG_MOUSE_PS2=m
 CONFIG_SERIO_AMBAKMI=m
 CONFIG_MMC_ARMMMCI=m

> I'm also confused about how this can be in use.
> fvp-base-revc.dts includes rtsm_ve-motherboard.dtsi
> where the PL111 is defined.
>
> commit f1fe12c8bf33241e04c57a0fc5b25b16ba77ba2d
> "ARM: dts: Modernize the Vexpress PL111 integration"
> changes the DTS for the FVP such that only the new DRM
> driver really works with it: it removes the panel-dpi encoded
> panel and defines the panel
> "arm,rtsm-display" for FVP and that is *only* supported
> by drivers/gpu/drm/panel/panel-simple.c from DRM.

That commit predates commit fa083b99eb284186ae65193ae856ef2801a1646d
which added the DTS for FVP, along with a panel-dpi compatible panel
which is still present:
https://github.com/torvalds/linux/blob/98477740630f270aecf648f1d6a9dbc6027d4ff1/arch/arm64/boot/dts/arm/fvp-base-revc.dts#L189

> The upstream FVP has been using the new DRM driver
> by default since
> commit 37ad688497785c9ad1471236e28efda1e2f39741
> "arm64: defconfig: Switch to PL11x DRM driver"
> in january 2019.

That only affected defconfig though which Android doesn't use.

> Are you using old or outoftree devicetrees with a newer
> kernel?

No, I'm using an up-to-date device tree (pretty sure about that
otherwise I wouldn't have hit problems like
https://android-review.googlesource.com/c/device/generic/goldfish/+/1394347
).

> > While it would be great
> > to see it migrated to DRM, this first requires resolving a design
> > incompatibility between Android's composer and DRM devices that only
> > support software rendering. I proposed a patch that would help resolve
> > this [1], but there was disagreement about the approach and I haven't
> > had time to get back to this.
> >
> > Can this please be reverted until FVP on Android can be migrated to DRM?
>
> We need a clear technical reason, I understand that using DRM
> directly might be a problem, but DRM supports full framebuffer
> emulation and from a userspace point of view, what the new
> driver provides should be equivalent.
>
> I can think of problems like Android seeing the new fancy
> DRM userspace ABI but surely it can be instructed to
> ignore that and just use the framebuffer emulation instead?
>
> If there is anything else making DRMs framebuffer emulation
> substandard I am sure the DRM developers would like to know,
> especially if it makes Android unhappy.

Okay, I found at least two issues so far. The first is that the driver
does not come up in 32bpp mode, seemingly because of this line of code
here:
https://github.com/torvalds/linux/blob/98477740630f270aecf648f1d6a9dbc6027d4ff1/drivers/gpu/drm/pl111/pl111_versatile.c#L368

The second problem seems to be that Android's calls to
ioctl(FBIOPUT_VSCREENINFO) fail. I thought that this might be related
to the declared lack of 32bpp support, but even with the above line
changed to .fb_bpp = 32 (probably not the right fix given the comment
above it would probably break any users of the "real" Versatile
Express board; the driver probably instead needs to select the bpp
based on the max-memory-bandwidth like the old fbdev driver did) I
still get this logcat output:

09-22 01:31:08.807   272   272 W gralloc : FBIOPUT_VSCREENINFO failed,
page flipping not supported
09-22 01:31:08.807   272   272 W gralloc : page flipping not supported
(yres_virtual=768, requested=1536)
09-22 01:31:08.807   272   272 I gralloc : using (fd=7)
09-22 01:31:08.807   272   272 I gralloc : id           = pl111drmfb
09-22 01:31:08.807   272   272 I gralloc : xres         = 1024 px
09-22 01:31:08.807   272   272 I gralloc : yres         = 768 px
09-22 01:31:08.807   272   272 I gralloc : xres_virtual = 1024 px
09-22 01:31:08.807   272   272 I gralloc : yres_virtual = 768 px
09-22 01:31:08.807   272   272 I gralloc : bpp          = 32
09-22 01:31:08.807   272   272 I gralloc : r            = 16:8
09-22 01:31:08.807   272   272 I gralloc : g            =  8:8
09-22 01:31:08.807   272   272 I gralloc : b            =  0:8
09-22 01:31:08.807   272   272 I gralloc : width        = 400 mm (65.024002 dpi)
09-22 01:31:08.807   272   272 I gralloc : height       = 300 mm (65.023994 dpi)
09-22 01:31:08.807   272   272 I gralloc : refresh rate = 60.00 Hz

which is coming from the code starting here:
https://cs.android.com/android/platform/superproject/+/master:hardware/libhardware/modules/gralloc/framebuffer.cpp;l=185
(you can ignore the part of the log message that talks about page
flipping; in this context the main purpose of the ioctl is to give
effect to the code on lines 166-172 that sets the pixel format, and as
can be seen from the subsequent output the format remains BGRX888
rather than RGBX8888).

The output from a successful boot with the old fbdev driver looks like this:

09-22 00:54:57.750   272   272 W gralloc : page flipping not supported
(yres_virtual=768, requested=1536)
09-22 00:54:57.750   272   272 I gralloc : using (fd=7)
09-22 00:54:57.750   272   272 I gralloc : id           = CLCD FB
09-22 00:54:57.750   272   272 I gralloc : xres         = 1024 px
09-22 00:54:57.750   272   272 I gralloc : yres         = 768 px
09-22 00:54:57.750   272   272 I gralloc : xres_virtual = 1024 px
09-22 00:54:57.750   272   272 I gralloc : yres_virtual = 768 px
09-22 00:54:57.750   272   272 I gralloc : bpp          = 32
09-22 00:54:57.750   272   272 I gralloc : r            =  0:8
09-22 00:54:57.750   272   272 I gralloc : g            =  8:8
09-22 00:54:57.750   272   272 I gralloc : b            = 16:8
09-22 00:54:57.750   272   272 I gralloc : width        = 163 mm
(159.568100 dpi)
09-22 00:54:57.750   272   272 I gralloc : height       = 122 mm
(159.895081 dpi)
09-22 00:54:57.750   272   272 I gralloc : refresh rate = 65.34 Hz

which aside from the pixel format indicates some differences with the
width, height and refresh rate which may be significant.

As a result of FBIOPUT_VSCREENINFO failing, the FVP window fails to
resize so I don't see any graphical output (this ioctl in the fbdev
driver set the magic registers that caused FVP to resize its window;
my investigation into DRM earlier this year revealed the equivalent
register-setting operation in DRM to be DRM_IOCTL_MODE_ATOMIC).

I'll try to look at this closer tomorrow to see whether Android is
doing something wrong, but it seems plausible that DRM's FBDEV
emulation is missing a critical feature, at least for pl111.

Peter

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply related	[flat|nested] 17+ messages in thread

* Re: [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver
  2020-09-22  4:10       ` Peter Collingbourne
@ 2020-09-22 19:43         ` Peter Collingbourne
  0 siblings, 0 replies; 17+ messages in thread
From: Peter Collingbourne @ 2020-09-22 19:43 UTC (permalink / raw)
  To: Linus Walleij
  Cc: Kevin Brodsky, Maarten Lankhorst, Russell King, Maxime Ripard,
	Eric Anholt, John Stultz, ML dri-devel, Sean Paul, Linux ARM

On Mon, Sep 21, 2020 at 9:10 PM Peter Collingbourne <pcc@google.com> wrote:
>
> On Mon, Sep 21, 2020 at 2:32 PM Linus Walleij <linus.walleij@linaro.org> wrote:
> >
> > On Tue, Sep 15, 2020 at 3:10 AM Peter Collingbourne <pcc@google.com> wrote:
> > > On Tue, Jun 9, 2020 at 1:08 PM Linus Walleij <linus.walleij@linaro.org> wrote:
> > > >
> > > > All the functionality in this driver has been reimplemented
> > > > in the new DRM driver in drivers/gpu/drm/pl111/* and all
> > > > the boards using it have been migrated to use the DRM driver
> > > > with all configuration coming from the device tree.
> > >
> > > Android's FVP configuration still uses FBDEV.
> >
> > But all DRM drivers support frame buffer emulation so I don't
> > see how this can be a problem? The new DRM driver provides
> > a framebuffer.
>
> Okay, I was unaware of that feature and it is disabled in Android
> kernels. I am now testing the DRM driver by applying this diff to
> FVP's kernel config:
>
> diff --git a/fvp.fragment b/fvp.fragment
> index b12be37278a4..481767c06ac9 100644
> --- a/fvp.fragment
> +++ b/fvp.fragment
> @@ -1,5 +1,6 @@
> -CONFIG_FB=m
> -CONFIG_FB_ARMCLCD=m
> +CONFIG_DRM_PANEL_SIMPLE=m
> +CONFIG_DRM_PL111=m
> +CONFIG_DRM_FBDEV_EMULATION=y
>  CONFIG_MOUSE_PS2=m
>  CONFIG_SERIO_AMBAKMI=m
>  CONFIG_MMC_ARMMMCI=m
>
> > I'm also confused about how this can be in use.
> > fvp-base-revc.dts includes rtsm_ve-motherboard.dtsi
> > where the PL111 is defined.
> >
> > commit f1fe12c8bf33241e04c57a0fc5b25b16ba77ba2d
> > "ARM: dts: Modernize the Vexpress PL111 integration"
> > changes the DTS for the FVP such that only the new DRM
> > driver really works with it: it removes the panel-dpi encoded
> > panel and defines the panel
> > "arm,rtsm-display" for FVP and that is *only* supported
> > by drivers/gpu/drm/panel/panel-simple.c from DRM.
>
> That commit predates commit fa083b99eb284186ae65193ae856ef2801a1646d
> which added the DTS for FVP, along with a panel-dpi compatible panel
> which is still present:
> https://github.com/torvalds/linux/blob/98477740630f270aecf648f1d6a9dbc6027d4ff1/arch/arm64/boot/dts/arm/fvp-base-revc.dts#L189
>
> > The upstream FVP has been using the new DRM driver
> > by default since
> > commit 37ad688497785c9ad1471236e28efda1e2f39741
> > "arm64: defconfig: Switch to PL11x DRM driver"
> > in january 2019.
>
> That only affected defconfig though which Android doesn't use.
>
> > Are you using old or outoftree devicetrees with a newer
> > kernel?
>
> No, I'm using an up-to-date device tree (pretty sure about that
> otherwise I wouldn't have hit problems like
> https://android-review.googlesource.com/c/device/generic/goldfish/+/1394347
> ).
>
> > > While it would be great
> > > to see it migrated to DRM, this first requires resolving a design
> > > incompatibility between Android's composer and DRM devices that only
> > > support software rendering. I proposed a patch that would help resolve
> > > this [1], but there was disagreement about the approach and I haven't
> > > had time to get back to this.
> > >
> > > Can this please be reverted until FVP on Android can be migrated to DRM?
> >
> > We need a clear technical reason, I understand that using DRM
> > directly might be a problem, but DRM supports full framebuffer
> > emulation and from a userspace point of view, what the new
> > driver provides should be equivalent.
> >
> > I can think of problems like Android seeing the new fancy
> > DRM userspace ABI but surely it can be instructed to
> > ignore that and just use the framebuffer emulation instead?
> >
> > If there is anything else making DRMs framebuffer emulation
> > substandard I am sure the DRM developers would like to know,
> > especially if it makes Android unhappy.
>
> Okay, I found at least two issues so far. The first is that the driver
> does not come up in 32bpp mode, seemingly because of this line of code
> here:
> https://github.com/torvalds/linux/blob/98477740630f270aecf648f1d6a9dbc6027d4ff1/drivers/gpu/drm/pl111/pl111_versatile.c#L368
>
> The second problem seems to be that Android's calls to
> ioctl(FBIOPUT_VSCREENINFO) fail. I thought that this might be related
> to the declared lack of 32bpp support, but even with the above line
> changed to .fb_bpp = 32 (probably not the right fix given the comment
> above it would probably break any users of the "real" Versatile
> Express board; the driver probably instead needs to select the bpp
> based on the max-memory-bandwidth like the old fbdev driver did) I
> still get this logcat output:
>
> 09-22 01:31:08.807   272   272 W gralloc : FBIOPUT_VSCREENINFO failed,
> page flipping not supported
> 09-22 01:31:08.807   272   272 W gralloc : page flipping not supported
> (yres_virtual=768, requested=1536)
> 09-22 01:31:08.807   272   272 I gralloc : using (fd=7)
> 09-22 01:31:08.807   272   272 I gralloc : id           = pl111drmfb
> 09-22 01:31:08.807   272   272 I gralloc : xres         = 1024 px
> 09-22 01:31:08.807   272   272 I gralloc : yres         = 768 px
> 09-22 01:31:08.807   272   272 I gralloc : xres_virtual = 1024 px
> 09-22 01:31:08.807   272   272 I gralloc : yres_virtual = 768 px
> 09-22 01:31:08.807   272   272 I gralloc : bpp          = 32
> 09-22 01:31:08.807   272   272 I gralloc : r            = 16:8
> 09-22 01:31:08.807   272   272 I gralloc : g            =  8:8
> 09-22 01:31:08.807   272   272 I gralloc : b            =  0:8
> 09-22 01:31:08.807   272   272 I gralloc : width        = 400 mm (65.024002 dpi)
> 09-22 01:31:08.807   272   272 I gralloc : height       = 300 mm (65.023994 dpi)
> 09-22 01:31:08.807   272   272 I gralloc : refresh rate = 60.00 Hz
>
> which is coming from the code starting here:
> https://cs.android.com/android/platform/superproject/+/master:hardware/libhardware/modules/gralloc/framebuffer.cpp;l=185
> (you can ignore the part of the log message that talks about page
> flipping; in this context the main purpose of the ioctl is to give
> effect to the code on lines 166-172 that sets the pixel format, and as
> can be seen from the subsequent output the format remains BGRX888
> rather than RGBX8888).
>
> The output from a successful boot with the old fbdev driver looks like this:
>
> 09-22 00:54:57.750   272   272 W gralloc : page flipping not supported
> (yres_virtual=768, requested=1536)
> 09-22 00:54:57.750   272   272 I gralloc : using (fd=7)
> 09-22 00:54:57.750   272   272 I gralloc : id           = CLCD FB
> 09-22 00:54:57.750   272   272 I gralloc : xres         = 1024 px
> 09-22 00:54:57.750   272   272 I gralloc : yres         = 768 px
> 09-22 00:54:57.750   272   272 I gralloc : xres_virtual = 1024 px
> 09-22 00:54:57.750   272   272 I gralloc : yres_virtual = 768 px
> 09-22 00:54:57.750   272   272 I gralloc : bpp          = 32
> 09-22 00:54:57.750   272   272 I gralloc : r            =  0:8
> 09-22 00:54:57.750   272   272 I gralloc : g            =  8:8
> 09-22 00:54:57.750   272   272 I gralloc : b            = 16:8
> 09-22 00:54:57.750   272   272 I gralloc : width        = 163 mm
> (159.568100 dpi)
> 09-22 00:54:57.750   272   272 I gralloc : height       = 122 mm
> (159.895081 dpi)
> 09-22 00:54:57.750   272   272 I gralloc : refresh rate = 65.34 Hz
>
> which aside from the pixel format indicates some differences with the
> width, height and refresh rate which may be significant.
>
> As a result of FBIOPUT_VSCREENINFO failing, the FVP window fails to
> resize so I don't see any graphical output (this ioctl in the fbdev
> driver set the magic registers that caused FVP to resize its window;
> my investigation into DRM earlier this year revealed the equivalent
> register-setting operation in DRM to be DRM_IOCTL_MODE_ATOMIC).
>
> I'll try to look at this closer tomorrow to see whether Android is
> doing something wrong, but it seems plausible that DRM's FBDEV
> emulation is missing a critical feature, at least for pl111.

This does indeed appear to be the case. Among other reasons, Android's
ioctl would fail because of this code, which forbids changing the
pixel format in fbdev emulation:
https://github.com/torvalds/linux/blob/eff48ddeab782e35e58ccc8853f7386bbae9dec4/drivers/gpu/drm/drm_fb_helper.c#L1317

Android's generic fbdev userspace driver (which FVP uses) is only
compatible with the RGBX8888 pixel format. So there is a fundamental
incompatibility here, as long as the kernel driver comes up in a
different format. We could change the driver's default format to match
what Android requires, but then that could break some other
application that requires a format other than RGBX8888, which would
fail when changing to its required format because of the above linked
code.

There is a less important issue where the new driver fails the syscall
if yres_virtual exceeds a limit:
https://github.com/torvalds/linux/blob/eff48ddeab782e35e58ccc8853f7386bbae9dec4/drivers/gpu/drm/drm_fb_helper.c#L1288

whereas the old driver would reset yres_virtual based on the value of yres:
https://github.com/torvalds/linux/blob/3f1f6981afed9fa21efa12ce396b35ca684b8a29/include/linux/amba/clcd.h#L245

With the current userspace implementation which sets yres_virtual =
yres * 2 this leads to the driver not even reaching the code that
rejects based on pixel format. This can be fixed on the userspace side
(by reissuing the syscall with yres_virtual set to its original value)
but API stability would seem to require the behavior to match here as
well, and this of course does nothing for the pixel format issue.

So I think we should bring the old driver back, at least until fbdev
emulation gains the ability to change the pixel format.

Peter

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

^ permalink raw reply	[flat|nested] 17+ messages in thread

end of thread, other threads:[~2020-09-22 19:45 UTC | newest]

Thread overview: 17+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-06-09 20:04 [PATCH 1/4] drm: pl111: Credit where credit is due Linus Walleij
2020-06-09 20:04 ` [PATCH 2/4] video: fbdev: amba-clcd: Retire elder CLCD driver Linus Walleij
2020-09-15  1:10   ` Peter Collingbourne
2020-09-21 21:32     ` Linus Walleij
2020-09-22  4:10       ` Peter Collingbourne
2020-09-22 19:43         ` Peter Collingbourne
2020-06-09 20:04 ` [PATCH 3/4] drm: pl111: Absorb the external register header Linus Walleij
2020-06-09 20:04 ` [PATCH 4/4] drm: pl111: Update documentation Linus Walleij
2020-06-09 20:10   ` Eric Anholt
2020-06-09 20:17     ` Linus Walleij
2020-06-09 20:53       ` Eric Anholt
2020-06-10  7:37   ` kernel test robot
2020-06-12 11:04     ` Linus Walleij
2020-06-12 11:14       ` Sam Ravnborg
2020-06-12 12:40       ` [kbuild-all] " Philip Li
2020-06-16 16:12     ` Emil Velikov
2020-06-17  0:33       ` Philip Li

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).