On Thu, Sep 3, 2026 at 10:41 AM Jianmin Lv <[email protected]> wrote:
>
>
>
> On 2026/9/2 下午11:29, Icenowy Zheng wrote:
> > 在 2026-09-02三的 21:21 +0800,Huacai Chen写道:
> >> After commit 860e748bddcc929 ("drm: ensure blend mode supported if
> >> pixel
> >> format with alpha exposed") we get warnings at boot:
> >>
> >> loongson 0000:00:06.1: [drm] [PLANE:41:ls-cursor-plane-0] pixel
> >> format with alpha exposed but blend mode not setup. Please fix.
> >> loongson 0000:00:06.1: [drm] [PLANE:46:ls-cursor-plane-1] pixel
> >> format with alpha exposed but blend mode not setup. Please fix.
> >>
> >> The reason is the cursor plane supports color formats with alpha but
> >> the
> >> driver doesn't create blend mode property, which triggers the warning
> >> in
> >> validate_blend_mode_for_alpha_formats().
> >>
> >> The loongson DC HW doesn't support DRM_MODE_BLEND_PREMULTI, so create
> >> a blend mode with "DRM_MODE_BLEND_PIXEL_NONE |
> >> DRM_MODE_BLEND_COVERAGE"
> >> for cursor planes.
> >>
> >> Signed-off-by: Huacai Chen <[email protected]>
> >> ---
> >>   drivers/gpu/drm/loongson/lsdc_plane.c | 11 +++++++----
> >>   1 file changed, 7 insertions(+), 4 deletions(-)
> >>
> >> diff --git a/drivers/gpu/drm/loongson/lsdc_plane.c
> >> b/drivers/gpu/drm/loongson/lsdc_plane.c
> >> index bea42215796d..969b2aaa4fd0 100644
> >> --- a/drivers/gpu/drm/loongson/lsdc_plane.c
> >> +++ b/drivers/gpu/drm/loongson/lsdc_plane.c
> >> @@ -7,6 +7,7 @@
> >>
> >>   #include <drm/drm_atomic.h>
> >>   #include <drm/drm_atomic_helper.h>
> >> +#include <drm/drm_blend.h>
> >>   #include <drm/drm_framebuffer.h>
> >>   #include <drm/drm_gem_atomic_helper.h>
> >>   #include <drm/drm_print.h>
> >> @@ -747,8 +748,9 @@ int ls7a1000_cursor_plane_init(struct drm_device
> >> *ddev,
> >>                             struct drm_plane *plane,
> >>                             unsigned int index)
> >>   {
> >> -    struct lsdc_cursor *cursor = to_lsdc_cursor(plane);
> >>      int ret;
> >> +    unsigned int blend_caps = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> >> BIT(DRM_MODE_BLEND_COVERAGE);
> >> +    struct lsdc_cursor *cursor = to_lsdc_cursor(plane);
> >>
> >>      ret = drm_universal_plane_init(ddev, plane, 1 << index,
> >>                                     &lsdc_plane_funcs,
> >> @@ -765,15 +767,16 @@ int ls7a1000_cursor_plane_init(struct
> >> drm_device *ddev,
> >>
> >>      drm_plane_helper_add(plane,
> >> &ls7a1000_cursor_plane_helper_funcs);
> >>
> >> -    return 0;
> >> +    return drm_plane_create_blend_mode_property(plane,
> >> blend_caps);
> >>   }
> >>
> >>   int ls7a2000_cursor_plane_init(struct drm_device *ddev,
> >>                             struct drm_plane *plane,
> >>                             unsigned int index)
> >>   {
> >> -    struct lsdc_cursor *cursor = to_lsdc_cursor(plane);
> >>      int ret;
> >> +    unsigned int blend_caps = BIT(DRM_MODE_BLEND_PIXEL_NONE) |
> >> BIT(DRM_MODE_BLEND_COVERAGE);
> >
> > I think code needs to be present for setting up PIXEL_NONE blend mode,
> > if it's exposed.
> >
> > Personally, from my copy of 龙芯 7A2000 桥片用户手册 V1.0, I can find no
> > information of a PIXEL_NONE blend mode -- there's no bits controlling
> > the enablement of blending (except for completely disabling the
> > cursor), and the format has no option of XRGB8888 instead of ARGB8888.
> >
> > Thanks,
> > Icenowy
> >
> Agree, COVERAGE mode is internally fixed in the chip with no register to
> control.
OK, I will remove PIXEL_NONE in V3.

Huacai

> >> +    struct lsdc_cursor *cursor = to_lsdc_cursor(plane);
> >>
> >>      ret = drm_universal_plane_init(ddev, plane, 1 << index,
> >>                                     &lsdc_plane_funcs,
> >> @@ -790,5 +793,5 @@ int ls7a2000_cursor_plane_init(struct drm_device
> >> *ddev,
> >>
> >>      drm_plane_helper_add(plane,
> >> &ls7a2000_cursor_plane_helper_funcs);
> >>
> >> -    return 0;
> >> +    return drm_plane_create_blend_mode_property(plane,
> >> blend_caps);
> >>   }
>

Reply via email to