mbox series

[00/12] drm/{i915,xe}: Convert to DRM client setup

Message ID 20241212170913.185939-1-tzimmermann@suse.de (mailing list archive)
Headers show
Series drm/{i915,xe}: Convert to DRM client setup | expand

Message

Thomas Zimmermann Dec. 12, 2024, 5:08 p.m. UTC
i915 and xe are the last remaining drivers that still implement their
own fbdev client. All other clients have been mass converted to DRM's
client setup in in the series at [1]. As Intel drivers require more
effort than others, their changes have been moved into this separate
series.

With DRM's client setup, DRM picks the in-kernel client from the
kernel's config and parameters. Besides fbdev there's also drm_log
available. For fbdev support, the driver only has to implement struct
drm_driver.fbdev_probe, a callback that allocates a compatible
framebuffer.

At first, some details of the Intel implementation have to be rebuild
for the generic client and fbdev handling. Patches 1 to 6 do that.
Hotplugging and suspend/resume are then hidden behind callbacks. Some
Intel-specifics in the restore and suspend code get their own hooks.

Patches 7 to 9 prepare Intel's fbdev implementation ot get things
out of the way.

Patch 10 converts i915 and xe to DRM's client setup. Patches 11 and
12 clean up the remaining code.

Tested with i915 and xe hardware.

[1] https://patchwork.freedesktop.org/series/137391/

Thomas Zimmermann (12):
  drm/{i915,xe}: Suspend/resume fbdev emulation via client interfaces
  drm/client: Add client-hotplug helper
  drm/client: Send pending hotplug events after resume
  drm/i915/display: Remove fbdev suspend and hotplug tracking
  drm/i915/display: fbdev: Move custom restore code to new callback
  drm/i915/display: fbdev: Move custom suspend code to new callback
  drm/i915/display: Remove preferred_bpp from struct intel_fbdev
  drm/i915/display: Remove struct drm_fb_helper from struct intel_fbdev
  drm/i915/display: Move fbdev code around
  drm/{i915,xe}: Run DRM default client setup
  drm/i915/display: Remove compile guard around fbdev debugfs output
  drm/fb-helper: Remove struct drm_fb_helper.fb_probe

 drivers/gpu/drm/drm_client_event.c            |  41 ++-
 drivers/gpu/drm/drm_fb_helper.c               |  20 +-
 .../gpu/drm/i915/display/intel_display_core.h |   1 -
 .../drm/i915/display/intel_display_debugfs.c  |   2 -
 drivers/gpu/drm/i915/display/intel_fbdev.c    | 338 ++++--------------
 drivers/gpu/drm/i915/display/intel_fbdev.h    |  17 +-
 drivers/gpu/drm/i915/i915_driver.c            |  10 +-
 drivers/gpu/drm/xe/display/xe_display.c       |  12 +-
 include/drm/drm_client.h                      |   8 +
 include/drm/drm_fb_helper.h                   |  44 ++-
 10 files changed, 176 insertions(+), 317 deletions(-)


base-commit: 7bbcd7df9387f0d9004f997df33f7a9472d9c080

Comments

Thomas Zimmermann Jan. 7, 2025, 9:07 a.m. UTC | #1
ping


Am 12.12.24 um 18:08 schrieb Thomas Zimmermann:
> i915 and xe are the last remaining drivers that still implement their
> own fbdev client. All other clients have been mass converted to DRM's
> client setup in in the series at [1]. As Intel drivers require more
> effort than others, their changes have been moved into this separate
> series.
>
> With DRM's client setup, DRM picks the in-kernel client from the
> kernel's config and parameters. Besides fbdev there's also drm_log
> available. For fbdev support, the driver only has to implement struct
> drm_driver.fbdev_probe, a callback that allocates a compatible
> framebuffer.
>
> At first, some details of the Intel implementation have to be rebuild
> for the generic client and fbdev handling. Patches 1 to 6 do that.
> Hotplugging and suspend/resume are then hidden behind callbacks. Some
> Intel-specifics in the restore and suspend code get their own hooks.
>
> Patches 7 to 9 prepare Intel's fbdev implementation ot get things
> out of the way.
>
> Patch 10 converts i915 and xe to DRM's client setup. Patches 11 and
> 12 clean up the remaining code.
>
> Tested with i915 and xe hardware.
>
> [1] https://patchwork.freedesktop.org/series/137391/
>
> Thomas Zimmermann (12):
>    drm/{i915,xe}: Suspend/resume fbdev emulation via client interfaces
>    drm/client: Add client-hotplug helper
>    drm/client: Send pending hotplug events after resume
>    drm/i915/display: Remove fbdev suspend and hotplug tracking
>    drm/i915/display: fbdev: Move custom restore code to new callback
>    drm/i915/display: fbdev: Move custom suspend code to new callback
>    drm/i915/display: Remove preferred_bpp from struct intel_fbdev
>    drm/i915/display: Remove struct drm_fb_helper from struct intel_fbdev
>    drm/i915/display: Move fbdev code around
>    drm/{i915,xe}: Run DRM default client setup
>    drm/i915/display: Remove compile guard around fbdev debugfs output
>    drm/fb-helper: Remove struct drm_fb_helper.fb_probe
>
>   drivers/gpu/drm/drm_client_event.c            |  41 ++-
>   drivers/gpu/drm/drm_fb_helper.c               |  20 +-
>   .../gpu/drm/i915/display/intel_display_core.h |   1 -
>   .../drm/i915/display/intel_display_debugfs.c  |   2 -
>   drivers/gpu/drm/i915/display/intel_fbdev.c    | 338 ++++--------------
>   drivers/gpu/drm/i915/display/intel_fbdev.h    |  17 +-
>   drivers/gpu/drm/i915/i915_driver.c            |  10 +-
>   drivers/gpu/drm/xe/display/xe_display.c       |  12 +-
>   include/drm/drm_client.h                      |   8 +
>   include/drm/drm_fb_helper.h                   |  44 ++-
>   10 files changed, 176 insertions(+), 317 deletions(-)
>
>
> base-commit: 7bbcd7df9387f0d9004f997df33f7a9472d9c080
Thomas Zimmermann Feb. 11, 2025, 7:17 a.m. UTC | #2
ping for a review

Am 12.12.24 um 18:08 schrieb Thomas Zimmermann:
> i915 and xe are the last remaining drivers that still implement their
> own fbdev client. All other clients have been mass converted to DRM's
> client setup in in the series at [1]. As Intel drivers require more
> effort than others, their changes have been moved into this separate
> series.
>
> With DRM's client setup, DRM picks the in-kernel client from the
> kernel's config and parameters. Besides fbdev there's also drm_log
> available. For fbdev support, the driver only has to implement struct
> drm_driver.fbdev_probe, a callback that allocates a compatible
> framebuffer.
>
> At first, some details of the Intel implementation have to be rebuild
> for the generic client and fbdev handling. Patches 1 to 6 do that.
> Hotplugging and suspend/resume are then hidden behind callbacks. Some
> Intel-specifics in the restore and suspend code get their own hooks.
>
> Patches 7 to 9 prepare Intel's fbdev implementation ot get things
> out of the way.
>
> Patch 10 converts i915 and xe to DRM's client setup. Patches 11 and
> 12 clean up the remaining code.
>
> Tested with i915 and xe hardware.
>
> [1] https://patchwork.freedesktop.org/series/137391/
>
> Thomas Zimmermann (12):
>    drm/{i915,xe}: Suspend/resume fbdev emulation via client interfaces
>    drm/client: Add client-hotplug helper
>    drm/client: Send pending hotplug events after resume
>    drm/i915/display: Remove fbdev suspend and hotplug tracking
>    drm/i915/display: fbdev: Move custom restore code to new callback
>    drm/i915/display: fbdev: Move custom suspend code to new callback
>    drm/i915/display: Remove preferred_bpp from struct intel_fbdev
>    drm/i915/display: Remove struct drm_fb_helper from struct intel_fbdev
>    drm/i915/display: Move fbdev code around
>    drm/{i915,xe}: Run DRM default client setup
>    drm/i915/display: Remove compile guard around fbdev debugfs output
>    drm/fb-helper: Remove struct drm_fb_helper.fb_probe
>
>   drivers/gpu/drm/drm_client_event.c            |  41 ++-
>   drivers/gpu/drm/drm_fb_helper.c               |  20 +-
>   .../gpu/drm/i915/display/intel_display_core.h |   1 -
>   .../drm/i915/display/intel_display_debugfs.c  |   2 -
>   drivers/gpu/drm/i915/display/intel_fbdev.c    | 338 ++++--------------
>   drivers/gpu/drm/i915/display/intel_fbdev.h    |  17 +-
>   drivers/gpu/drm/i915/i915_driver.c            |  10 +-
>   drivers/gpu/drm/xe/display/xe_display.c       |  12 +-
>   include/drm/drm_client.h                      |   8 +
>   include/drm/drm_fb_helper.h                   |  44 ++-
>   10 files changed, 176 insertions(+), 317 deletions(-)
>
>
> base-commit: 7bbcd7df9387f0d9004f997df33f7a9472d9c080
Maarten Lankhorst Feb. 12, 2025, 7:28 a.m. UTC | #3
Hey,

I'll give it a spin on xe today. It seems someone already tried on i915,
so I expect no issues.

The only question I have is do we still inherit the BIOS fb on boot
for fbdev?

The really active bit seems to be replacing the fbdev stuff with
drm_client_setup_with_color_mode

Patches themselves look good.

Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>

On 2025-02-11 08:17, Thomas Zimmermann wrote:
> ping for a review
> 
> Am 12.12.24 um 18:08 schrieb Thomas Zimmermann:
>> i915 and xe are the last remaining drivers that still implement their
>> own fbdev client. All other clients have been mass converted to DRM's
>> client setup in in the series at [1]. As Intel drivers require more
>> effort than others, their changes have been moved into this separate
>> series.
>>
>> With DRM's client setup, DRM picks the in-kernel client from the
>> kernel's config and parameters. Besides fbdev there's also drm_log
>> available. For fbdev support, the driver only has to implement struct
>> drm_driver.fbdev_probe, a callback that allocates a compatible
>> framebuffer.
>>
>> At first, some details of the Intel implementation have to be rebuild
>> for the generic client and fbdev handling. Patches 1 to 6 do that.
>> Hotplugging and suspend/resume are then hidden behind callbacks. Some
>> Intel-specifics in the restore and suspend code get their own hooks.
>>
>> Patches 7 to 9 prepare Intel's fbdev implementation ot get things
>> out of the way.
>>
>> Patch 10 converts i915 and xe to DRM's client setup. Patches 11 and
>> 12 clean up the remaining code.
>>
>> Tested with i915 and xe hardware.
>>
>> [1] https://patchwork.freedesktop.org/series/137391/
>>
>> Thomas Zimmermann (12):
>>    drm/{i915,xe}: Suspend/resume fbdev emulation via client interfaces
>>    drm/client: Add client-hotplug helper
>>    drm/client: Send pending hotplug events after resume
>>    drm/i915/display: Remove fbdev suspend and hotplug tracking
>>    drm/i915/display: fbdev: Move custom restore code to new callback
>>    drm/i915/display: fbdev: Move custom suspend code to new callback
>>    drm/i915/display: Remove preferred_bpp from struct intel_fbdev
>>    drm/i915/display: Remove struct drm_fb_helper from struct intel_fbdev
>>    drm/i915/display: Move fbdev code around
>>    drm/{i915,xe}: Run DRM default client setup
>>    drm/i915/display: Remove compile guard around fbdev debugfs output
>>    drm/fb-helper: Remove struct drm_fb_helper.fb_probe
>>
>>   drivers/gpu/drm/drm_client_event.c            |  41 ++-
>>   drivers/gpu/drm/drm_fb_helper.c               |  20 +-
>>   .../gpu/drm/i915/display/intel_display_core.h |   1 -
>>   .../drm/i915/display/intel_display_debugfs.c  |   2 -
>>   drivers/gpu/drm/i915/display/intel_fbdev.c    | 338 ++++--------------
>>   drivers/gpu/drm/i915/display/intel_fbdev.h    |  17 +-
>>   drivers/gpu/drm/i915/i915_driver.c            |  10 +-
>>   drivers/gpu/drm/xe/display/xe_display.c       |  12 +-
>>   include/drm/drm_client.h                      |   8 +
>>   include/drm/drm_fb_helper.h                   |  44 ++-
>>   10 files changed, 176 insertions(+), 317 deletions(-)
>>
>>
>> base-commit: 7bbcd7df9387f0d9004f997df33f7a9472d9c080
>
Thomas Zimmermann Feb. 12, 2025, 7:42 a.m. UTC | #4
Hi

Am 12.02.25 um 08:28 schrieb Maarten Lankhorst:
> Hey,
>
> I'll give it a spin on xe today. It seems someone already tried on i915,
> so I expect no issues.

Thanks for testing.

>
> The only question I have is do we still inherit the BIOS fb on boot
> for fbdev?

I tried to not break that code. It still uses the active framebuffer and 
picks its color format for the framebuffer console.

>
> The really active bit seems to be replacing the fbdev stuff with
> drm_client_setup_with_color_mode

The old preferred_bpp and the color mode are the same values. The 
intention here is to not change anything. I guess I should have renamed 
the preferred_bpp variable.


>
> Patches themselves look good.
>
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>

Thanks a lot.

Best regards
Thomas

>
> On 2025-02-11 08:17, Thomas Zimmermann wrote:
>> ping for a review
>>
>> Am 12.12.24 um 18:08 schrieb Thomas Zimmermann:
>>> i915 and xe are the last remaining drivers that still implement their
>>> own fbdev client. All other clients have been mass converted to DRM's
>>> client setup in in the series at [1]. As Intel drivers require more
>>> effort than others, their changes have been moved into this separate
>>> series.
>>>
>>> With DRM's client setup, DRM picks the in-kernel client from the
>>> kernel's config and parameters. Besides fbdev there's also drm_log
>>> available. For fbdev support, the driver only has to implement struct
>>> drm_driver.fbdev_probe, a callback that allocates a compatible
>>> framebuffer.
>>>
>>> At first, some details of the Intel implementation have to be rebuild
>>> for the generic client and fbdev handling. Patches 1 to 6 do that.
>>> Hotplugging and suspend/resume are then hidden behind callbacks. Some
>>> Intel-specifics in the restore and suspend code get their own hooks.
>>>
>>> Patches 7 to 9 prepare Intel's fbdev implementation ot get things
>>> out of the way.
>>>
>>> Patch 10 converts i915 and xe to DRM's client setup. Patches 11 and
>>> 12 clean up the remaining code.
>>>
>>> Tested with i915 and xe hardware.
>>>
>>> [1] https://patchwork.freedesktop.org/series/137391/
>>>
>>> Thomas Zimmermann (12):
>>>    drm/{i915,xe}: Suspend/resume fbdev emulation via client interfaces
>>>    drm/client: Add client-hotplug helper
>>>    drm/client: Send pending hotplug events after resume
>>>    drm/i915/display: Remove fbdev suspend and hotplug tracking
>>>    drm/i915/display: fbdev: Move custom restore code to new callback
>>>    drm/i915/display: fbdev: Move custom suspend code to new callback
>>>    drm/i915/display: Remove preferred_bpp from struct intel_fbdev
>>>    drm/i915/display: Remove struct drm_fb_helper from struct 
>>> intel_fbdev
>>>    drm/i915/display: Move fbdev code around
>>>    drm/{i915,xe}: Run DRM default client setup
>>>    drm/i915/display: Remove compile guard around fbdev debugfs output
>>>    drm/fb-helper: Remove struct drm_fb_helper.fb_probe
>>>
>>>   drivers/gpu/drm/drm_client_event.c            |  41 ++-
>>>   drivers/gpu/drm/drm_fb_helper.c               |  20 +-
>>>   .../gpu/drm/i915/display/intel_display_core.h |   1 -
>>>   .../drm/i915/display/intel_display_debugfs.c  |   2 -
>>>   drivers/gpu/drm/i915/display/intel_fbdev.c    | 338 
>>> ++++--------------
>>>   drivers/gpu/drm/i915/display/intel_fbdev.h    |  17 +-
>>>   drivers/gpu/drm/i915/i915_driver.c            |  10 +-
>>>   drivers/gpu/drm/xe/display/xe_display.c       |  12 +-
>>>   include/drm/drm_client.h                      |   8 +
>>>   include/drm/drm_fb_helper.h                   |  44 ++-
>>>   10 files changed, 176 insertions(+), 317 deletions(-)
>>>
>>>
>>> base-commit: 7bbcd7df9387f0d9004f997df33f7a9472d9c080
>>
>
Thomas Zimmermann Feb. 28, 2025, 8:49 a.m. UTC | #5
Hi Maarten

Am 12.02.25 um 08:28 schrieb Maarten Lankhorst:
> Hey,
>
> I'll give it a spin on xe today. It seems someone already tried on i915,
> so I expect no issues.

Did you get to test the series?

Best regards
Thomas

>
> The only question I have is do we still inherit the BIOS fb on boot
> for fbdev?
>
> The really active bit seems to be replacing the fbdev stuff with
> drm_client_setup_with_color_mode
>
> Patches themselves look good.
>
> Reviewed-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
>
> On 2025-02-11 08:17, Thomas Zimmermann wrote:
>> ping for a review
>>
>> Am 12.12.24 um 18:08 schrieb Thomas Zimmermann:
>>> i915 and xe are the last remaining drivers that still implement their
>>> own fbdev client. All other clients have been mass converted to DRM's
>>> client setup in in the series at [1]. As Intel drivers require more
>>> effort than others, their changes have been moved into this separate
>>> series.
>>>
>>> With DRM's client setup, DRM picks the in-kernel client from the
>>> kernel's config and parameters. Besides fbdev there's also drm_log
>>> available. For fbdev support, the driver only has to implement struct
>>> drm_driver.fbdev_probe, a callback that allocates a compatible
>>> framebuffer.
>>>
>>> At first, some details of the Intel implementation have to be rebuild
>>> for the generic client and fbdev handling. Patches 1 to 6 do that.
>>> Hotplugging and suspend/resume are then hidden behind callbacks. Some
>>> Intel-specifics in the restore and suspend code get their own hooks.
>>>
>>> Patches 7 to 9 prepare Intel's fbdev implementation ot get things
>>> out of the way.
>>>
>>> Patch 10 converts i915 and xe to DRM's client setup. Patches 11 and
>>> 12 clean up the remaining code.
>>>
>>> Tested with i915 and xe hardware.
>>>
>>> [1] https://patchwork.freedesktop.org/series/137391/
>>>
>>> Thomas Zimmermann (12):
>>>    drm/{i915,xe}: Suspend/resume fbdev emulation via client interfaces
>>>    drm/client: Add client-hotplug helper
>>>    drm/client: Send pending hotplug events after resume
>>>    drm/i915/display: Remove fbdev suspend and hotplug tracking
>>>    drm/i915/display: fbdev: Move custom restore code to new callback
>>>    drm/i915/display: fbdev: Move custom suspend code to new callback
>>>    drm/i915/display: Remove preferred_bpp from struct intel_fbdev
>>>    drm/i915/display: Remove struct drm_fb_helper from struct 
>>> intel_fbdev
>>>    drm/i915/display: Move fbdev code around
>>>    drm/{i915,xe}: Run DRM default client setup
>>>    drm/i915/display: Remove compile guard around fbdev debugfs output
>>>    drm/fb-helper: Remove struct drm_fb_helper.fb_probe
>>>
>>>   drivers/gpu/drm/drm_client_event.c            |  41 ++-
>>>   drivers/gpu/drm/drm_fb_helper.c               |  20 +-
>>>   .../gpu/drm/i915/display/intel_display_core.h |   1 -
>>>   .../drm/i915/display/intel_display_debugfs.c  |   2 -
>>>   drivers/gpu/drm/i915/display/intel_fbdev.c    | 338 
>>> ++++--------------
>>>   drivers/gpu/drm/i915/display/intel_fbdev.h    |  17 +-
>>>   drivers/gpu/drm/i915/i915_driver.c            |  10 +-
>>>   drivers/gpu/drm/xe/display/xe_display.c       |  12 +-
>>>   include/drm/drm_client.h                      |   8 +
>>>   include/drm/drm_fb_helper.h                   |  44 ++-
>>>   10 files changed, 176 insertions(+), 317 deletions(-)
>>>
>>>
>>> base-commit: 7bbcd7df9387f0d9004f997df33f7a9472d9c080
>>
>