drm/imx: ipuv3-plane: Fix overlay plane width
[platform/kernel/linux-rpi.git] / drivers / gpu / drm / imx / ipuv3-plane.c
index 846c1aa..924a66f 100644 (file)
@@ -619,6 +619,11 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
                break;
        }
 
+       if (ipu_plane->dp_flow == IPU_DP_FLOW_SYNC_BG)
+               width = ipu_src_rect_width(new_state);
+       else
+               width = drm_rect_width(&new_state->src) >> 16;
+
        eba = drm_plane_state_to_eba(new_state, 0);
 
        /*
@@ -627,8 +632,7 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
         */
        if (ipu_state->use_pre) {
                axi_id = ipu_chan_assign_axi_id(ipu_plane->dma);
-               ipu_prg_channel_configure(ipu_plane->ipu_ch, axi_id,
-                                         ipu_src_rect_width(new_state),
+               ipu_prg_channel_configure(ipu_plane->ipu_ch, axi_id, width,
                                          drm_rect_height(&new_state->src) >> 16,
                                          fb->pitches[0], fb->format->format,
                                          fb->modifier, &eba);
@@ -683,9 +687,8 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
                break;
        }
 
-       ipu_dmfc_config_wait4eot(ipu_plane->dmfc, ALIGN(drm_rect_width(dst), 8));
+       ipu_dmfc_config_wait4eot(ipu_plane->dmfc, width);
 
-       width = ipu_src_rect_width(new_state);
        height = drm_rect_height(&new_state->src) >> 16;
        info = drm_format_info(fb->format->format);
        ipu_calculate_bursts(width, info->cpp[0], fb->pitches[0],
@@ -749,8 +752,7 @@ static void ipu_plane_atomic_update(struct drm_plane *plane,
                ipu_cpmem_set_burstsize(ipu_plane->ipu_ch, 16);
 
                ipu_cpmem_zero(ipu_plane->alpha_ch);
-               ipu_cpmem_set_resolution(ipu_plane->alpha_ch,
-                                        ipu_src_rect_width(new_state),
+               ipu_cpmem_set_resolution(ipu_plane->alpha_ch, width,
                                         drm_rect_height(&new_state->src) >> 16);
                ipu_cpmem_set_format_passthrough(ipu_plane->alpha_ch, 8);
                ipu_cpmem_set_high_priority(ipu_plane->alpha_ch);