Re: [PATCH 1/2] drm/amd/display: Introduce overlay cursor mode

2024-04-01 Thread Leo Li




On 2024-03-28 11:52, Harry Wentland wrote:



On 2024-03-28 11:48, Robert Mader wrote:

Hi,

On 15.03.24 18:09, sunpeng...@amd.com wrote:

From: Leo Li 

[Why]

DCN is the display hardware for amdgpu. DRM planes are backed by DCN
hardware pipes, which carry pixel data from one end (memory), to the
other (output encoder).

Each DCN pipe has the ability to blend in a cursor early on in the
pipeline. In other words, there are no dedicated cursor planes in DCN,
which makes cursor behavior somewhat unintuitive for compositors.

For example, if the cursor is in RGB format, but the top-most DRM plane
is in YUV format, DCN will not be able to blend them. Because of this,
amdgpu_dm rejects all configurations where a cursor needs to be enabled
on top of a YUV formatted plane.

 From a compositor's perspective, when computing an allocation for
hardware plane offloading, this cursor-on-yuv configuration result in an
atomic test failure. Since the failure reason is not obvious at all,
compositors will likely fall back to full rendering, which is not ideal.

Instead, amdgpu_dm can try to accommodate the cursor-on-yuv
configuration by opportunistically reserving a separate DCN pipe just
for the cursor. We can refer to this as "overlay cursor mode". It is
contrasted with "native cursor mode", where the native DCN per-pipe
cursor is used.

[How]

On each crtc, compute whether the cursor plane should be enabled in
overlay mode (which currently, is iff the immediate plane below has a
YUV format). If it is, mark the CRTC as requesting overlay cursor mode.


iff -> if

IIRC another case where this would be needed is when the scale of the plane 
below doesn't match the cursor scale. This is especially common for videos and 
thus implicitly covered by the YUV check in most cases, but should probably be 
made explicit. Michel Dänzer might be able to comment here.


Another possible case that could be covered here is when some area is not 
covered by any plane and just shows a black background. This happens e.g. if a 
compositor puts a YUV surface on the primary plane that has a different 
width/high ratio than the display. The compositor can add black bars by just 
leaving the area uncovered and thus require only a single hardware plane for 
video playback ("Unless explicitly specified (..), the active area of a CRTC 
will be black by default." 
https://dri.freedesktop.org/docs/drm/gpu/drm-kms.html#plane-abstraction). If 
the cursor is visible over this black bars, AMD currently refuses the commit 
IIUC (see also Michel Dänzers comment at 
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3177#note_1924544)




Thanks for mentioning both of these scenarios. I agree it would be
good if we can expand the use of the overlay cursor to these cases.

Harry


Thanks,

Robert Mader


All good points, thanks for the feedback. I'll take a peek at the scaling + no
underlying plane case and send a v2 when I get around to it.

Leo





During DC validation, attempt to enable a separate DCN pipe for the
cursor if it's in overlay mode. If that fails, or if no overlay mode is
requested, then fallback to native mode.

Signed-off-by: Leo Li 
---
  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 309 +++---
  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h |   7 +
  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    |   1 +
  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   |  13 +-
  4 files changed, 288 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 21a61454c878..09ab330aed17 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8359,8 +8359,19 @@ static void amdgpu_dm_commit_planes(struct 
drm_atomic_state *state,

   * Disable the cursor first if we're disabling all the planes.
   * It'll remain on the screen after the planes are re-enabled
   * if we don't.
+ *
+ * If the cursor is transitioning from native to overlay mode, the
+ * native cursor needs to be disabled first.
   */
-    if (acrtc_state->active_planes == 0)
+    if (acrtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE &&
+    dm_old_crtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE) {
+    struct dc_cursor_position cursor_position = {0};
+    dc_stream_set_cursor_position(acrtc_state->stream,
+  _position);
+    }
+
+    if (acrtc_state->active_planes == 0 &&
+    dm_old_crtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE)
  amdgpu_dm_commit_cursors(state);
  /* update planes when needed */
@@ -8374,7 +8385,8 @@ static void amdgpu_dm_commit_planes(struct 
drm_atomic_state *state,
  struct dm_plane_state *dm_new_plane_state = 
to_dm_plane_state(new_plane_state);

  /* Cursor plane is handled after stream updates */
-    if (plane->type == DRM_PLANE_TYPE_CURSOR) {
+    if (plane->type == 

Re: [PATCH 1/2] drm/amd/display: Introduce overlay cursor mode

2024-03-28 Thread Robert Mader

Hi,

On 15.03.24 18:09, sunpeng...@amd.com wrote:

From: Leo Li 

[Why]

DCN is the display hardware for amdgpu. DRM planes are backed by DCN
hardware pipes, which carry pixel data from one end (memory), to the
other (output encoder).

Each DCN pipe has the ability to blend in a cursor early on in the
pipeline. In other words, there are no dedicated cursor planes in DCN,
which makes cursor behavior somewhat unintuitive for compositors.

For example, if the cursor is in RGB format, but the top-most DRM plane
is in YUV format, DCN will not be able to blend them. Because of this,
amdgpu_dm rejects all configurations where a cursor needs to be enabled
on top of a YUV formatted plane.

 From a compositor's perspective, when computing an allocation for
hardware plane offloading, this cursor-on-yuv configuration result in an
atomic test failure. Since the failure reason is not obvious at all,
compositors will likely fall back to full rendering, which is not ideal.

Instead, amdgpu_dm can try to accommodate the cursor-on-yuv
configuration by opportunistically reserving a separate DCN pipe just
for the cursor. We can refer to this as "overlay cursor mode". It is
contrasted with "native cursor mode", where the native DCN per-pipe
cursor is used.

[How]

On each crtc, compute whether the cursor plane should be enabled in
overlay mode (which currently, is iff the immediate plane below has a
YUV format). If it is, mark the CRTC as requesting overlay cursor mode.


iff -> if

IIRC another case where this would be needed is when the scale of the 
plane below doesn't match the cursor scale. This is especially common 
for videos and thus implicitly covered by the YUV check in most cases, 
but should probably be made explicit. Michel Dänzer might be able to 
comment here.


Another possible case that could be covered here is when some area is 
not covered by any plane and just shows a black background. This happens 
e.g. if a compositor puts a YUV surface on the primary plane that has a 
different width/high ratio than the display. The compositor can add 
black bars by just leaving the area uncovered and thus require only a 
single hardware plane for video playback ("Unless explicitly specified 
(..), the active area of a CRTC will be black by default." 
https://dri.freedesktop.org/docs/drm/gpu/drm-kms.html#plane-abstraction). 
If the cursor is visible over this black bars, AMD currently refuses the 
commit IIUC (see also Michel Dänzers comment at 
https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3177#note_1924544)


Thanks,

Robert Mader



During DC validation, attempt to enable a separate DCN pipe for the
cursor if it's in overlay mode. If that fails, or if no overlay mode is
requested, then fallback to native mode.

Signed-off-by: Leo Li 
---
  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 309 +++---
  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h |   7 +
  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c|   1 +
  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   |  13 +-
  4 files changed, 288 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
index 21a61454c878..09ab330aed17 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8359,8 +8359,19 @@ static void amdgpu_dm_commit_planes(struct 
drm_atomic_state *state,
 * Disable the cursor first if we're disabling all the planes.
 * It'll remain on the screen after the planes are re-enabled
 * if we don't.
+*
+* If the cursor is transitioning from native to overlay mode, the
+* native cursor needs to be disabled first.
 */
-   if (acrtc_state->active_planes == 0)
+   if (acrtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE &&
+   dm_old_crtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE) {
+   struct dc_cursor_position cursor_position = {0};
+   dc_stream_set_cursor_position(acrtc_state->stream,
+ _position);
+   }
+
+   if (acrtc_state->active_planes == 0 &&
+   dm_old_crtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE)
amdgpu_dm_commit_cursors(state);
  
  	/* update planes when needed */

@@ -8374,7 +8385,8 @@ static void amdgpu_dm_commit_planes(struct 
drm_atomic_state *state,
struct dm_plane_state *dm_new_plane_state = 
to_dm_plane_state(new_plane_state);
  
  		/* Cursor plane is handled after stream updates */

-   if (plane->type == DRM_PLANE_TYPE_CURSOR) {
+   if (plane->type == DRM_PLANE_TYPE_CURSOR &&
+   acrtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE) {
if ((fb && crtc == pcrtc) ||
(old_plane_state->fb && old_plane_state->crtc == 
pcrtc))
cursor_update = true;
@@ -8727,7 +8739,8 

Re: [PATCH 1/2] drm/amd/display: Introduce overlay cursor mode

2024-03-28 Thread Harry Wentland




On 2024-03-28 11:48, Robert Mader wrote:

Hi,

On 15.03.24 18:09, sunpeng...@amd.com wrote:

From: Leo Li 

[Why]

DCN is the display hardware for amdgpu. DRM planes are backed by DCN
hardware pipes, which carry pixel data from one end (memory), to the
other (output encoder).

Each DCN pipe has the ability to blend in a cursor early on in the
pipeline. In other words, there are no dedicated cursor planes in DCN,
which makes cursor behavior somewhat unintuitive for compositors.

For example, if the cursor is in RGB format, but the top-most DRM plane
is in YUV format, DCN will not be able to blend them. Because of this,
amdgpu_dm rejects all configurations where a cursor needs to be enabled
on top of a YUV formatted plane.

 From a compositor's perspective, when computing an allocation for
hardware plane offloading, this cursor-on-yuv configuration result in an
atomic test failure. Since the failure reason is not obvious at all,
compositors will likely fall back to full rendering, which is not ideal.

Instead, amdgpu_dm can try to accommodate the cursor-on-yuv
configuration by opportunistically reserving a separate DCN pipe just
for the cursor. We can refer to this as "overlay cursor mode". It is
contrasted with "native cursor mode", where the native DCN per-pipe
cursor is used.

[How]

On each crtc, compute whether the cursor plane should be enabled in
overlay mode (which currently, is iff the immediate plane below has a
YUV format). If it is, mark the CRTC as requesting overlay cursor mode.


iff -> if

IIRC another case where this would be needed is when the scale of the 
plane below doesn't match the cursor scale. This is especially common 
for videos and thus implicitly covered by the YUV check in most cases, 
but should probably be made explicit. Michel Dänzer might be able to 
comment here.


Another possible case that could be covered here is when some area is 
not covered by any plane and just shows a black background. This happens 
e.g. if a compositor puts a YUV surface on the primary plane that has a 
different width/high ratio than the display. The compositor can add 
black bars by just leaving the area uncovered and thus require only a 
single hardware plane for video playback ("Unless explicitly specified 
(..), the active area of a CRTC will be black by default." 
https://dri.freedesktop.org/docs/drm/gpu/drm-kms.html#plane-abstraction). If the cursor is visible over this black bars, AMD currently refuses the commit IIUC (see also Michel Dänzers comment at https://gitlab.gnome.org/GNOME/mutter/-/merge_requests/3177#note_1924544)




Thanks for mentioning both of these scenarios. I agree it would be
good if we can expand the use of the overlay cursor to these cases.

Harry


Thanks,

Robert Mader



During DC validation, attempt to enable a separate DCN pipe for the
cursor if it's in overlay mode. If that fails, or if no overlay mode is
requested, then fallback to native mode.

Signed-off-by: Leo Li 
---
  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 309 +++---
  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h |   7 +
  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c    |   1 +
  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   |  13 +-
  4 files changed, 288 insertions(+), 42 deletions(-)

diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c

index 21a61454c878..09ab330aed17 100644
--- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
+++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
@@ -8359,8 +8359,19 @@ static void amdgpu_dm_commit_planes(struct 
drm_atomic_state *state,

   * Disable the cursor first if we're disabling all the planes.
   * It'll remain on the screen after the planes are re-enabled
   * if we don't.
+ *
+ * If the cursor is transitioning from native to overlay mode, the
+ * native cursor needs to be disabled first.
   */
-    if (acrtc_state->active_planes == 0)
+    if (acrtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE &&
+    dm_old_crtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE) {
+    struct dc_cursor_position cursor_position = {0};
+    dc_stream_set_cursor_position(acrtc_state->stream,
+  _position);
+    }
+
+    if (acrtc_state->active_planes == 0 &&
+    dm_old_crtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE)
  amdgpu_dm_commit_cursors(state);
  /* update planes when needed */
@@ -8374,7 +8385,8 @@ static void amdgpu_dm_commit_planes(struct 
drm_atomic_state *state,
  struct dm_plane_state *dm_new_plane_state = 
to_dm_plane_state(new_plane_state);

  /* Cursor plane is handled after stream updates */
-    if (plane->type == DRM_PLANE_TYPE_CURSOR) {
+    if (plane->type == DRM_PLANE_TYPE_CURSOR &&
+    acrtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE) {
  if ((fb && crtc == pcrtc) ||
  (old_plane_state->fb && old_plane_state->crtc == 
pcrtc))

 

Re: [PATCH 1/2] drm/amd/display: Introduce overlay cursor mode

2024-03-28 Thread Pekka Paalanen
On Fri, 15 Mar 2024 13:09:57 -0400
 wrote:

> From: Leo Li 
> 
> [Why]
> 
> DCN is the display hardware for amdgpu. DRM planes are backed by DCN
> hardware pipes, which carry pixel data from one end (memory), to the
> other (output encoder).
> 
> Each DCN pipe has the ability to blend in a cursor early on in the
> pipeline. In other words, there are no dedicated cursor planes in DCN,
> which makes cursor behavior somewhat unintuitive for compositors.
> 
> For example, if the cursor is in RGB format, but the top-most DRM plane
> is in YUV format, DCN will not be able to blend them. Because of this,
> amdgpu_dm rejects all configurations where a cursor needs to be enabled
> on top of a YUV formatted plane.
> 
> From a compositor's perspective, when computing an allocation for
> hardware plane offloading, this cursor-on-yuv configuration result in an
> atomic test failure. Since the failure reason is not obvious at all,
> compositors will likely fall back to full rendering, which is not ideal.
> 
> Instead, amdgpu_dm can try to accommodate the cursor-on-yuv
> configuration by opportunistically reserving a separate DCN pipe just
> for the cursor. We can refer to this as "overlay cursor mode". It is
> contrasted with "native cursor mode", where the native DCN per-pipe
> cursor is used.

I can't comment on the code, but this explanation sounds like a really
good move!


Thanks,
pq

> [How]
> 
> On each crtc, compute whether the cursor plane should be enabled in
> overlay mode (which currently, is iff the immediate plane below has a
> YUV format). If it is, mark the CRTC as requesting overlay cursor mode.
> 
> During DC validation, attempt to enable a separate DCN pipe for the
> cursor if it's in overlay mode. If that fails, or if no overlay mode is
> requested, then fallback to native mode.
> 
> Signed-off-by: Leo Li 
> ---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 309 +++---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h |   7 +
>  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c|   1 +
>  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   |  13 +-
>  4 files changed, 288 insertions(+), 42 deletions(-)


pgpmymMkUxYuo.pgp
Description: OpenPGP digital signature


Re: [PATCH 1/2] drm/amd/display: Introduce overlay cursor mode

2024-03-21 Thread Harry Wentland



On 2024-03-15 13:09, sunpeng...@amd.com wrote:
> From: Leo Li 
> 
> [Why]
> 
> DCN is the display hardware for amdgpu. DRM planes are backed by DCN
> hardware pipes, which carry pixel data from one end (memory), to the
> other (output encoder).
> 
> Each DCN pipe has the ability to blend in a cursor early on in the
> pipeline. In other words, there are no dedicated cursor planes in DCN,
> which makes cursor behavior somewhat unintuitive for compositors.
> 
> For example, if the cursor is in RGB format, but the top-most DRM plane
> is in YUV format, DCN will not be able to blend them. Because of this,
> amdgpu_dm rejects all configurations where a cursor needs to be enabled
> on top of a YUV formatted plane.
> 
> From a compositor's perspective, when computing an allocation for
> hardware plane offloading, this cursor-on-yuv configuration result in an
> atomic test failure. Since the failure reason is not obvious at all,
> compositors will likely fall back to full rendering, which is not ideal.
> 
> Instead, amdgpu_dm can try to accommodate the cursor-on-yuv
> configuration by opportunistically reserving a separate DCN pipe just
> for the cursor. We can refer to this as "overlay cursor mode". It is
> contrasted with "native cursor mode", where the native DCN per-pipe
> cursor is used.
> 
> [How]
> 
> On each crtc, compute whether the cursor plane should be enabled in
> overlay mode (which currently, is iff the immediate plane below has a
> YUV format). If it is, mark the CRTC as requesting overlay cursor mode.
> 
> During DC validation, attempt to enable a separate DCN pipe for the
> cursor if it's in overlay mode. If that fails, or if no overlay mode is
> requested, then fallback to native mode.
> 
> Signed-off-by: Leo Li 

We should run this through our usual testing cycle, and I need to go over
it a bit more closely than I have, but I like it, so it's
Acked-by: Harry Wentland 

Harry

> ---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c | 309 +++---
>  .../gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.h |   7 +
>  .../amd/display/amdgpu_dm/amdgpu_dm_crtc.c|   1 +
>  .../amd/display/amdgpu_dm/amdgpu_dm_plane.c   |  13 +-
>  4 files changed, 288 insertions(+), 42 deletions(-)
> 
> diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c 
> b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> index 21a61454c878..09ab330aed17 100644
> --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm.c
> @@ -8359,8 +8359,19 @@ static void amdgpu_dm_commit_planes(struct 
> drm_atomic_state *state,
>* Disable the cursor first if we're disabling all the planes.
>* It'll remain on the screen after the planes are re-enabled
>* if we don't.
> +  *
> +  * If the cursor is transitioning from native to overlay mode, the
> +  * native cursor needs to be disabled first.
>*/
> - if (acrtc_state->active_planes == 0)
> + if (acrtc_state->cursor_mode == DM_CURSOR_OVERLAY_MODE &&
> + dm_old_crtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE) {
> + struct dc_cursor_position cursor_position = {0};
> + dc_stream_set_cursor_position(acrtc_state->stream,
> +   _position);
> + }
> +
> + if (acrtc_state->active_planes == 0 &&
> + dm_old_crtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE)
>   amdgpu_dm_commit_cursors(state);
>  
>   /* update planes when needed */
> @@ -8374,7 +8385,8 @@ static void amdgpu_dm_commit_planes(struct 
> drm_atomic_state *state,
>   struct dm_plane_state *dm_new_plane_state = 
> to_dm_plane_state(new_plane_state);
>  
>   /* Cursor plane is handled after stream updates */
> - if (plane->type == DRM_PLANE_TYPE_CURSOR) {
> + if (plane->type == DRM_PLANE_TYPE_CURSOR &&
> + acrtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE) {
>   if ((fb && crtc == pcrtc) ||
>   (old_plane_state->fb && old_plane_state->crtc == 
> pcrtc))
>   cursor_update = true;
> @@ -8727,7 +8739,8 @@ static void amdgpu_dm_commit_planes(struct 
> drm_atomic_state *state,
>* This avoids redundant programming in the case where we're going
>* to be disabling a single plane - those pipes are being disabled.
>*/
> - if (acrtc_state->active_planes)
> + if (acrtc_state->active_planes &&
> + acrtc_state->cursor_mode == DM_CURSOR_NATIVE_MODE)
>   amdgpu_dm_commit_cursors(state);
>  
>  cleanup:
> @@ -10039,7 +10052,8 @@ static bool should_reset_plane(struct 
> drm_atomic_state *state,
>  {
>   struct drm_plane *other;
>   struct drm_plane_state *old_other_state, *new_other_state;
> - struct drm_crtc_state *new_crtc_state;
> + struct drm_crtc_state *old_crtc_state, *new_crtc_state;
> + struct dm_crtc_state *old_dm_crtc_state, 

Re: [PATCH 1/2] drm/amd/display: Introduce overlay cursor mode

2024-03-16 Thread kernel test robot
Hi,

kernel test robot noticed the following build warnings:

[auto build test WARNING on drm-misc/drm-misc-next]
[also build test WARNING on drm/drm-next drm-exynos/exynos-drm-next 
drm-intel/for-linux-next drm-intel/for-linux-next-fixes drm-tip/drm-tip 
linus/master v6.8 next-20240315]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url:
https://github.com/intel-lab-lkp/linux/commits/sunpeng-li-amd-com/drm-amd-display-Introduce-overlay-cursor-mode/20240316-011404
base:   git://anongit.freedesktop.org/drm/drm-misc drm-misc-next
patch link:
https://lore.kernel.org/r/20240315170959.165505-2-sunpeng.li%40amd.com
patch subject: [PATCH 1/2] drm/amd/display: Introduce overlay cursor mode
config: loongarch-defconfig 
(https://download.01.org/0day-ci/archive/20240316/202403161600.6kspdesj-...@intel.com/config)
compiler: loongarch64-linux-gcc (GCC) 13.2.0
reproduce (this is a W=1 build): 
(https://download.01.org/0day-ci/archive/20240316/202403161600.6kspdesj-...@intel.com/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot 
| Closes: 
https://lore.kernel.org/oe-kbuild-all/202403161600.6kspdesj-...@intel.com/

All warnings (new ones prefixed by >>):

>> drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c:10639: warning: 
>> This comment starts with '/**', but isn't a kernel-doc comment. Refer 
>> Documentation/doc-guide/kernel-doc.rst
* Set whether the cursor should be enabled in native mode, or overlay mode, 
on


vim +10639 drivers/gpu/drm/amd/amdgpu/../display/amdgpu_dm/amdgpu_dm.c

 10637  
 10638  /**
 10639   * Set whether the cursor should be enabled in native mode, or overlay 
mode, on
 10640   * the dm_crtc_state.
 10641   *
 10642   * The cursor should be enabled in overlay mode if the immediate 
underlying
 10643   * plane contains a video format.
 10644   *
 10645   * Since zpos info is required, drm_atomic_normalize_zpos must be 
called before
 10646   * calling this function.
 10647  */
 10648  static int dm_crtc_set_cursor_mode(struct drm_atomic_state *state,
 10649  struct dm_crtc_state *dm_crtc_state)
 10650  {
 10651  struct drm_plane_state *plane_state, *old_plane_state, 
*target_plane_state;
 10652  struct drm_crtc_state *crtc_state = _crtc_state->base;
 10653  struct drm_plane *plane;
 10654  bool consider_mode_change = false;
 10655  bool cursor_changed = false;
 10656  unsigned int target_zpos;
 10657  unsigned int cursor_zpos;
 10658  int i;
 10659  
 10660  /*
 10661   * Cursor mode can change if a plane's format changes, is
 10662   * enabled/disabled, or z-order changes.
 10663   */
 10664  for_each_oldnew_plane_in_state(state, plane, old_plane_state, 
plane_state, i) {
 10665  
 10666  /* Only care about planes on this CRTC */
 10667  if ((drm_plane_mask(plane) & crtc_state->plane_mask) == 
0)
 10668  continue;
 10669  
 10670  if (plane->type == DRM_PLANE_TYPE_CURSOR)
 10671  cursor_changed = true;
 10672  
 10673  if (drm_atomic_plane_enabling(old_plane_state, 
plane_state) ||
 10674  drm_atomic_plane_disabling(old_plane_state, 
plane_state) ||
 10675  old_plane_state->fb->format != 
plane_state->fb->format) {
 10676  consider_mode_change = true;
 10677  break;
 10678  }
 10679  }
 10680  
 10681  if (!consider_mode_change && !crtc_state->zpos_changed) {
 10682  return 0;
 10683  }
 10684  
 10685  /*
 10686   * If no cursor change on this CRTC, and not enabled on this 
CRTC, then
 10687   * no need to set cursor mode. This avoids needlessly locking 
the cursor
 10688   * state.
 10689   */
 10690  if (!cursor_changed &&
 10691  !(drm_plane_mask(crtc_state->crtc->cursor) & 
crtc_state->plane_mask)) {
 10692  return 0;
 10693  }
 10694  
 10695  plane_state = drm_atomic_get_plane_state(state,
 10696   
crtc_state->crtc->cursor);
 10697  if (IS_ERR(plane_state))
 10698  return PTR_ERR(plane_state);
 10699  
 10700  /* Cursor is disabled */
 10701  if (!plane_state->fb)
 10702  return 0;
 10703  
 10704  cursor_zpos = plane_state->normalized_zpos;
 10705  
 10706  /* Get enabled plane immediately below cursor. */
 10707  target_plane_state = NULL;
 10708  target_zpos = 0;