Re: [PATCH] drm/kms/mode: added a new helper for calculating videomode from crtc's display mode

2018-05-03 Thread Liviu Dudau
On Thu, May 03, 2018 at 11:28:37AM +0530, Satendra Singh Thakur wrote:
> 1.
> -Added a new helper drm_display_mode_crtc_to_videomode
> -This helper calculates mode parameters like
>   horizontal front_porch, back_porch, sync length
>   vertical front_porch, back_porch, sync length
>   using crtc_* fields of struct drm_display_mode
> -It uses following fields of crtc mode
>  horizontal sync start/end, active and total length
>  vertical sync start/end, active and total length
> 2.
> -Most of the driver use user-supplied mode for calculating videomode
> -However, few drivers use HW (crtc) mode for calculating videomode
> -This helper will be useful for such drivers
> 3.
> -Currently following drivers will be using this new helper
> -arm hdlcd
> -atmel hlcdc
> -exynos 5433 decon
> -exynos7 decon
> -exynos fimd
> 4.
> -This patch removes related duplicate code from above mentioned drivers
> 
> Signed-off-by: Satendra Singh Thakur 
> Cc: Madhur Verma 
> Cc: Hemanshu Srivastava 
> ---
>  drivers/gpu/drm/arm/hdlcd_crtc.c   |  8 +---
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c |  7 +--
>  drivers/gpu/drm/drm_modes.c| 20 
>  drivers/gpu/drm/exynos/exynos5433_drm_decon.c  | 22 ++
>  drivers/gpu/drm/exynos/exynos7_drm_decon.c | 23 ++-
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c   | 22 +-
>  include/drm/drm_modes.h|  2 ++
>  7 files changed, 53 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c 
> b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index cf5cbd6..d20e471 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -130,13 +130,7 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc 
> *crtc)
>   struct videomode vm;
>   unsigned int polarities, err;
>  
> - vm.vfront_porch = m->crtc_vsync_start - m->crtc_vdisplay;
> - vm.vback_porch = m->crtc_vtotal - m->crtc_vsync_end;
> - vm.vsync_len = m->crtc_vsync_end - m->crtc_vsync_start;
> - vm.hfront_porch = m->crtc_hsync_start - m->crtc_hdisplay;
> - vm.hback_porch = m->crtc_htotal - m->crtc_hsync_end;
> - vm.hsync_len = m->crtc_hsync_end - m->crtc_hsync_start;
> -
> + drm_display_mode_crtc_to_videomode(m, );
>   polarities = HDLCD_POLARITY_DATAEN | HDLCD_POLARITY_DATA;
>  
>   if (m->flags & DRM_MODE_FLAG_PHSYNC)

For the HDLCD part:

Acked-by: Liviu Dudau 

If you're not sending the final version through drm-misc then let me
know and I can pick up the HDLCD part separately.

Best regards,
Liviu

> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c 
> b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> index d732810..bafcef6 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> @@ -81,12 +81,7 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc 
> *c)
>   unsigned int cfg;
>   int div;
>  
> - vm.vfront_porch = adj->crtc_vsync_start - adj->crtc_vdisplay;
> - vm.vback_porch = adj->crtc_vtotal - adj->crtc_vsync_end;
> - vm.vsync_len = adj->crtc_vsync_end - adj->crtc_vsync_start;
> - vm.hfront_porch = adj->crtc_hsync_start - adj->crtc_hdisplay;
> - vm.hback_porch = adj->crtc_htotal - adj->crtc_hsync_end;
> - vm.hsync_len = adj->crtc_hsync_end - adj->crtc_hsync_start;
> + drm_display_mode_crtc_to_videomode(adj, );
>  
>   regmap_write(regmap, ATMEL_HLCDC_CFG(1),
>(vm.hsync_len - 1) | ((vm.vsync_len - 1) << 16));
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index e82b61e..a406749 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -654,6 +654,26 @@ void drm_display_mode_to_videomode(const struct 
> drm_display_mode *dmode,
>   vm->flags |= DISPLAY_FLAGS_DOUBLECLK;
>  }
>  EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
> +/**
> + * drm_display_mode_crtc_to_videomode - fill in @vm using crtc fields 
> of@dmode,
> + * @dmode: drm_display_mode structure to use as source
> + * @vm: videomode structure to use as destination
> + *
> + * Fills out @vm using the crtc display mode specified in @dmode.
> + */
> +void drm_display_mode_crtc_to_videomode(const struct drm_display_mode *dmode,
> +struct videomode *vm)
> +{
> + vm->hfront_porch = dmode->crtc_hsync_start - dmode->crtc_hdisplay;
> + vm->hsync_len = dmode->crtc_hsync_end - dmode->crtc_hsync_start;
> + vm->hback_porch = dmode->crtc_htotal - dmode->crtc_hsync_end;
> +
> + vm->vfront_porch = dmode->crtc_vsync_start - dmode->crtc_vdisplay;
> + vm->vsync_len = dmode->crtc_vsync_end - dmode->crtc_vsync_start;
> + vm->vback_porch = dmode->crtc_vtotal - dmode->crtc_vsync_end;
> +
> +}
> 

Re: [PATCH] drm/kms/mode: added a new helper for calculating videomode from crtc's display mode

2018-05-03 Thread Liviu Dudau
On Thu, May 03, 2018 at 11:28:37AM +0530, Satendra Singh Thakur wrote:
> 1.
> -Added a new helper drm_display_mode_crtc_to_videomode
> -This helper calculates mode parameters like
>   horizontal front_porch, back_porch, sync length
>   vertical front_porch, back_porch, sync length
>   using crtc_* fields of struct drm_display_mode
> -It uses following fields of crtc mode
>  horizontal sync start/end, active and total length
>  vertical sync start/end, active and total length
> 2.
> -Most of the driver use user-supplied mode for calculating videomode
> -However, few drivers use HW (crtc) mode for calculating videomode
> -This helper will be useful for such drivers
> 3.
> -Currently following drivers will be using this new helper
> -arm hdlcd
> -atmel hlcdc
> -exynos 5433 decon
> -exynos7 decon
> -exynos fimd
> 4.
> -This patch removes related duplicate code from above mentioned drivers
> 
> Signed-off-by: Satendra Singh Thakur 
> Cc: Madhur Verma 
> Cc: Hemanshu Srivastava 
> ---
>  drivers/gpu/drm/arm/hdlcd_crtc.c   |  8 +---
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c |  7 +--
>  drivers/gpu/drm/drm_modes.c| 20 
>  drivers/gpu/drm/exynos/exynos5433_drm_decon.c  | 22 ++
>  drivers/gpu/drm/exynos/exynos7_drm_decon.c | 23 ++-
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c   | 22 +-
>  include/drm/drm_modes.h|  2 ++
>  7 files changed, 53 insertions(+), 51 deletions(-)
> 
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c 
> b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index cf5cbd6..d20e471 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -130,13 +130,7 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc 
> *crtc)
>   struct videomode vm;
>   unsigned int polarities, err;
>  
> - vm.vfront_porch = m->crtc_vsync_start - m->crtc_vdisplay;
> - vm.vback_porch = m->crtc_vtotal - m->crtc_vsync_end;
> - vm.vsync_len = m->crtc_vsync_end - m->crtc_vsync_start;
> - vm.hfront_porch = m->crtc_hsync_start - m->crtc_hdisplay;
> - vm.hback_porch = m->crtc_htotal - m->crtc_hsync_end;
> - vm.hsync_len = m->crtc_hsync_end - m->crtc_hsync_start;
> -
> + drm_display_mode_crtc_to_videomode(m, );
>   polarities = HDLCD_POLARITY_DATAEN | HDLCD_POLARITY_DATA;
>  
>   if (m->flags & DRM_MODE_FLAG_PHSYNC)

For the HDLCD part:

Acked-by: Liviu Dudau 

If you're not sending the final version through drm-misc then let me
know and I can pick up the HDLCD part separately.

Best regards,
Liviu

> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c 
> b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> index d732810..bafcef6 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> @@ -81,12 +81,7 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc 
> *c)
>   unsigned int cfg;
>   int div;
>  
> - vm.vfront_porch = adj->crtc_vsync_start - adj->crtc_vdisplay;
> - vm.vback_porch = adj->crtc_vtotal - adj->crtc_vsync_end;
> - vm.vsync_len = adj->crtc_vsync_end - adj->crtc_vsync_start;
> - vm.hfront_porch = adj->crtc_hsync_start - adj->crtc_hdisplay;
> - vm.hback_porch = adj->crtc_htotal - adj->crtc_hsync_end;
> - vm.hsync_len = adj->crtc_hsync_end - adj->crtc_hsync_start;
> + drm_display_mode_crtc_to_videomode(adj, );
>  
>   regmap_write(regmap, ATMEL_HLCDC_CFG(1),
>(vm.hsync_len - 1) | ((vm.vsync_len - 1) << 16));
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index e82b61e..a406749 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -654,6 +654,26 @@ void drm_display_mode_to_videomode(const struct 
> drm_display_mode *dmode,
>   vm->flags |= DISPLAY_FLAGS_DOUBLECLK;
>  }
>  EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
> +/**
> + * drm_display_mode_crtc_to_videomode - fill in @vm using crtc fields 
> of@dmode,
> + * @dmode: drm_display_mode structure to use as source
> + * @vm: videomode structure to use as destination
> + *
> + * Fills out @vm using the crtc display mode specified in @dmode.
> + */
> +void drm_display_mode_crtc_to_videomode(const struct drm_display_mode *dmode,
> +struct videomode *vm)
> +{
> + vm->hfront_porch = dmode->crtc_hsync_start - dmode->crtc_hdisplay;
> + vm->hsync_len = dmode->crtc_hsync_end - dmode->crtc_hsync_start;
> + vm->hback_porch = dmode->crtc_htotal - dmode->crtc_hsync_end;
> +
> + vm->vfront_porch = dmode->crtc_vsync_start - dmode->crtc_vdisplay;
> + vm->vsync_len = dmode->crtc_vsync_end - dmode->crtc_vsync_start;
> + vm->vback_porch = dmode->crtc_vtotal - dmode->crtc_vsync_end;
> +
> +}
> +EXPORT_SYMBOL_GPL(drm_display_mode_crtc_to_videomode);
>  
>  /**
>   * drm_bus_flags_from_videomode - extract 

Re: [PATCH] drm/kms/mode: added a new helper for calculating videomode from crtc's display mode

2018-05-03 Thread Jani Nikula
On Thu, 03 May 2018, Satendra Singh Thakur  wrote:
> 1.
> -Added a new helper drm_display_mode_crtc_to_videomode
> -This helper calculates mode parameters like
>   horizontal front_porch, back_porch, sync length
>   vertical front_porch, back_porch, sync length
>   using crtc_* fields of struct drm_display_mode
> -It uses following fields of crtc mode
>  horizontal sync start/end, active and total length
>  vertical sync start/end, active and total length
> 2.
> -Most of the driver use user-supplied mode for calculating videomode
> -However, few drivers use HW (crtc) mode for calculating videomode
> -This helper will be useful for such drivers
> 3.
> -Currently following drivers will be using this new helper
> -arm hdlcd
> -atmel hlcdc
> -exynos 5433 decon
> -exynos7 decon
> -exynos fimd
> 4.
> -This patch removes related duplicate code from above mentioned drivers
>
> Signed-off-by: Satendra Singh Thakur 
> Cc: Madhur Verma 
> Cc: Hemanshu Srivastava 
> ---
>  drivers/gpu/drm/arm/hdlcd_crtc.c   |  8 +---
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c |  7 +--
>  drivers/gpu/drm/drm_modes.c| 20 
>  drivers/gpu/drm/exynos/exynos5433_drm_decon.c  | 22 ++
>  drivers/gpu/drm/exynos/exynos7_drm_decon.c | 23 ++-
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c   | 22 +-
>  include/drm/drm_modes.h|  2 ++
>  7 files changed, 53 insertions(+), 51 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c 
> b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index cf5cbd6..d20e471 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -130,13 +130,7 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc 
> *crtc)
>   struct videomode vm;
>   unsigned int polarities, err;
>  
> - vm.vfront_porch = m->crtc_vsync_start - m->crtc_vdisplay;
> - vm.vback_porch = m->crtc_vtotal - m->crtc_vsync_end;
> - vm.vsync_len = m->crtc_vsync_end - m->crtc_vsync_start;
> - vm.hfront_porch = m->crtc_hsync_start - m->crtc_hdisplay;
> - vm.hback_porch = m->crtc_htotal - m->crtc_hsync_end;
> - vm.hsync_len = m->crtc_hsync_end - m->crtc_hsync_start;
> -
> + drm_display_mode_crtc_to_videomode(m, );
>   polarities = HDLCD_POLARITY_DATAEN | HDLCD_POLARITY_DATA;
>  
>   if (m->flags & DRM_MODE_FLAG_PHSYNC)
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c 
> b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> index d732810..bafcef6 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> @@ -81,12 +81,7 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc 
> *c)
>   unsigned int cfg;
>   int div;
>  
> - vm.vfront_porch = adj->crtc_vsync_start - adj->crtc_vdisplay;
> - vm.vback_porch = adj->crtc_vtotal - adj->crtc_vsync_end;
> - vm.vsync_len = adj->crtc_vsync_end - adj->crtc_vsync_start;
> - vm.hfront_porch = adj->crtc_hsync_start - adj->crtc_hdisplay;
> - vm.hback_porch = adj->crtc_htotal - adj->crtc_hsync_end;
> - vm.hsync_len = adj->crtc_hsync_end - adj->crtc_hsync_start;
> + drm_display_mode_crtc_to_videomode(adj, );
>  
>   regmap_write(regmap, ATMEL_HLCDC_CFG(1),
>(vm.hsync_len - 1) | ((vm.vsync_len - 1) << 16));
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index e82b61e..a406749 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -654,6 +654,26 @@ void drm_display_mode_to_videomode(const struct 
> drm_display_mode *dmode,
>   vm->flags |= DISPLAY_FLAGS_DOUBLECLK;
>  }
>  EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
> +/**
> + * drm_display_mode_crtc_to_videomode - fill in @vm using crtc fields 
> of@dmode,

"of@dmode" needs a space, superfluous comma at the end.

> + * @dmode: drm_display_mode structure to use as source
> + * @vm: videomode structure to use as destination
> + *
> + * Fills out @vm using the crtc display mode specified in @dmode.
> + */
> +void drm_display_mode_crtc_to_videomode(const struct drm_display_mode *dmode,
> +struct videomode *vm)
> +{
> + vm->hfront_porch = dmode->crtc_hsync_start - dmode->crtc_hdisplay;
> + vm->hsync_len = dmode->crtc_hsync_end - dmode->crtc_hsync_start;
> + vm->hback_porch = dmode->crtc_htotal - dmode->crtc_hsync_end;
> +
> + vm->vfront_porch = dmode->crtc_vsync_start - dmode->crtc_vdisplay;
> + vm->vsync_len = dmode->crtc_vsync_end - dmode->crtc_vsync_start;
> + vm->vback_porch = dmode->crtc_vtotal - dmode->crtc_vsync_end;

IMO this should fill in or at least clear all fields of videomode, in
many call sites they'll contain stack garbage.

> +

Superfluous newline.

> +}
> 

Re: [PATCH] drm/kms/mode: added a new helper for calculating videomode from crtc's display mode

2018-05-03 Thread Jani Nikula
On Thu, 03 May 2018, Satendra Singh Thakur  wrote:
> 1.
> -Added a new helper drm_display_mode_crtc_to_videomode
> -This helper calculates mode parameters like
>   horizontal front_porch, back_porch, sync length
>   vertical front_porch, back_porch, sync length
>   using crtc_* fields of struct drm_display_mode
> -It uses following fields of crtc mode
>  horizontal sync start/end, active and total length
>  vertical sync start/end, active and total length
> 2.
> -Most of the driver use user-supplied mode for calculating videomode
> -However, few drivers use HW (crtc) mode for calculating videomode
> -This helper will be useful for such drivers
> 3.
> -Currently following drivers will be using this new helper
> -arm hdlcd
> -atmel hlcdc
> -exynos 5433 decon
> -exynos7 decon
> -exynos fimd
> 4.
> -This patch removes related duplicate code from above mentioned drivers
>
> Signed-off-by: Satendra Singh Thakur 
> Cc: Madhur Verma 
> Cc: Hemanshu Srivastava 
> ---
>  drivers/gpu/drm/arm/hdlcd_crtc.c   |  8 +---
>  drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c |  7 +--
>  drivers/gpu/drm/drm_modes.c| 20 
>  drivers/gpu/drm/exynos/exynos5433_drm_decon.c  | 22 ++
>  drivers/gpu/drm/exynos/exynos7_drm_decon.c | 23 ++-
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c   | 22 +-
>  include/drm/drm_modes.h|  2 ++
>  7 files changed, 53 insertions(+), 51 deletions(-)
>
> diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c 
> b/drivers/gpu/drm/arm/hdlcd_crtc.c
> index cf5cbd6..d20e471 100644
> --- a/drivers/gpu/drm/arm/hdlcd_crtc.c
> +++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
> @@ -130,13 +130,7 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc 
> *crtc)
>   struct videomode vm;
>   unsigned int polarities, err;
>  
> - vm.vfront_porch = m->crtc_vsync_start - m->crtc_vdisplay;
> - vm.vback_porch = m->crtc_vtotal - m->crtc_vsync_end;
> - vm.vsync_len = m->crtc_vsync_end - m->crtc_vsync_start;
> - vm.hfront_porch = m->crtc_hsync_start - m->crtc_hdisplay;
> - vm.hback_porch = m->crtc_htotal - m->crtc_hsync_end;
> - vm.hsync_len = m->crtc_hsync_end - m->crtc_hsync_start;
> -
> + drm_display_mode_crtc_to_videomode(m, );
>   polarities = HDLCD_POLARITY_DATAEN | HDLCD_POLARITY_DATA;
>  
>   if (m->flags & DRM_MODE_FLAG_PHSYNC)
> diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c 
> b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> index d732810..bafcef6 100644
> --- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> +++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
> @@ -81,12 +81,7 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc 
> *c)
>   unsigned int cfg;
>   int div;
>  
> - vm.vfront_porch = adj->crtc_vsync_start - adj->crtc_vdisplay;
> - vm.vback_porch = adj->crtc_vtotal - adj->crtc_vsync_end;
> - vm.vsync_len = adj->crtc_vsync_end - adj->crtc_vsync_start;
> - vm.hfront_porch = adj->crtc_hsync_start - adj->crtc_hdisplay;
> - vm.hback_porch = adj->crtc_htotal - adj->crtc_hsync_end;
> - vm.hsync_len = adj->crtc_hsync_end - adj->crtc_hsync_start;
> + drm_display_mode_crtc_to_videomode(adj, );
>  
>   regmap_write(regmap, ATMEL_HLCDC_CFG(1),
>(vm.hsync_len - 1) | ((vm.vsync_len - 1) << 16));
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index e82b61e..a406749 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -654,6 +654,26 @@ void drm_display_mode_to_videomode(const struct 
> drm_display_mode *dmode,
>   vm->flags |= DISPLAY_FLAGS_DOUBLECLK;
>  }
>  EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
> +/**
> + * drm_display_mode_crtc_to_videomode - fill in @vm using crtc fields 
> of@dmode,

"of@dmode" needs a space, superfluous comma at the end.

> + * @dmode: drm_display_mode structure to use as source
> + * @vm: videomode structure to use as destination
> + *
> + * Fills out @vm using the crtc display mode specified in @dmode.
> + */
> +void drm_display_mode_crtc_to_videomode(const struct drm_display_mode *dmode,
> +struct videomode *vm)
> +{
> + vm->hfront_porch = dmode->crtc_hsync_start - dmode->crtc_hdisplay;
> + vm->hsync_len = dmode->crtc_hsync_end - dmode->crtc_hsync_start;
> + vm->hback_porch = dmode->crtc_htotal - dmode->crtc_hsync_end;
> +
> + vm->vfront_porch = dmode->crtc_vsync_start - dmode->crtc_vdisplay;
> + vm->vsync_len = dmode->crtc_vsync_end - dmode->crtc_vsync_start;
> + vm->vback_porch = dmode->crtc_vtotal - dmode->crtc_vsync_end;

IMO this should fill in or at least clear all fields of videomode, in
many call sites they'll contain stack garbage.

> +

Superfluous newline.

> +}
> +EXPORT_SYMBOL_GPL(drm_display_mode_crtc_to_videomode);
>  
>  /**
>   * drm_bus_flags_from_videomode - extract information 

[PATCH] drm/kms/mode: added a new helper for calculating videomode from crtc's display mode

2018-05-02 Thread Satendra Singh Thakur
1.
-Added a new helper drm_display_mode_crtc_to_videomode
-This helper calculates mode parameters like
  horizontal front_porch, back_porch, sync length
  vertical front_porch, back_porch, sync length
  using crtc_* fields of struct drm_display_mode
-It uses following fields of crtc mode
 horizontal sync start/end, active and total length
 vertical sync start/end, active and total length
2.
-Most of the driver use user-supplied mode for calculating videomode
-However, few drivers use HW (crtc) mode for calculating videomode
-This helper will be useful for such drivers
3.
-Currently following drivers will be using this new helper
-arm hdlcd
-atmel hlcdc
-exynos 5433 decon
-exynos7 decon
-exynos fimd
4.
-This patch removes related duplicate code from above mentioned drivers

Signed-off-by: Satendra Singh Thakur 
Cc: Madhur Verma 
Cc: Hemanshu Srivastava 
---
 drivers/gpu/drm/arm/hdlcd_crtc.c   |  8 +---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c |  7 +--
 drivers/gpu/drm/drm_modes.c| 20 
 drivers/gpu/drm/exynos/exynos5433_drm_decon.c  | 22 ++
 drivers/gpu/drm/exynos/exynos7_drm_decon.c | 23 ++-
 drivers/gpu/drm/exynos/exynos_drm_fimd.c   | 22 +-
 include/drm/drm_modes.h|  2 ++
 7 files changed, 53 insertions(+), 51 deletions(-)

diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index cf5cbd6..d20e471 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -130,13 +130,7 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc *crtc)
struct videomode vm;
unsigned int polarities, err;
 
-   vm.vfront_porch = m->crtc_vsync_start - m->crtc_vdisplay;
-   vm.vback_porch = m->crtc_vtotal - m->crtc_vsync_end;
-   vm.vsync_len = m->crtc_vsync_end - m->crtc_vsync_start;
-   vm.hfront_porch = m->crtc_hsync_start - m->crtc_hdisplay;
-   vm.hback_porch = m->crtc_htotal - m->crtc_hsync_end;
-   vm.hsync_len = m->crtc_hsync_end - m->crtc_hsync_start;
-
+   drm_display_mode_crtc_to_videomode(m, );
polarities = HDLCD_POLARITY_DATAEN | HDLCD_POLARITY_DATA;
 
if (m->flags & DRM_MODE_FLAG_PHSYNC)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c 
b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index d732810..bafcef6 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -81,12 +81,7 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc 
*c)
unsigned int cfg;
int div;
 
-   vm.vfront_porch = adj->crtc_vsync_start - adj->crtc_vdisplay;
-   vm.vback_porch = adj->crtc_vtotal - adj->crtc_vsync_end;
-   vm.vsync_len = adj->crtc_vsync_end - adj->crtc_vsync_start;
-   vm.hfront_porch = adj->crtc_hsync_start - adj->crtc_hdisplay;
-   vm.hback_porch = adj->crtc_htotal - adj->crtc_hsync_end;
-   vm.hsync_len = adj->crtc_hsync_end - adj->crtc_hsync_start;
+   drm_display_mode_crtc_to_videomode(adj, );
 
regmap_write(regmap, ATMEL_HLCDC_CFG(1),
 (vm.hsync_len - 1) | ((vm.vsync_len - 1) << 16));
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index e82b61e..a406749 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -654,6 +654,26 @@ void drm_display_mode_to_videomode(const struct 
drm_display_mode *dmode,
vm->flags |= DISPLAY_FLAGS_DOUBLECLK;
 }
 EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
+/**
+ * drm_display_mode_crtc_to_videomode - fill in @vm using crtc fields of@dmode,
+ * @dmode: drm_display_mode structure to use as source
+ * @vm: videomode structure to use as destination
+ *
+ * Fills out @vm using the crtc display mode specified in @dmode.
+ */
+void drm_display_mode_crtc_to_videomode(const struct drm_display_mode *dmode,
+  struct videomode *vm)
+{
+   vm->hfront_porch = dmode->crtc_hsync_start - dmode->crtc_hdisplay;
+   vm->hsync_len = dmode->crtc_hsync_end - dmode->crtc_hsync_start;
+   vm->hback_porch = dmode->crtc_htotal - dmode->crtc_hsync_end;
+
+   vm->vfront_porch = dmode->crtc_vsync_start - dmode->crtc_vdisplay;
+   vm->vsync_len = dmode->crtc_vsync_end - dmode->crtc_vsync_start;
+   vm->vback_porch = dmode->crtc_vtotal - dmode->crtc_vsync_end;
+
+}
+EXPORT_SYMBOL_GPL(drm_display_mode_crtc_to_videomode);
 
 /**
  * drm_bus_flags_from_videomode - extract information about pixelclk and
diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c 
b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
index 1c330f2..1ba73a8 100644
--- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
@@ -20,6 +20,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include 

[PATCH] drm/kms/mode: added a new helper for calculating videomode from crtc's display mode

2018-05-02 Thread Satendra Singh Thakur
1.
-Added a new helper drm_display_mode_crtc_to_videomode
-This helper calculates mode parameters like
  horizontal front_porch, back_porch, sync length
  vertical front_porch, back_porch, sync length
  using crtc_* fields of struct drm_display_mode
-It uses following fields of crtc mode
 horizontal sync start/end, active and total length
 vertical sync start/end, active and total length
2.
-Most of the driver use user-supplied mode for calculating videomode
-However, few drivers use HW (crtc) mode for calculating videomode
-This helper will be useful for such drivers
3.
-Currently following drivers will be using this new helper
-arm hdlcd
-atmel hlcdc
-exynos 5433 decon
-exynos7 decon
-exynos fimd
4.
-This patch removes related duplicate code from above mentioned drivers

Signed-off-by: Satendra Singh Thakur 
Cc: Madhur Verma 
Cc: Hemanshu Srivastava 
---
 drivers/gpu/drm/arm/hdlcd_crtc.c   |  8 +---
 drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c |  7 +--
 drivers/gpu/drm/drm_modes.c| 20 
 drivers/gpu/drm/exynos/exynos5433_drm_decon.c  | 22 ++
 drivers/gpu/drm/exynos/exynos7_drm_decon.c | 23 ++-
 drivers/gpu/drm/exynos/exynos_drm_fimd.c   | 22 +-
 include/drm/drm_modes.h|  2 ++
 7 files changed, 53 insertions(+), 51 deletions(-)

diff --git a/drivers/gpu/drm/arm/hdlcd_crtc.c b/drivers/gpu/drm/arm/hdlcd_crtc.c
index cf5cbd6..d20e471 100644
--- a/drivers/gpu/drm/arm/hdlcd_crtc.c
+++ b/drivers/gpu/drm/arm/hdlcd_crtc.c
@@ -130,13 +130,7 @@ static void hdlcd_crtc_mode_set_nofb(struct drm_crtc *crtc)
struct videomode vm;
unsigned int polarities, err;
 
-   vm.vfront_porch = m->crtc_vsync_start - m->crtc_vdisplay;
-   vm.vback_porch = m->crtc_vtotal - m->crtc_vsync_end;
-   vm.vsync_len = m->crtc_vsync_end - m->crtc_vsync_start;
-   vm.hfront_porch = m->crtc_hsync_start - m->crtc_hdisplay;
-   vm.hback_porch = m->crtc_htotal - m->crtc_hsync_end;
-   vm.hsync_len = m->crtc_hsync_end - m->crtc_hsync_start;
-
+   drm_display_mode_crtc_to_videomode(m, );
polarities = HDLCD_POLARITY_DATAEN | HDLCD_POLARITY_DATA;
 
if (m->flags & DRM_MODE_FLAG_PHSYNC)
diff --git a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c 
b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
index d732810..bafcef6 100644
--- a/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
+++ b/drivers/gpu/drm/atmel-hlcdc/atmel_hlcdc_crtc.c
@@ -81,12 +81,7 @@ static void atmel_hlcdc_crtc_mode_set_nofb(struct drm_crtc 
*c)
unsigned int cfg;
int div;
 
-   vm.vfront_porch = adj->crtc_vsync_start - adj->crtc_vdisplay;
-   vm.vback_porch = adj->crtc_vtotal - adj->crtc_vsync_end;
-   vm.vsync_len = adj->crtc_vsync_end - adj->crtc_vsync_start;
-   vm.hfront_porch = adj->crtc_hsync_start - adj->crtc_hdisplay;
-   vm.hback_porch = adj->crtc_htotal - adj->crtc_hsync_end;
-   vm.hsync_len = adj->crtc_hsync_end - adj->crtc_hsync_start;
+   drm_display_mode_crtc_to_videomode(adj, );
 
regmap_write(regmap, ATMEL_HLCDC_CFG(1),
 (vm.hsync_len - 1) | ((vm.vsync_len - 1) << 16));
diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
index e82b61e..a406749 100644
--- a/drivers/gpu/drm/drm_modes.c
+++ b/drivers/gpu/drm/drm_modes.c
@@ -654,6 +654,26 @@ void drm_display_mode_to_videomode(const struct 
drm_display_mode *dmode,
vm->flags |= DISPLAY_FLAGS_DOUBLECLK;
 }
 EXPORT_SYMBOL_GPL(drm_display_mode_to_videomode);
+/**
+ * drm_display_mode_crtc_to_videomode - fill in @vm using crtc fields of@dmode,
+ * @dmode: drm_display_mode structure to use as source
+ * @vm: videomode structure to use as destination
+ *
+ * Fills out @vm using the crtc display mode specified in @dmode.
+ */
+void drm_display_mode_crtc_to_videomode(const struct drm_display_mode *dmode,
+  struct videomode *vm)
+{
+   vm->hfront_porch = dmode->crtc_hsync_start - dmode->crtc_hdisplay;
+   vm->hsync_len = dmode->crtc_hsync_end - dmode->crtc_hsync_start;
+   vm->hback_porch = dmode->crtc_htotal - dmode->crtc_hsync_end;
+
+   vm->vfront_porch = dmode->crtc_vsync_start - dmode->crtc_vdisplay;
+   vm->vsync_len = dmode->crtc_vsync_end - dmode->crtc_vsync_start;
+   vm->vback_porch = dmode->crtc_vtotal - dmode->crtc_vsync_end;
+
+}
+EXPORT_SYMBOL_GPL(drm_display_mode_crtc_to_videomode);
 
 /**
  * drm_bus_flags_from_videomode - extract information about pixelclk and
diff --git a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c 
b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
index 1c330f2..1ba73a8 100644
--- a/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
+++ b/drivers/gpu/drm/exynos/exynos5433_drm_decon.c
@@ -20,6 +20,7 @@
 #include 
 #include 
 #include 
+#include 
 
 #include "exynos_drm_drv.h"
 #include "exynos_drm_crtc.h"
@@ -225,26 +226,23 @@ static