[v3,1/3] drm: zte: make zx_plane accessible from zx_vou driver
diff mbox

Message ID 1482979048-32037-2-git-send-email-shawnguo@kernel.org
State New
Headers show

Commit Message

Shawn Guo Dec. 29, 2016, 2:37 a.m. UTC
From: Shawn Guo <shawn.guo@linaro.org>

Move struct zx_plane from zx_plane.c to zx_plane.h, so that it can be
accessed from zx_vou driver, and we can save the use of struct
zx_layer_data completely.  More importantly, those additional data used
by VOU controller to enable/disable graphic and video layers can later
be added and accessed much more easily from zx_vou driver.

While at it, we make two changes to zx_plane_init() interface:

 - Encode struct device pointer in zx_plane, so that we do not need to
   pass it as a parameter.
 - Change return of zx_plane_init() from struct drm_plane pointer to
   error code, since we can get the pointer from zx_plane in zx_vou
   driver now.

Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
---
 drivers/gpu/drm/zte/zx_plane.c | 36 +++++++-----------------------------
 drivers/gpu/drm/zte/zx_plane.h | 11 +++++++----
 drivers/gpu/drm/zte/zx_vou.c   | 31 +++++++++++++++++++------------
 3 files changed, 33 insertions(+), 45 deletions(-)

Comments

Sean Paul Jan. 5, 2017, 7:26 a.m. UTC | #1
On Wed, Dec 28, 2016 at 9:37 PM, Shawn Guo <shawnguo@kernel.org> wrote:
> From: Shawn Guo <shawn.guo@linaro.org>
>
> Move struct zx_plane from zx_plane.c to zx_plane.h, so that it can be
> accessed from zx_vou driver, and we can save the use of struct
> zx_layer_data completely.  More importantly, those additional data used
> by VOU controller to enable/disable graphic and video layers can later
> be added and accessed much more easily from zx_vou driver.
>
> While at it, we make two changes to zx_plane_init() interface:
>
>  - Encode struct device pointer in zx_plane, so that we do not need to
>    pass it as a parameter.
>  - Change return of zx_plane_init() from struct drm_plane pointer to
>    error code, since we can get the pointer from zx_plane in zx_vou
>    driver now.
>

Reviewed-by: Sean Paul <seanpaul@chromium.org>

> Signed-off-by: Shawn Guo <shawn.guo@linaro.org>
> ---
>  drivers/gpu/drm/zte/zx_plane.c | 36 +++++++-----------------------------
>  drivers/gpu/drm/zte/zx_plane.h | 11 +++++++----
>  drivers/gpu/drm/zte/zx_vou.c   | 31 +++++++++++++++++++------------
>  3 files changed, 33 insertions(+), 45 deletions(-)
>
> diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
> index 546eb92a94e8..78d29b1db91c 100644
> --- a/drivers/gpu/drm/zte/zx_plane.c
> +++ b/drivers/gpu/drm/zte/zx_plane.c
> @@ -21,16 +21,6 @@
>  #include "zx_plane_regs.h"
>  #include "zx_vou.h"
>
> -struct zx_plane {
> -       struct drm_plane plane;
> -       void __iomem *layer;
> -       void __iomem *csc;
> -       void __iomem *hbsc;
> -       void __iomem *rsz;
> -};
> -
> -#define to_zx_plane(plane)     container_of(plane, struct zx_plane, plane)
> -
>  static const uint32_t gl_formats[] = {
>         DRM_FORMAT_ARGB8888,
>         DRM_FORMAT_XRGB8888,
> @@ -248,28 +238,16 @@ static void zx_plane_hbsc_init(struct zx_plane *zplane)
>         zx_writel(hbsc + HBSC_THRESHOLD_COL3, (0x3c0 << 16) | 0x40);
>  }
>
> -struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev,
> -                               struct zx_layer_data *data,
> -                               enum drm_plane_type type)
> +int zx_plane_init(struct drm_device *drm, struct zx_plane *zplane,
> +                 enum drm_plane_type type)
>  {
>         const struct drm_plane_helper_funcs *helper;
> -       struct zx_plane *zplane;
> -       struct drm_plane *plane;
> +       struct drm_plane *plane = &zplane->plane;
> +       struct device *dev = zplane->dev;
>         const uint32_t *formats;
>         unsigned int format_count;
>         int ret;
>
> -       zplane = devm_kzalloc(dev, sizeof(*zplane), GFP_KERNEL);
> -       if (!zplane)
> -               return ERR_PTR(-ENOMEM);
> -
> -       plane = &zplane->plane;
> -
> -       zplane->layer = data->layer;
> -       zplane->hbsc = data->hbsc;
> -       zplane->csc = data->csc;
> -       zplane->rsz = data->rsz;
> -
>         zx_plane_hbsc_init(zplane);
>
>         switch (type) {
> @@ -282,7 +260,7 @@ struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev,
>                 /* TODO: add video layer (vl) support */
>                 break;
>         default:
> -               return ERR_PTR(-ENODEV);
> +               return -ENODEV;
>         }
>
>         ret = drm_universal_plane_init(drm, plane, VOU_CRTC_MASK,
> @@ -290,10 +268,10 @@ struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev,
>                                        type, NULL);
>         if (ret) {
>                 DRM_DEV_ERROR(dev, "failed to init universal plane: %d\n", ret);
> -               return ERR_PTR(ret);
> +               return ret;
>         }
>
>         drm_plane_helper_add(plane, helper);
>
> -       return plane;
> +       return 0;
>  }
> diff --git a/drivers/gpu/drm/zte/zx_plane.h b/drivers/gpu/drm/zte/zx_plane.h
> index 2b82cd558d9d..264a92e0b532 100644
> --- a/drivers/gpu/drm/zte/zx_plane.h
> +++ b/drivers/gpu/drm/zte/zx_plane.h
> @@ -11,16 +11,19 @@
>  #ifndef __ZX_PLANE_H__
>  #define __ZX_PLANE_H__
>
> -struct zx_layer_data {
> +struct zx_plane {
> +       struct drm_plane plane;
> +       struct device *dev;
>         void __iomem *layer;
>         void __iomem *csc;
>         void __iomem *hbsc;
>         void __iomem *rsz;
>  };
>
> -struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev,
> -                               struct zx_layer_data *data,
> -                               enum drm_plane_type type);
> +#define to_zx_plane(plane) container_of(plane, struct zx_plane, plane)
> +
> +int zx_plane_init(struct drm_device *drm, struct zx_plane *zplane,
> +                 enum drm_plane_type type);
>  void zx_plane_set_update(struct drm_plane *plane);
>
>  #endif /* __ZX_PLANE_H__ */
> diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
> index 73fe15c17c32..d5c801f6f97b 100644
> --- a/drivers/gpu/drm/zte/zx_vou.c
> +++ b/drivers/gpu/drm/zte/zx_vou.c
> @@ -294,7 +294,7 @@ static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou,
>                         enum vou_chn_type chn_type)
>  {
>         struct device *dev = vou->dev;
> -       struct zx_layer_data data;
> +       struct zx_plane *zplane;
>         struct zx_crtc *zcrtc;
>         int ret;
>
> @@ -305,19 +305,25 @@ static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou,
>         zcrtc->vou = vou;
>         zcrtc->chn_type = chn_type;
>
> +       zplane = devm_kzalloc(dev, sizeof(*zplane), GFP_KERNEL);
> +       if (!zplane)
> +               return -ENOMEM;
> +
> +       zplane->dev = dev;
> +
>         if (chn_type == VOU_CHN_MAIN) {
> -               data.layer = vou->osd + MAIN_GL_OFFSET;
> -               data.csc = vou->osd + MAIN_CSC_OFFSET;
> -               data.hbsc = vou->osd + MAIN_HBSC_OFFSET;
> -               data.rsz = vou->otfppu + MAIN_RSZ_OFFSET;
> +               zplane->layer = vou->osd + MAIN_GL_OFFSET;
> +               zplane->csc = vou->osd + MAIN_CSC_OFFSET;
> +               zplane->hbsc = vou->osd + MAIN_HBSC_OFFSET;
> +               zplane->rsz = vou->otfppu + MAIN_RSZ_OFFSET;
>                 zcrtc->chnreg = vou->osd + OSD_MAIN_CHN;
>                 zcrtc->regs = &main_crtc_regs;
>                 zcrtc->bits = &main_crtc_bits;
>         } else {
> -               data.layer = vou->osd + AUX_GL_OFFSET;
> -               data.csc = vou->osd + AUX_CSC_OFFSET;
> -               data.hbsc = vou->osd + AUX_HBSC_OFFSET;
> -               data.rsz = vou->otfppu + AUX_RSZ_OFFSET;
> +               zplane->layer = vou->osd + AUX_GL_OFFSET;
> +               zplane->csc = vou->osd + AUX_CSC_OFFSET;
> +               zplane->hbsc = vou->osd + AUX_HBSC_OFFSET;
> +               zplane->rsz = vou->otfppu + AUX_RSZ_OFFSET;
>                 zcrtc->chnreg = vou->osd + OSD_AUX_CHN;
>                 zcrtc->regs = &aux_crtc_regs;
>                 zcrtc->bits = &aux_crtc_bits;
> @@ -331,13 +337,14 @@ static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou,
>                 return ret;
>         }
>
> -       zcrtc->primary = zx_plane_init(drm, dev, &data, DRM_PLANE_TYPE_PRIMARY);
> -       if (IS_ERR(zcrtc->primary)) {
> -               ret = PTR_ERR(zcrtc->primary);
> +       ret = zx_plane_init(drm, zplane, DRM_PLANE_TYPE_PRIMARY);
> +       if (ret) {
>                 DRM_DEV_ERROR(dev, "failed to init primary plane: %d\n", ret);
>                 return ret;
>         }
>
> +       zcrtc->primary = &zplane->plane;
> +
>         ret = drm_crtc_init_with_planes(drm, &zcrtc->crtc, zcrtc->primary, NULL,
>                                         &zx_crtc_funcs, NULL);
>         if (ret) {
> --
> 1.9.1
>

Patch
diff mbox

diff --git a/drivers/gpu/drm/zte/zx_plane.c b/drivers/gpu/drm/zte/zx_plane.c
index 546eb92a94e8..78d29b1db91c 100644
--- a/drivers/gpu/drm/zte/zx_plane.c
+++ b/drivers/gpu/drm/zte/zx_plane.c
@@ -21,16 +21,6 @@ 
 #include "zx_plane_regs.h"
 #include "zx_vou.h"
 
-struct zx_plane {
-	struct drm_plane plane;
-	void __iomem *layer;
-	void __iomem *csc;
-	void __iomem *hbsc;
-	void __iomem *rsz;
-};
-
-#define to_zx_plane(plane)	container_of(plane, struct zx_plane, plane)
-
 static const uint32_t gl_formats[] = {
 	DRM_FORMAT_ARGB8888,
 	DRM_FORMAT_XRGB8888,
@@ -248,28 +238,16 @@  static void zx_plane_hbsc_init(struct zx_plane *zplane)
 	zx_writel(hbsc + HBSC_THRESHOLD_COL3, (0x3c0 << 16) | 0x40);
 }
 
-struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev,
-				struct zx_layer_data *data,
-				enum drm_plane_type type)
+int zx_plane_init(struct drm_device *drm, struct zx_plane *zplane,
+		  enum drm_plane_type type)
 {
 	const struct drm_plane_helper_funcs *helper;
-	struct zx_plane *zplane;
-	struct drm_plane *plane;
+	struct drm_plane *plane = &zplane->plane;
+	struct device *dev = zplane->dev;
 	const uint32_t *formats;
 	unsigned int format_count;
 	int ret;
 
-	zplane = devm_kzalloc(dev, sizeof(*zplane), GFP_KERNEL);
-	if (!zplane)
-		return ERR_PTR(-ENOMEM);
-
-	plane = &zplane->plane;
-
-	zplane->layer = data->layer;
-	zplane->hbsc = data->hbsc;
-	zplane->csc = data->csc;
-	zplane->rsz = data->rsz;
-
 	zx_plane_hbsc_init(zplane);
 
 	switch (type) {
@@ -282,7 +260,7 @@  struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev,
 		/* TODO: add video layer (vl) support */
 		break;
 	default:
-		return ERR_PTR(-ENODEV);
+		return -ENODEV;
 	}
 
 	ret = drm_universal_plane_init(drm, plane, VOU_CRTC_MASK,
@@ -290,10 +268,10 @@  struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev,
 				       type, NULL);
 	if (ret) {
 		DRM_DEV_ERROR(dev, "failed to init universal plane: %d\n", ret);
-		return ERR_PTR(ret);
+		return ret;
 	}
 
 	drm_plane_helper_add(plane, helper);
 
-	return plane;
+	return 0;
 }
diff --git a/drivers/gpu/drm/zte/zx_plane.h b/drivers/gpu/drm/zte/zx_plane.h
index 2b82cd558d9d..264a92e0b532 100644
--- a/drivers/gpu/drm/zte/zx_plane.h
+++ b/drivers/gpu/drm/zte/zx_plane.h
@@ -11,16 +11,19 @@ 
 #ifndef __ZX_PLANE_H__
 #define __ZX_PLANE_H__
 
-struct zx_layer_data {
+struct zx_plane {
+	struct drm_plane plane;
+	struct device *dev;
 	void __iomem *layer;
 	void __iomem *csc;
 	void __iomem *hbsc;
 	void __iomem *rsz;
 };
 
-struct drm_plane *zx_plane_init(struct drm_device *drm, struct device *dev,
-				struct zx_layer_data *data,
-				enum drm_plane_type type);
+#define to_zx_plane(plane) container_of(plane, struct zx_plane, plane)
+
+int zx_plane_init(struct drm_device *drm, struct zx_plane *zplane,
+		  enum drm_plane_type type);
 void zx_plane_set_update(struct drm_plane *plane);
 
 #endif /* __ZX_PLANE_H__ */
diff --git a/drivers/gpu/drm/zte/zx_vou.c b/drivers/gpu/drm/zte/zx_vou.c
index 73fe15c17c32..d5c801f6f97b 100644
--- a/drivers/gpu/drm/zte/zx_vou.c
+++ b/drivers/gpu/drm/zte/zx_vou.c
@@ -294,7 +294,7 @@  static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou,
 			enum vou_chn_type chn_type)
 {
 	struct device *dev = vou->dev;
-	struct zx_layer_data data;
+	struct zx_plane *zplane;
 	struct zx_crtc *zcrtc;
 	int ret;
 
@@ -305,19 +305,25 @@  static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou,
 	zcrtc->vou = vou;
 	zcrtc->chn_type = chn_type;
 
+	zplane = devm_kzalloc(dev, sizeof(*zplane), GFP_KERNEL);
+	if (!zplane)
+		return -ENOMEM;
+
+	zplane->dev = dev;
+
 	if (chn_type == VOU_CHN_MAIN) {
-		data.layer = vou->osd + MAIN_GL_OFFSET;
-		data.csc = vou->osd + MAIN_CSC_OFFSET;
-		data.hbsc = vou->osd + MAIN_HBSC_OFFSET;
-		data.rsz = vou->otfppu + MAIN_RSZ_OFFSET;
+		zplane->layer = vou->osd + MAIN_GL_OFFSET;
+		zplane->csc = vou->osd + MAIN_CSC_OFFSET;
+		zplane->hbsc = vou->osd + MAIN_HBSC_OFFSET;
+		zplane->rsz = vou->otfppu + MAIN_RSZ_OFFSET;
 		zcrtc->chnreg = vou->osd + OSD_MAIN_CHN;
 		zcrtc->regs = &main_crtc_regs;
 		zcrtc->bits = &main_crtc_bits;
 	} else {
-		data.layer = vou->osd + AUX_GL_OFFSET;
-		data.csc = vou->osd + AUX_CSC_OFFSET;
-		data.hbsc = vou->osd + AUX_HBSC_OFFSET;
-		data.rsz = vou->otfppu + AUX_RSZ_OFFSET;
+		zplane->layer = vou->osd + AUX_GL_OFFSET;
+		zplane->csc = vou->osd + AUX_CSC_OFFSET;
+		zplane->hbsc = vou->osd + AUX_HBSC_OFFSET;
+		zplane->rsz = vou->otfppu + AUX_RSZ_OFFSET;
 		zcrtc->chnreg = vou->osd + OSD_AUX_CHN;
 		zcrtc->regs = &aux_crtc_regs;
 		zcrtc->bits = &aux_crtc_bits;
@@ -331,13 +337,14 @@  static int zx_crtc_init(struct drm_device *drm, struct zx_vou_hw *vou,
 		return ret;
 	}
 
-	zcrtc->primary = zx_plane_init(drm, dev, &data, DRM_PLANE_TYPE_PRIMARY);
-	if (IS_ERR(zcrtc->primary)) {
-		ret = PTR_ERR(zcrtc->primary);
+	ret = zx_plane_init(drm, zplane, DRM_PLANE_TYPE_PRIMARY);
+	if (ret) {
 		DRM_DEV_ERROR(dev, "failed to init primary plane: %d\n", ret);
 		return ret;
 	}
 
+	zcrtc->primary = &zplane->plane;
+
 	ret = drm_crtc_init_with_planes(drm, &zcrtc->crtc, zcrtc->primary, NULL,
 					&zx_crtc_funcs, NULL);
 	if (ret) {