Re: [PATCH v2] drm/amdgpu: register a dirty framebuffer callback for fbcon

2023-08-23 Thread Hamza Mahfooz

On 8/23/23 16:51, Alex Deucher wrote:

@Mahfooz, Hamza
  can you respin with the NULL check?


sure.



Alex

On Wed, Aug 16, 2023 at 10:25 AM Christian König
 wrote:


Am 16.08.23 um 15:41 schrieb Hamza Mahfooz:


On 8/16/23 01:55, Christian König wrote:



Am 15.08.23 um 19:26 schrieb Hamza Mahfooz:

fbcon requires that we implement &drm_framebuffer_funcs.dirty.
Otherwise, the framebuffer might take a while to flush (which would
manifest as noticeable lag). However, we can't enable this callback for
non-fbcon cases since it might cause too many atomic commits to be made
at once. So, implement amdgpu_dirtyfb() and only enable it for fbcon
framebuffers on devices that support atomic KMS.

Cc: Aurabindo Pillai 
Cc: Mario Limonciello 
Cc: sta...@vger.kernel.org # 6.1+
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2519
Signed-off-by: Hamza Mahfooz 
---
v2: update variable names
---
   drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 26
-
   1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index d20dd3f852fc..d3b59f99cb7c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -38,6 +38,8 @@
   #include 
   #include 
   #include 
+#include 
+#include 
   #include 
   #include 
   #include 
@@ -532,11 +534,29 @@ bool amdgpu_display_ddc_probe(struct
amdgpu_connector *amdgpu_connector,
   return true;
   }
+static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct
drm_file *file,
+  unsigned int flags, unsigned int color,
+  struct drm_clip_rect *clips, unsigned int num_clips)
+{
+
+if (strcmp(fb->comm, "[fbcon]"))
+return -ENOSYS;


Once more to the v2 of this patch: Tests like those are a pretty big
NO-GO for upstreaming.


On closer inspection it is actually sufficient to check if `file` is
NULL here (since it means that the request isn't from userspace). So, do
you think that would be palatable for upstream?


That's certainly better than doing a string compare, but I'm not sure if
that's sufficient.

In general drivers shouldn't have any special handling for fdcon.

You should probably have Thomas Zimmermann  take a
look at this.

Regards,
Christian.





Regards,
Christian.


+
+return drm_atomic_helper_dirtyfb(fb, file, flags, color, clips,
+ num_clips);
+}
+
   static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
   .destroy = drm_gem_fb_destroy,
   .create_handle = drm_gem_fb_create_handle,
   };
+static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = {
+.destroy = drm_gem_fb_destroy,
+.create_handle = drm_gem_fb_create_handle,
+.dirty = amdgpu_dirtyfb
+};
+
   uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
 uint64_t bo_flags)
   {
@@ -1139,7 +1159,11 @@ static int
amdgpu_display_gem_fb_verify_and_init(struct drm_device *dev,
   if (ret)
   goto err;
-ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
+if (drm_drv_uses_atomic_modeset(dev))
+ret = drm_framebuffer_init(dev, &rfb->base,
+   &amdgpu_fb_funcs_atomic);
+else
+ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
   if (ret)
   goto err;





--
Hamza



Re: [PATCH v2] drm/amdgpu: register a dirty framebuffer callback for fbcon

2023-08-23 Thread Alex Deucher
@Mahfooz, Hamza
 can you respin with the NULL check?

Alex

On Wed, Aug 16, 2023 at 10:25 AM Christian König
 wrote:
>
> Am 16.08.23 um 15:41 schrieb Hamza Mahfooz:
> >
> > On 8/16/23 01:55, Christian König wrote:
> >>
> >>
> >> Am 15.08.23 um 19:26 schrieb Hamza Mahfooz:
> >>> fbcon requires that we implement &drm_framebuffer_funcs.dirty.
> >>> Otherwise, the framebuffer might take a while to flush (which would
> >>> manifest as noticeable lag). However, we can't enable this callback for
> >>> non-fbcon cases since it might cause too many atomic commits to be made
> >>> at once. So, implement amdgpu_dirtyfb() and only enable it for fbcon
> >>> framebuffers on devices that support atomic KMS.
> >>>
> >>> Cc: Aurabindo Pillai 
> >>> Cc: Mario Limonciello 
> >>> Cc: sta...@vger.kernel.org # 6.1+
> >>> Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2519
> >>> Signed-off-by: Hamza Mahfooz 
> >>> ---
> >>> v2: update variable names
> >>> ---
> >>>   drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 26
> >>> -
> >>>   1 file changed, 25 insertions(+), 1 deletion(-)
> >>>
> >>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> >>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> >>> index d20dd3f852fc..d3b59f99cb7c 100644
> >>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> >>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
> >>> @@ -38,6 +38,8 @@
> >>>   #include 
> >>>   #include 
> >>>   #include 
> >>> +#include 
> >>> +#include 
> >>>   #include 
> >>>   #include 
> >>>   #include 
> >>> @@ -532,11 +534,29 @@ bool amdgpu_display_ddc_probe(struct
> >>> amdgpu_connector *amdgpu_connector,
> >>>   return true;
> >>>   }
> >>> +static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct
> >>> drm_file *file,
> >>> +  unsigned int flags, unsigned int color,
> >>> +  struct drm_clip_rect *clips, unsigned int num_clips)
> >>> +{
> >>> +
> >>> +if (strcmp(fb->comm, "[fbcon]"))
> >>> +return -ENOSYS;
> >>
> >> Once more to the v2 of this patch: Tests like those are a pretty big
> >> NO-GO for upstreaming.
> >
> > On closer inspection it is actually sufficient to check if `file` is
> > NULL here (since it means that the request isn't from userspace). So, do
> > you think that would be palatable for upstream?
>
> That's certainly better than doing a string compare, but I'm not sure if
> that's sufficient.
>
> In general drivers shouldn't have any special handling for fdcon.
>
> You should probably have Thomas Zimmermann  take a
> look at this.
>
> Regards,
> Christian.
>
> >
> >>
> >> Regards,
> >> Christian.
> >>
> >>> +
> >>> +return drm_atomic_helper_dirtyfb(fb, file, flags, color, clips,
> >>> + num_clips);
> >>> +}
> >>> +
> >>>   static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
> >>>   .destroy = drm_gem_fb_destroy,
> >>>   .create_handle = drm_gem_fb_create_handle,
> >>>   };
> >>> +static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = {
> >>> +.destroy = drm_gem_fb_destroy,
> >>> +.create_handle = drm_gem_fb_create_handle,
> >>> +.dirty = amdgpu_dirtyfb
> >>> +};
> >>> +
> >>>   uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
> >>> uint64_t bo_flags)
> >>>   {
> >>> @@ -1139,7 +1159,11 @@ static int
> >>> amdgpu_display_gem_fb_verify_and_init(struct drm_device *dev,
> >>>   if (ret)
> >>>   goto err;
> >>> -ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
> >>> +if (drm_drv_uses_atomic_modeset(dev))
> >>> +ret = drm_framebuffer_init(dev, &rfb->base,
> >>> +   &amdgpu_fb_funcs_atomic);
> >>> +else
> >>> +ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
> >>>   if (ret)
> >>>   goto err;
> >>
>


Re: [PATCH v2] drm/amdgpu: register a dirty framebuffer callback for fbcon

2023-08-16 Thread Christian König

Am 16.08.23 um 15:41 schrieb Hamza Mahfooz:


On 8/16/23 01:55, Christian König wrote:



Am 15.08.23 um 19:26 schrieb Hamza Mahfooz:

fbcon requires that we implement &drm_framebuffer_funcs.dirty.
Otherwise, the framebuffer might take a while to flush (which would
manifest as noticeable lag). However, we can't enable this callback for
non-fbcon cases since it might cause too many atomic commits to be made
at once. So, implement amdgpu_dirtyfb() and only enable it for fbcon
framebuffers on devices that support atomic KMS.

Cc: Aurabindo Pillai 
Cc: Mario Limonciello 
Cc: sta...@vger.kernel.org # 6.1+
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2519
Signed-off-by: Hamza Mahfooz 
---
v2: update variable names
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 26 
-

  1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c

index d20dd3f852fc..d3b59f99cb7c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -38,6 +38,8 @@
  #include 
  #include 
  #include 
+#include 
+#include 
  #include 
  #include 
  #include 
@@ -532,11 +534,29 @@ bool amdgpu_display_ddc_probe(struct 
amdgpu_connector *amdgpu_connector,

  return true;
  }
+static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct 
drm_file *file,

+  unsigned int flags, unsigned int color,
+  struct drm_clip_rect *clips, unsigned int num_clips)
+{
+
+    if (strcmp(fb->comm, "[fbcon]"))
+    return -ENOSYS;


Once more to the v2 of this patch: Tests like those are a pretty big 
NO-GO for upstreaming.


On closer inspection it is actually sufficient to check if `file` is
NULL here (since it means that the request isn't from userspace). So, do
you think that would be palatable for upstream?


That's certainly better than doing a string compare, but I'm not sure if 
that's sufficient.


In general drivers shouldn't have any special handling for fdcon.

You should probably have Thomas Zimmermann  take a 
look at this.


Regards,
Christian.





Regards,
Christian.


+
+    return drm_atomic_helper_dirtyfb(fb, file, flags, color, clips,
+ num_clips);
+}
+
  static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
  .destroy = drm_gem_fb_destroy,
  .create_handle = drm_gem_fb_create_handle,
  };
+static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = {
+    .destroy = drm_gem_fb_destroy,
+    .create_handle = drm_gem_fb_create_handle,
+    .dirty = amdgpu_dirtyfb
+};
+
  uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
    uint64_t bo_flags)
  {
@@ -1139,7 +1159,11 @@ static int 
amdgpu_display_gem_fb_verify_and_init(struct drm_device *dev,

  if (ret)
  goto err;
-    ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
+    if (drm_drv_uses_atomic_modeset(dev))
+    ret = drm_framebuffer_init(dev, &rfb->base,
+   &amdgpu_fb_funcs_atomic);
+    else
+    ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
  if (ret)
  goto err;






Re: [PATCH v2] drm/amdgpu: register a dirty framebuffer callback for fbcon

2023-08-16 Thread Hamza Mahfooz



On 8/16/23 01:55, Christian König wrote:



Am 15.08.23 um 19:26 schrieb Hamza Mahfooz:

fbcon requires that we implement &drm_framebuffer_funcs.dirty.
Otherwise, the framebuffer might take a while to flush (which would
manifest as noticeable lag). However, we can't enable this callback for
non-fbcon cases since it might cause too many atomic commits to be made
at once. So, implement amdgpu_dirtyfb() and only enable it for fbcon
framebuffers on devices that support atomic KMS.

Cc: Aurabindo Pillai 
Cc: Mario Limonciello 
Cc: sta...@vger.kernel.org # 6.1+
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2519
Signed-off-by: Hamza Mahfooz 
---
v2: update variable names
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 26 -
  1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c

index d20dd3f852fc..d3b59f99cb7c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -38,6 +38,8 @@
  #include 
  #include 
  #include 
+#include 
+#include 
  #include 
  #include 
  #include 
@@ -532,11 +534,29 @@ bool amdgpu_display_ddc_probe(struct 
amdgpu_connector *amdgpu_connector,

  return true;
  }
+static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct drm_file 
*file,

+  unsigned int flags, unsigned int color,
+  struct drm_clip_rect *clips, unsigned int num_clips)
+{
+
+    if (strcmp(fb->comm, "[fbcon]"))
+    return -ENOSYS;


Once more to the v2 of this patch: Tests like those are a pretty big 
NO-GO for upstreaming.


On closer inspection it is actually sufficient to check if `file` is
NULL here (since it means that the request isn't from userspace). So, do
you think that would be palatable for upstream?



Regards,
Christian.


+
+    return drm_atomic_helper_dirtyfb(fb, file, flags, color, clips,
+ num_clips);
+}
+
  static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
  .destroy = drm_gem_fb_destroy,
  .create_handle = drm_gem_fb_create_handle,
  };
+static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = {
+    .destroy = drm_gem_fb_destroy,
+    .create_handle = drm_gem_fb_create_handle,
+    .dirty = amdgpu_dirtyfb
+};
+
  uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
    uint64_t bo_flags)
  {
@@ -1139,7 +1159,11 @@ static int 
amdgpu_display_gem_fb_verify_and_init(struct drm_device *dev,

  if (ret)
  goto err;
-    ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
+    if (drm_drv_uses_atomic_modeset(dev))
+    ret = drm_framebuffer_init(dev, &rfb->base,
+   &amdgpu_fb_funcs_atomic);
+    else
+    ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
  if (ret)
  goto err;



--
Hamza



Re: [PATCH v2] drm/amdgpu: register a dirty framebuffer callback for fbcon

2023-08-15 Thread Christian König




Am 15.08.23 um 19:26 schrieb Hamza Mahfooz:

fbcon requires that we implement &drm_framebuffer_funcs.dirty.
Otherwise, the framebuffer might take a while to flush (which would
manifest as noticeable lag). However, we can't enable this callback for
non-fbcon cases since it might cause too many atomic commits to be made
at once. So, implement amdgpu_dirtyfb() and only enable it for fbcon
framebuffers on devices that support atomic KMS.

Cc: Aurabindo Pillai 
Cc: Mario Limonciello 
Cc: sta...@vger.kernel.org # 6.1+
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2519
Signed-off-by: Hamza Mahfooz 
---
v2: update variable names
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 26 -
  1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index d20dd3f852fc..d3b59f99cb7c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -38,6 +38,8 @@
  #include 
  #include 
  #include 
+#include 
+#include 
  #include 
  #include 
  #include 
@@ -532,11 +534,29 @@ bool amdgpu_display_ddc_probe(struct amdgpu_connector 
*amdgpu_connector,
return true;
  }
  
+static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct drm_file *file,

+ unsigned int flags, unsigned int color,
+ struct drm_clip_rect *clips, unsigned int num_clips)
+{
+
+   if (strcmp(fb->comm, "[fbcon]"))
+   return -ENOSYS;


Once more to the v2 of this patch: Tests like those are a pretty big 
NO-GO for upstreaming.


Regards,
Christian.


+
+   return drm_atomic_helper_dirtyfb(fb, file, flags, color, clips,
+num_clips);
+}
+
  static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
.destroy = drm_gem_fb_destroy,
.create_handle = drm_gem_fb_create_handle,
  };
  
+static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = {

+   .destroy = drm_gem_fb_destroy,
+   .create_handle = drm_gem_fb_create_handle,
+   .dirty = amdgpu_dirtyfb
+};
+
  uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
  uint64_t bo_flags)
  {
@@ -1139,7 +1159,11 @@ static int amdgpu_display_gem_fb_verify_and_init(struct 
drm_device *dev,
if (ret)
goto err;
  
-	ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);

+   if (drm_drv_uses_atomic_modeset(dev))
+   ret = drm_framebuffer_init(dev, &rfb->base,
+  &amdgpu_fb_funcs_atomic);
+   else
+   ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
  
  	if (ret)

goto err;




Re: [PATCH v2] drm/amdgpu: register a dirty framebuffer callback for fbcon

2023-08-15 Thread Mario Limonciello

On 8/15/2023 12:26, Hamza Mahfooz wrote:

fbcon requires that we implement &drm_framebuffer_funcs.dirty.
Otherwise, the framebuffer might take a while to flush (which would
manifest as noticeable lag). However, we can't enable this callback for
non-fbcon cases since it might cause too many atomic commits to be made
at once. So, implement amdgpu_dirtyfb() and only enable it for fbcon
framebuffers on devices that support atomic KMS.

Cc: Aurabindo Pillai 
Cc: Mario Limonciello 
Cc: sta...@vger.kernel.org # 6.1+


This is safe specifically because other things like FB_DAMAGE_CLIPS have 
come back to 6.1.y as well via f1edb2f58adb ("drm/amd/display: add 
FB_DAMAGE_CLIPS support") and fixups to that.



Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2519
Signed-off-by: Hamza Mahfooz 


Reviewed-by: Mario Limonciello 


---
v2: update variable names
---
  drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 26 -
  1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index d20dd3f852fc..d3b59f99cb7c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -38,6 +38,8 @@
  #include 
  #include 
  #include 
+#include 
+#include 
  #include 
  #include 
  #include 
@@ -532,11 +534,29 @@ bool amdgpu_display_ddc_probe(struct amdgpu_connector 
*amdgpu_connector,
return true;
  }
  
+static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct drm_file *file,

+ unsigned int flags, unsigned int color,
+ struct drm_clip_rect *clips, unsigned int num_clips)
+{
+
+   if (strcmp(fb->comm, "[fbcon]"))
+   return -ENOSYS;
+
+   return drm_atomic_helper_dirtyfb(fb, file, flags, color, clips,
+num_clips);
+}
+
  static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
.destroy = drm_gem_fb_destroy,
.create_handle = drm_gem_fb_create_handle,
  };
  
+static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = {

+   .destroy = drm_gem_fb_destroy,
+   .create_handle = drm_gem_fb_create_handle,
+   .dirty = amdgpu_dirtyfb
+};
+
  uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
  uint64_t bo_flags)
  {
@@ -1139,7 +1159,11 @@ static int amdgpu_display_gem_fb_verify_and_init(struct 
drm_device *dev,
if (ret)
goto err;
  
-	ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);

+   if (drm_drv_uses_atomic_modeset(dev))
+   ret = drm_framebuffer_init(dev, &rfb->base,
+  &amdgpu_fb_funcs_atomic);
+   else
+   ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
  
  	if (ret)

goto err;




[PATCH v2] drm/amdgpu: register a dirty framebuffer callback for fbcon

2023-08-15 Thread Hamza Mahfooz
fbcon requires that we implement &drm_framebuffer_funcs.dirty.
Otherwise, the framebuffer might take a while to flush (which would
manifest as noticeable lag). However, we can't enable this callback for
non-fbcon cases since it might cause too many atomic commits to be made
at once. So, implement amdgpu_dirtyfb() and only enable it for fbcon
framebuffers on devices that support atomic KMS.

Cc: Aurabindo Pillai 
Cc: Mario Limonciello 
Cc: sta...@vger.kernel.org # 6.1+
Link: https://gitlab.freedesktop.org/drm/amd/-/issues/2519
Signed-off-by: Hamza Mahfooz 
---
v2: update variable names
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_display.c | 26 -
 1 file changed, 25 insertions(+), 1 deletion(-)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
index d20dd3f852fc..d3b59f99cb7c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_display.c
@@ -38,6 +38,8 @@
 #include 
 #include 
 #include 
+#include 
+#include 
 #include 
 #include 
 #include 
@@ -532,11 +534,29 @@ bool amdgpu_display_ddc_probe(struct amdgpu_connector 
*amdgpu_connector,
return true;
 }
 
+static int amdgpu_dirtyfb(struct drm_framebuffer *fb, struct drm_file *file,
+ unsigned int flags, unsigned int color,
+ struct drm_clip_rect *clips, unsigned int num_clips)
+{
+
+   if (strcmp(fb->comm, "[fbcon]"))
+   return -ENOSYS;
+
+   return drm_atomic_helper_dirtyfb(fb, file, flags, color, clips,
+num_clips);
+}
+
 static const struct drm_framebuffer_funcs amdgpu_fb_funcs = {
.destroy = drm_gem_fb_destroy,
.create_handle = drm_gem_fb_create_handle,
 };
 
+static const struct drm_framebuffer_funcs amdgpu_fb_funcs_atomic = {
+   .destroy = drm_gem_fb_destroy,
+   .create_handle = drm_gem_fb_create_handle,
+   .dirty = amdgpu_dirtyfb
+};
+
 uint32_t amdgpu_display_supported_domains(struct amdgpu_device *adev,
  uint64_t bo_flags)
 {
@@ -1139,7 +1159,11 @@ static int amdgpu_display_gem_fb_verify_and_init(struct 
drm_device *dev,
if (ret)
goto err;
 
-   ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
+   if (drm_drv_uses_atomic_modeset(dev))
+   ret = drm_framebuffer_init(dev, &rfb->base,
+  &amdgpu_fb_funcs_atomic);
+   else
+   ret = drm_framebuffer_init(dev, &rfb->base, &amdgpu_fb_funcs);
 
if (ret)
goto err;
-- 
2.41.0