Hi Gustavo,

On 02/06/2015 02:59 AM, Gustavo Padovan wrote:
> From: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
> 
> struct {fimd,mixer,vidi}_win_data was just keeping the same data
> as struct exynos_drm_plane thus get ride of it and use exynos_drm_plane
> directly.
> 
> It changes how planes are created and remove .win_mode_set() callback
> that was only filling all *_win_data structs.
> 

OK, let's go ahead this with next zpos problem fix.

> Signed-off-by: Gustavo Padovan <gustavo.padovan at collabora.co.uk>
> ---
>  drivers/gpu/drm/exynos/exynos_drm_crtc.c  |   9 +-
>  drivers/gpu/drm/exynos/exynos_drm_crtc.h  |   1 +
>  drivers/gpu/drm/exynos/exynos_drm_drv.c   |  14 --
>  drivers/gpu/drm/exynos/exynos_drm_drv.h   |   5 +-
>  drivers/gpu/drm/exynos/exynos_drm_fimd.c  | 182 ++++++++++---------------
>  drivers/gpu/drm/exynos/exynos_drm_plane.c |  20 +--
>  drivers/gpu/drm/exynos/exynos_drm_plane.h |   6 +-
>  drivers/gpu/drm/exynos/exynos_drm_vidi.c  | 123 +++++------------
>  drivers/gpu/drm/exynos/exynos_mixer.c     | 212 
> +++++++++++-------------------
>  9 files changed, 183 insertions(+), 389 deletions(-)
> 

[snip]

> diff --git a/drivers/gpu/drm/exynos/exynos_mixer.c 
> b/drivers/gpu/drm/exynos/exynos_mixer.c
> index 736269a..6e7c0cc 100644
> --- a/drivers/gpu/drm/exynos/exynos_mixer.c
> +++ b/drivers/gpu/drm/exynos/exynos_mixer.c
> @@ -37,34 +37,13 @@
>  
>  #include "exynos_drm_drv.h"
>  #include "exynos_drm_crtc.h"
> +#include "exynos_drm_plane.h"
>  #include "exynos_drm_iommu.h"
>  #include "exynos_mixer.h"
>  
>  #define MIXER_WIN_NR         3
>  #define MIXER_DEFAULT_WIN    0
>  
> -struct hdmi_win_data {
> -     dma_addr_t              dma_addr;
> -     dma_addr_t              chroma_dma_addr;
> -     uint32_t                pixel_format;
> -     unsigned int            bpp;
> -     unsigned int            crtc_x;
> -     unsigned int            crtc_y;
> -     unsigned int            crtc_width;
> -     unsigned int            crtc_height;
> -     unsigned int            fb_x;
> -     unsigned int            fb_y;
> -     unsigned int            fb_width;
> -     unsigned int            fb_height;
> -     unsigned int            src_width;
> -     unsigned int            src_height;
> -     unsigned int            mode_width;
> -     unsigned int            mode_height;
> -     unsigned int            scan_flags;
> -     bool                    enabled;
> -     bool                    resume;
> -};
> -
>  struct mixer_resources {
>       int                     irq;
>       void __iomem            *mixer_regs;
> @@ -88,6 +67,7 @@ struct mixer_context {
>       struct device           *dev;
>       struct drm_device       *drm_dev;
>       struct exynos_drm_crtc  *crtc;
> +     struct exynos_drm_plane planes[MIXER_WIN_NR];
>       int                     pipe;
>       bool                    interlace;
>       bool                    powered;
> @@ -97,7 +77,6 @@ struct mixer_context {
>  
>       struct mutex            mixer_mutex;
>       struct mixer_resources  mixer_res;
> -     struct hdmi_win_data    win_data[MIXER_WIN_NR];
>       enum mixer_version_id   mxr_ver;
>       wait_queue_head_t       wait_vsync_queue;
>       atomic_t                wait_vsync_event;
> @@ -401,7 +380,7 @@ static void vp_video_buffer(struct mixer_context *ctx, 
> int win)
>  {
>       struct mixer_resources *res = &ctx->mixer_res;
>       unsigned long flags;
> -     struct hdmi_win_data *win_data;
> +     struct exynos_drm_plane *plane;
>       unsigned int x_ratio, y_ratio;
>       unsigned int buf_num = 1;
>       dma_addr_t luma_addr[2], chroma_addr[2];
> @@ -409,9 +388,9 @@ static void vp_video_buffer(struct mixer_context *ctx, 
> int win)
>       bool crcb_mode = false;
>       u32 val;
>  
> -     win_data = &ctx->win_data[win];
> +     plane = &ctx->planes[win];
>  
> -     switch (win_data->pixel_format) {
> +     switch (plane->pixel_format) {
>       case DRM_FORMAT_NV12MT:
>               tiled_mode = true;
>       case DRM_FORMAT_NV12:
> @@ -421,35 +400,35 @@ static void vp_video_buffer(struct mixer_context *ctx, 
> int win)
>       /* TODO: single buffer format NV12, NV21 */
>       default:
>               /* ignore pixel format at disable time */
> -             if (!win_data->dma_addr)
> +             if (!plane->dma_addr[0])
>                       break;
>  
>               DRM_ERROR("pixel format for vp is wrong [%d].\n",
> -                             win_data->pixel_format);
> +                             plane->pixel_format);
>               return;
>       }
>  
>       /* scaling feature: (src << 16) / dst */
> -     x_ratio = (win_data->src_width << 16) / win_data->crtc_width;
> -     y_ratio = (win_data->src_height << 16) / win_data->crtc_height;
> +     x_ratio = (plane->src_width << 16) / plane->crtc_width;
> +     y_ratio = (plane->src_height << 16) / plane->crtc_height;
>  
>       if (buf_num == 2) {
> -             luma_addr[0] = win_data->dma_addr;
> -             chroma_addr[0] = win_data->chroma_dma_addr;
> +             luma_addr[0] = plane->dma_addr[0];
> +             chroma_addr[0] = plane->dma_addr[1];
>       } else {
> -             luma_addr[0] = win_data->dma_addr;
> -             chroma_addr[0] = win_data->dma_addr
> -                     + (win_data->fb_width * win_data->fb_height);
> +             luma_addr[0] = plane->dma_addr[0];
> +             chroma_addr[0] = plane->dma_addr[0]
> +                     + (plane->fb_width * plane->fb_height);
>       }
>  
> -     if (win_data->scan_flags & DRM_MODE_FLAG_INTERLACE) {
> +     if (plane->scan_flag & DRM_MODE_FLAG_INTERLACE) {
>               ctx->interlace = true;
>               if (tiled_mode) {
>                       luma_addr[1] = luma_addr[0] + 0x40;
>                       chroma_addr[1] = chroma_addr[0] + 0x40;
>               } else {
> -                     luma_addr[1] = luma_addr[0] + win_data->fb_width;
> -                     chroma_addr[1] = chroma_addr[0] + win_data->fb_width;
> +                     luma_addr[1] = luma_addr[0] + plane->fb_width;
> +                     chroma_addr[1] = chroma_addr[0] + plane->fb_width;
>               }
>       } else {
>               ctx->interlace = false;
> @@ -470,26 +449,26 @@ static void vp_video_buffer(struct mixer_context *ctx, 
> int win)
>       vp_reg_writemask(res, VP_MODE, val, VP_MODE_FMT_MASK);
>  
>       /* setting size of input image */
> -     vp_reg_write(res, VP_IMG_SIZE_Y, VP_IMG_HSIZE(win_data->fb_width) |
> -             VP_IMG_VSIZE(win_data->fb_height));
> +     vp_reg_write(res, VP_IMG_SIZE_Y, VP_IMG_HSIZE(plane->fb_width) |
> +             VP_IMG_VSIZE(plane->fb_height));
>       /* chroma height has to reduced by 2 to avoid chroma distorions */
> -     vp_reg_write(res, VP_IMG_SIZE_C, VP_IMG_HSIZE(win_data->fb_width) |
> -             VP_IMG_VSIZE(win_data->fb_height / 2));
> +     vp_reg_write(res, VP_IMG_SIZE_C, VP_IMG_HSIZE(plane->fb_width) |
> +             VP_IMG_VSIZE(plane->fb_height / 2));
>  
> -     vp_reg_write(res, VP_SRC_WIDTH, win_data->src_width);
> -     vp_reg_write(res, VP_SRC_HEIGHT, win_data->src_height);
> +     vp_reg_write(res, VP_SRC_WIDTH, plane->src_width);
> +     vp_reg_write(res, VP_SRC_HEIGHT, plane->src_height);
>       vp_reg_write(res, VP_SRC_H_POSITION,
> -                     VP_SRC_H_POSITION_VAL(win_data->fb_x));
> -     vp_reg_write(res, VP_SRC_V_POSITION, win_data->fb_y);
> +                     VP_SRC_H_POSITION_VAL(plane->fb_x));
> +     vp_reg_write(res, VP_SRC_V_POSITION, plane->fb_y);
>  
> -     vp_reg_write(res, VP_DST_WIDTH, win_data->crtc_width);
> -     vp_reg_write(res, VP_DST_H_POSITION, win_data->crtc_x);
> +     vp_reg_write(res, VP_DST_WIDTH, plane->crtc_width);
> +     vp_reg_write(res, VP_DST_H_POSITION, plane->crtc_x);
>       if (ctx->interlace) {
> -             vp_reg_write(res, VP_DST_HEIGHT, win_data->crtc_height / 2);
> -             vp_reg_write(res, VP_DST_V_POSITION, win_data->crtc_y / 2);
> +             vp_reg_write(res, VP_DST_HEIGHT, plane->crtc_height / 2);
> +             vp_reg_write(res, VP_DST_V_POSITION, plane->crtc_y / 2);
>       } else {
> -             vp_reg_write(res, VP_DST_HEIGHT, win_data->crtc_height);
> -             vp_reg_write(res, VP_DST_V_POSITION, win_data->crtc_y);
> +             vp_reg_write(res, VP_DST_HEIGHT, plane->crtc_height);
> +             vp_reg_write(res, VP_DST_V_POSITION, plane->crtc_y);
>       }
>  
>       vp_reg_write(res, VP_H_RATIO, x_ratio);
> @@ -503,8 +482,8 @@ static void vp_video_buffer(struct mixer_context *ctx, 
> int win)
>       vp_reg_write(res, VP_TOP_C_PTR, chroma_addr[0]);
>       vp_reg_write(res, VP_BOT_C_PTR, chroma_addr[1]);
>  
> -     mixer_cfg_scan(ctx, win_data->mode_height);
> -     mixer_cfg_rgb_fmt(ctx, win_data->mode_height);
> +     mixer_cfg_scan(ctx, plane->mode_height);
> +     mixer_cfg_rgb_fmt(ctx, plane->mode_height);
>       mixer_cfg_layer(ctx, win, true);
>       mixer_run(ctx);
>  
> @@ -525,21 +504,21 @@ static void mixer_graph_buffer(struct mixer_context 
> *ctx, int win)
>  {
>       struct mixer_resources *res = &ctx->mixer_res;
>       unsigned long flags;
> -     struct hdmi_win_data *win_data;
> +     struct exynos_drm_plane *plane;
>       unsigned int x_ratio, y_ratio;
>       unsigned int src_x_offset, src_y_offset, dst_x_offset, dst_y_offset;
>       dma_addr_t dma_addr;
>       unsigned int fmt;
>       u32 val;
>  
> -     win_data = &ctx->win_data[win];
> +     plane = &ctx->planes[win];
>  
>       #define RGB565 4
>       #define ARGB1555 5
>       #define ARGB4444 6
>       #define ARGB8888 7
>  
> -     switch (win_data->bpp) {
> +     switch (plane->bpp) {
>       case 16:
>               fmt = ARGB4444;
>               break;
> @@ -554,17 +533,17 @@ static void mixer_graph_buffer(struct mixer_context 
> *ctx, int win)
>       x_ratio = 0;
>       y_ratio = 0;
>  
> -     dst_x_offset = win_data->crtc_x;
> -     dst_y_offset = win_data->crtc_y;
> +     dst_x_offset = plane->crtc_x;
> +     dst_y_offset = plane->crtc_y;
>  
>       /* converting dma address base and source offset */
> -     dma_addr = win_data->dma_addr
> -             + (win_data->fb_x * win_data->bpp >> 3)
> -             + (win_data->fb_y * win_data->fb_width * win_data->bpp >> 3);
> +     dma_addr = plane->dma_addr[0]
> +             + (plane->fb_x * plane->bpp >> 3)
> +             + (plane->fb_y * plane->fb_width * plane->bpp >> 3);
>       src_x_offset = 0;
>       src_y_offset = 0;
>  
> -     if (win_data->scan_flags & DRM_MODE_FLAG_INTERLACE)
> +     if (plane->scan_flag & DRM_MODE_FLAG_INTERLACE)
>               ctx->interlace = true;
>       else
>               ctx->interlace = false;
> @@ -577,18 +556,18 @@ static void mixer_graph_buffer(struct mixer_context 
> *ctx, int win)
>               MXR_GRP_CFG_FORMAT_VAL(fmt), MXR_GRP_CFG_FORMAT_MASK);
>  
>       /* setup geometry */
> -     mixer_reg_write(res, MXR_GRAPHIC_SPAN(win), win_data->fb_width);
> +     mixer_reg_write(res, MXR_GRAPHIC_SPAN(win), plane->fb_width);
>  
>       /* setup display size */
>       if (ctx->mxr_ver == MXR_VER_128_0_0_184 &&
>               win == MIXER_DEFAULT_WIN) {
> -             val  = MXR_MXR_RES_HEIGHT(win_data->fb_height);
> -             val |= MXR_MXR_RES_WIDTH(win_data->fb_width);
> +             val  = MXR_MXR_RES_HEIGHT(plane->fb_height);
> +             val |= MXR_MXR_RES_WIDTH(plane->fb_width);

I can't apply because of this changes.

Could you make patch based on latest exynos-drm-next branch?    

Thanks.

Reply via email to