From mboxrd@z Thu Jan 1 00:00:00 1970 From: daniel@ffwll.ch (Daniel Vetter) Date: Tue, 3 Mar 2015 11:54:11 +0100 Subject: [PATCH 1/3] drm/layerscape: Add fsl dcu DRM driver In-Reply-To: References: <1423825436-47780-1-git-send-email-b52261@freescale.com> <20150222113507.GO24485@phenom.ffwll.local> Message-ID: <20150303105411.GL18775@phenom.ffwll.local> To: linux-arm-kernel@lists.infradead.org List-Id: linux-arm-kernel.lists.infradead.org On Tue, Mar 03, 2015 at 10:06:57AM +0000, Jianwei.Wang at freescale.com wrote: > > -----Original Message----- > > From: Daniel Vetter [mailto:daniel.vetter at ffwll.ch] On Behalf Of Daniel > > Vetter > > Sent: Sunday, February 22, 2015 7:35 PM > > To: Wang Jianwei-B52261 > > Cc: dri-devel at lists.freedesktop.org; jbarnes at virtuousgeek.org; Wood > > Scott-B07421; Xiubo Li; Wang Huan-B18965; linux-kernel at vger.kernel.org; > > linux-arm-kernel at lists.infradead.org > > Subject: Re: [PATCH 1/3] drm/layerscape: Add fsl dcu DRM driver > > > > On Fri, Feb 13, 2015 at 07:03:54PM +0800, Jianwei Wang wrote: > > > This patch add support for Two Dimensional Animation and Compositing > > > Engine (2D-ACE) on the Freescale LS102x SoCs. > > > > > > 2D-ACE is a Freescale display controller. It supports at most four > > > plane and provide an hardware cursor. > > > > > > This is a simplified version, only a primary plane, a fb created for > > > fbdev, a crtc, a connector for TFT LCD panel, an encoder, and the > > > encoder is not in use. Now this drver support fbdev only. > > > > > > Signed-off-by: Alison Wang > > > Signed-off-by: Xiubo Li > > > Signed-off-by: Jianwei Wang > > > > Imo adding a new driver without primary plane support (use > > drm_crtc_init_with_planes) and without atomic support doesn't make sense > > any more. > > > > Also, what do you mean with "support fbdev only"? > > -Daniel > > > > Daniel, > > This driver has supported primary plane (use drm_crtc_init_with_planes) > Already. > If atomic support is a must? 2D-ACE is a simple display Controller and > this is a simplified version. If atomic support is not a must, I want to add > it with patches, is it ok? atomic is the new way the drm display subsystem works, not supporting it in new drivers makes this transition even longer. Since I guess if you don't want to do the conversion now no one else will do it anytime later, and then we're stuck with this driver as-is. On top of that atomic should simplify testing for your driver a lot (since a few things are take care of for you in the generic atomic code). -Daniel > > " Now this drver support fbdev only." if this sentence confuses you, > I'd like remove it. In fact I mean that this driver only create a framebuffer > dev (use drm_fbdev_cma_init). > > Thanks > Regards, > Wang Jianwei > > > > --- > > > .../devicetree/bindings/video/fsl,dcfb.txt | 50 +++ > > > drivers/gpu/drm/Kconfig | 2 + > > > drivers/gpu/drm/Makefile | 1 + > > > drivers/gpu/drm/fsl/Kconfig | 17 + > > > drivers/gpu/drm/fsl/Makefile | 7 + > > > drivers/gpu/drm/fsl/fsl_dcu_drm_crtc.c | 412 > > +++++++++++++++++++++ > > > drivers/gpu/drm/fsl/fsl_dcu_drm_crtc.h | 40 ++ > > > drivers/gpu/drm/fsl/fsl_dcu_drm_drv.c | 323 > > ++++++++++++++++ > > > drivers/gpu/drm/fsl/fsl_dcu_drm_drv.h | 167 +++++++++ > > > drivers/gpu/drm/fsl/fsl_dcu_drm_fbdev.c | 43 +++ > > > drivers/gpu/drm/fsl/fsl_dcu_drm_kms.c | 45 +++ > > > drivers/gpu/drm/fsl/fsl_dcu_drm_kms.h | 22 ++ > > > drivers/gpu/drm/fsl/fsl_dcu_drm_plane.c | 124 +++++++ > > > drivers/gpu/drm/fsl/fsl_dcu_drm_plane.h | 28 ++ > > > 14 files changed, 1281 insertions(+) > > > create mode 100644 > > > Documentation/devicetree/bindings/video/fsl,dcfb.txt > > > create mode 100644 drivers/gpu/drm/fsl/Kconfig create mode 100644 > > > drivers/gpu/drm/fsl/Makefile create mode 100644 > > > drivers/gpu/drm/fsl/fsl_dcu_drm_crtc.c > > > create mode 100644 drivers/gpu/drm/fsl/fsl_dcu_drm_crtc.h > > > create mode 100644 drivers/gpu/drm/fsl/fsl_dcu_drm_drv.c > > > create mode 100644 drivers/gpu/drm/fsl/fsl_dcu_drm_drv.h > > > create mode 100644 drivers/gpu/drm/fsl/fsl_dcu_drm_fbdev.c > > > create mode 100644 drivers/gpu/drm/fsl/fsl_dcu_drm_kms.c > > > create mode 100644 drivers/gpu/drm/fsl/fsl_dcu_drm_kms.h > > > create mode 100644 drivers/gpu/drm/fsl/fsl_dcu_drm_plane.c > > > create mode 100644 drivers/gpu/drm/fsl/fsl_dcu_drm_plane.h > > > > > > diff --git a/Documentation/devicetree/bindings/video/fsl,dcfb.txt > > > b/Documentation/devicetree/bindings/video/fsl,dcfb.txt > > > new file mode 100644 > > > index 0000000..de7da97 > > > --- /dev/null > > > +++ b/Documentation/devicetree/bindings/video/fsl,dcfb.txt > > > @@ -0,0 +1,50 @@ > > > +* Freescale Simple Display Controller FB Driver > > > + > > > +Required properties: > > > +- compatible: Should be one of "fsl,ls1021a-dcfb". > > > +- reg: Address and length of the register set for dcfb. > > > +- clocks: From common clock binding: handle to dcfb clock. > > > +- clock-names: From common clock binding: Shall be "dcfb". > > > +- display: The phandle to display node. > > > + > > > +Optional properties: > > > +- scfg-controller: The phandle of scfg node. > > > + > > > +Required properties: > > > +- bits-per-pixel: <16> for RGB565, > > > + <24> for RGB888, > > > + <32> for RGB8888. > > > + > > > +Required timing node for dispplay sub-node: > > > +- display-timings: Refer to binding doc display-timing.txt for > > details. > > > + > > > +Examples: > > > +dcfb: dcfb at 2ce0000 { > > > + compatible = "fsl,ls1021a-dcfb"; > > > + reg = <0x0 0x2ce0000 0x0 0x10000>; > > > + clocks = <&platform_clk 0>; > > > + clock-names = "dcfb"; > > > + scfg-controller = <&scfg>; > > > + display = <&display>; > > > + > > > + display: display at 0 { > > > + bits-per-pixel = <24>; > > > + > > > + display-timings { > > > + native-mode = <&timing0>; > > > + timing0: nl4827hc19 { > > > + clock-frequency = <10870000>; > > > + hactive = <480>; > > > + vactive = <272>; > > > + hback-porch = <2>; > > > + hfront-porch = <2>; > > > + vback-porch = <1>; > > > + vfront-porch = <1>; > > > + hsync-len = <41>; > > > + vsync-len = <2>; > > > + hsync-active = <1>; > > > + vsync-active = <1>; > > > + }; > > > + }; > > > + }; > > > +}; > > > diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig index > > > 151a050..a6957aa 100644 > > > --- a/drivers/gpu/drm/Kconfig > > > +++ b/drivers/gpu/drm/Kconfig > > > @@ -199,6 +199,8 @@ source "drivers/gpu/drm/bochs/Kconfig" > > > > > > source "drivers/gpu/drm/msm/Kconfig" > > > > > > +source "drivers/gpu/drm/fsl/Kconfig" > > > + > > > source "drivers/gpu/drm/tegra/Kconfig" > > > > > > source "drivers/gpu/drm/panel/Kconfig" > > > diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile index > > > 2c239b9..ab5b9ef 100644 > > > --- a/drivers/gpu/drm/Makefile > > > +++ b/drivers/gpu/drm/Makefile > > > @@ -56,6 +56,7 @@ obj-$(CONFIG_DRM_UDL) += udl/ > > > obj-$(CONFIG_DRM_AST) += ast/ > > > obj-$(CONFIG_DRM_ARMADA) += armada/ > > > obj-$(CONFIG_DRM_ATMEL_HLCDC) += atmel-hlcdc/ > > > +obj-$(CONFIG_DRM_FSL_DCU) += fsl/ > > > obj-$(CONFIG_DRM_RCAR_DU) += rcar-du/ > > > obj-$(CONFIG_DRM_SHMOBILE) +=shmobile/ > > > obj-$(CONFIG_DRM_OMAP) += omapdrm/ > > > diff --git a/drivers/gpu/drm/fsl/Kconfig b/drivers/gpu/drm/fsl/Kconfig > > > new file mode 100644 index 0000000..e4f8df0 > > > --- /dev/null > > > +++ b/drivers/gpu/drm/fsl/Kconfig > > > @@ -0,0 +1,17 @@ > > > +config DRM_FSL_DCU > > > + tristate "DRM Support for Freescale DCU" > > > + depends on DRM && OF && ARM > > > + select DRM_KMS_HELPER > > > + select DRM_KMS_CMA_HELPER > > > + select VIDEOMODE_HELPERS > > > + select BACKLIGHT_CLASS_DEVICE > > > + select BACKLIGHT_LCD_SUPPORT > > > + select REGMAP_MMIO > > > + select DRM_KMS_FB_HELPER > > > + select FB_SYS_FILLRECT > > > + select FB_SYS_COPYAREA > > > + select FB_SYS_IMAGEBLIT > > > + select FB_SYS_FOPS > > > + help > > > + Choose this option if you have an Freescale DCU chipset. > > > + If M is selected the module will be called fsl-dcu-drm. > > > diff --git a/drivers/gpu/drm/fsl/Makefile > > > b/drivers/gpu/drm/fsl/Makefile new file mode 100644 index > > > 0000000..51c3e1f > > > --- /dev/null > > > +++ b/drivers/gpu/drm/fsl/Makefile > > > @@ -0,0 +1,7 @@ > > > +fsl-dcu-drm-y := fsl_dcu_drm_drv.o \ > > > + fsl_dcu_drm_kms.o \ > > > + fsl_dcu_drm_plane.o \ > > > + fsl_dcu_drm_crtc.o \ > > > + fsl_dcu_drm_fbdev.o \ > > > + > > > +obj-$(CONFIG_DRM_FSL_DCU) += fsl-dcu-drm.o > > > diff --git a/drivers/gpu/drm/fsl/fsl_dcu_drm_crtc.c > > > b/drivers/gpu/drm/fsl/fsl_dcu_drm_crtc.c > > > new file mode 100644 > > > index 0000000..9f5ba86 > > > --- /dev/null > > > +++ b/drivers/gpu/drm/fsl/fsl_dcu_drm_crtc.c > > > @@ -0,0 +1,412 @@ > > > +/* > > > + * Copyright 2015 Freescale Semiconductor, Inc. > > > + * > > > + * Freescale DCU drm device driver > > > + * > > > + * This program is free software; you can redistribute it and/or > > > +modify > > > + * it under the terms of the GNU General Public License as published > > > +by > > > + * the Free Software Foundation; either version 2 of the License, or > > > + * (at your option) any later version. > > > + */ > > > + > > > +#include > > > +#include > > > +#include > > > + > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include > > > +#include