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 >