Subject: [linux-sunxi] [PATCH v2 00/26] drm: Add Allwinner A10 display engine support

From: [email-masked] (Priit Laes)
Date: Sat, 20 Feb 2016 15:45:41 +0200

On Thu, 2016-01-14 at 16:24 +0100, Maxime Ripard wrote:
> Hi everyone,
> 
> The Allwinner SoCs (except for the very latest ones) all share the
> same set of controllers, loosely coupled together to form the display
> pipeline.
> 
> Depending on the SoC, the number of instances of the controller will
> change (2 instances of each in the A10, only one in the A13, for
> example), and the output availables will change too (HDMI, composite,
> VGA on the A20, none of them on the A13).
> 
> On most featured SoCs, it looks like that:
> 
> ?+--------------------------------------------+
> ?|????????????????????RAM?????????????????????|
> ?+--------------------------------------------+
> ???????|????????????|??????|????????????|
> ???????v????????????|??????|????????????v
> ?+----------------+ |??????| +----------------+
> ?|????Frontend????| |??????| |????Frontend????|
> ?+----------------+ |??????| +----------------+
> ?????????|??????????|??????|?????????|
> ?????????v??????????|??????|?????????v
> ?+----------------+ |??????| +----------------+
> ?|????Backend?????|<+??????+>|????Backend?????|
> ?+----------------+??????????+----------------+
> ?????????|???????????????????????????|
> ?????????v???????????????????????????v
> ?+----------------+??????????+----------------+---> LVDS
> ?|??????TCON??????|??????????|??????TCON??????|---> RGB
> ?+----------------+??????????+----------------+
> ???????|???????+---+???????+---+??????????|
> ???????|???????????|???????|??????????????|
> ???????v???????????v???????v??????????????v
> ?+------------+??+------------+??+------------+---> VGA
> ?| TV Encoder |??|????HDMI????|??| TV Encoder |---> Composite
> ?+------------+??+------------+??+------------+
> 
> The current code only assumes that there is a single instance of all
> the controllers. It also supports only the RGB and Composite
> interfaces.

I found some time to play with it (with intention to get it running
also on sun7i and sun4i) and ran into this when trying to build
sun4i_drm as module:

ERROR: "sun4i_tcon1_mode_set" [drivers/gpu/drm/sun4i/sun4i_tv.ko] undefined!
ERROR: "sun4i_backend_apply_color_correction" [drivers/gpu/drm/sun4i/sun4i_tv.ko] undefined!
ERROR: "sun4i_tcon_channel_disable" [drivers/gpu/drm/sun4i/sun4i_tv.ko] undefined!
ERROR: "sun4i_tcon_channel_enable" [drivers/gpu/drm/sun4i/sun4i_tv.ko] undefined!
ERROR: "clk_unregister_composite" [drivers/gpu/drm/sun4i/sun4i_tcon.ko] undefined!
ERROR: "sun4i_rgb_init" [drivers/gpu/drm/sun4i/sun4i_tcon.ko] undefined!
ERROR: "clk_register_composite" [drivers/gpu/drm/sun4i/sun4i_tcon.ko] undefined!
ERROR: "sun4i_backend_update_layer_coord" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_backend_update_layer_formats" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_tcon_channel_disable" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_tcon_enable_vblank" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_backend_update_layer_buffer" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_backend_layer_enable" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_tcon_channel_enable" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_tcon_enable" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_tcon_disable" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_tcon0_mode_set" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
ERROR: "sun4i_backend_commit" [drivers/gpu/drm/sun4i/sun4i-drm.ko] undefined!
scripts/Makefile.modpost:91: recipe for target '__modpost' failed

> 
> Let me know what you think,
> Maxime
> 
> Changes from v1:
> ? - Rebased on top of 4.4
> 
> ? - Merged the clock drivers for the display and TCON channel 0
> clocks
> ? - Replaced the container_of calls in the display reset clocks to an
> ????inline function
> ? - Checked the return code of of_clk_parent_fill in the clocks
> ????drivers
> ? - Checked the return code of of_clk_add_provider in the tcon-ch1
> and
> ????PLL3 clocks
> ? - Added missing clocks headers
> ? - Created a composite clock unregister function
> 
> ? - Moved the binding documentation to
> ????Documentation/devicetree/bindings/display
> ? - Added the clocks binding documentation
> ? - Added the Olimex vendor to the list of DT vendors
> ? - Moved to the OF graph representation and the component framework
> 
> ? - Moved the reset cells count check into the reset framework to
> ????avoid duplicating the code in every xlate implementation.
> ? - Made the reset_ops const
> 
> ? - Reworked the DRM cmdline mode parsing code to allow named mode
> ? - Fixed the TV mode lookup when the mode name is not present (for
> ????example because it was given by the userspace)
> 
> ? - Made the driver outputs optional (to avoid crashing when a board
> ????doesn't have either a panel or a composite output enabled)
> ? - Added multiple plane support with transparency
> ? - Moved the backend registers writes commit in the CRTC
> atomic_flush
> ????callback
> ? - Removed the load / unload functions
> ? - Removed the enabled booleans in my private structure and removed
> ????the implicit call to disable_unused_functions in the DRM core to
> ????push it in the drivers.
> ? - Fixed a few bitmasks on some bitfields definition
> ? - Fixed the RGB connector mode validation that was not testing the
> ????right values
> 
> Matthias Brugger (1):
> ? clk: Add regmap support
> 
> Maxime Ripard (25):
> ? reset: Move DT cell size check to the core
> ? reset: Make reset_control_ops const
> ? clk: composite: Add unregister function
> ? clk: sunxi: Add display and TCON0 clocks driver
> ? clk: sunxi: Add PLL3 clock
> ? clk: sunxi: Add TCON channel1 clock
> ? clk: sun5i: add DRAM gates
> ? ARM: sun5i: dt: Add pll3 and pll7 clocks
> ? ARM: sun5i: a13: Add display and TCON clocks
> ? ARM: sun5i: Add DRAM gates
> ? ARM: sun5i: Add TV encoder gate to the DTSI
> ? drm/fb_cma_helper: Remove implicit call to disable_unused_functions
> ? drm/modes: Rewrite the command line parser
> ? drm/modes: Support modes names on the command line
> ? drm: Add Allwinner A10 Display Engine support
> ? drm: sun4i: Add DT bindings documentation
> ? drm: sun4i: Add RGB output
> ? drm: sun4i: Add composite output
> ? drm: sun4i: tv: Add PAL output standard
> ? drm: sun4i: tv: Add NTSC output standard
> ? ARM: sun5i: r8: Add display blocks to the DTSI
> ? ARM: sun5i: chip: Enable the TV Encoder
> ? devicetree: Add olimex vendor prefix
> ? drm/panel: simple: Add timings for the Olimex LCD-OLinuXino-4.3TS
> ? DO NOT MERGE: ARM: sun5i: chip: Enable the LCD panel
> 
> ?Documentation/devicetree/bindings/clock/sunxi.txt??|???5 +
> ?.../display/panel/olimex,lcd-olinuxino-43-ts.txt???|???7 +
> ?.../bindings/display/sunxi/sun4i-drm.txt???????????| 228 +++++++
> ?.../devicetree/bindings/vendor-prefixes.txt????????|???1 +
> ?arch/arm/boot/dts/sun5i-a10s.dtsi??????????????????|???7 +-
> ?arch/arm/boot/dts/sun5i-a13.dtsi???????????????????|??46 +-
> ?arch/arm/boot/dts/sun5i-r8-chip.dts????????????????|??17 +
> ?arch/arm/boot/dts/sun5i-r8.dtsi????????????????????| 139 ++++-
> ?arch/arm/boot/dts/sun5i.dtsi???????????????????????|??62 ++
> ?drivers/clk/Makefile???????????????????????????????|???1 +
> ?drivers/clk/clk-composite.c????????????????????????|??15 +
> ?drivers/clk/clk-divider.c??????????????????????????|??68 ++-
> ?drivers/clk/clk-gate.c?????????????????????????????|??54 +-
> ?drivers/clk/clk-io.c???????????????????????????????|??48 ++
> ?drivers/clk/clk-io.h???????????????????????????????|??22 +
> ?drivers/clk/clk-mux.c??????????????????????????????|??94 ++-
> ?drivers/clk/sunxi/Makefile?????????????????????????|???3 +
> ?drivers/clk/sunxi/clk-simple-gates.c???????????????|???2 +
> ?drivers/clk/sunxi/clk-sun4i-display.c??????????????| 241 ++++++++
> ?drivers/clk/sunxi/clk-sun4i-pll3.c?????????????????|??90 +++
> ?drivers/clk/sunxi/clk-sun4i-tcon-ch1.c?????????????| 154 +++++
> ?drivers/gpu/drm/Kconfig????????????????????????????|???2 +
> ?drivers/gpu/drm/Makefile???????????????????????????|???3 +-
> ?drivers/gpu/drm/drm_crtc.c?????????????????????????|???3 +-
> ?drivers/gpu/drm/drm_fb_cma_helper.c????????????????|???3 -
> ?drivers/gpu/drm/drm_fb_helper.c????????????????????|???4 +
> ?drivers/gpu/drm/drm_modes.c????????????????????????| 327 ++++++----
> ?drivers/gpu/drm/imx/imx-drm-core.c?????????????????|???1 +
> ?drivers/gpu/drm/panel/panel-simple.c???????????????|??26 +
> ?drivers/gpu/drm/sti/sti_drv.c??????????????????????|???1 +
> ?drivers/gpu/drm/sun4i/Kconfig??????????????????????|??14 +
> ?drivers/gpu/drm/sun4i/Makefile?????????????????????|??12 +
> ?drivers/gpu/drm/sun4i/sun4i_backend.c??????????????| 321 ++++++++++
> ?drivers/gpu/drm/sun4i/sun4i_backend.h??????????????| 160 +++++
> ?drivers/gpu/drm/sun4i/sun4i_crtc.c?????????????????| 120 ++++
> ?drivers/gpu/drm/sun4i/sun4i_crtc.h?????????????????|??30 +
> ?drivers/gpu/drm/sun4i/sun4i_drv.c??????????????????| 325 ++++++++++
> ?drivers/gpu/drm/sun4i/sun4i_drv.h??????????????????|??30 +
> ?drivers/gpu/drm/sun4i/sun4i_framebuffer.c??????????|??54 ++
> ?drivers/gpu/drm/sun4i/sun4i_framebuffer.h??????????|??19 +
> ?drivers/gpu/drm/sun4i/sun4i_layer.c????????????????| 160 +++++
> ?drivers/gpu/drm/sun4i/sun4i_layer.h????????????????|??30 +
> ?drivers/gpu/drm/sun4i/sun4i_rgb.c??????????????????| 229 +++++++
> ?drivers/gpu/drm/sun4i/sun4i_rgb.h??????????????????|??18 +
> ?drivers/gpu/drm/sun4i/sun4i_tcon.c?????????????????| 521
> ++++++++++++++++
> ?drivers/gpu/drm/sun4i/sun4i_tcon.h?????????????????| 177 ++++++
> ?drivers/gpu/drm/sun4i/sun4i_tv.c???????????????????| 675
> +++++++++++++++++++++
> ?drivers/gpu/drm/tilcdc/tilcdc_drv.c????????????????|???1 +
> ?drivers/reset/core.c???????????????????????????????|???6 +-
> ?include/drm/drm_modes.h????????????????????????????|???1 +
> ?include/linux/clk-provider.h???????????????????????|??55 +-
> ?include/linux/reset-controller.h???????????????????|???2 +-
> ?52 files changed, 4455 insertions(+), 179 deletions(-)
> ?create mode 100644
> Documentation/devicetree/bindings/display/panel/olimex,lcd-olinuxino-
> 43-ts.txt
> ?create mode 100644
> Documentation/devicetree/bindings/display/sunxi/sun4i-drm.txt
> ?create mode 100644 drivers/clk/clk-io.c
> ?create mode 100644 drivers/clk/clk-io.h
> ?create mode 100644 drivers/clk/sunxi/clk-sun4i-display.c
> ?create mode 100644 drivers/clk/sunxi/clk-sun4i-pll3.c
> ?create mode 100644 drivers/clk/sunxi/clk-sun4i-tcon-ch1.c
> ?create mode 100644 drivers/gpu/drm/sun4i/Kconfig
> ?create mode 100644 drivers/gpu/drm/sun4i/Makefile
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_backend.c
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_backend.h
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_crtc.c
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_crtc.h
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_drv.c
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_drv.h
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_framebuffer.c
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_framebuffer.h
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_layer.c
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_layer.h
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_rgb.c
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_rgb.h
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_tcon.c
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_tcon.h
> ?create mode 100644 drivers/gpu/drm/sun4i/sun4i_tv.c
> 
> --?
> 2.6.4
>