If the constant alpha always enable, the SoCs that is not supported the
ignore pixel alpha bit will still use constant alpha. That will break
the original constant alpha setting of XRGB foramt for blend_modes
unsupported SoCs, such as MT8173.
Note that ignore pixel alpha bit is suppored if the SoC support the
blend_modes.
Make the constatnt alpha only enable when having a vliad blend_mode or
setting the has_alpha to fix the downgrade issue.
Fixes: bc46eb5d5d77 ("drm/mediatek: Support DRM plane alpha in OVL")
Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com>
---
drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
index 89b439dcf3a6..8453a72f9e59 100644
--- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
+++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c
@@ -473,8 +473,14 @@ void mtk_ovl_layer_config(struct device *dev, unsigned int idx,
con = ovl_fmt_convert(ovl, fmt, blend_mode);
if (state->base.fb) {
- con |= OVL_CON_AEN;
con |= state->base.alpha & OVL_CON_ALPHA;
+
+ /*
+ * For blend_modes supported SoCs, always enable constant alpha.
+ * For blend_modes unsupported SoCs, enable constant alpha when has_alpha is set.
+ */
+ if (blend_mode || state->base.fb->format->has_alpha)
+ con |= OVL_CON_AEN;
}
/* CONST_BLD must be enabled for XRGB formats although the alpha channel
--
2.43.0
Hi, Jason: On Mon, 2024-10-07 at 15:00 +0800, Jason-JH.Lin wrote: > If the constant alpha always enable, the SoCs that is not supported the > ignore pixel alpha bit will still use constant alpha. That will break > the original constant alpha setting of XRGB foramt for blend_modes > unsupported SoCs, such as MT8173. > > Note that ignore pixel alpha bit is suppored if the SoC support the > blend_modes. > Make the constatnt alpha only enable when having a vliad blend_mode or > setting the has_alpha to fix the downgrade issue. It's alpha blending enable, not constant alpha enable. > > Fixes: bc46eb5d5d77 ("drm/mediatek: Support DRM plane alpha in OVL") > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> > --- > drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > index 89b439dcf3a6..8453a72f9e59 100644 > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > @@ -473,8 +473,14 @@ void mtk_ovl_layer_config(struct device *dev, unsigned int idx, > > con = ovl_fmt_convert(ovl, fmt, blend_mode); > if (state->base.fb) { > - con |= OVL_CON_AEN; > con |= state->base.alpha & OVL_CON_ALPHA; > + > + /* > + * For blend_modes supported SoCs, always enable constant alpha. > + * For blend_modes unsupported SoCs, enable constant alpha when has_alpha is set. It's alpha blending enable, not constant alpha enable. Regards, CK > + */ > + if (blend_mode || state->base.fb->format->has_alpha) > + con |= OVL_CON_AEN; > } > > /* CONST_BLD must be enabled for XRGB formats although the alpha channel
On Tue, 2024-10-08 at 03:51 +0000, CK Hu (胡俊光) wrote: > Hi, Jason: > > On Mon, 2024-10-07 at 15:00 +0800, Jason-JH.Lin wrote: > > If the constant alpha always enable, the SoCs that is not supported > > the > > ignore pixel alpha bit will still use constant alpha. That will > > break > > the original constant alpha setting of XRGB foramt for blend_modes > > unsupported SoCs, such as MT8173. > > > > Note that ignore pixel alpha bit is suppored if the SoC support the > > blend_modes. > > Make the constatnt alpha only enable when having a vliad blend_mode > > or > > setting the has_alpha to fix the downgrade issue. > > It's alpha blending enable, not constant alpha enable. OK, I'll correct the commit message. > > > > > Fixes: bc46eb5d5d77 ("drm/mediatek: Support DRM plane alpha in > > OVL") > > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> > > --- > > drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +++++++- > > 1 file changed, 7 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > index 89b439dcf3a6..8453a72f9e59 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > @@ -473,8 +473,14 @@ void mtk_ovl_layer_config(struct device *dev, > > unsigned int idx, > > > > con = ovl_fmt_convert(ovl, fmt, blend_mode); > > if (state->base.fb) { > > - con |= OVL_CON_AEN; > > con |= state->base.alpha & OVL_CON_ALPHA; > > + > > + /* > > + * For blend_modes supported SoCs, always enable > > constant alpha. > > + * For blend_modes unsupported SoCs, enable constant > > alpha when has_alpha is set. > > It's alpha blending enable, not constant alpha enable. > OK, I'll correct the comment. Regards, Jason-JH.Lin > Regards, > CK
… > Make the constatnt alpha only enable when having a vliad blend_mode or … Another wording suggestion: Enable the constant alpha channel only when having a valid blending mode? … > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> Does a dot really belong to this personal name? https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/submitting-patches.rst?h=v6.12-rc2#n396 Regards, Markus
Il 07/10/24 09:00, Jason-JH.Lin ha scritto: > If the constant alpha always enable, the SoCs that is not supported the > ignore pixel alpha bit will still use constant alpha. That will break > the original constant alpha setting of XRGB foramt for blend_modes > unsupported SoCs, such as MT8173. > > Note that ignore pixel alpha bit is suppored if the SoC support the > blend_modes. > Make the constatnt alpha only enable when having a vliad blend_mode or > setting the has_alpha to fix the downgrade issue. > > Fixes: bc46eb5d5d77 ("drm/mediatek: Support DRM plane alpha in OVL") > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> > --- > drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +++++++- > 1 file changed, 7 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > index 89b439dcf3a6..8453a72f9e59 100644 > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > @@ -473,8 +473,14 @@ void mtk_ovl_layer_config(struct device *dev, unsigned int idx, > > con = ovl_fmt_convert(ovl, fmt, blend_mode); > if (state->base.fb) { > - con |= OVL_CON_AEN; > con |= state->base.alpha & OVL_CON_ALPHA; > + > + /* > + * For blend_modes supported SoCs, always enable constant alpha. > + * For blend_modes unsupported SoCs, enable constant alpha when has_alpha is set. > + */ > + if (blend_mode || state->base.fb->format->has_alpha) > + con |= OVL_CON_AEN; I'd say that you should make sure that OVL_CON_AEN is not set when !blend_mode && !has_alpha, and you can do that like this: if (blend_mode || state->base.fb->format->has_alpha) con |= OVL_CON_AEN; else con &= ~OVL_CON_AEN; After applying the proposed change, Reviewed-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Hi Angelo, Thanks for the reviews. On Mon, 2024-10-07 at 11:36 +0200, AngeloGioacchino Del Regno wrote: > Il 07/10/24 09:00, Jason-JH.Lin ha scritto: > > If the constant alpha always enable, the SoCs that is not supported > > the > > ignore pixel alpha bit will still use constant alpha. That will > > break > > the original constant alpha setting of XRGB foramt for blend_modes > > unsupported SoCs, such as MT8173. > > > > Note that ignore pixel alpha bit is suppored if the SoC support the > > blend_modes. > > Make the constatnt alpha only enable when having a vliad blend_mode > > or > > setting the has_alpha to fix the downgrade issue. > > > > Fixes: bc46eb5d5d77 ("drm/mediatek: Support DRM plane alpha in > > OVL") > > Signed-off-by: Jason-JH.Lin <jason-jh.lin@mediatek.com> > > --- > > drivers/gpu/drm/mediatek/mtk_disp_ovl.c | 8 +++++++- > > 1 file changed, 7 insertions(+), 1 deletion(-) > > > > diff --git a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > index 89b439dcf3a6..8453a72f9e59 100644 > > --- a/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > +++ b/drivers/gpu/drm/mediatek/mtk_disp_ovl.c > > @@ -473,8 +473,14 @@ void mtk_ovl_layer_config(struct device *dev, > > unsigned int idx, > > > > con = ovl_fmt_convert(ovl, fmt, blend_mode); Because con is a local variable declared in the beginning of mtk_ovl_layer_config() and then being assigned to the return value of ovl_fmt_convert() here. > > if (state->base.fb) { > > - con |= OVL_CON_AEN; > > con |= state->base.alpha & OVL_CON_ALPHA; > > + > > + /* > > + * For blend_modes supported SoCs, always enable > > constant alpha. > > + * For blend_modes unsupported SoCs, enable constant > > alpha when has_alpha is set. > > + */ > > + if (blend_mode || state->base.fb->format->has_alpha) > > + con |= OVL_CON_AEN; > > I'd say that you should make sure that OVL_CON_AEN is not set when > !blend_mode && !has_alpha, and you can do that like this: > > if (blend_mode || state->base.fb->format->has_alpha) > con |= OVL_CON_AEN; I think the OVL_CON_AEN won't be set when !blend_mode && !has_alpha. Can I drop the else case here? > else > con &= ~OVL_CON_AEN; Regards, Jason-JH.Lin > > After applying the proposed change, > Reviewed-by: AngeloGioacchino Del Regno < > angelogioacchino.delregno@collabora.com> >
© 2016 - 2024 Red Hat, Inc.