diff --git a/projects/Allwinner/patches/linux/0025-drm-sun4i-Reimplement-plane-z-position-setting-logic.patch b/projects/Allwinner/patches/linux/0025-drm-sun4i-Reimplement-plane-z-position-setting-logic.patch deleted file mode 100644 index 89011ed4c1..0000000000 --- a/projects/Allwinner/patches/linux/0025-drm-sun4i-Reimplement-plane-z-position-setting-logic.patch +++ /dev/null @@ -1,273 +0,0 @@ -From f1c04148f8cc62bf99cb06e348f04452d307ebc8 Mon Sep 17 00:00:00 2001 -From: Roman Stratiienko -Date: Sat, 28 Dec 2019 22:28:17 +0200 -Subject: [PATCH 35/44] drm/sun4i: Reimplement plane z position setting logic - -To set blending channel order register software needs to know state and -position of each channel, which impossible at plane commit stage. - -Move this procedure to atomic_flush stage, where all necessary information -is available. - -Signed-off-by: Roman Stratiienko -Signed-off-by: Jernej Skrabec ---- - drivers/gpu/drm/sun4i/sun8i_mixer.c | 43 ++++++++++++++++++++++++-- - drivers/gpu/drm/sun4i/sun8i_mixer.h | 5 +++ - drivers/gpu/drm/sun4i/sun8i_ui_layer.c | 42 ++++--------------------- - drivers/gpu/drm/sun4i/sun8i_vi_layer.c | 39 +++-------------------- - 4 files changed, 57 insertions(+), 72 deletions(-) - ---- a/drivers/gpu/drm/sun4i/sun8i_mixer.c -+++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c -@@ -250,8 +250,45 @@ int sun8i_mixer_drm_format_to_hw(u32 for - - static void sun8i_mixer_commit(struct sunxi_engine *engine) - { -- DRM_DEBUG_DRIVER("Committing changes\n"); -+ struct sun8i_mixer *mixer = engine_to_sun8i_mixer(engine); -+ int channel_by_zpos[SUN8I_MIXER_MAX_CHANNELS]; -+ u32 base = sun8i_blender_base(mixer); -+ u32 route = 0, pipe_ctl = 0; -+ unsigned int channel_count; -+ int i, j; -+ -+ channel_count = mixer->cfg->vi_num + mixer->cfg->ui_num; -+ -+ DRM_DEBUG_DRIVER("Update blender routing\n"); -+ -+ for (i = 0; i < SUN8I_MIXER_MAX_CHANNELS; i++) -+ channel_by_zpos[i] = -1; -+ -+ for (i = 0; i < channel_count; i++) { -+ int zpos = mixer->channel_zpos[i]; -+ -+ if (zpos >= 0 && zpos < channel_count) -+ channel_by_zpos[zpos] = i; -+ } - -+ j = 0; -+ for (i = 0; i < channel_count; i++) { -+ int ch = channel_by_zpos[i]; -+ -+ if (ch >= 0) { -+ pipe_ctl |= SUN8I_MIXER_BLEND_PIPE_CTL_EN(j); -+ route |= ch << SUN8I_MIXER_BLEND_ROUTE_PIPE_SHIFT(j); -+ j++; -+ } -+ } -+ -+ regmap_update_bits(mixer->engine.regs, SUN8I_MIXER_BLEND_PIPE_CTL(base), -+ SUN8I_MIXER_BLEND_PIPE_CTL_EN_MSK, pipe_ctl); -+ -+ regmap_write(mixer->engine.regs, -+ SUN8I_MIXER_BLEND_ROUTE(base), route); -+ -+ DRM_DEBUG_DRIVER("Committing changes\n"); - regmap_write(engine->regs, SUN8I_MIXER_GLOBAL_DBUFF, - SUN8I_MIXER_GLOBAL_DBUFF_ENABLE); - } -@@ -489,10 +526,12 @@ static int sun8i_mixer_bind(struct devic - SUN8I_MIXER_BLEND_COLOR_BLACK); - - plane_cnt = mixer->cfg->vi_num + mixer->cfg->ui_num; -- for (i = 0; i < plane_cnt; i++) -+ for (i = 0; i < plane_cnt; i++) { - regmap_write(mixer->engine.regs, - SUN8I_MIXER_BLEND_MODE(base, i), - SUN8I_MIXER_BLEND_MODE_DEF); -+ mixer->channel_zpos[i] = -1; -+ } - - regmap_update_bits(mixer->engine.regs, SUN8I_MIXER_BLEND_PIPE_CTL(base), - SUN8I_MIXER_BLEND_PIPE_CTL_EN_MSK, 0); ---- a/drivers/gpu/drm/sun4i/sun8i_mixer.h -+++ b/drivers/gpu/drm/sun4i/sun8i_mixer.h -@@ -12,6 +12,8 @@ - - #include "sunxi_engine.h" - -+#define SUN8I_MIXER_MAX_CHANNELS 5 -+ - #define SUN8I_MIXER_SIZE(w, h) (((h) - 1) << 16 | ((w) - 1)) - #define SUN8I_MIXER_COORD(x, y) ((y) << 16 | (x)) - -@@ -177,6 +179,9 @@ struct sun8i_mixer { - - struct clk *bus_clk; - struct clk *mod_clk; -+ -+ /* -1 means that layer is disabled */ -+ int channel_zpos[SUN8I_MIXER_MAX_CHANNELS]; - }; - - static inline struct sun8i_mixer * ---- a/drivers/gpu/drm/sun4i/sun8i_ui_layer.c -+++ b/drivers/gpu/drm/sun4i/sun8i_ui_layer.c -@@ -24,12 +24,10 @@ - #include "sun8i_ui_scaler.h" - - static void sun8i_ui_layer_enable(struct sun8i_mixer *mixer, int channel, -- int overlay, bool enable, unsigned int zpos, -- unsigned int old_zpos) -+ int overlay, bool enable, unsigned int zpos) - { -- u32 val, bld_base, ch_base; -+ u32 val, ch_base; - -- bld_base = sun8i_blender_base(mixer); - ch_base = sun8i_channel_base(mixer, channel); - - DRM_DEBUG_DRIVER("%sabling channel %d overlay %d\n", -@@ -44,32 +42,7 @@ static void sun8i_ui_layer_enable(struct - SUN8I_MIXER_CHAN_UI_LAYER_ATTR(ch_base, overlay), - SUN8I_MIXER_CHAN_UI_LAYER_ATTR_EN, val); - -- if (!enable || zpos != old_zpos) { -- regmap_update_bits(mixer->engine.regs, -- SUN8I_MIXER_BLEND_PIPE_CTL(bld_base), -- SUN8I_MIXER_BLEND_PIPE_CTL_EN(old_zpos), -- 0); -- -- regmap_update_bits(mixer->engine.regs, -- SUN8I_MIXER_BLEND_ROUTE(bld_base), -- SUN8I_MIXER_BLEND_ROUTE_PIPE_MSK(old_zpos), -- 0); -- } -- -- if (enable) { -- val = SUN8I_MIXER_BLEND_PIPE_CTL_EN(zpos); -- -- regmap_update_bits(mixer->engine.regs, -- SUN8I_MIXER_BLEND_PIPE_CTL(bld_base), -- val, val); -- -- val = channel << SUN8I_MIXER_BLEND_ROUTE_PIPE_SHIFT(zpos); -- -- regmap_update_bits(mixer->engine.regs, -- SUN8I_MIXER_BLEND_ROUTE(bld_base), -- SUN8I_MIXER_BLEND_ROUTE_PIPE_MSK(zpos), -- val); -- } -+ mixer->channel_zpos[channel] = enable ? zpos : -1; - } - - static void sun8i_ui_layer_update_alpha(struct sun8i_mixer *mixer, int channel, -@@ -294,11 +267,9 @@ static void sun8i_ui_layer_atomic_disabl - struct drm_plane_state *old_state = drm_atomic_get_old_plane_state(state, - plane); - struct sun8i_ui_layer *layer = plane_to_sun8i_ui_layer(plane); -- unsigned int old_zpos = old_state->normalized_zpos; - struct sun8i_mixer *mixer = layer->mixer; - -- sun8i_ui_layer_enable(mixer, layer->channel, layer->overlay, false, 0, -- old_zpos); -+ sun8i_ui_layer_enable(mixer, layer->channel, layer->overlay, false, 0); - } - - static void sun8i_ui_layer_atomic_update(struct drm_plane *plane, -@@ -310,12 +281,11 @@ static void sun8i_ui_layer_atomic_update - plane); - struct sun8i_ui_layer *layer = plane_to_sun8i_ui_layer(plane); - unsigned int zpos = new_state->normalized_zpos; -- unsigned int old_zpos = old_state->normalized_zpos; - struct sun8i_mixer *mixer = layer->mixer; - - if (!new_state->visible) { - sun8i_ui_layer_enable(mixer, layer->channel, -- layer->overlay, false, 0, old_zpos); -+ layer->overlay, false, 0); - return; - } - -@@ -328,7 +298,7 @@ static void sun8i_ui_layer_atomic_update - sun8i_ui_layer_update_buffer(mixer, layer->channel, - layer->overlay, plane); - sun8i_ui_layer_enable(mixer, layer->channel, layer->overlay, -- true, zpos, old_zpos); -+ true, zpos); - } - - static const struct drm_plane_helper_funcs sun8i_ui_layer_helper_funcs = { ---- a/drivers/gpu/drm/sun4i/sun8i_vi_layer.c -+++ b/drivers/gpu/drm/sun4i/sun8i_vi_layer.c -@@ -18,8 +18,7 @@ - #include "sun8i_vi_scaler.h" - - static void sun8i_vi_layer_enable(struct sun8i_mixer *mixer, int channel, -- int overlay, bool enable, unsigned int zpos, -- unsigned int old_zpos) -+ int overlay, bool enable, unsigned int zpos) - { - u32 val, bld_base, ch_base; - -@@ -38,32 +37,7 @@ static void sun8i_vi_layer_enable(struct - SUN8I_MIXER_CHAN_VI_LAYER_ATTR(ch_base, overlay), - SUN8I_MIXER_CHAN_VI_LAYER_ATTR_EN, val); - -- if (!enable || zpos != old_zpos) { -- regmap_update_bits(mixer->engine.regs, -- SUN8I_MIXER_BLEND_PIPE_CTL(bld_base), -- SUN8I_MIXER_BLEND_PIPE_CTL_EN(old_zpos), -- 0); -- -- regmap_update_bits(mixer->engine.regs, -- SUN8I_MIXER_BLEND_ROUTE(bld_base), -- SUN8I_MIXER_BLEND_ROUTE_PIPE_MSK(old_zpos), -- 0); -- } -- -- if (enable) { -- val = SUN8I_MIXER_BLEND_PIPE_CTL_EN(zpos); -- -- regmap_update_bits(mixer->engine.regs, -- SUN8I_MIXER_BLEND_PIPE_CTL(bld_base), -- val, val); -- -- val = channel << SUN8I_MIXER_BLEND_ROUTE_PIPE_SHIFT(zpos); -- -- regmap_update_bits(mixer->engine.regs, -- SUN8I_MIXER_BLEND_ROUTE(bld_base), -- SUN8I_MIXER_BLEND_ROUTE_PIPE_MSK(zpos), -- val); -- } -+ mixer->channel_zpos[channel] = enable ? zpos : -1; - } - - static void sun8i_vi_layer_update_alpha(struct sun8i_mixer *mixer, int channel, -@@ -398,11 +372,9 @@ static void sun8i_vi_layer_atomic_disabl - struct drm_plane_state *old_state = drm_atomic_get_old_plane_state(state, - plane); - struct sun8i_vi_layer *layer = plane_to_sun8i_vi_layer(plane); -- unsigned int old_zpos = old_state->normalized_zpos; - struct sun8i_mixer *mixer = layer->mixer; - -- sun8i_vi_layer_enable(mixer, layer->channel, layer->overlay, false, 0, -- old_zpos); -+ sun8i_vi_layer_enable(mixer, layer->channel, layer->overlay, false, 0); - } - - static void sun8i_vi_layer_atomic_update(struct drm_plane *plane, -@@ -414,12 +386,11 @@ static void sun8i_vi_layer_atomic_update - plane); - struct sun8i_vi_layer *layer = plane_to_sun8i_vi_layer(plane); - unsigned int zpos = new_state->normalized_zpos; -- unsigned int old_zpos = old_state->normalized_zpos; - struct sun8i_mixer *mixer = layer->mixer; - - if (!new_state->visible) { - sun8i_vi_layer_enable(mixer, layer->channel, -- layer->overlay, false, 0, old_zpos); -+ layer->overlay, false, 0); - return; - } - -@@ -432,7 +403,7 @@ static void sun8i_vi_layer_atomic_update - sun8i_vi_layer_update_buffer(mixer, layer->channel, - layer->overlay, plane); - sun8i_vi_layer_enable(mixer, layer->channel, layer->overlay, -- true, zpos, old_zpos); -+ true, zpos); - } - - static const struct drm_plane_helper_funcs sun8i_vi_layer_helper_funcs = { diff --git a/projects/Allwinner/patches/linux/0026-drm-sun4i-Don-t-use-update-regmap-variant-for-blend-.patch b/projects/Allwinner/patches/linux/0026-drm-sun4i-Don-t-use-update-regmap-variant-for-blend-.patch deleted file mode 100644 index 6dbad80533..0000000000 --- a/projects/Allwinner/patches/linux/0026-drm-sun4i-Don-t-use-update-regmap-variant-for-blend-.patch +++ /dev/null @@ -1,55 +0,0 @@ -From 144ad308ded7c5617d9574e174b68cbcb622cf4c Mon Sep 17 00:00:00 2001 -From: Jernej Skrabec -Date: Sun, 19 Jul 2020 11:28:49 +0200 -Subject: [PATCH 36/44] drm/sun4i: Don't use update regmap variant for blend - pipe register - -Readout might return invalid value, so always write it. - -Signed-off-by: Jernej Skrabec ---- - drivers/gpu/drm/sun4i/sun8i_mixer.c | 19 ++++++++----------- - 1 file changed, 8 insertions(+), 11 deletions(-) - ---- a/drivers/gpu/drm/sun4i/sun8i_mixer.c -+++ b/drivers/gpu/drm/sun4i/sun8i_mixer.c -@@ -282,8 +282,14 @@ static void sun8i_mixer_commit(struct su - } - } - -- regmap_update_bits(mixer->engine.regs, SUN8I_MIXER_BLEND_PIPE_CTL(base), -- SUN8I_MIXER_BLEND_PIPE_CTL_EN_MSK, pipe_ctl); -+ /* -+ * Set fill color of bottom plane to black. Generally not needed -+ * except when VI plane is at bottom (zpos = 0) and enabled. -+ */ -+ pipe_ctl |= SUN8I_MIXER_BLEND_PIPE_CTL_FC_EN(0); -+ -+ regmap_write(mixer->engine.regs, -+ SUN8I_MIXER_BLEND_PIPE_CTL(base), pipe_ctl); - - regmap_write(mixer->engine.regs, - SUN8I_MIXER_BLEND_ROUTE(base), route); -@@ -516,12 +522,6 @@ static int sun8i_mixer_bind(struct devic - regmap_write(mixer->engine.regs, SUN8I_MIXER_BLEND_BKCOLOR(base), - SUN8I_MIXER_BLEND_COLOR_BLACK); - -- /* -- * Set fill color of bottom plane to black. Generally not needed -- * except when VI plane is at bottom (zpos = 0) and enabled. -- */ -- regmap_write(mixer->engine.regs, SUN8I_MIXER_BLEND_PIPE_CTL(base), -- SUN8I_MIXER_BLEND_PIPE_CTL_FC_EN(0)); - regmap_write(mixer->engine.regs, SUN8I_MIXER_BLEND_ATTR_FCOLOR(base, 0), - SUN8I_MIXER_BLEND_COLOR_BLACK); - -@@ -533,9 +533,6 @@ static int sun8i_mixer_bind(struct devic - mixer->channel_zpos[i] = -1; - } - -- regmap_update_bits(mixer->engine.regs, SUN8I_MIXER_BLEND_PIPE_CTL(base), -- SUN8I_MIXER_BLEND_PIPE_CTL_EN_MSK, 0); -- - return 0; - - err_disable_bus_clk: diff --git a/projects/Allwinner/patches/linux/0032-ASoC-sun4i-i2s-Add-parenthesis-around-macro-argument.patch b/projects/Allwinner/patches/linux/0032-ASoC-sun4i-i2s-Add-parenthesis-around-macro-argument.patch deleted file mode 100644 index 1d50f97a4d..0000000000 --- a/projects/Allwinner/patches/linux/0032-ASoC-sun4i-i2s-Add-parenthesis-around-macro-argument.patch +++ /dev/null @@ -1,50 +0,0 @@ -From b10b474925447933bf1d718e6d064190b15b56d9 Mon Sep 17 00:00:00 2001 -From: Jernej Skrabec -Date: Thu, 14 Jan 2021 19:26:03 +0100 -Subject: [PATCH 42/44] ASoC: sun4i-i2s: Add parenthesis around macro arguments - -Several macro arguments are not put inside parenthesis, which may cause -subtle issues. - -Fix those macros. - -Signed-off-by: Jernej Skrabec ---- - sound/soc/sunxi/sun4i-i2s.c | 12 ++++++------ - 1 file changed, 6 insertions(+), 6 deletions(-) - ---- a/sound/soc/sunxi/sun4i-i2s.c -+++ b/sound/soc/sunxi/sun4i-i2s.c -@@ -116,16 +116,16 @@ - - #define SUN8I_I2S_CHAN_CFG_REG 0x30 - #define SUN8I_I2S_CHAN_CFG_RX_SLOT_NUM_MASK GENMASK(7, 4) --#define SUN8I_I2S_CHAN_CFG_RX_SLOT_NUM(chan) ((chan - 1) << 4) -+#define SUN8I_I2S_CHAN_CFG_RX_SLOT_NUM(chan) (((chan) - 1) << 4) - #define SUN8I_I2S_CHAN_CFG_TX_SLOT_NUM_MASK GENMASK(3, 0) --#define SUN8I_I2S_CHAN_CFG_TX_SLOT_NUM(chan) (chan - 1) -+#define SUN8I_I2S_CHAN_CFG_TX_SLOT_NUM(chan) ((chan) - 1) - - #define SUN8I_I2S_TX_CHAN_MAP_REG 0x44 - #define SUN8I_I2S_TX_CHAN_SEL_REG 0x34 - #define SUN8I_I2S_TX_CHAN_OFFSET_MASK GENMASK(13, 12) --#define SUN8I_I2S_TX_CHAN_OFFSET(offset) (offset << 12) -+#define SUN8I_I2S_TX_CHAN_OFFSET(offset) ((offset) << 12) - #define SUN8I_I2S_TX_CHAN_EN_MASK GENMASK(11, 4) --#define SUN8I_I2S_TX_CHAN_EN(num_chan) (((1 << num_chan) - 1) << 4) -+#define SUN8I_I2S_TX_CHAN_EN(num_chan) (((1 << (num_chan)) - 1) << 4) - - #define SUN8I_I2S_RX_CHAN_SEL_REG 0x54 - #define SUN8I_I2S_RX_CHAN_MAP_REG 0x58 -@@ -134,9 +134,9 @@ - #define SUN50I_H6_I2S_TX_CHAN_SEL_OFFSET_MASK GENMASK(21, 20) - #define SUN50I_H6_I2S_TX_CHAN_SEL_OFFSET(offset) ((offset) << 20) - #define SUN50I_H6_I2S_TX_CHAN_SEL_MASK GENMASK(19, 16) --#define SUN50I_H6_I2S_TX_CHAN_SEL(chan) ((chan - 1) << 16) -+#define SUN50I_H6_I2S_TX_CHAN_SEL(chan) (((chan) - 1) << 16) - #define SUN50I_H6_I2S_TX_CHAN_EN_MASK GENMASK(15, 0) --#define SUN50I_H6_I2S_TX_CHAN_EN(num_chan) (((1 << num_chan) - 1)) -+#define SUN50I_H6_I2S_TX_CHAN_EN(num_chan) (((1 << (num_chan)) - 1)) - - #define SUN50I_H6_I2S_TX_CHAN_MAP0_REG 0x44 - #define SUN50I_H6_I2S_TX_CHAN_MAP1_REG 0x48