Jernej Skrabec
54c33a4fcf
drm/sun4i: Nuke mixer pointer from layer code
...
It's not used anymore, so remove it. This allows trully independent
layer state from mixer.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-31-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:25 +08:00
Jernej Skrabec
345bca734c
drm/sun4i: vi_scaler: Find mixer from crtc
...
With "floating" planes in DE33, mixer can't be stored in layer structure
anymore. Find mixer using currently bound crtc.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-30-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:25 +08:00
Jernej Skrabec
bb1d2ddee5
drm/sun4i: layer: replace mixer with layer struct
...
This allows to almost completely decouple layer code from mixer. This is
important for DE33.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-29-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:25 +08:00
Jernej Skrabec
d1fe263942
drm/sun4i: mixer: split out layer config
...
Later special plane only driver for DE33 will provide separate
configuration. This change will also help layer driver migrate away from
mixer structure.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-28-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:25 +08:00
Jernej Skrabec
5a96ae801f
drm/sun4i: mixer: Add quirk for number of VI scalers
...
On DE2 and DE3, UI scalers are located right after VI scalers. So in
order to calculate proper UI scaler base address, number of VI scalers
must be known. In practice, it is same as number of VI channels, but it
doesn't need to be.
Let's make a quirk for this number. Code for configuring channels and
associated functions won't have access to vi_num quirk anymore after
rework for independent planes.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-27-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:25 +08:00
Jernej Skrabec
a23e3402f6
drm/sun4i: ui_scaler: drop sanity checks
...
They can't be triggered if mixer configuration is properly specified in
quirks. Additionally, number of VI channels won't be available in future
due to rework for DE33 support.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-26-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:24 +08:00
Jernej Skrabec
7907cf1140
drm/sun4i: mixer: Convert heuristics to quirk
...
Determination if FCC unit can be used for VI layer alpha depends on
number of VI channels. This info won't be available anymore in future
to VI layer driver because of DE33 way of allocating planes from same
pool to different mixers.
While order is slightly changed, it doesn't affect anything due to
double buffering of registers. New order keeps related registers
together and quirk separate.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-25-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:24 +08:00
Jernej Skrabec
c0cbdda9ab
drm/sun4i: vi_scaler: Update DE33 base calculation
...
Now that channel base calculation is straightforward, let's update VI
scaler base calculation to be simpler. At the same time, also introduce
macro to avoid magic numbers.
Note, reason why current magic value and new macro value isn't the same
is because sun8i_channel_base() already introduces offset to channel
registers. Previous value is just the difference to VI scaler registers.
However, new code calculates scaler base from channel base. This is also
easier to understand when looking into BSP driver. Macro value can be
easily found whereas old diff value was not.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-24-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:24 +08:00
Jernej Skrabec
515441734c
drm/sun4i: layers: add physical index arg
...
This avoids plane mapping in layers code, which allows future
refactoring, when layer code will move away from accessing mixer
structure.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-23-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:23 +08:00
Jernej Skrabec
0bc7d54dcc
drm/sun4i: csc: use layer arg instead of mixer
...
Layer will be more universal, due to DE33 support.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-22-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:23 +08:00
Jernej Skrabec
37aba59f5f
drm/sun4i: layers: Make regmap for layers configurable
...
Till DE33, there were no reason to decouple registers from mixer.
However, with future new plane driver, this will be necessary.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-21-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:23 +08:00
Jernej Skrabec
f54c353cff
drm/sun4i: vi_scaler: use layer instead of mixer for args
...
Layer related peripherals should take layer struct as a input. This
looks cleaner and also necessary for proper DE33 support later.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-20-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:23 +08:00
Jernej Skrabec
1ebec02bba
drm/sun4i: ui_scaler: use layer instead of mixer for args
...
Layer related peripherals should take layer struct as a input. This
looks cleaner and also necessary for proper DE33 support later.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-19-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:23 +08:00
Jernej Skrabec
f10a80105e
drm/sun4i: vi_layer: use layer struct instead of multiple args
...
This change is equally a cleanup (less arguments) and preparation for
DE33 separate plane driver. It will introduce additional register space.
No functional changes.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-18-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:23 +08:00
Jernej Skrabec
7d126c6e80
drm/sun4i: ui_layer: use layer struct instead of multiple args
...
This change is equally a cleanup (less arguments) and preparation for
DE33 separate plane driver. It will introduce additional register space.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-17-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:23 +08:00
Jernej Skrabec
4fa45b04a4
drm/sun4i: layer: move num of planes calc out of layer code
...
With DE33, number of planes no longer depends on mixer because layers
are shared between all mixers.
Get this value via parameter, so DE specific code can fill in proper
value.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-16-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
32ca21b97f
drm/sun4i: ui_layer: Change index meaning
...
In the pursuit of making UI/VI layer code independent of DE version,
change meaning of UI index to index of the plane within mixer. DE33 can
split amount of VI and UI planes between multiple mixer in whatever way
it deems acceptable, so simple calculation VI num + UI index won't be
meaningful anymore.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-15-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
feea4205ef
drm/sun4i: de2/de3: Move plane type determination to mixer
...
Plane type determination logic inside layer init functions doesn't allow
index register to be repurposed to plane sequence, which it almost is.
So move out the logic to mixer, which allows further rework for DE33
support.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-14-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
a7febbd455
drm/sun4i: csc: Simplify arguments with taking plane state
...
Taking plane state directly reduces number of arguments, avoids copying
values and allows making additional decisions. For example, when plane
is disabled, CSC should be turned off.
This is also cleanup for later patches which will move call to another
place.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-13-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
870e3cf48c
drm/sun4i: de2/de3: Simplify CSC config interface
...
Merging both function into one lets this one decide on it's own if CSC
should be enabled or not. Currently heuristics for that is pretty simple
- enable it for YUV formats and disable for RGB. DE3 and newer allows
YUV pipeline, which will be easier to implement these way.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-12-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
fc9b4e3b78
drm/sun4i: mixer: Move layer enabling to atomic_update
...
Enable or disable layer only in layer atomic update callback. Doing so
will enable having separate layer driver later for DE33.
There is no fear that enable bit would be set incorrectly, as all
read-modify-write sequences for that register are now eliminated.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-11-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
6d166e222f
drm/sun4i: vi layer: Write attributes in one go
...
It turns out that none of the VI channel registers were meant to be
read. Mostly it works fine but sometimes it returns incorrect values.
Rework VI layer code to write all registers in one go to avoid reads.
This rework will also allow proper code separation.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-10-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
1251b20a41
drm/sun4i: ui layer: Write attributes in one go
...
It turns out that none of the UI channel registers were meant to be
read. Mostly it works fine but sometimes it returns incorrect values.
Rework UI layer code to write all registers in one go to avoid reads.
This rework will also allow proper code separation.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-9-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
06e644c758
drm/sun4i: Move blender config from layers to mixer
...
With upcoming DE33 support, layer management must be decoupled from
other operations like blender configuration. There are two reasons:
- DE33 will have separate driver for planes and thus it will be harder
to manage different register spaces
- Architecturaly it's better to split access by modules. Blender is now
exclusively managed by mixer.
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-8-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:22 +08:00
Jernej Skrabec
1fbf862685
drm/sun4i: layers: Make atomic commit functions void
...
Functions called by atomic_commit callback should not fail. None of them
actually returns error, so make them void.
No functional change.
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-7-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:21 +08:00
Jernej Skrabec
b12c28bb15
drm/sun4i: vi_layer: Move check from update to check callback
...
DRM requires that all check are done in atomic_check callback. Move
one check from atomic_commit to atomic_check callback.
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Reviewed-by: Chen-Yu Tsai <wens@kernel.org >
Link: https://patch.msgid.link/20251104180942.61538-6-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:21 +08:00
Jernej Skrabec
f841ea7e3f
drm/sun4i: ui_layer: Move check from update to check callback
...
DRM requires that all checks are done in atomic_check callback. Move
one check from atomic_commit to atomic_check callback.
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-5-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:21 +08:00
Jernej Skrabec
558716d558
drm/sun4i: de2: Initialize layer fields earlier
...
drm_universal_plane_init() can already call some callbacks, like
format_mod_supported, during initialization. Because of that, fields
should be initialized beforehand.
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-4-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:21 +08:00
Jernej Skrabec
f863fff123
drm/sun4i: mixer: Remove ccsc cfg for >= DE3
...
Those engine versions don't need ccsc argument, since CSC units are
located on different position and for each layer.
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-3-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:21 +08:00
Jernej Skrabec
4520911eee
drm/sun4i: mixer: Fix up DE33 channel macros
...
Properly define macros. Till now raw numbers and inappropriate macro was
used.
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Tested-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://patch.msgid.link/20251104180942.61538-2-jernej.skrabec@gmail.com
Signed-off-by: Chen-Yu Tsai <wens@kernel.org >
2025-11-12 17:18:21 +08:00
Jani Nikula
f6e8dc9edf
drm: include drm_print.h where needed
...
There are a gazillion files that depend on drm_print.h being indirectly
included via drm_buddy.h, drm_mm.h, or ttm/ttm_resource.h. In
preparation for removing those includes, explicitly include drm_print.h
where needed.
Cc: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de >
Signed-off-by: Jani Nikula <jani.nikula@intel.com >
Link: https://lore.kernel.org/r/5fe67395907be33eb5199ea6d540e29fddee71c8.1761734313.git.jani.nikula@intel.com
2025-10-31 10:34:52 +02:00
Maxime Ripard
9bb3ceb961
drm/sun4i: Switch to drm_atomic_get_new_crtc_state()
...
The sun4i atomic_check implementation uses the deprecated
drm_atomic_get_existing_crtc_state() helper.
This hook is called as part of the global atomic_check, thus before the
states are swapped. The existing state thus points to the new state, and
we can use drm_atomic_get_new_crtc_state() instead.
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com >
Link: https://lore.kernel.org/r/20250930-drm-no-more-existing-state-v5-28-eeb9e1287907@kernel.org
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2025-10-06 13:59:18 +02:00
Brian Masney
a076fe9f12
drm/sun4i/sun4i_tcon_dclk: convert from round_rate() to determine_rate()
...
The round_rate() clk ops is deprecated, so migrate this driver from
round_rate() to determine_rate() using the Coccinelle semantic patch
on the cover letter of this series.
Acked-by: Maxime Ripard <mripard@kernel.org >
Signed-off-by: Brian Masney <bmasney@redhat.com >
Link: https://lore.kernel.org/r/20250811-drm-clk-round-rate-v2-9-4a91ccf239cf@redhat.com
Signed-off-by: Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com >
2025-09-15 15:08:44 +02:00
Brian Masney
5c04f48127
drm/sun4i/sun4i_hdmi_ddc_clk: convert from round_rate() to determine_rate()
...
The round_rate() clk ops is deprecated, so migrate this driver from
round_rate() to determine_rate() using the Coccinelle semantic patch
on the cover letter of this series.
Acked-by: Maxime Ripard <mripard@kernel.org >
Signed-off-by: Brian Masney <bmasney@redhat.com >
Link: https://lore.kernel.org/r/20250811-drm-clk-round-rate-v2-8-4a91ccf239cf@redhat.com
Signed-off-by: Raphael Gallais-Pou <raphael.gallais-pou@foss.st.com >
2025-09-15 15:08:44 +02:00
Jernej Skrabec
54bd08e15b
drm: sun4i: de33: mixer: add mixer configuration for the H616
...
The H616 (and related SoC packages sharing the same die) carry the new
DE33 display engine.
Add the mixer configuration and a compatible string for the H616 to the
mixer.
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Signed-off-by: Ryan Walklin <ryan@testtoast.com >
Acked-by: Maxime Ripard <mripard@kernel.org >
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Link: https://lore.kernel.org/r/20250528092431.28825-9-ryan@testtoast.com
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2025-06-02 09:59:10 +02:00
Jernej Skrabec
9e623068f1
drm: sun4i: de33: vi_scaler: add Display Engine 3.3 (DE33) support
...
The vi_scaler appears to be used in preference to the ui_scaler module
for hardware video scaling in the DE33.
Enable support for this scaler.
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Signed-off-by: Ryan Walklin <ryan@testtoast.com >
Acked-by: Maxime Ripard <mripard@kernel.org >
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Link: https://lore.kernel.org/r/20250528092431.28825-8-ryan@testtoast.com
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2025-06-02 09:59:10 +02:00
Jernej Skrabec
5b9cfdbfc3
drm: sun4i: de33: mixer: add Display Engine 3.3 (DE33) support
...
The DE33 is a newer version of the Allwinner Display Engine IP block,
found in the H616, H618, H700 and T507 SoCs. DE2 and DE3 are already
supported by the mainline driver.
Notable features (from the H616 datasheet and implemented):
- 4096 x 2048 (4K) output support
Other features (implemented but not in this patchset):
- AFBC ARM Frame Buffer Compression support
- YUV pipeline support
The DE2 and DE3 engines have a blender register range within the
mixer engine register map, whereas the DE33 separates this out into
a separate display group, and adds a top register map.
The DE33 also appears to remove the global double buffer control
register, present in the DE2 and DE3.
Extend the mixer to support the DE33.
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Signed-off-by: Ryan Walklin <ryan@testtoast.com >
Signed-off-by: Chris Morgan <macromorgan@hotmail.com >
Acked-by: Maxime Ripard <mripard@kernel.org >
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Link: https://lore.kernel.org/r/20250528092431.28825-7-ryan@testtoast.com
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2025-06-02 09:59:09 +02:00
Jernej Skrabec
5419143dd0
drm: sun4i: de2/de3: use generic register reference function for layer configuration
...
Use the new blender register lookup function where required in the layer
commit and update code.
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Signed-off-by: Ryan Walklin <ryan@testtoast.com >
Acked-by: Maxime Ripard <mripard@kernel.org >
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Link: https://lore.kernel.org/r/20250528092431.28825-5-ryan@testtoast.com
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2025-06-02 09:57:18 +02:00
Jernej Skrabec
ef54f1dc24
drm: sun4i: de2/de3: add generic blender register reference function
...
The DE2 and DE3 engines have a blender register range within the
mixer engine register map, whereas the DE33 separates this out into
a separate display group.
Prepare for this by adding a function to look the blender reference up,
with a subsequent patch to add a conditional based on the DE type.
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Signed-off-by: Ryan Walklin <ryan@testtoast.com >
Acked-by: Maxime Ripard <mripard@kernel.org >
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Link: https://lore.kernel.org/r/20250528092431.28825-4-ryan@testtoast.com
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2025-06-02 09:57:18 +02:00
Jernej Skrabec
a281758944
drm: sun4i: de2/de3: refactor mixer initialisation
...
Now that the DE variant can be selected by enum, take the oppportunity
to factor out some common initialisation code to a separate function.
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Signed-off-by: Ryan Walklin <ryan@testtoast.com >
Reviewed-by: Andre Przywara <andre.przywara@arm.com >
Acked-by: Maxime Ripard <mripard@kernel.org >
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Link: https://lore.kernel.org/r/20250528092431.28825-3-ryan@testtoast.com
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2025-06-02 09:57:17 +02:00
Jernej Skrabec
81cf7c6879
drm: sun4i: de2/de3: add mixer version enum
...
The Allwinner DE2 and DE3 display engine mixers are currently identified
by a simple boolean flag. This will not scale to support additional DE
variants.
Convert the boolean flag to an enum.
Signed-off-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Signed-off-by: Ryan Walklin <ryan@testtoast.com >
Reviewed-by: Andre Przywara <andre.przywara@arm.com >
Acked-by: Maxime Ripard <mripard@kernel.org >
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Link: https://lore.kernel.org/r/20250528092431.28825-2-ryan@testtoast.com
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2025-06-02 09:57:17 +02:00
Maarten Lankhorst
33f029af89
Merge remote-tracking branch 'drm/drm-next' into drm-misc-next
...
The v6.13-rc2 release included a bunch of breaking changes,
specifically the MODULE_IMPORT_NS commit.
Backmerge in order to fix them before the next pull-request.
Include the fix from Stephen Roswell.
Caused by commit
25c3fd1183 ("drm/virtio: Add a helper to map and note the dma addrs and lengths")
Interacting with commit
cdd30ebb1b ("module: Convert symbol namespace to string literal")
Reported-by: Stephen Rothwell <sfr@canb.auug.org.au >
Link: https://patchwork.freedesktop.org/patch/msgid/20241209121717.2abe8026@canb.auug.org.au
Signed-off-by: Maarten Lankhorst <dev@lankhorst.se >
2024-12-09 16:35:21 +01:00
Dmitry Baryshkov
84e541b1e5
drm/sun4i: use drm_atomic_helper_connector_hdmi_check()
...
Replace sun4i_hdmi_connector_atomic_check(), which performs just TMDS
char rate check, with drm_atomic_helper_connector_hdmi_check(), which
performs additional checks basing on the HDMI Connector's state.
Suggested-by: Maxime Ripard <mripard@kernel.org >
Reviewed-by: Maxime Ripard <mripard@kernel.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20241130-hdmi-mode-valid-v5-10-742644ec3b1f@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org >
2024-12-05 14:36:01 +02:00
Dmitry Baryshkov
ae048fc4f9
drm/sun4i: use drm_hdmi_connector_mode_valid()
...
Use new drm_hdmi_connector_mode_valid() helper instead of a
module-specific copy.
Reviewed-by: Chen-Yu Tsai <wens@csie.org >
Link: https://patchwork.freedesktop.org/patch/msgid/20241130-hdmi-mode-valid-v5-5-742644ec3b1f@linaro.org
Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org >
2024-12-05 14:36:01 +02:00
Jani Nikula
cb2e1c2136
drm: remove driver date from struct drm_driver and all drivers
...
We stopped using the driver initialized date in commit 7fb8af6798
("drm: deprecate driver date") and (eventually) started returning "0"
for drm_version ioctl instead.
Finish the job, and remove the unused date member from struct
drm_driver, its initialization from drivers, along with the common
DRIVER_DATE macros.
v2: Also update drivers/accel (kernel test robot)
Reviewed-by: Javier Martinez Canillas <javierm@redhat.com >
Acked-by: Alex Deucher <alexander.deucher@amd.com >
Acked-by: Simon Ser <contact@emersion.fr >
Acked-by: Jeffrey Hugo <quic_jhugo@quicinc.com >
Acked-by: Lucas De Marchi <lucas.demarchi@intel.com >
Acked-by: Dmitry Baryshkov <dmitry.baryshkov@linaro.org > # msm
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de >
Link: https://patchwork.freedesktop.org/patch/msgid/1f2bf2543aed270a06f6c707fd6ed1b78bf16712.1733322525.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com >
2024-12-05 12:35:42 +02:00
Linus Torvalds
e70140ba0d
Get rid of 'remove_new' relic from platform driver struct
...
The continual trickle of small conversion patches is grating on me, and
is really not helping. Just get rid of the 'remove_new' member
function, which is just an alias for the plain 'remove', and had a
comment to that effect:
/*
* .remove_new() is a relic from a prototype conversion of .remove().
* New drivers are supposed to implement .remove(). Once all drivers are
* converted to not use .remove_new any more, it will be dropped.
*/
This was just a tree-wide 'sed' script that replaced '.remove_new' with
'.remove', with some care taken to turn a subsequent tab into two tabs
to make things line up.
I did do some minimal manual whitespace adjustment for places that used
spaces to line things up.
Then I just removed the old (sic) .remove_new member function, and this
is the end result. No more unnecessary conversion noise.
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org >
2024-12-01 15:12:43 -08:00
Thomas Zimmermann
b86711c6d6
drm/client: Move public client header to clients/ subdirectory
...
Move the public header file drm_client_setup.h to the clients/
subdirectory and update all drivers. No functional changes.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Reviewed-by: Jocelyn Falempe <jfalempe@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20241108154600.126162-3-tzimmermann@suse.de
2024-11-15 09:42:13 +01:00
Thomas Zimmermann
ea277eb356
drm/sun4i: Use video aperture helpers
...
DRM's aperture functions have long been implemented as helpers
under drivers/video/ for use with fbdev. Avoid the DRM wrappers by
calling the video functions directly.
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Cc: Maxime Ripard <mripard@kernel.org >
Cc: Chen-Yu Tsai <wens@csie.org >
Cc: Jernej Skrabec <jernej.skrabec@gmail.com >
Cc: Samuel Holland <samuel@sholland.org >
Acked-by: Javier Martinez Canillas <javierm@redhat.com >
Acked-by: Alex Deucher <alexander.deucher@amd.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20240930130921.689876-20-tzimmermann@suse.de
2024-10-14 15:28:48 +02:00
Thomas Zimmermann
a4e2e54be9
drm/sun4i: Run DRM default client setup
...
Call drm_client_setup() to run the kernel's default client setup
for DRM. Set fbdev_probe in struct drm_driver, so that the client
setup can start the common fbdev client.
The sun4i driver specifies as preferred color mode of 32. As this
is the default if no format has been given, leave it out entirely.
v5:
- select DRM_CLIENT_SELECTION
Signed-off-by: Thomas Zimmermann <tzimmermann@suse.de >
Cc: Maxime Ripard <mripard@kernel.org >
Cc: Chen-Yu Tsai <wens@csie.org >
Cc: Jernej Skrabec <jernej.skrabec@gmail.com >
Cc: Samuel Holland <samuel@sholland.org >
Acked-by: Javier Martinez Canillas <javierm@redhat.com >
Link: https://patchwork.freedesktop.org/patch/msgid/20240924071734.98201-41-tzimmermann@suse.de
2024-09-26 09:31:27 +02:00
Ondrej Jirman
f8d59fac57
drm/sun4i: Fix layer zpos change/atomic modesetting
...
Identical configurations of planes can lead to different (and wrong)
layer -> pipe routing at HW level, depending on the order of atomic
plane changes.
For example:
- Layer 1 is configured to zpos 0 and thus uses pipe 0. No other layer
is enabled. This is a typical situation at boot.
- When a compositor takes over and layer 3 is enabled,
sun8i_ui_layer_enable() will get called with old_zpos=0 zpos=1, which
will lead to incorrect disabling of pipe 0 and enabling of pipe 1.
What happens is that sun8i_ui_layer_enable() function may disable
blender pipes even if it is no longer assigned to its layer.
To correct this, move the routing setup out of individual plane's
atomic_update into crtc's atomic_update, where it can be calculated
and updated all at once.
Remove the atomic_disable callback because it is no longer needed.
Signed-off-by: Ondrej Jirman <megi@xff.cz >
Reviewed-by: Jernej Skrabec <jernej.skrabec@gmail.com >
Link: https://lore.kernel.org/r/20240224150604.3855534-4-megi@xff.cz
Signed-off-by: Maxime Ripard <mripard@kernel.org >
2024-06-10 12:44:41 +02:00