Commit Graph

29 Commits

Author SHA1 Message Date
Russell King
65843e9af7 drm/armada: move overlay plane register update generation
Move the overlay plane register update generation to a separate function
as this is independent of the legacy or atomic update.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:21:53 +00:00
Russell King
d924155dae drm/armada: avoid work allocation
Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:20:00 +00:00
Russell King
eaa66279c3 drm/armada: move regs into armada_plane_work
Move the register update structure out of the overlay private structure
into armada_plane_work, as this is common to both the primary and
overlay planes.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:19:51 +00:00
Russell King
eb19be5bbe drm/armada: move event sending into armada_plane_work
Move the sending of events into the armada_plane_work structure, and
combine the processing in armada_drm_plane_work_call().

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:19:49 +00:00
Russell King
b972a80f44 drm/armada: move fb retirement into armada_plane_work
Both the primary and overlay planes retire framebuffers in a similar
manner; this can be consolidated by moving the retirement up to the
armada_plane_work layer.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:19:44 +00:00
Russell King
f1f1bffcf0 drm/armada: clean up armada_drm_crtc_plane_disable()
Merge armada_drm_primary_disable() into armada_drm_crtc_plane_disable()
and rename to armada_drm_plane_disable().  Use this to simplify
armada_ovl_plane_disable().

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:18:43 +00:00
Russell King
2839d45c7d drm/armada: add work cancel callback
Add a work cancel callback, so that work items can add functionality to
clean themselves up when they are cancelled.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:17:23 +00:00
Russell King
eaab013075 drm/armada: store plane in armada_plane_work
Store the plane in the armada_plane_work structure rather than passing
it around; it doesn't get used very much in the work structures, so
passing it around is a needless expense.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:17:21 +00:00
Russell King
d3b8421543 drm/armada: remove armada_drm_plane_work_cancel() return value
armada_drm_plane_work_cancel()'s returned work structure is never used
or referenced, so it's pointless returning it.  It's also pointless
because the caller doesn't have a clue what kind of work structure it
is.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:17:17 +00:00
Russell King
9c898c4954 drm/armada: fix UV swap code
The UV swap code was not always programming things correctly when
the source origin box has been offset.  Fix this.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2017-12-08 12:16:22 +00:00
Peter Rosin
3bec23b2c2 drm: armada: remove dead empty functions
The redundant fb helpers .gamma_set and .gamma_get are no longer used.
Remove the dead code.

Acked-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Peter Rosin <peda@axentia.se>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: https://patchwork.freedesktop.org/patch/msgid/20170713162538.22788-6-peda@axentia.se
2017-08-04 11:35:34 +02:00
Shawn Guo
5922a7d075 drm: armada: use vblank hooks in struct drm_crtc_funcs
The vblank hooks in struct drm_driver are deprecated and only meant for
legacy drivers.  For modern drivers with DRIVER_MODESET flag, the hooks
in struct drm_crtc_funcs should be used instead.  As the result,
functions armada_drm_crtc_enable[disable]_irq() can be static, although
they are moved around a bit to save forward declaration.

The armada_crtc pointer array in struct armada_private is still kept in
there, because armada_debugfs.c still have reference to it.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
Cc: Russell King <linux@armlinux.org.uk>
Acked-by: Russell King <rmk+kernel@armlinux.org.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Link: http://patchwork.freedesktop.org/patch/msgid/1486458995-31018-7-git-send-email-shawnguo@kernel.org
2017-02-07 21:46:51 +01:00
Russell King
f0b24871cc drm/armada: use common helper for plane base address
Use a common helper to calculate the plane base address(es) for the
framebuffer.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2016-11-01 20:06:55 +00:00
Russell King
8be523db65 drm/armada: move plane state to struct armada_plane
Move more of the Armada plane state (source size, and displayed size and
position) into a state structure inside struct armada_plane.

Signed-off-by: Russell King <rmk+kernel@armlinux.org.uk>
2016-11-01 20:06:54 +00:00
Russell King
4a8506d2d6 drm/armada: convert overlay plane vbl worker to a armada plane worker
Convert the overlay plane to use the generic armada plane worker
infrastructure which is shared with the primary plane.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-10-01 14:33:28 +01:00
Russell King
4b5dda82c2 drm/armada: move CRTC flip work to primary plane work
Add a plane work implementation, and move the CRTC framebuffer flip
work to it for the primary plane.  The idea is to have a common
plane work implementation for both the primary and overlay planes.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-10-01 14:33:28 +01:00
Russell King
5740d27fa5 drm/armada: move frame wait into armada_frame
Both the CRTC and overlay frames have their own wait queues.  It would
make more sense if these were part of the plane - the primary plane for
the CRTC and overlay plane for the overlay.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-10-01 14:33:28 +01:00
Russell King
5832680358 drm/armada: provide a common helper to disable a plane
Provide a common helper to disable either the overlay or the primary
plane.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-10-01 14:33:27 +01:00
Russell King
561f60bc51 drm/armada: introduce generic armada_plane struct
Introduce a generic armada_plane struct which will eventually be used
for both the primary and overlay planes.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-10-01 14:33:26 +01:00
Russell King
7c8f7e1abc drm/armada: move vbl code into armada_crtc
Our vblank event code belongs in armada_crtc.c rather than the core of
the driver.  Move it there.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-09-15 16:26:49 +01:00
Russell King
0fb2970b4b drm/armada: remove non-component support
Now that the transition of TDA998x to the component helpers is complete,
remove the non-componentised support from the Armada DRM driver.  All
outputs are expected to use the component helpers from now on.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2015-09-15 16:26:49 +01:00
Russell King
9611cb93fa drm/armada: register crtc with port
Register the CRTC with the port node so that the DRM OF helpers can
find the appropriate CRTC.  This is important so that encoders can
identify their corresponding possible CRTCs.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-07-11 20:34:47 +01:00
Russell King
d8c96083cf drm/armada: permit CRTCs to be registered as separate devices
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-07-11 20:34:45 +01:00
Russell King
42e62ba7a4 drm/armada: make variant a CRTC thing
Move the variant pointer into the armada_crtc structure, and update for
the resulting changes.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-07-03 16:24:48 +01:00
Russell King
3ecea26995 drm/armada: move variant initialisation to CRTC init
Move the variant initialisation entirely to the CRTC init function -
the variant support is really about the CRTC properties than the whole
system, and we want to treat each CRTC individually when we support DT.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-07-03 16:24:46 +01:00
Russell King
d016540722 drm/armada: use number of CRTCs registered
Use the number of CRTCs registered to size the vblank arrays rather than
our own count.  Number CRTCs using this as well.  This permits us to
register CRTCs as components in the near future rather than as part of a
single device.

Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-07-03 16:24:45 +01:00
Russell King
e5d9ddfbb7 drm/armada: move IRQ handling into CRTC
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2014-07-03 16:24:44 +01:00
Russell King
662af0d822 DRM: Armada: Add support for ARGB 32x64 or 64x32 hardware cursors
This patch adds ARGB hardware cursor support to the DRM driver for the
Marvell Armada SoCs.  ARGB cursors are supported at either 32x64 or
64x32 resolutions.

Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2013-10-18 15:53:30 +01:00
Russell King
96f60e37dc DRM: Armada: Add Armada DRM driver
This patch adds support for the pair of LCD controllers on the Marvell
Armada 510 SoCs.  This driver supports:
- multiple contiguous scanout buffers for video and graphics
- shm backed cacheable buffer objects for X pixmaps for Vivante GPU
  acceleration
- dual lcd0 and lcd1 crt operation
- video overlay on each LCD crt via DRM planes
- page flipping of the main scanout buffers
- DRM prime for buffer export/import

This driver is trivial to extend to other Armada SoCs.

Included in this commit is the core driver with no output support; output
support is platform and encoder driver dependent.

Tested-by: Sebastian Hesselbarth <sebastian.hesselbarth@gmail.com>
Reviewed-by: Rob Clark <robdclark@gmail.com>
Signed-off-by: Russell King <rmk+kernel@arm.linux.org.uk>
2013-10-12 10:13:40 +01:00