2020-03-06 12:51:48

by Laurentiu Palcu

[permalink] [raw]
Subject: [PATCH v4 0/4] Add support for iMX8MQ Display Controller Subsystem

From: Laurentiu Palcu <[email protected]>

Hi,

This patchset adds initial DCSS support for iMX8MQ chip. Initial support
includes only graphics plane support (no video planes), no HDR10 capabilities,
no graphics decompression (only linear, tiled and super-tiled buffers allowed).

Support for the rest of the features will be added incrementally, in subsequent
patches.

The patchset was tested with both HDP driver (not yet upstreamed) and MIPI-DSI
(drivers already on the dri-devel ML).

Thanks,
Laurentiu

Changes in v4:
* Addressed Lucas and Philipp's comments:
* Added DRM_KMS_CMA_HELPER dependency in Kconfig;
* Removed usage of devm_ functions since I'm already doing all the
clean-up in the submodules_deinit();
* Moved the drm_crtc_arm_vblank_event() in dcss_crtc_atomic_flush();
* Removed en_completion variable from dcss_crtc since this was
introduced mainly to avoid vblank timeout warnings which were fixed
by arming the vblank event in flush() instead of begin();
* Removed clks_on and irq_enabled flags since all the calls to
enabling/disabling clocks and interrupts were balanced;
* Removed the custom atomic_commit callback and used the DRM core
helper and, in the process, got rid of a workqueue that wasn't
necessary anymore;
* Fixed some minor DT binding issues flagged by Philipp;
* Some other minor changes suggested by Lucas;
* Removed YUV formats from the supported formats as these cannot work
without the HDR10 module CSCs and LUTs. Will add them back when I
will add support for video planes;

Changes in v3:
* rebased to latest linux-next and made it compile as drmP.h was
removed;
* removed the patch adding the VIDEO2_PLL clock. It's already applied;
* removed an unnecessary 50ms sleep in the dcss_dtg_sync_set();
* fixed a a spurious hang reported by Lukas Hartmann and encountered
by me several times;
* mask DPR and DTG interrupts by default, as they may come enabled from
U-boot;

Changes in v2:
* Removed '0x' in node's unit-address both in DT and yaml;
* Made the address region size lowercase, to be consistent;
* Removed some left-over references to P010;
* Added a Kconfig dependency of DRM && ARCH_MXC. This will also silence compilation
issues reported by kbuild for other architectures;


Laurentiu Palcu (4):
drm/imx: compile imx directory by default
drm/imx: Add initial support for DCSS on iMX8MQ
dt-bindings: display: imx: add bindings for DCSS
arm64: dts: imx8mq: add DCSS node

.../bindings/display/imx/nxp,imx8mq-dcss.yaml | 85 ++
arch/arm64/boot/dts/freescale/imx8mq.dtsi | 23 +
drivers/gpu/drm/Makefile | 2 +-
drivers/gpu/drm/imx/Kconfig | 2 +
drivers/gpu/drm/imx/Makefile | 1 +
drivers/gpu/drm/imx/dcss/Kconfig | 9 +
drivers/gpu/drm/imx/dcss/Makefile | 6 +
drivers/gpu/drm/imx/dcss/dcss-blkctl.c | 73 ++
drivers/gpu/drm/imx/dcss/dcss-crtc.c | 206 +++++
drivers/gpu/drm/imx/dcss/dcss-ctxld.c | 431 +++++++++
drivers/gpu/drm/imx/dcss/dcss-dev.c | 277 ++++++
drivers/gpu/drm/imx/dcss/dcss-dev.h | 172 ++++
drivers/gpu/drm/imx/dcss/dcss-dpr.c | 562 ++++++++++++
drivers/gpu/drm/imx/dcss/dcss-drv.c | 183 ++++
drivers/gpu/drm/imx/dcss/dcss-dtg.c | 413 +++++++++
drivers/gpu/drm/imx/dcss/dcss-kms.c | 188 ++++
drivers/gpu/drm/imx/dcss/dcss-kms.h | 43 +
drivers/gpu/drm/imx/dcss/dcss-plane.c | 405 +++++++++
drivers/gpu/drm/imx/dcss/dcss-scaler.c | 826 ++++++++++++++++++
drivers/gpu/drm/imx/dcss/dcss-ss.c | 180 ++++
20 files changed, 4086 insertions(+), 1 deletion(-)
create mode 100644 Documentation/devicetree/bindings/display/imx/nxp,imx8mq-dcss.yaml
create mode 100644 drivers/gpu/drm/imx/dcss/Kconfig
create mode 100644 drivers/gpu/drm/imx/dcss/Makefile
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-blkctl.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-crtc.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-ctxld.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-dev.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-dev.h
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-dpr.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-drv.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-dtg.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-kms.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-kms.h
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-plane.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-scaler.c
create mode 100644 drivers/gpu/drm/imx/dcss/dcss-ss.c

--
2.17.1


2020-03-06 12:52:17

by Laurentiu Palcu

[permalink] [raw]
Subject: [PATCH v4 4/4] arm64: dts: imx8mq: add DCSS node

From: Laurentiu Palcu <[email protected]>

This patch adds the node for iMX8MQ Display Controller Subsystem.

Signed-off-by: Laurentiu Palcu <[email protected]>
---
arch/arm64/boot/dts/freescale/imx8mq.dtsi | 23 +++++++++++++++++++++++
1 file changed, 23 insertions(+)

diff --git a/arch/arm64/boot/dts/freescale/imx8mq.dtsi b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
index 6a1e83922c71..e04d8bbae6e8 100644
--- a/arch/arm64/boot/dts/freescale/imx8mq.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mq.dtsi
@@ -1028,6 +1028,29 @@
#size-cells = <1>;
ranges = <0x32c00000 0x32c00000 0x400000>;

+ dcss: display-controller@32e00000 {
+ compatible = "nxp,imx8mq-dcss";
+ reg = <0x32e00000 0x2d000>, <0x32e2f000 0x1000>;
+ interrupts = <6>, <8>, <9>;
+ interrupt-names = "ctxld", "ctxld_kick", "vblank";
+ interrupt-parent = <&irqsteer>;
+ clocks = <&clk IMX8MQ_CLK_DISP_APB_ROOT>,
+ <&clk IMX8MQ_CLK_DISP_AXI_ROOT>,
+ <&clk IMX8MQ_CLK_DISP_RTRM_ROOT>,
+ <&clk IMX8MQ_VIDEO2_PLL_OUT>,
+ <&clk IMX8MQ_CLK_DISP_DTRC>;
+ clock-names = "apb", "axi", "rtrm", "pix", "dtrc";
+ assigned-clocks = <&clk IMX8MQ_CLK_DISP_AXI>,
+ <&clk IMX8MQ_CLK_DISP_RTRM>,
+ <&clk IMX8MQ_VIDEO2_PLL1_REF_SEL>;
+ assigned-clock-parents = <&clk IMX8MQ_SYS1_PLL_800M>,
+ <&clk IMX8MQ_SYS1_PLL_800M>,
+ <&clk IMX8MQ_CLK_27M>;
+ assigned-clock-rates = <800000000>,
+ <400000000>;
+ status = "disabled";
+ };
+
irqsteer: interrupt-controller@32e2d000 {
compatible = "fsl,imx8m-irqsteer", "fsl,imx-irqsteer";
reg = <0x32e2d000 0x1000>;
--
2.17.1