Re: [PATCH v2 12/17] drm/vc4: crtc: Introduce a lower-level crtc init helper

2022-11-28 Thread Maíra Canal
On 11/28/22 11:53, Maxime Ripard wrote:
> The current vc4_crtc_init() helper assumes that we will be using
> hardware planes and calls vc4_plane_init().
> 
> While it's a reasonable assumption, we'll want to mock the plane and
> thus provide our own. Let's create a helper that will take the plane as
> an argument.
> 
> Reviewed-by: Javier Martinez Canillas 
> Signed-off-by: Maxime Ripard 

Although the commit message explains a bit about why __vc4_crtc_init is
being created, it would be nice to add a comment in the code explaining
that __vc4_crtc_init can be used for tests as it allows mocking the
plane. This way the distinction between vc4_crtc_init and
__vc4_crtc_init will be cleaner to the reader.

Reviewed-by: Maíra Canal 

Best Regards,
- Maíra Canal

> ---
>  drivers/gpu/drm/vc4/vc4_crtc.c | 52 
> +++---
>  drivers/gpu/drm/vc4/vc4_drv.h  |  6 +
>  2 files changed, 39 insertions(+), 19 deletions(-)
> 
> diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
> index 333529ed3a0d..7a2c54efecb0 100644
> --- a/drivers/gpu/drm/vc4/vc4_crtc.c
> +++ b/drivers/gpu/drm/vc4/vc4_crtc.c
> @@ -1286,31 +1286,20 @@ static void vc4_set_crtc_possible_masks(struct 
> drm_device *drm,
>   }
>  }
>  
> -int vc4_crtc_init(struct drm_device *drm, struct platform_device *pdev,
> -   struct vc4_crtc *vc4_crtc,
> -   const struct vc4_crtc_data *data,
> -   const struct drm_crtc_funcs *crtc_funcs,
> -   const struct drm_crtc_helper_funcs *crtc_helper_funcs,
> -   bool feeds_txp)
> +int __vc4_crtc_init(struct drm_device *drm,
> + struct platform_device *pdev,
> + struct vc4_crtc *vc4_crtc,
> + const struct vc4_crtc_data *data,
> + struct drm_plane *primary_plane,
> + const struct drm_crtc_funcs *crtc_funcs,
> + const struct drm_crtc_helper_funcs *crtc_helper_funcs,
> + bool feeds_txp)
>  {
>   struct vc4_dev *vc4 = to_vc4_dev(drm);
>   struct drm_crtc *crtc = _crtc->base;
> - struct drm_plane *primary_plane;
>   unsigned int i;
>   int ret;
>  
> - /* For now, we create just the primary and the legacy cursor
> -  * planes.  We should be able to stack more planes on easily,
> -  * but to do that we would need to compute the bandwidth
> -  * requirement of the plane configuration, and reject ones
> -  * that will take too much.
> -  */
> - primary_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_PRIMARY, 0);
> - if (IS_ERR(primary_plane)) {
> - dev_err(drm->dev, "failed to construct primary plane\n");
> - return PTR_ERR(primary_plane);
> - }
> -
>   vc4_crtc->data = data;
>   vc4_crtc->pdev = pdev;
>   vc4_crtc->feeds_txp = feeds_txp;
> @@ -1342,6 +1331,31 @@ int vc4_crtc_init(struct drm_device *drm, struct 
> platform_device *pdev,
>   return 0;
>  }
>  
> +int vc4_crtc_init(struct drm_device *drm, struct platform_device *pdev,
> +   struct vc4_crtc *vc4_crtc,
> +   const struct vc4_crtc_data *data,
> +   const struct drm_crtc_funcs *crtc_funcs,
> +   const struct drm_crtc_helper_funcs *crtc_helper_funcs,
> +   bool feeds_txp)
> +{
> + struct drm_plane *primary_plane;
> +
> + /* For now, we create just the primary and the legacy cursor
> +  * planes.  We should be able to stack more planes on easily,
> +  * but to do that we would need to compute the bandwidth
> +  * requirement of the plane configuration, and reject ones
> +  * that will take too much.
> +  */
> + primary_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_PRIMARY, 0);
> + if (IS_ERR(primary_plane)) {
> + dev_err(drm->dev, "failed to construct primary plane\n");
> + return PTR_ERR(primary_plane);
> + }
> +
> + return __vc4_crtc_init(drm, pdev, vc4_crtc, data, primary_plane,
> +crtc_funcs, crtc_helper_funcs, feeds_txp);
> +}
> +
>  static int vc4_crtc_bind(struct device *dev, struct device *master, void 
> *data)
>  {
>   struct platform_device *pdev = to_platform_device(dev);
> diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
> index 051c2e3b6d43..cd2002fff115 100644
> --- a/drivers/gpu/drm/vc4/vc4_drv.h
> +++ b/drivers/gpu/drm/vc4/vc4_drv.h
> @@ -888,6 +888,12 @@ int vc4_bo_debugfs_init(struct drm_minor *minor);
>  /* vc4_crtc.c */
>  extern struct platform_driver vc4_crtc_driver;
>  int vc4_crtc_disable_at_boot(struct drm_crtc *crtc);
> +int __vc4_crtc_init(struct drm_device *drm, struct platform_device *pdev,
> + struct vc4_crtc *vc4_crtc, const struct vc4_crtc_data *data,
> + struct drm_plane *primary_plane,
> + const struct drm_crtc_funcs *crtc_funcs,
> + const struct drm_crtc_helper_funcs 

[PATCH v2 12/17] drm/vc4: crtc: Introduce a lower-level crtc init helper

2022-11-28 Thread Maxime Ripard
The current vc4_crtc_init() helper assumes that we will be using
hardware planes and calls vc4_plane_init().

While it's a reasonable assumption, we'll want to mock the plane and
thus provide our own. Let's create a helper that will take the plane as
an argument.

Reviewed-by: Javier Martinez Canillas 
Signed-off-by: Maxime Ripard 
---
 drivers/gpu/drm/vc4/vc4_crtc.c | 52 +++---
 drivers/gpu/drm/vc4/vc4_drv.h  |  6 +
 2 files changed, 39 insertions(+), 19 deletions(-)

diff --git a/drivers/gpu/drm/vc4/vc4_crtc.c b/drivers/gpu/drm/vc4/vc4_crtc.c
index 333529ed3a0d..7a2c54efecb0 100644
--- a/drivers/gpu/drm/vc4/vc4_crtc.c
+++ b/drivers/gpu/drm/vc4/vc4_crtc.c
@@ -1286,31 +1286,20 @@ static void vc4_set_crtc_possible_masks(struct 
drm_device *drm,
}
 }
 
-int vc4_crtc_init(struct drm_device *drm, struct platform_device *pdev,
- struct vc4_crtc *vc4_crtc,
- const struct vc4_crtc_data *data,
- const struct drm_crtc_funcs *crtc_funcs,
- const struct drm_crtc_helper_funcs *crtc_helper_funcs,
- bool feeds_txp)
+int __vc4_crtc_init(struct drm_device *drm,
+   struct platform_device *pdev,
+   struct vc4_crtc *vc4_crtc,
+   const struct vc4_crtc_data *data,
+   struct drm_plane *primary_plane,
+   const struct drm_crtc_funcs *crtc_funcs,
+   const struct drm_crtc_helper_funcs *crtc_helper_funcs,
+   bool feeds_txp)
 {
struct vc4_dev *vc4 = to_vc4_dev(drm);
struct drm_crtc *crtc = _crtc->base;
-   struct drm_plane *primary_plane;
unsigned int i;
int ret;
 
-   /* For now, we create just the primary and the legacy cursor
-* planes.  We should be able to stack more planes on easily,
-* but to do that we would need to compute the bandwidth
-* requirement of the plane configuration, and reject ones
-* that will take too much.
-*/
-   primary_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_PRIMARY, 0);
-   if (IS_ERR(primary_plane)) {
-   dev_err(drm->dev, "failed to construct primary plane\n");
-   return PTR_ERR(primary_plane);
-   }
-
vc4_crtc->data = data;
vc4_crtc->pdev = pdev;
vc4_crtc->feeds_txp = feeds_txp;
@@ -1342,6 +1331,31 @@ int vc4_crtc_init(struct drm_device *drm, struct 
platform_device *pdev,
return 0;
 }
 
+int vc4_crtc_init(struct drm_device *drm, struct platform_device *pdev,
+ struct vc4_crtc *vc4_crtc,
+ const struct vc4_crtc_data *data,
+ const struct drm_crtc_funcs *crtc_funcs,
+ const struct drm_crtc_helper_funcs *crtc_helper_funcs,
+ bool feeds_txp)
+{
+   struct drm_plane *primary_plane;
+
+   /* For now, we create just the primary and the legacy cursor
+* planes.  We should be able to stack more planes on easily,
+* but to do that we would need to compute the bandwidth
+* requirement of the plane configuration, and reject ones
+* that will take too much.
+*/
+   primary_plane = vc4_plane_init(drm, DRM_PLANE_TYPE_PRIMARY, 0);
+   if (IS_ERR(primary_plane)) {
+   dev_err(drm->dev, "failed to construct primary plane\n");
+   return PTR_ERR(primary_plane);
+   }
+
+   return __vc4_crtc_init(drm, pdev, vc4_crtc, data, primary_plane,
+  crtc_funcs, crtc_helper_funcs, feeds_txp);
+}
+
 static int vc4_crtc_bind(struct device *dev, struct device *master, void *data)
 {
struct platform_device *pdev = to_platform_device(dev);
diff --git a/drivers/gpu/drm/vc4/vc4_drv.h b/drivers/gpu/drm/vc4/vc4_drv.h
index 051c2e3b6d43..cd2002fff115 100644
--- a/drivers/gpu/drm/vc4/vc4_drv.h
+++ b/drivers/gpu/drm/vc4/vc4_drv.h
@@ -888,6 +888,12 @@ int vc4_bo_debugfs_init(struct drm_minor *minor);
 /* vc4_crtc.c */
 extern struct platform_driver vc4_crtc_driver;
 int vc4_crtc_disable_at_boot(struct drm_crtc *crtc);
+int __vc4_crtc_init(struct drm_device *drm, struct platform_device *pdev,
+   struct vc4_crtc *vc4_crtc, const struct vc4_crtc_data *data,
+   struct drm_plane *primary_plane,
+   const struct drm_crtc_funcs *crtc_funcs,
+   const struct drm_crtc_helper_funcs *crtc_helper_funcs,
+   bool feeds_txp);
 int vc4_crtc_init(struct drm_device *drm, struct platform_device *pdev,
  struct vc4_crtc *vc4_crtc, const struct vc4_crtc_data *data,
  const struct drm_crtc_funcs *crtc_funcs,

-- 
2.38.1-b4-0.11.0-dev-d416f