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.
+       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