Hi everyone, This RFC implements support to configure VKMS using configfs. It allows to: - Create multiple devices - Configure multiple overlay planes, CRTCs, encoders and connectors - Enable or disable cursor plane and writeback connector for each CRTC - Hot-plug/unplug connectors after device creation - Disable the creation of the default VKMS instance to be able to use only the configfs ones This work is based on a previous attempt to implement configfs support by Jim Shargo and Brandon Pollack [1]. I tried to keep the changes as minimal and simple as possible and addressed Sima's comments on [1]. Currently, there is another RFC by Louis Chauvet [2]. As I mentioned on his RFC, I'm not trying to push my implementation. Instead, I think that having 2 implementations will make code review way easier and I don't mind which implementation is used as long as we get the feature implemented :) I'm looking forward to analyzing Louis's implementation, seeing what the differences are and finding a common solution. What's missing? - DebugFS only works for the default VKMS instance. If we want to support it on instances created with configfs I'll need to implement it. Known bugs: - When a CRTC is added and removed before device creation, there is a vblank warning. The issue is caused because vblanks are referenced using the CRTC index but, because one of the CRTCs is removed, the indices are not consecutives and drm_crtc_vblank_crtc() tries to access and invalid index I'm not sure if CRTC's indices *must* start at 0 and be consecutives or if this is a bug in the drm_crtc_vblank_crtc() implementation. Best wishes, José Expósito [1] https://patchwork.kernel.org/project/dri-devel/list/?series=780110&archive=both [2] https://lore.kernel.org/dri-devel/ZrZZFQW5RiG12ApN@louis-chauvet-laptop/T/#u José Expósito (17): drm/vkms: Extract vkms_config header drm/vkms: Move default_config creation to its own function drm/vkms: Set device name from vkms_config drm/vkms: Allow to configure multiple CRTCs drm/vkms: Use managed memory to create encoders drm/vkms: Allow to configure multiple encoders drm/vkms: Use managed memory to create connectors drm/vkms: Allow to configure multiple connectors drm/vkms: Allow to configure multiple overlay planes drm/vkms: Allow to change connector status drm/vkms: Add and remove VKMS instances via configfs drm/vkms: Allow to configure multiple CRTCs via configfs drm/vkms: Allow to configure multiple encoders via configfs drm/vkms: Allow to configure multiple encoders drm/vkms: Allow to configure multiple planes via configfs drm/vkms: Allow to configure the default device creation drm/vkms: Remove completed task from the TODO list Documentation/gpu/vkms.rst | 102 +++- drivers/gpu/drm/vkms/Kconfig | 1 + drivers/gpu/drm/vkms/Makefile | 4 +- drivers/gpu/drm/vkms/vkms_composer.c | 30 +- drivers/gpu/drm/vkms/vkms_config.c | 265 ++++++++++ drivers/gpu/drm/vkms/vkms_config.h | 101 ++++ drivers/gpu/drm/vkms/vkms_configfs.c | 721 ++++++++++++++++++++++++++ drivers/gpu/drm/vkms/vkms_configfs.h | 9 + drivers/gpu/drm/vkms/vkms_crtc.c | 99 ++-- drivers/gpu/drm/vkms/vkms_drv.c | 75 ++- drivers/gpu/drm/vkms/vkms_drv.h | 52 +- drivers/gpu/drm/vkms/vkms_output.c | 187 ++++--- drivers/gpu/drm/vkms/vkms_plane.c | 6 +- drivers/gpu/drm/vkms/vkms_writeback.c | 27 +- 14 files changed, 1464 insertions(+), 215 deletions(-) create mode 100644 drivers/gpu/drm/vkms/vkms_config.c create mode 100644 drivers/gpu/drm/vkms/vkms_config.h create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.c create mode 100644 drivers/gpu/drm/vkms/vkms_configfs.h -- 2.46.0