Skip to contentSkip to conversation

drm: sun8i: Add DE2 HDMI video support

PATCH Superseded Jean-Francois Moine 8 participants 18 messages Nov 20, 2016 – Nov 29, 2016 8 messages not in the archive

Subsystems (5)

v6 of 7 Superseded Latest is v7 →

lore
Share & tools
lore
#0 lore raw

v6 cover drm: sun8i: Add DE2 HDMI video support

This patchset series adds HDMI video support to the Allwinner sun8i SoCs which include the display engine 2 (DE2). The driver contains the code for the A83T and H3, but it could be used/extended for other SoCs as the A64, H2 and H5.

v6:
- remove audio support (other patchset to come)
- use DRM modeset data for HDMI configuration (thanks to Jernej Škrabec)
- more meaningfull register names
- use a mutex for DE I/O protection
- merge DE and plane into one file
- don't activate the video hardware when video not started (Maxime Ripard)
- remove 'type = "video" in DT graph ports
(Rob Herring)
- change the I/O accesses by #define instead of struct (Maxime Ripard, André Przywara)
- remove pm functions (Maxime Ripard)
- set the pll-de/de clocks in the DT (Maxime Ripard)
- use platform_get_irq instead of irq_of_parse_and_map (Maxime Ripard)
- rename sunxi to sun8i (Maxime Ripard)
- fix coding style errors (Maxime Ripard)
- subclass the drm structure in private data (Daniel Vetter)
- move drm_dev_register at end of init (Daniel Vetter)
v5:
- add overlay plane
- add audio support
- add support for the A83T
- add back the HDMI driver
- many bug fixes
v4:
- drivers/clk/sunxi/Makefile was missing (Emil Velikov)
v3:
- add the hardware cursor
- simplify and fix the DE2 init sequences
- generation for all SUNXI SoCs (Andre Przywara)
v2:
- remove the HDMI driver
- remarks from Chen-Yu Tsai and Russell King
- DT documentation added

Jean-Francois Moine (5):
drm: sun8i: Add a basic DRM driver for Allwinner DE2
drm: sunxi: add HDMI video support to A83T and H3
ARM: dts: sun8i-h3: add HDMI video nodes
ARM: dts: sun8i-h3: Add HDMI video to the Banana Pi M2+
ARM: dts: sun8i-h3: Add HDMI video to the Orange PI 2

 .../devicetree/bindings/display/sunxi/hdmi.txt     |  53 ++
 .../bindings/display/sunxi/sun8i-de2.txt           |  83 ++
 arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts    |  13 +
 arch/arm/boot/dts/sun8i-h3-orangepi-2.dts          |  13 +
 arch/arm/boot/dts/sun8i-h3.dtsi                    |  51 ++
 drivers/gpu/drm/Kconfig                            |   2 +
 drivers/gpu/drm/Makefile                           |   1 +
 drivers/gpu/drm/sun8i/Kconfig                      |  26 +
 drivers/gpu/drm/sun8i/Makefile                     |   9 +
 drivers/gpu/drm/sun8i/de2_crtc.c                   | 440 +++++++++++
 drivers/gpu/drm/sun8i/de2_crtc.h                   |  50 ++
 drivers/gpu/drm/sun8i/de2_drm.h                    |  48 ++
 drivers/gpu/drm/sun8i/de2_drv.c                    | 379 ++++++++++
 drivers/gpu/drm/sun8i/de2_hdmi.c                   | 394 ++++++++++
 drivers/gpu/drm/sun8i/de2_hdmi.h                   |  51 ++
 drivers/gpu/drm/sun8i/de2_hdmi_io.c                | 839 +++++++++++++++++++++
 drivers/gpu/drm/sun8i/de2_plane.c                  | 712 +++++++++++++++++
 17 files changed, 3164 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/sunxi/hdmi.txt
 create mode 100644 Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt
 create mode 100644 drivers/gpu/drm/sun8i/Kconfig
 create mode 100644 drivers/gpu/drm/sun8i/Makefile
 create mode 100644 drivers/gpu/drm/sun8i/de2_crtc.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_crtc.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_drm.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_drv.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi_io.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_plane.c
Signature · 6 lines
2.10.2

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.

A message that is not in the archive (sent off-list or not yet received): [email protected]

#2 lore raw

PATCH v6 1/5 drm: sun8i: Add a basic DRM driver for Allwinner DE2

Allwinner's recent SoCs, as A64, A83T and H3, contain a new display engine, DE2.
This patch adds a DRM video driver for this device.

---
 .../bindings/display/sunxi/sun8i-de2.txt           |  83 +++
 drivers/gpu/drm/Kconfig                            |   2 +
 drivers/gpu/drm/Makefile                           |   1 +
 drivers/gpu/drm/sun8i/Kconfig                      |  19 +
 drivers/gpu/drm/sun8i/Makefile                     |   7 +
 drivers/gpu/drm/sun8i/de2_crtc.c                   | 440 +++++++++++++
 drivers/gpu/drm/sun8i/de2_crtc.h                   |  50 ++
 drivers/gpu/drm/sun8i/de2_drm.h                    |  48 ++
 drivers/gpu/drm/sun8i/de2_drv.c                    | 379 +++++++++++
 drivers/gpu/drm/sun8i/de2_plane.c                  | 712 +++++++++++++++++++++
 10 files changed, 1741 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt
 create mode 100644 drivers/gpu/drm/sun8i/Kconfig
 create mode 100644 drivers/gpu/drm/sun8i/Makefile
 create mode 100644 drivers/gpu/drm/sun8i/de2_crtc.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_crtc.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_drm.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_drv.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_plane.c
Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt new file +83 -0
new file mode 100644
index 0000000..b9edd4b
@@ -0,0 +1,83 @@
+Allwinner sun8i Display Engine 2 subsystem
+==========================================
+
+The Allwinner DE2 subsystem contains a display controller (DE2),
+one or two LCD controllers (TCON) and their external interfaces.
+
+Display controller
+==================
+
+Required properties:
+
+- compatible: value should be one of the following
+		"allwinner,sun8i-a83t-display-engine"
+		"allwinner,sun8i-h3-display-engine"
+
+- clocks: must include clock specifiers corresponding to entries in the
+		clock-names property.
+
+- clock-names: must contain
+		"gate": DE bus gate
+		"clock": DE clock
+
+- resets: phandle to the reset of the device
+
+- ports: phandle's to the LCD ports
+
+LCD controller
+==============
+
+Required properties:
+
+- compatible: should be
+		"allwinner,sun8i-a83t-tcon"
+
+- clocks: must include clock specifiers corresponding to entries in the
+		clock-names property.
+
+- clock-names: must contain
+		"gate": TCON bus gate
+		"clock": TCON pixel clock
+
+- resets: phandle to the reset of the device
+
+- port: port node with endpoint definitions as defined in
+	Documentation/devicetree/bindings/media/video-interfaces.txt
+
+Example:
+
+	de: de-controller@01000000 {
+		compatible = "allwinner,sun8i-h3-display-engine";
+		...
+		clocks = <&&ccu CLK_BUS_DE>, <&ccu CLK_DE>;
+		clock-names = "gate", "clock";
+		resets = <&ccu RST_BUS_DE>;
+		ports = <&lcd0_p>;
+	};
+
+	lcd0: lcd-controller@01c0c000 {
+		compatible = "allwinner,sun8i-a83t-tcon";
+		...
+		clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
+		clock-names = "gate", "clock";
+		resets = <&ccu RST_BUS_TCON0>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		lcd0_p: port {
+			lcd0_ep: endpoint {
+				remote-endpoint = <&hdmi_ep>;
+			};
+		};
+	};
+
+	hdmi: hdmi@01ee0000 {
+		...
+		#address-cells = <1>;
+		#size-cells = <0>;
+		port {
+			hdmi_ep: endpoint {
+				remote-endpoint = <&lcd0_ep>;
+			};
+		};
+	};
+
drivers/gpu/drm/Kconfig +2 -0
index 95fc041..bb1bfbc 100644
@@ -202,6 +202,8 @@ source "drivers/gpu/drm/shmobile/Kconfig"
 
 source "drivers/gpu/drm/sun4i/Kconfig"
 
+source "drivers/gpu/drm/sun8i/Kconfig"
+
 source "drivers/gpu/drm/omapdrm/Kconfig"
 
 source "drivers/gpu/drm/tilcdc/Kconfig"
drivers/gpu/drm/Makefile +1 -0
index 883f3e7..3e1eaa0 100644
@@ -72,6 +72,7 @@ obj-$(CONFIG_DRM_RCAR_DU) += rcar-du/
 obj-$(CONFIG_DRM_SHMOBILE) +=shmobile/
 obj-y			+= omapdrm/
 obj-$(CONFIG_DRM_SUN4I) += sun4i/
+obj-$(CONFIG_DRM_SUN8I) += sun8i/
 obj-y			+= tilcdc/
 obj-$(CONFIG_DRM_QXL) += qxl/
 obj-$(CONFIG_DRM_BOCHS) += bochs/
drivers/gpu/drm/sun8i/Kconfig new file +19 -0
new file mode 100644
index 0000000..6940895
@@ -0,0 +1,19 @@
+#
+# Allwinner DE2 Video configuration
+#
+
+config DRM_SUN8I
+	bool
+
+config DRM_SUN8I_DE2
+	tristate "Support for Allwinner Video with DE2 interface"
+	depends on DRM && OF
+	depends on ARCH_SUNXI || COMPILE_TEST
+	select DRM_GEM_CMA_HELPER
+	select DRM_KMS_CMA_HELPER
+	select DRM_KMS_HELPER
+	select DRM_SUN8I
+	help
+	  Choose this option if your Allwinner chipset has the DE2 interface
+	  as the A64, A83T and H3. If M is selected the module will be called
+	  sun8i-de2-drm.
drivers/gpu/drm/sun8i/Makefile new file +7 -0
new file mode 100644
index 0000000..f107919
@@ -0,0 +1,7 @@
+#
+# Makefile for Allwinner's sun8i DRM device driver
+#
+
+sun8i-de2-drm-objs := de2_drv.o de2_crtc.o de2_plane.o
+
+obj-$(CONFIG_DRM_SUN8I_DE2) += sun8i-de2-drm.o
drivers/gpu/drm/sun8i/de2_crtc.c new file +440 -0

440 lines not on this page · raw message

drivers/gpu/drm/sun8i/de2_crtc.h new file +50 -0

50 lines not on this page · raw message

drivers/gpu/drm/sun8i/de2_drm.h new file +48 -0

48 lines not on this page · raw message

drivers/gpu/drm/sun8i/de2_drv.c new file +379 -0

379 lines not on this page · raw message

drivers/gpu/drm/sun8i/de2_plane.c new file +712 -0

712 lines not on this page · raw message

Signature · 6 lines
2.10.2

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.
maintainer
#3 lore raw

Re: [PATCH v6 1/5] drm: sun8i: Add a basic DRM driver for Allwinner DE2

Quoted 7 lines · Jean-Francois Moine

Allwinner's recent SoCs, as A64, A83T and H3, contain a new display engine, DE2.
This patch adds a DRM video driver for this device.

---
 .../bindings/display/sunxi/sun8i-de2.txt           |  83 +++

It's preferred to split bindings to a separate patch.

Quoted 40 lines
 drivers/gpu/drm/Kconfig                            |   2 +
 drivers/gpu/drm/Makefile                           |   1 +
 drivers/gpu/drm/sun8i/Kconfig                      |  19 +
 drivers/gpu/drm/sun8i/Makefile                     |   7 +
 drivers/gpu/drm/sun8i/de2_crtc.c                   | 440 +++++++++++++
 drivers/gpu/drm/sun8i/de2_crtc.h                   |  50 ++
 drivers/gpu/drm/sun8i/de2_drm.h                    |  48 ++
 drivers/gpu/drm/sun8i/de2_drv.c                    | 379 +++++++++++
 drivers/gpu/drm/sun8i/de2_plane.c                  | 712 +++++++++++++++++++++
 10 files changed, 1741 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt
 create mode 100644 drivers/gpu/drm/sun8i/Kconfig
 create mode 100644 drivers/gpu/drm/sun8i/Makefile
 create mode 100644 drivers/gpu/drm/sun8i/de2_crtc.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_crtc.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_drm.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_drv.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_plane.c
Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt new file +15 -0
new file mode 100644
index 0000000..b9edd4b
@@ -0,0 +1,83 @@
+Allwinner sun8i Display Engine 2 subsystem
+==========================================
+
+The Allwinner DE2 subsystem contains a display controller (DE2),
+one or two LCD controllers (TCON) and their external interfaces.
+
+Display controller
+==================
+
+Required properties:
+
+- compatible: value should be one of the following
+		"allwinner,sun8i-a83t-display-engine"
+		"allwinner,sun8i-h3-display-engine"
+

Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt line 25

Quoted 10 lines
Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt new file +10 -0
+- clocks: must include clock specifiers corresponding to entries in the
+		clock-names property.
+
+- clock-names: must contain
+		"gate": DE bus gate
+		"clock": DE clock
+
+- resets: phandle to the reset of the device
+
+- ports: phandle's to the LCD ports

This should use OF graph to describe the connection from the DE to the LCD controllers like the sun4i binding does.

No registers for the DE?

Quoted 10 lines
Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt new file +10 -0
+
+LCD controller
+==============
+
+Required properties:
+
+- compatible: should be
+		"allwinner,sun8i-a83t-tcon"
+
+- clocks: must include clock specifiers corresponding to entries in the

Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt line 45

Quoted 10 lines
Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt new file +10 -0
+		clock-names property.
+
+- clock-names: must contain
+		"gate": TCON bus gate
+		"clock": TCON pixel clock
+
+- resets: phandle to the reset of the device
+
+- port: port node with endpoint definitions as defined in
+	Documentation/devicetree/bindings/media/video-interfaces.txt

Need to specify how many ports and endpoints.

Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt line 51

Quoted 6 lines
Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt new file +6 -0
+
+Example:
+
+	de: de-controller at 01000000 {
+		compatible = "allwinner,sun8i-h3-display-engine";
+		...

What are you not showing?

Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt line 60

Quoted 9 lines
Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt new file +9 -0
+		clocks = <&&ccu CLK_BUS_DE>, <&ccu CLK_DE>;
+		clock-names = "gate", "clock";
+		resets = <&ccu RST_BUS_DE>;
+		ports = <&lcd0_p>;
+	};
+
+	lcd0: lcd-controller at 01c0c000 {
+		compatible = "allwinner,sun8i-a83t-tcon";
+		...

ditto.

Quoted 23 lines
Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt new file +23 -0
+		clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
+		clock-names = "gate", "clock";
+		resets = <&ccu RST_BUS_TCON0>;
+		#address-cells = <1>;
+		#size-cells = <0>;
+		lcd0_p: port {
+			lcd0_ep: endpoint {
+				remote-endpoint = <&hdmi_ep>;
+			};
+		};
+	};
+
+	hdmi: hdmi at 01ee0000 {
+		...
+		#address-cells = <1>;
+		#size-cells = <0>;
+		port {
+			hdmi_ep: endpoint {
+				remote-endpoint = <&lcd0_ep>;
+			};
+		};
+	};
+
#4 lore raw

PATCH v6 2/5 drm: sun8i: add HDMI video support to A83T and H3

In reply to a message not in the archive

This patch adds a HDMI video driver to the Allwinner's SoCs A83T and H3.

---
 .../devicetree/bindings/display/sunxi/hdmi.txt     |  53 ++
 drivers/gpu/drm/sun8i/Kconfig                      |   7 +
 drivers/gpu/drm/sun8i/Makefile                     |   2 +
 drivers/gpu/drm/sun8i/de2_hdmi.c                   | 394 ++++++++++
 drivers/gpu/drm/sun8i/de2_hdmi.h                   |  51 ++
 drivers/gpu/drm/sun8i/de2_hdmi_io.c                | 839 +++++++++++++++++++++
 6 files changed, 1346 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/sunxi/hdmi.txt
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi_io.c
Documentation/devicetree/bindings/display/sunxi/hdmi.txt new file +53 -0
new file mode 100644
index 0000000..85709ab
@@ -0,0 +1,53 @@
+Allwinner HDMI Transmitter
+==========================
+
+The Allwinner HDMI transmitters are included in the SoCs.
+They support audio and video.
+
+Required properties:
+ - #address-cells : should be <1>
+ - #size-cells : should be <0>
+ - compatible : should be one of
+		"allwinner,sun8i-a83t-hdmi"
+		"allwinner,sun8i-h3-hdmi"
+ - clocks : phandles to the HDMI clocks as described in
+	Documentation/devicetree/bindings/clock/clock-bindings.txt
+ - clock-names : must be
+		"gate" : bus gate
+		"clock" : streaming clock
+		"ddc-clock" : DDC clock
+ - resets : One or two phandles to the HDMI resets
+ - reset-names : when 2 phandles, must be
+		"hdmi0" and "hdmi1"
+
+Required nodes:
+ - port: Audio and video input port nodes with endpoint definitions
+	as defined in Documentation/devicetree/bindings/graph.txt.
+	port@0 is video and port@1 is audio.
+
+Example:
+
+	hdmi: hdmi@01ee0000 {
+		compatible = "allwinner,sun8i-a83t-hdmi";
+		reg = <0x01ee0000 0x20000>;
+		clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI>,
+			 <&ccu CLK_HDMI_DDC>;
+		clock-names = "gate", "clock", "ddc-clock";
+		resets = <&ccu RST_HDMI0>, <&ccu RST_HDMI1>;
+		reset-names = "hdmi0", "hdmi1";
+		...
+		#address-cells = <1>;
+		#size-cells = <0>;
+		port@0 {			/* video */
+			reg = <0>;
+			hdmi_lcd1: endpoint {
+				remote-endpoint = <&lcd1_hdmi>;
+			};
+		};
+		port@1 {			/* audio */
+			reg = <1>;
+			hdmi_i2s2: endpoint {
+				remote-endpoint = <&i2s2_hdmi>;
+			};
+		};
+	};
drivers/gpu/drm/sun8i/Kconfig +7 -0
index 6940895..5c4607b 100644
@@ -17,3 +17,10 @@ config DRM_SUN8I_DE2
 	  Choose this option if your Allwinner chipset has the DE2 interface
 	  as the A64, A83T and H3. If M is selected the module will be called
 	  sun8i-de2-drm.
+
+config DRM_SUN8I_DE2_HDMI
+	tristate "Support for DE2 HDMI"
+	depends on DRM_SUN8I_DE2
+	help
+	  Choose this option if you use want HDMI on DE2.
+	  If M is selected the module will be called sun8i-de2-hdmi.
drivers/gpu/drm/sun8i/Makefile +2 -0
index f107919..6ba97c2 100644
@@ -3,5 +3,7 @@
 #
 
 sun8i-de2-drm-objs := de2_drv.o de2_crtc.o de2_plane.o
+sun8i-de2-hdmi-objs := de2_hdmi.o de2_hdmi_io.o
 
 obj-$(CONFIG_DRM_SUN8I_DE2) += sun8i-de2-drm.o
+obj-$(CONFIG_DRM_SUN8I_DE2_HDMI) += sun8i-de2-hdmi.o
drivers/gpu/drm/sun8i/de2_hdmi.c new file +394 -0

394 lines not on this page · raw message

drivers/gpu/drm/sun8i/de2_hdmi.h new file +51 -0

51 lines not on this page · raw message

drivers/gpu/drm/sun8i/de2_hdmi_io.c new file +839 -0

839 lines not on this page · raw message

Signature · 6 lines
2.10.2

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.

A message that is not in the archive (sent off-list or not yet received): cea6a5397664213c6a917028ec2e429d25972490.1479641523.git.moinejf-GANU6spQydw@public.gmane.org

#6 lore raw

Re: [PATCH v6 2/5] drm: sun8i: add HDMI video support to A83T and H3

Quoted 38 lines · Jean-Francois Moine

This patch adds a HDMI video driver to the Allwinner's SoCs A83T and H3.

---
 .../devicetree/bindings/display/sunxi/hdmi.txt     |  53 ++
 drivers/gpu/drm/sun8i/Kconfig                      |   7 +
 drivers/gpu/drm/sun8i/Makefile                     |   2 +
 drivers/gpu/drm/sun8i/de2_hdmi.c                   | 394 ++++++++++
 drivers/gpu/drm/sun8i/de2_hdmi.h                   |  51 ++
 drivers/gpu/drm/sun8i/de2_hdmi_io.c                | 839 +++++++++++++++++++++
 6 files changed, 1346 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/sunxi/hdmi.txt
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi_io.c
Documentation/devicetree/bindings/display/sunxi/hdmi.txt new file +16 -0
new file mode 100644
index 0000000..85709ab
@@ -0,0 +1,53 @@
+Allwinner HDMI Transmitter
+==========================
+
+The Allwinner HDMI transmitters are included in the SoCs.
+They support audio and video.
+
+Required properties:
+ - #address-cells : should be <1>
+ - #size-cells : should be <0>
+ - compatible : should be one of
+		"allwinner,sun8i-a83t-hdmi"
+		"allwinner,sun8i-h3-hdmi"
+ - clocks : phandles to the HDMI clocks as described in
+	Documentation/devicetree/bindings/clock/clock-bindings.txt
+ - clock-names : must be
+		"gate" : bus gate

Documentation/devicetree/bindings/display/sunxi/hdmi.txt line 26

Quoted 10 lines
Documentation/devicetree/bindings/display/sunxi/hdmi.txt new file +10 -0
+		"clock" : streaming clock
+		"ddc-clock" : DDC clock
+ - resets : One or two phandles to the HDMI resets
+ - reset-names : when 2 phandles, must be
+		"hdmi0" and "hdmi1"
+
+Required nodes:
+ - port: Audio and video input port nodes with endpoint definitions
+	as defined in Documentation/devicetree/bindings/graph.txt.
+	port@0 is video and port@1 is audio.

This should probably also have an output port to the hdmi-connector binding. It is not needed so much if this block handles DDC and HPD itself, but if those are a separate I2C controller and GPIO, respectively, then you need it for sure. There's also power on the connector or other connectors like muxed on Type-C.

Documentation/devicetree/bindings/display/sunxi/hdmi.txt line 38

Quoted 12 lines
Documentation/devicetree/bindings/display/sunxi/hdmi.txt new file +12 -0
+
+Example:
+
+	hdmi: hdmi@01ee0000 {
+		compatible = "allwinner,sun8i-a83t-hdmi";
+		reg = <0x01ee0000 0x20000>;
+		clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI>,
+			 <&ccu CLK_HDMI_DDC>;
+		clock-names = "gate", "clock", "ddc-clock";
+		resets = <&ccu RST_HDMI0>, <&ccu RST_HDMI1>;
+		reset-names = "hdmi0", "hdmi1";
+		...

Please show all properties in example.

Quoted 15 lines
Documentation/devicetree/bindings/display/sunxi/hdmi.txt new file +15 -0
+		#address-cells = <1>;
+		#size-cells = <0>;
+		port@0 {			/* video */
+			reg = <0>;
+			hdmi_lcd1: endpoint {
+				remote-endpoint = <&lcd1_hdmi>;
+			};
+		};
+		port@1 {			/* audio */
+			reg = <1>;
+			hdmi_i2s2: endpoint {
+				remote-endpoint = <&i2s2_hdmi>;
+			};
+		};
+	};
#7 lore raw

PATCH v6 3/5 ARM: dts: sun8i-h3: add HDMI video nodes

In reply to a message not in the archive
---
 arch/arm/boot/dts/sun8i-h3.dtsi | 51 +++++++++++++++++++++++++++++++++++++++++
 1 file changed, 51 insertions(+)
arch/arm/boot/dts/sun8i-h3.dtsi +51 -0
index 416b825..7c6b1d5 100644
@@ -140,6 +140,16 @@
 		#size-cells = <1>;
 		ranges;
 
+		de: de-controller@01000000 {
+			compatible = "allwinner,sun8i-h3-display-engine";
+			reg = <0x01000000 0x400000>;
+			clocks = <&ccu CLK_BUS_DE>, <&ccu CLK_DE>;
+			clock-names = "bus", "clock";
+			resets = <&ccu RST_BUS_DE>;
+			ports = <&lcd0_p>;
+			status = "disabled";
+		};
+
 		dma: dma-controller@01c02000 {
 			compatible = "allwinner,sun8i-h3-dma";
 			reg = <0x01c02000 0x1000>;
@@ -149,6 +159,23 @@
 			#dma-cells = <1>;
 		};
 
+		lcd0: lcd-controller@01c0c000 {
+			compatible = "allwinner,sun8i-a83t-tcon";
+			reg = <0x01c0c000 0x400>;
+			clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
+			clock-names = "bus", "clock";
+			resets = <&ccu RST_BUS_TCON0>;
+			interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			lcd0_p: port {
+				lcd0_hdmi: endpoint {
+					remote-endpoint = <&hdmi_lcd0>;
+				};
+			};
+		};
+
 		mmc0: mmc@01c0f000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c0f000 0x1000>;
@@ -314,6 +341,11 @@
 			clock-names = "hosc", "losc";
 			#clock-cells = <1>;
 			#reset-cells = <1>;
+
+			assigned-clocks = <&ccu CLK_PLL_DE>,
+					  <&ccu CLK_DE>;
+			assigned-clock-rates =  <864000000>,
+						<432000000>;
 		};
 
 		pio: pinctrl@01c20800 {
@@ -564,6 +596,25 @@
 			interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
 		};
 
+		hdmi: hdmi@01ee0000 {
+			compatible = "allwinner,sun8i-h3-hdmi";
+			reg = <0x01ee0000 0x20000>;
+			clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI>,
+				 <&ccu CLK_HDMI_DDC>;
+			clock-names = "bus", "clock", "ddc-clock";
+			resets = <&ccu RST_BUS_HDMI0>, <&ccu RST_BUS_HDMI1>;
+			reset-names = "hdmi0", "hdmi1";
+			status = "disabled";
+			#address-cells = <1>;
+			#size-cells = <0>;
+			port@0 {			/* video */
+				reg = <0>;
+				hdmi_lcd0: endpoint {
+					remote-endpoint = <&lcd0_hdmi>;
+				};
+			};
+		};
+
 		rtc: rtc@01f00000 {
 			compatible = "allwinner,sun6i-a31-rtc";
 			reg = <0x01f00000 0x54>;
Signature · 1 line
2.10.2

A message that is not in the archive (sent off-list or not yet received): cdf50b8433e2d9a053e35f8788bfcd5d41504312.1479641523.git.moinejf-GANU6spQydw@public.gmane.org

#9 lore raw

Re: [PATCH v6 3/5] ARM: dts: sun8i-h3: add HDMI video nodes

20.11.2016, 20:07, "Jean-Francois Moine" <[email protected]>:

Quoted 51 lines

---
 arch/arm/boot/dts/sun8i-h3.dtsi | 51 +++++++++++++++++++++++++++++++++++++++++

 1 file changed, 51 insertions(+)
arch/arm/boot/dts/sun8i-h3.dtsi +27 -0
index 416b825..7c6b1d5 100644
@@ -140,6 +140,16 @@
                  #size-cells = <1>;
                  ranges;
 
+ de: de-controller@01000000 {
+ compatible = "allwinner,sun8i-h3-display-engine";
+ reg = <0x01000000 0x400000>;
+ clocks = <&ccu CLK_BUS_DE>, <&ccu CLK_DE>;
+ clock-names = "bus", "clock";
+ resets = <&ccu RST_BUS_DE>;
+ ports = <&lcd0_p>;
+ status = "disabled";
+ };
+
                  dma: dma-controller@01c02000 {
                          compatible = "allwinner,sun8i-h3-dma";
                          reg = <0x01c02000 0x1000>;
@@ -149,6 +159,23 @@
                          #dma-cells = <1>;
                  };
 
+ lcd0: lcd-controller@01c0c000 {
+ compatible = "allwinner,sun8i-a83t-tcon";
+ reg = <0x01c0c000 0x400>;
+ clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
+ clock-names = "bus", "clock";
+ resets = <&ccu RST_BUS_TCON0>;
+ interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ lcd0_p: port {
+ lcd0_hdmi: endpoint {
+ remote-endpoint = <&hdmi_lcd0>;
+ };
+ };
+ };
+
                  mmc0: mmc@01c0f000 {
                          compatible = "allwinner,sun7i-a20-mmc";
                          reg = <0x01c0f000 0x1000>;

arch/arm/boot/dts/sun8i-h3.dtsi line 345

Quoted 5 lines
arch/arm/boot/dts/sun8i-h3.dtsi +2 -0
@@ -314,6 +341,11 @@
                          clock-names = "hosc", "losc";
                          #clock-cells = <1>;
                          #reset-cells = <1>;
+
+ assigned-clocks = <&ccu CLK_PLL_DE>,

Cannot get the patch built on 4.9-rc, as CLK_PLL_DE is not an exported clock.

Only CLK_DE is exported.

Quoted 39 lines
arch/arm/boot/dts/sun8i-h3.dtsi +22 -1
+ <&ccu CLK_DE>;
+ assigned-clock-rates = <864000000>,
+ <432000000>;
                  };
 
                  pio: pinctrl@01c20800 {
@@ -564,6 +596,25 @@
                          interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
                  };
 
+ hdmi: hdmi@01ee0000 {
+ compatible = "allwinner,sun8i-h3-hdmi";
+ reg = <0x01ee0000 0x20000>;
+ clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI>,
+ <&ccu CLK_HDMI_DDC>;
+ clock-names = "bus", "clock", "ddc-clock";
+ resets = <&ccu RST_BUS_HDMI0>, <&ccu RST_BUS_HDMI1>;
+ reset-names = "hdmi0", "hdmi1";
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 { /* video */
+ reg = <0>;
+ hdmi_lcd0: endpoint {
+ remote-endpoint = <&lcd0_hdmi>;
+ };
+ };
+ };
+
                  rtc: rtc@01f00000 {
                          compatible = "allwinner,sun6i-a31-rtc";
                          reg = <0x01f00000 0x54>;
--

2.10.2

--
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

Signature · 3 lines
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout.

A message that is not in the archive (sent off-list or not yet received): [email protected]

#11 lore raw

Re: [PATCH v6 3/5] ARM: dts: sun8i-h3: add HDMI video nodes

Quoted 3 lines · On Fri, 25 Nov 2016 13:27:20 +0800 Icenowy Zheng…
Quoted 1 line

+ assigned-clocks = <&ccu CLK_PLL_DE>,

Cannot get the patch built on 4.9-rc, as CLK_PLL_DE is not an exported clock.

Hi,

Sorry, I forgot it. The symbol goes to
include/dt-bindings/clock/sun8i-h3-ccu.h
as:

#define CLK_PLL_DE 13

Signature · 7 lines
Ken ar c'hentañ	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.
#12 lore raw

Re: [PATCH v6 3/5] ARM: dts: sun8i-h3: add HDMI video nodes

In reply to a message not in the archive

20.11.2016, 20:12, "Jean-Francois Moine" <[email protected]>:

Quoted 78 lines

---
 arch/arm/boot/dts/sun8i-h3.dtsi | 51 +++++++++++++++++++++++++++++++++++++++++

 1 file changed, 51 insertions(+)
arch/arm/boot/dts/sun8i-h3.dtsi +44 -0
index 416b825..7c6b1d5 100644
@@ -140,6 +140,16 @@
                  #size-cells = <1>;
                  ranges;
 
+ de: de-controller@01000000 {
+ compatible = "allwinner,sun8i-h3-display-engine";
+ reg = <0x01000000 0x400000>;
+ clocks = <&ccu CLK_BUS_DE>, <&ccu CLK_DE>;
+ clock-names = "bus", "clock";
+ resets = <&ccu RST_BUS_DE>;
+ ports = <&lcd0_p>;
+ status = "disabled";
+ };
+
                  dma: dma-controller@01c02000 {
                          compatible = "allwinner,sun8i-h3-dma";
                          reg = <0x01c02000 0x1000>;
@@ -149,6 +159,23 @@
                          #dma-cells = <1>;
                  };
 
+ lcd0: lcd-controller@01c0c000 {
+ compatible = "allwinner,sun8i-a83t-tcon";
+ reg = <0x01c0c000 0x400>;
+ clocks = <&ccu CLK_BUS_TCON0>, <&ccu CLK_TCON0>;
+ clock-names = "bus", "clock";
+ resets = <&ccu RST_BUS_TCON0>;
+ interrupts = <GIC_SPI 86 IRQ_TYPE_LEVEL_HIGH>;
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ lcd0_p: port {
+ lcd0_hdmi: endpoint {
+ remote-endpoint = <&hdmi_lcd0>;
+ };
+ };
+ };
+
                  mmc0: mmc@01c0f000 {
                          compatible = "allwinner,sun7i-a20-mmc";
                          reg = <0x01c0f000 0x1000>;
@@ -314,6 +341,11 @@
                          clock-names = "hosc", "losc";
                          #clock-cells = <1>;
                          #reset-cells = <1>;
+
+ assigned-clocks = <&ccu CLK_PLL_DE>,
+ <&ccu CLK_DE>;
+ assigned-clock-rates = <864000000>,
+ <432000000>;
                  };
 
                  pio: pinctrl@01c20800 {
@@ -564,6 +596,25 @@
                          interrupts = <GIC_PPI 9 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_HIGH)>;
                  };
 
+ hdmi: hdmi@01ee0000 {
+ compatible = "allwinner,sun8i-h3-hdmi";
+ reg = <0x01ee0000 0x20000>;
+ clocks = <&ccu CLK_BUS_HDMI>, <&ccu CLK_HDMI>,
+ <&ccu CLK_HDMI_DDC>;
+ clock-names = "bus", "clock", "ddc-clock";
+ resets = <&ccu RST_BUS_HDMI0>, <&ccu RST_BUS_HDMI1>;
+ reset-names = "hdmi0", "hdmi1";
+ status = "disabled";
+ #address-cells = <1>;
+ #size-cells = <0>;
+ port@0 { /* video */

arch/arm/boot/dts/sun8i-h3.dtsi line 620

Quoted 10 lines
arch/arm/boot/dts/sun8i-h3.dtsi +7 -0
+ reg = <0>;
+ hdmi_lcd0: endpoint {
+ remote-endpoint = <&lcd0_hdmi>;
+ };
+ };
+ };
+
                  rtc: rtc@01f00000 {
                          compatible = "allwinner,sun6i-a31-rtc";
                          reg = <0x01f00000 0x54>;

After removing CLK_PLL_DE's assigned-clock, the kernel passes compilation.

However, it cannot recognize any HDMI screen...

(My board is Orange Pi One, and I manually added status="okay"; to &lcd0, &de, &hdmi)

[   16.507802] sun8i-de2 1000000.de-controller: bound 1c0c000.lcd-controller (ops de2_lcd_ops [sun8i_de2_drm])
[   16.675948] sun8i-de2 1000000.de-controller: bound 1ee0000.hdmi (ops de2_hdmi_fini [sun8i_de2_hdmi])
[   16.685120] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[   16.695876] [drm] No driver support for vblank timestamp query.
[   16.701862] sun8i-de2 1000000.de-controller: No connectors reported connected with modes
[   16.713061] [drm] Cannot find any crtc or sizes - going 1024x768
[   16.734214] Console: switching to colour frame buffer device 128x48
[   16.751022] sun8i-de2 1000000.de-controller: fb0:  frame buffer device
Quoted 7 lines

--
2.10.2

_______________________________________________
linux-arm-kernel mailing list
[email protected]
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

Signature · 3 lines
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to [email protected].
For more options, visit https://groups.google.com/d/optout.

A message that is not in the archive (sent off-list or not yet received): [email protected]

#14 lore raw

Re: [PATCH v6 3/5] ARM: dts: sun8i-h3: add HDMI video nodes

Quoted 1 line · On Fri, 25 Nov 2016 17:41:51 +0800 Icenowy Zheng…

After removing CLK_PLL_DE's assigned-clock, the kernel passes compilation.

The 'pll-de' and 'de' must have a fixed rate. Otherwise, if you do not use the legacy u-boot, I don't know which can be the rate of the DE.

Quoted 4 lines

However, it cannot recognize any HDMI screen...

(My board is Orange Pi One, and I manually added status="okay"; to &lcd0, &de, &hdmi)

Quoted 8 lines
[   16.507802] sun8i-de2 1000000.de-controller: bound 1c0c000.lcd-controller (ops de2_lcd_ops [sun8i_de2_drm])
[   16.675948] sun8i-de2 1000000.de-controller: bound 1ee0000.hdmi (ops de2_hdmi_fini [sun8i_de2_hdmi])
[   16.685120] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[   16.695876] [drm] No driver support for vblank timestamp query.
[   16.701862] sun8i-de2 1000000.de-controller: No connectors reported connected with modes
[   16.713061] [drm] Cannot find any crtc or sizes - going 1024x768
[   16.734214] Console: switching to colour frame buffer device 128x48
[   16.751022] sun8i-de2 1000000.de-controller: fb0:  frame buffer device

I put a 'pr_warn' message is case the EDID cannot be read. Have you this message?

Anyway, there is a problem with the EDID:
- my Orange Pi 2 (H3) randomly fails to read it. But this succeeds after rebooting once or twice.
- my Banana Pi M2+ (H3) reads it correctly each time.
- my Banana Pi M3 (A83T) can never read it.

BTW, on first tries, I was forcing a CEA mode thru the kernel command line. This was working with the OPi2 and BPiM3, but there was no sound. In the last version, I use a EDID in edid_firmware for having sound with the BPiM3. This works fine.
But, forcing a CEA mode is no more possible, so, when the OPi2 cannot read the EDID, the system switches to a VGA mode (default 1024x768) which is not supported. It seems that this is your case.

So, in brief, if your board cannot read the EDID, put a EDID somewhere and its path in /sys/module/drm_kms_helper/parameters/edid_firmware. There will be no console, but X11 will work correctly.

Signature · 7 lines
Ken ar c'hentañ	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.

A message that is not in the archive (sent off-list or not yet received): 20161125112213.83420594eb435b6bb1a4d164-GANU6spQydw@public.gmane.org

#16 lore raw

Re: [PATCH v6 3/5] ARM: dts: sun8i-h3: add HDMI video nodes

25.11.2016, 18:22, "Jean-Francois Moine" <[email protected]>:

Quoted 7 lines
Quoted 1 line · On Fri, 25 Nov 2016 17:41:51 +0800 Icenowy Zheng…

 After removing CLK_PLL_DE's assigned-clock, the kernel passes compilation.

The 'pll-de' and 'de' must have a fixed rate. Otherwise, if you do not use the legacy u-boot, I don't know which can be the rate of the DE.

Can't CCU deal with this?

I still kept the CLK_DE's assigned-clock...

Quoted 14 lines
Quoted 5 lines

 However, it cannot recognize any HDMI screen...

 (My board is Orange Pi One, and I manually added status="okay"; to &lcd0, &de, &hdmi)

Quoted 8 lines
 [ 16.507802] sun8i-de2 1000000.de-controller: bound 1c0c000.lcd-controller (ops de2_lcd_ops [sun8i_de2_drm])
 [ 16.675948] sun8i-de2 1000000.de-controller: bound 1ee0000.hdmi (ops de2_hdmi_fini [sun8i_de2_hdmi])
 [ 16.685120] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
 [ 16.695876] [drm] No driver support for vblank timestamp query.
 [ 16.701862] sun8i-de2 1000000.de-controller: No connectors reported connected with modes
 [ 16.713061] [drm] Cannot find any crtc or sizes - going 1024x768
 [ 16.734214] Console: switching to colour frame buffer device 128x48
 [ 16.751022] sun8i-de2 1000000.de-controller: fb0: frame buffer device
Quoted 2 lines

I put a 'pr_warn' message is case the EDID cannot be read. Have you this message?

Seems no...

Quoted 15 lines

Anyway, there is a problem with the EDID:
- my Orange Pi 2 (H3) randomly fails to read it. But this succeeds after rebooting once or twice.
- my Banana Pi M2+ (H3) reads it correctly each time.
- my Banana Pi M3 (A83T) can never read it.

BTW, on first tries, I was forcing a CEA mode thru the kernel command line. This was working with the OPi2 and BPiM3, but there was no sound. In the last version, I use a EDID in edid_firmware for having sound with the BPiM3. This works fine.
But, forcing a CEA mode is no more possible, so, when the OPi2 cannot read the EDID, the system switches to a VGA mode (default 1024x768) which is not supported. It seems that this is your case.

Quoted 3 lines

So, in brief, if your board cannot read the EDID, put a EDID somewhere and its path in /sys/module/drm_kms_helper/parameters/edid_firmware. There will be no console, but X11 will work correctly.

The problem seems to be that the CRTC is not properly initialized...

Quoted 4 lines

--
Ken ar c'hentañ | ** Breizh ha Linux atav! **
Jef | http://moinejf.free.fr/

Signature · 3 lines
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.
#17 lore raw

Re: [PATCH v6 3/5] ARM: dts: sun8i-h3: add HDMI video nodes

In reply to a message not in the archive
Quoted 38 lines · Jean-Francois Moine
Quoted 1 line · On Fri, 25 Nov 2016 17:41:51 +0800 Icenowy Zheng…

After removing CLK_PLL_DE's assigned-clock, the kernel passes compilation.

The 'pll-de' and 'de' must have a fixed rate. Otherwise, if you do not use the legacy u-boot, I don't know which can be the rate of the DE.

Quoted 4 lines

However, it cannot recognize any HDMI screen...

(My board is Orange Pi One, and I manually added status="okay"; to &lcd0, &de, &hdmi)

Quoted 8 lines
[   16.507802] sun8i-de2 1000000.de-controller: bound 1c0c000.lcd-controller (ops de2_lcd_ops [sun8i_de2_drm])
[   16.675948] sun8i-de2 1000000.de-controller: bound 1ee0000.hdmi (ops de2_hdmi_fini [sun8i_de2_hdmi])
[   16.685120] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[   16.695876] [drm] No driver support for vblank timestamp query.
[   16.701862] sun8i-de2 1000000.de-controller: No connectors reported connected with modes
[   16.713061] [drm] Cannot find any crtc or sizes - going 1024x768
[   16.734214] Console: switching to colour frame buffer device 128x48
[   16.751022] sun8i-de2 1000000.de-controller: fb0:  frame buffer device

I put a 'pr_warn' message is case the EDID cannot be read. Have you this message?

Anyway, there is a problem with the EDID:
- my Orange Pi 2 (H3) randomly fails to read it. But this succeeds after rebooting once or twice.
- my Banana Pi M2+ (H3) reads it correctly each time.
- my Banana Pi M3 (A83T) can never read it.

BTW, on first tries, I was forcing a CEA mode thru the kernel command line. This was working with the OPi2 and BPiM3, but there was no sound. In the last version, I use a EDID in edid_firmware for having sound with the BPiM3. This works fine.
But, forcing a CEA mode is no more possible, so, when the OPi2 cannot read the EDID, the system switches to a VGA mode (default 1024x768) which is not supported. It seems that this is your case.

Quoted 3 lines

So, in brief, if your board cannot read the EDID, put a EDID somewhere and its path in /sys/module/drm_kms_helper/parameters/edid_firmware. There will be no console, but X11 will work correctly.

This is one of the things that are usually very helpful to put in a cover letter. This is obviously also a blocker for the merge of the driver, and should be dealt with.

Maxime

Signature · 3 lines
Maxime Ripard, Free Electrons
Embedded Linux and Kernel engineering
http://free-electrons.com
#18 lore raw

Re: [PATCH v6 3/5] ARM: dts: sun8i-h3: add HDMI video nodes

In reply to a message not in the archive

Hi Jean-François,

Dne petek, 25. november 2016 11.22.20 UTC+1 je oseba Jean-François Moine napisala:

Quoted 27 lines
Quoted 1 line · On Fri, 25 Nov 2016 17:41:51 +0800 Icenowy Zheng…

After removing CLK_PLL_DE's assigned-clock, the kernel passes

compilation.

The 'pll-de' and 'de' must have a fixed rate. Otherwise, if you do not use the legacy u-boot, I don't know which can be the rate of the DE.

Quoted 3 lines

However, it cannot recognize any HDMI screen...

(My board is Orange Pi One, and I manually added status="okay"; to

&lcd0, &de, &hdmi)

Quoted 2 lines
[   16.507802] sun8i-de2 1000000.de-controller: bound 

1c0c000.lcd-controller (ops de2_lcd_ops [sun8i_de2_drm])

Quoted 1 line
[   16.675948] sun8i-de2 1000000.de-controller: bound 1ee0000.hdmi (ops 

de2_hdmi_fini [sun8i_de2_hdmi])

Quoted 1 line
[   16.685120] [drm] Supports vblank timestamp caching Rev 2 

(21.10.2013).

Quoted 2 lines
[   16.695876] [drm] No driver support for vblank timestamp query. 
[   16.701862] sun8i-de2 1000000.de-controller: No connectors reported 

connected with modes

Quoted 3 lines
[   16.713061] [drm] Cannot find any crtc or sizes - going 1024x768 
[   16.734214] Console: switching to colour frame buffer device 128x48 
[   16.751022] sun8i-de2 1000000.de-controller: fb0:  frame buffer 
Quoted 9 lines

device

I put a 'pr_warn' message is case the EDID cannot be read. Have you this message?

Anyway, there is a problem with the EDID:
- my Orange Pi 2 (H3) randomly fails to read it. But this succeeds after rebooting once or twice.

My U-Boot driver never exhibited a problem with reading EDID on OPi2. However,
I'm reusing code from Rockchip HDMI U-Boot driver for this (with some Allwinner
adjustments).

Quoted 11 lines

- my Banana Pi M2+ (H3) reads it correctly each time.
- my Banana Pi M3 (A83T) can never read it.

BTW, on first tries, I was forcing a CEA mode thru the kernel command line. This was working with the OPi2 and BPiM3, but there was no sound. In the last version, I use a EDID in edid_firmware for having sound with the BPiM3. This works fine.
But, forcing a CEA mode is no more possible, so, when the OPi2 cannot read the EDID, the system switches to a VGA mode (default 1024x768) which is not supported. It seems that this is your case.

Quoted 7 lines

So, in brief, if your board cannot read the EDID, put a EDID somewhere and its path in /sys/module/drm_kms_helper/parameters/edid_firmware. There will be no console, but X11 will work correctly.

Signature · 2 lines
Ken ar c'hentañ        |              ** Breizh ha Linux atav! ** 
Jef                |                http://moinejf.free.fr/

Best regards,
Jernej Škrabec

Signature · 3 lines
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.
#19 lore raw

PATCH v6 4/5 ARM: dts: sun8i-h3: Add HDMI video to the Banana Pi M2+

In reply to a message not in the archive
---
 arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts | 13 +++++++++++++
 1 file changed, 13 insertions(+)
arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts +13 -0
index c0c49dd..4b5baae 100644
@@ -55,6 +55,7 @@
 	aliases {
 		serial0 = &uart0;
 		serial1 = &uart1;
+		lcd0 = &lcd0;
 	};
 
 	chosen {
@@ -93,6 +94,10 @@
 	};
 };
 
+&de {
+	status = "okay";
+};
+
 &ehci1 {
 	status = "okay";
 };
@@ -101,12 +106,20 @@
 	status = "okay";
 };
 
+&hdmi {
+	status = "okay";
+};
+
 &ir {
 	pinctrl-names = "default";
 	pinctrl-0 = <&ir_pins_a>;
 	status = "okay";
 };
 
+&lcd0 {
+	status = "okay";
+};
+
 &mmc0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
Signature · 1 line
2.10.2
#20 lore raw

PATCH v6 5/5 ARM: dts: sun8i-h3: Add HDMI video to the Orange PI 2

In reply to a message not in the archive
---
 arch/arm/boot/dts/sun8i-h3-orangepi-2.dts | 13 +++++++++++++
 1 file changed, 13 insertions(+)
arch/arm/boot/dts/sun8i-h3-orangepi-2.dts +13 -0
index 047e9e1..9ecc6f1 100644
@@ -56,6 +56,7 @@
 		serial0 = &uart0;
 		/* ethernet0 is the H3 emac, defined in sun8i-h3.dtsi */
 		ethernet1 = &rtl8189;
+		lcd0 = &lcd0;
 	};
 
 	chosen {
@@ -105,16 +106,28 @@
 	};
 };
 
+&de {
+	status = "okay";
+};
+
 &ehci1 {
 	status = "okay";
 };
 
+&hdmi {
+	status = "okay";
+};
+
 &ir {
 	pinctrl-names = "default";
 	pinctrl-0 = <&ir_pins_a>;
 	status = "okay";
 };
 
+&lcd0 {
+	status = "okay";
+};
+
 &mmc0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&mmc0_pins_a>, <&mmc0_cd_pin>;
Signature · 1 line
2.10.2
#21 lore raw
In reply to a message not in the archive

Dne 20.11.2016 v 12:32 Jean-Francois Moine napsal(a):

Quoted 4 lines

This patchset series adds HDMI video support to the Allwinner sun8i SoCs which include the display engine 2 (DE2). The driver contains the code for the A83T and H3, but it could be used/extended for other SoCs as the A64, H2 and H5.

Hi,

I'm trying to test your patches on Orange Pi PC, and I've run into a few
issues: (I'm using sunxi-ng with the same patches as last time, to make it work with your driver)

1] I just get pink output on the monitor - there's some signal, but it's pink (or more like magenta).

dmesg ouput indicates no error:

[    1.887823] [drm] Initialized
[    1.888503] sun8i-de2 1000000.de-controller: bound
1c0c000.lcd-controller (ops 0xc0a63894)
[    2.057298] sun8i-de2 1000000.de-controller: bound 1ee0000.hdmi (ops
0xc0a63b54)
[    2.057304] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    2.057307] [drm] No driver support for vblank timestamp query.
[    2.690862] Console: switching to colour frame buffer device 240x67
[    2.723059] sun8i-de2 1000000.de-controller: fb0:  frame buffer device
Quoted 16 lines

v6:
- remove audio support (other patchset to come)
- use DRM modeset data for HDMI configuration (thanks to Jernej Škrabec)
- more meaningfull register names
- use a mutex for DE I/O protection
- merge DE and plane into one file
- don't activate the video hardware when video not started (Maxime Ripard)
- remove 'type = "video" in DT graph ports
(Rob Herring)
- change the I/O accesses by #define instead of struct (Maxime Ripard, André Przywara)
- remove pm functions (Maxime Ripard)
- set the pll-de/de clocks in the DT (Maxime Ripard)

This change triggers this dmesg output I suppose:

[    0.000000] bad: scheduling from the idle thread!
[    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
4.9.0-rc6-00045-g5347f96 #29
[    0.000000] Hardware name: Allwinner sun8i Family
[    0.000000] [<c010dc64>] (unwind_backtrace) from [<c010ae7c>]
(show_stack+0x10/0x14)
[    0.000000] [<c010ae7c>] (show_stack) from [<c04d3ce0>]
(dump_stack+0x84/0x98)
[    0.000000] [<c04d3ce0>] (dump_stack) from [<c0149984>]
(dequeue_task_idle+0x34/0x40)
[    0.000000] [<c0149984>] (dequeue_task_idle) from [<c0950b54>]
(__schedule+0x244/0x52c)
[    0.000000] [<c0950b54>] (__schedule) from [<c0950eac>]
(schedule+0x44/0x9c)
[    0.000000] [<c0950eac>] (schedule) from [<c0953e58>]
(schedule_hrtimeout_range_clock+0xc4/0x138)
[    0.000000] [<c0953e58>] (schedule_hrtimeout_range_clock) from
[<c0953ee4>] (schedule_hrtimeout_range+0x18/0x20)
[    0.000000] [<c0953ee4>] (schedule_hrtimeout_range) from [<c0953c40>]
(usleep_range+0x4c/0x54)
[    0.000000] [<c0953c40>] (usleep_range) from [<c052c4f0>]
(ccu_helper_wait_for_lock+0x58/0xc8)
[    0.000000] [<c052c4f0>] (ccu_helper_wait_for_lock) from [<c052dd10>]
(ccu_nm_set_rate+0x124/0x148)
[    0.000000] [<c052dd10>] (ccu_nm_set_rate) from [<c052547c>]
(clk_change_rate+0x194/0x248)
[    0.000000] [<c052547c>] (clk_change_rate) from [<c0525598>]
(clk_core_set_rate_nolock+0x68/0xb0)
[    0.000000] [<c0525598>] (clk_core_set_rate_nolock) from [<c0525b58>]
(clk_set_rate+0x20/0x30)
[    0.000000] [<c0525b58>] (clk_set_rate) from [<c0529f84>]
(of_clk_set_defaults+0x1fc/0x334)
[    0.000000] [<c0529f84>] (of_clk_set_defaults) from [<c0526dac>]
(of_clk_add_hw_provider+0x74/0x9c)
[    0.000000] [<c0526dac>] (of_clk_add_hw_provider) from [<c052c608>]
(sunxi_ccu_probe+0xa8/0x130)
[    0.000000] [<c052c608>] (sunxi_ccu_probe) from [<c0c197dc>]
(of_clk_init+0x15c/0x1e8)
[    0.000000] [<c0c197dc>] (of_clk_init) from [<c0c08390>]
(sun6i_timer_init+0xc/0x18)
[    0.000000] [<c0c08390>] (sun6i_timer_init) from [<c0c00bb8>]
(start_kernel+0x248/0x398)
[    0.000000] [<c0c00bb8>] (start_kernel) from [<4000807c>] (0x4000807c)
[    0.000000] arm_arch_timer: Architected cp15 timer(s) running at
24.00MHz (phys).
[    0.000000] clocksource: arch_sys_counter: mask: 0xffffffffffffff
max_cycles: 0x588fe9dc0, max_idle_ns: 440795202592 ns
[    0.000000] ------------[ cut here ]------------
[    0.000000] WARNING: CPU: 0 PID: 0 at kernel/time/sched_clock.c:179
sched_clock_register+0x44/0x1dc
[    0.000000] CPU: 0 PID: 0 Comm: swapper/0 Not tainted
4.9.0-rc6-00045-g5347f96 #29
[    0.000000] Hardware name: Allwinner sun8i Family
[    0.000000] [<c010dc64>] (unwind_backtrace) from [<c010ae7c>]
(show_stack+0x10/0x14)
[    0.000000] [<c010ae7c>] (show_stack) from [<c04d3ce0>]
(dump_stack+0x84/0x98)
[    0.000000] [<c04d3ce0>] (dump_stack) from [<c012087c>]
(__warn+0xe0/0xfc)
[    0.000000] [<c012087c>] (__warn) from [<c0120948>]
(warn_slowpath_null+0x20/0x28)
[    0.000000] [<c0120948>] (warn_slowpath_null) from [<c0c0be20>]
(sched_clock_register+0x44/0x1dc)
[    0.000000] [<c0c0be20>] (sched_clock_register) from [<c0c23be4>]
(arch_timer_common_init+0x204/0x22c)
[    0.000000] [<c0c23be4>] (arch_timer_common_init) from [<c0c23ef0>]
(arch_timer_of_init+0x2e4/0x310)
[    0.000000] [<c0c23ef0>] (arch_timer_of_init) from [<c0c232c0>]
(clocksource_probe+0x58/0xac)
[    0.000000] [<c0c232c0>] (clocksource_probe) from [<c0c00bb8>]
(start_kernel+0x248/0x398)
[    0.000000] [<c0c00bb8>] (start_kernel) from [<4000807c>] (0x4000807c)
[    0.000000] ---[ end trace 0000000000000000 ]---
[    0.000004] sched_clock: 56 bits at 24MHz, resolution 41ns, wraps
every 4398046511097ns
[    0.000010] Switching to timer-based delay loop, resolution 41ns
[    0.000139] clocksource: timer: mask: 0xffffffff max_cycles:
0xffffffff, max_idle_ns: 79635851949 ns
[    0.000244] ------------[ cut here ]------------
[    0.000253] WARNING: CPU: 0 PID: 0 at init/main.c:576
start_kernel+0x27c/0x398
[    0.000255] Interrupts were enabled early
[    0.000261] CPU: 0 PID: 0 Comm: swapper/0 Tainted: G        W
4.9.0-rc6-00045-g5347f96 #29
[    0.000263] Hardware name: Allwinner sun8i Family
[    0.000273] [<c010dc64>] (unwind_backtrace) from [<c010ae7c>]
(show_stack+0x10/0x14)
[    0.000283] [<c010ae7c>] (show_stack) from [<c04d3ce0>]
(dump_stack+0x84/0x98)
[    0.000290] [<c04d3ce0>] (dump_stack) from [<c012087c>]
(__warn+0xe0/0xfc)
[    0.000296] [<c012087c>] (__warn) from [<c01208d0>]
(warn_slowpath_fmt+0x38/0x48)
[    0.000303] [<c01208d0>] (warn_slowpath_fmt) from [<c0c00bec>]
(start_kernel+0x27c/0x398)
[    0.000309] [<c0c00bec>] (start_kernel) from [<4000807c>] (0x4000807c)
[    0.000314] ---[ end trace f68728a0d3053b52 ]---
[    0.000383] Console: colour dummy device 80x30
[    0.000395] console [tty1] enabled

Which can be fixed by:

(quoted diff) +0 -0

b/drivers/clk/sunxi-ng/ccu_common.c
index 51d4bac..9dc970f 100644

drivers/clk/sunxi-ng/ccu_common.c +0 -0
@@ -30,8 +30,8 @@ void ccu_helper_wait_for_lock(struct ccu_common

*common, u32 lock)

        if (!lock)
                return;

- WARN_ON(readl_relaxed_poll_timeout(common->base + common->reg, reg,
- reg & lock, 100, 70000));
+ WARN_ON(readl_relaxed_poll_timeout_atomic(common->base + common->reg, reg,
+ reg & lock, 5, 70000));
}

int sunxi_ccu_probe(struct device_node *node, void __iomem *reg,

But I'm not sure that's a good approach in general. This is a sunxi-ng ccu issue, rather than an issue with your patches. Maxime, any ideas?

regards,
Ondrej

Quoted 61 lines

- use platform_get_irq instead of irq_of_parse_and_map (Maxime Ripard)
- rename sunxi to sun8i (Maxime Ripard)
- fix coding style errors (Maxime Ripard)
- subclass the drm structure in private data (Daniel Vetter)
- move drm_dev_register at end of init (Daniel Vetter)
v5:
- add overlay plane
- add audio support
- add support for the A83T
- add back the HDMI driver
- many bug fixes
v4:
- drivers/clk/sunxi/Makefile was missing (Emil Velikov)
v3:
- add the hardware cursor
- simplify and fix the DE2 init sequences
- generation for all SUNXI SoCs (Andre Przywara)
v2:
- remove the HDMI driver
- remarks from Chen-Yu Tsai and Russell King
- DT documentation added

Jean-Francois Moine (5):
drm: sun8i: Add a basic DRM driver for Allwinner DE2
drm: sunxi: add HDMI video support to A83T and H3
ARM: dts: sun8i-h3: add HDMI video nodes
ARM: dts: sun8i-h3: Add HDMI video to the Banana Pi M2+
ARM: dts: sun8i-h3: Add HDMI video to the Orange PI 2

 .../devicetree/bindings/display/sunxi/hdmi.txt     |  53 ++
 .../bindings/display/sunxi/sun8i-de2.txt           |  83 ++
 arch/arm/boot/dts/sun8i-h3-bananapi-m2-plus.dts    |  13 +
 arch/arm/boot/dts/sun8i-h3-orangepi-2.dts          |  13 +
 arch/arm/boot/dts/sun8i-h3.dtsi                    |  51 ++
 drivers/gpu/drm/Kconfig                            |   2 +
 drivers/gpu/drm/Makefile                           |   1 +
 drivers/gpu/drm/sun8i/Kconfig                      |  26 +
 drivers/gpu/drm/sun8i/Makefile                     |   9 +
 drivers/gpu/drm/sun8i/de2_crtc.c                   | 440 +++++++++++
 drivers/gpu/drm/sun8i/de2_crtc.h                   |  50 ++
 drivers/gpu/drm/sun8i/de2_drm.h                    |  48 ++
 drivers/gpu/drm/sun8i/de2_drv.c                    | 379 ++++++++++
 drivers/gpu/drm/sun8i/de2_hdmi.c                   | 394 ++++++++++
 drivers/gpu/drm/sun8i/de2_hdmi.h                   |  51 ++
 drivers/gpu/drm/sun8i/de2_hdmi_io.c                | 839 +++++++++++++++++++++
 drivers/gpu/drm/sun8i/de2_plane.c                  | 712 +++++++++++++++++
 17 files changed, 3164 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/display/sunxi/hdmi.txt
 create mode 100644 Documentation/devicetree/bindings/display/sunxi/sun8i-de2.txt
 create mode 100644 drivers/gpu/drm/sun8i/Kconfig
 create mode 100644 drivers/gpu/drm/sun8i/Makefile
 create mode 100644 drivers/gpu/drm/sun8i/de2_crtc.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_crtc.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_drm.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_drv.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi.h
 create mode 100644 drivers/gpu/drm/sun8i/de2_hdmi_io.c
 create mode 100644 drivers/gpu/drm/sun8i/de2_plane.c
Signature · 3 lines
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.

A message that is not in the archive (sent off-list or not yet received): 1c9a02ff-ce6c-7ad7-36fa-8a2ea0b7675e-5qf/[email protected]

#23 lore raw
Quoted 17 lines · On Mon, 21 Nov 2016 01:54:53 +0100 Ondřej Jirman…

Dne 20.11.2016 v 12:32 Jean-Francois Moine napsal(a):

Quoted 4 lines

This patchset series adds HDMI video support to the Allwinner sun8i SoCs which include the display engine 2 (DE2). The driver contains the code for the A83T and H3, but it could be used/extended for other SoCs as the A64, H2 and H5.

Hi,

I'm trying to test your patches on Orange Pi PC, and I've run into a few
issues: (I'm using sunxi-ng with the same patches as last time, to make it work with your driver)

1] I just get pink output on the monitor - there's some signal, but it's pink (or more like magenta).

dmesg ouput indicates no error:

Quoted 9 lines
[    1.887823] [drm] Initialized
[    1.888503] sun8i-de2 1000000.de-controller: bound
1c0c000.lcd-controller (ops 0xc0a63894)
[    2.057298] sun8i-de2 1000000.de-controller: bound 1ee0000.hdmi (ops
0xc0a63b54)
[    2.057304] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    2.057307] [drm] No driver support for vblank timestamp query.
[    2.690862] Console: switching to colour frame buffer device 240x67
[    2.723059] sun8i-de2 1000000.de-controller: fb0:  frame buffer device
	[snip]

My H3 boards work correctly, except the Orange PI 2 when it cannot read the EDID (but it is OK after reboot).

Did you check if the EDID was correctly read?
Which resolution do you expect?

Signature · 7 lines
Ken ar c'hentañ	|	      ** Breizh ha Linux atav! **
Jef		|		http://moinejf.free.fr/

-- 
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.

A message that is not in the archive (sent off-list or not yet received): 20161121191416.706b80c25d476fa002a001b1-GANU6spQydw@public.gmane.org

#25 lore raw

Dne 21.11.2016 v 19:14 Jean-Francois Moine napsal(a):

Quoted 29 lines
Quoted 17 lines · On Mon, 21 Nov 2016 01:54:53 +0100 Ondřej Jirman…

Dne 20.11.2016 v 12:32 Jean-Francois Moine napsal(a):

Quoted 4 lines

This patchset series adds HDMI video support to the Allwinner sun8i SoCs which include the display engine 2 (DE2). The driver contains the code for the A83T and H3, but it could be used/extended for other SoCs as the A64, H2 and H5.

Hi,

I'm trying to test your patches on Orange Pi PC, and I've run into a few
issues: (I'm using sunxi-ng with the same patches as last time, to make it work with your driver)

1] I just get pink output on the monitor - there's some signal, but it's pink (or more like magenta).

dmesg ouput indicates no error:

Quoted 9 lines
[    1.887823] [drm] Initialized
[    1.888503] sun8i-de2 1000000.de-controller: bound
1c0c000.lcd-controller (ops 0xc0a63894)
[    2.057298] sun8i-de2 1000000.de-controller: bound 1ee0000.hdmi (ops
0xc0a63b54)
[    2.057304] [drm] Supports vblank timestamp caching Rev 2 (21.10.2013).
[    2.057307] [drm] No driver support for vblank timestamp query.
[    2.690862] Console: switching to colour frame buffer device 240x67
[    2.723059] sun8i-de2 1000000.de-controller: fb0:  frame buffer device
Quoted 6 lines
	[snip]

My H3 boards work correctly, except the Orange PI 2 when it cannot read the EDID (but it is OK after reboot).

Did you check if the EDID was correctly read?

EDID is correctly read (I verified that it is the same as with the v5 version of the driver), but there's one difference I noted. v5 says dpms is Off, while v6 says dpms is On.

Quoted 2 lines

Which resolution do you expect?

Signature · 3 lines
You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe-/JYPxA39Uh5TLH3MbocFF+G/[email protected]
For more options, visit https://groups.google.com/d/optout.