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); > >> } >
