Re: [PATCH 3/3] drm/vkms: Add documentation

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Hi Louis,

I'd make this patch more incremental. First, send me a patch based on
drm-misc-next with the new documentation for the things that already
exists. Then, when you add a new field, you add the documentation with
it.

On 8/14/24 05:47, Louis Chauvet wrote:
Add documentation around vkms_output and its initialization.

Signed-off-by: Louis Chauvet <louis.chauvet@xxxxxxxxxxx>
---
  drivers/gpu/drm/vkms/vkms_drv.h    | 81 ++++++++++++++++++++++++++++++++------
  drivers/gpu/drm/vkms/vkms_output.c | 12 +++++-
  2 files changed, 80 insertions(+), 13 deletions(-)

diff --git a/drivers/gpu/drm/vkms/vkms_drv.h b/drivers/gpu/drm/vkms/vkms_drv.h
index 3028678e4f9b..8f6c9e67e671 100644
--- a/drivers/gpu/drm/vkms/vkms_drv.h
+++ b/drivers/gpu/drm/vkms/vkms_drv.h
@@ -147,29 +147,51 @@ struct vkms_color_lut {
  };
/**
- * vkms_crtc_state - Driver specific CRTC state
+ * struct vkms_crtc_state - Driver specific CRTC state
+ *
   * @base: base CRTC state
   * @composer_work: work struct to compose and add CRC entries
- * @n_frame_start: start frame number for computed CRC
- * @n_frame_end: end frame number for computed CRC
+ *
+ * @num_active_planes: Number of active planes
+ * @active_planes: List containing all the active planes (counted by
+ *  @num_active_planes). They should be stored in z-order.
+ * @active_writeback: Current active writeback job
+ * @gamma_lut: Look up table for gamma used in this CRTC > + * @crc_pending: Protected by @vkms_output.composer_lock.
+ * @wb_pending: Protected by @vkms_output.composer_lock.
+ * @frame_start: Protected by @vkms_output.composer_lock.
+ * @frame_end: Protected by @vkms_output.composer_lock.

Apart from being protected by @vkms_output.composer_lock, what those
variables represent?

   */
  struct vkms_crtc_state {
  	struct drm_crtc_state base;
  	struct work_struct composer_work;
int num_active_planes;
-	/* stack of active planes for crc computation, should be in z order */
  	struct vkms_plane_state **active_planes;
  	struct vkms_writeback_job *active_writeback;
  	struct vkms_color_lut gamma_lut;
- /* below four are protected by vkms_output.composer_lock */
  	bool crc_pending;
  	bool wb_pending;
  	u64 frame_start;
  	u64 frame_end;
  };
+/**
+ * struct vkms_output - Internal representation of all output components in vkms
+ *
+ * @crtc: Base crtc in drm

s/crtc/CRTC and s/drm/DRM

+ * @encoder: DRM encoder used for this output
+ * @connector: DRM connector used for this output
+ * @wb_connecter: DRM writeback connector used for this output
+ * @vblank_hrtimer:
+ * @period_ns:

Empty?

+ * @composer_workq: Ordered workqueue for composer_work

Add reference to composer_work

+ * @lock: Lock used to project concurrent acces to the composer

s/acces/access

+ * @composer_enabled: Protected by @lock.
+ * @composer_state:

Empty?

+ * @composer_lock: Lock used internally to protect @composer_state members
+ */
  struct vkms_output {
  	struct drm_crtc crtc;
  	struct drm_encoder encoder;
@@ -177,28 +199,38 @@ struct vkms_output {
  	struct drm_writeback_connector wb_connector;
  	struct hrtimer vblank_hrtimer;
  	ktime_t period_ns;
-	/* ordered wq for composer_work */
  	struct workqueue_struct *composer_workq;
-	/* protects concurrent access to composer */
  	spinlock_t lock;
- /* protected by @lock */
  	bool composer_enabled;
  	struct vkms_crtc_state *composer_state;
spinlock_t composer_lock;
  };
-struct vkms_device;
-
+/**
+ * struct vkms_config - General configuration for VKMS driver
+ *
+ * @writeback: If true, a writeback buffer can be attached to the CRTC
+ * @cursor: If true, a cursor plane is created in the VKMS device
+ * @overlay: If true, NUM_OVERLAY_PLANES will be created for the VKMS device
+ * @dev: Used to store the current vkms device. Only set when the device is instancied.

s/instancied/instantiated

+ */
  struct vkms_config {
  	bool writeback;
  	bool cursor;
  	bool overlay;
-	/* only set when instantiated */
  	struct vkms_device *dev;
  };
+/**
+ * struct vkms_device - Description of a vkms device
+ *
+ * @drm - Base device in drm

s/drm/DRM

+ * @platform - Associated platform device
+ * @output - Configuration and sub-components of the vkms device
+ * @config: Configuration used in this vkms device
+ */
  struct vkms_device {
  	struct drm_device drm;
  	struct platform_device *platform;
@@ -206,6 +238,10 @@ struct vkms_device {
  	const struct vkms_config *config;
  };
+/*
+ * The following helpers are used to convert a member of a struct into its parent.
+ */
+
  #define drm_crtc_to_vkms_output(target) \
  	container_of(target, struct vkms_output, crtc)
@@ -218,12 +254,33 @@ struct vkms_device {
  #define to_vkms_plane_state(target)\
  	container_of(target, struct vkms_plane_state, base.base)
-/* CRTC */
+/**
+ * vkms_crtc_init() - Initialize a crtc for vkms
+ * @dev: drm_device associated with the vkms buffer

DRM device

+ * @crtc: uninitialized crtc device
+ * @primary: primary plane to attach to the crtc
+ * @cursor plane to attach to the crtc

s/crtc/CRTC everywhere

+ */

New line

  int vkms_crtc_init(struct drm_device *dev, struct drm_crtc *crtc,
  		   struct drm_plane *primary, struct drm_plane *cursor);
+/**
+ * vkms_output_init() - Initialize all sub-components needed for a vkms device.
+ *
+ * @vkmsdev: vkms device to initialize
+ * @possible_crtc_index: Crtc which can be attached to the planes. The caller must ensure that
+ * possible_crtc_index is positive and less or equals to 31.
+ */

Delete line

  int vkms_output_init(struct vkms_device *vkmsdev, int possible_crtc_index);
+/**
+ * vkms_plane_init() - Initialize a plane
+ *
+ * @vkmsdev: vkms device containing the plane
+ * @type: type of plane to initialize
+ * @possible_crtc_index: Crtc which can be attached to the plane. The caller must ensure that

s/crtc/CRTC everywhere

+ * possible_crtc_index is positive and less or equals to 31.
+ */
  struct vkms_plane *vkms_plane_init(struct vkms_device *vkmsdev,
  				   enum drm_plane_type type, int possible_crtc_index);
diff --git a/drivers/gpu/drm/vkms/vkms_output.c b/drivers/gpu/drm/vkms/vkms_output.c
index d42ca7d10389..36db2c8923cb 100644
--- a/drivers/gpu/drm/vkms/vkms_output.c
+++ b/drivers/gpu/drm/vkms/vkms_output.c
@@ -21,6 +21,7 @@ static int vkms_conn_get_modes(struct drm_connector *connector)
  {
  	int count;
+ /* Use the default modes list from drm */

s/drm/DRM

  	count = drm_add_modes_noedid(connector, XRES_MAX, YRES_MAX);
  	drm_set_preferred_mode(connector, XRES_DEF, YRES_DEF);
@@ -58,8 +59,13 @@ int vkms_output_init(struct vkms_device *vkmsdev, int possible_crtc_index)
  	int writeback;
  	unsigned int n;
+ /*
+	 * Initialize used plane. One primary plane is required to perform the composition.
+	 *
+	 * The overlay and cursor planes are not mandatory, but can be used to perform complex
+	 * composition.
+	 */
  	primary = vkms_plane_init(vkmsdev, DRM_PLANE_TYPE_PRIMARY, possible_crtc_index);
-
  	if (IS_ERR(primary))
  		return PTR_ERR(primary);
@@ -96,6 +102,10 @@ int vkms_output_init(struct vkms_device *vkmsdev, int possible_crtc_index)
  		DRM_ERROR("Failed to init encoder\n");
  		goto err_encoder;
  	}
+	/*
+	 * This is an hardcoded value to select crtc for the encoder.
+	 * 1 here designate the first registered CRTC, the one allocated in [1]

Where is [1]?

Best Regards,
- Maíra

+	 */
  	encoder->possible_crtcs = 1;
ret = drm_connector_attach_encoder(connector, encoder);




[Index of Archives]     [Linux DRI Users]     [Linux Intel Graphics]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [XFree86]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [XFree86]
  Powered by Linux