diff options
Diffstat (limited to 'drivers/gpu/drm/armada')
-rw-r--r-- | drivers/gpu/drm/armada/armada_crtc.c | 8 | ||||
-rw-r--r-- | drivers/gpu/drm/armada/armada_hw.h | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/armada/armada_overlay.c | 7 |
3 files changed, 21 insertions, 9 deletions
diff --git a/drivers/gpu/drm/armada/armada_crtc.c b/drivers/gpu/drm/armada/armada_crtc.c index 78bb3d51417b..205d5dc7ba81 100644 --- a/drivers/gpu/drm/armada/armada_crtc.c +++ b/drivers/gpu/drm/armada/armada_crtc.c @@ -1158,11 +1158,9 @@ static void armada_drm_primary_update_state(struct drm_plane_state *state, 0, CFG_PDWN64x66, LCD_SPU_SRAM_PARA1); dplane->state.ctrl0 = val; - dplane->state.src_hw = (drm_rect_height(&state->src) & 0xffff0000) | - drm_rect_width(&state->src) >> 16; - dplane->state.dst_hw = drm_rect_height(&state->dst) << 16 | - drm_rect_width(&state->dst); - dplane->state.dst_yx = state->dst.y1 << 16 | state->dst.x1; + dplane->state.src_hw = armada_rect_hw_fp(&state->src); + dplane->state.dst_hw = armada_rect_hw(&state->dst); + dplane->state.dst_yx = armada_rect_yx(&state->dst); armada_drm_gra_plane_regs(regs + idx, &dfb->fb, &dplane->state, state->src.x1 >> 16, state->src.y1 >> 16, diff --git a/drivers/gpu/drm/armada/armada_hw.h b/drivers/gpu/drm/armada/armada_hw.h index 345dc4d0851e..277580b36758 100644 --- a/drivers/gpu/drm/armada/armada_hw.h +++ b/drivers/gpu/drm/armada/armada_hw.h @@ -316,4 +316,19 @@ enum { PWRDN_IRQ_LEVEL = 1 << 0, }; +static inline u32 armada_rect_hw_fp(struct drm_rect *r) +{ + return (drm_rect_height(r) & 0xffff0000) | drm_rect_width(r) >> 16; +} + +static inline u32 armada_rect_hw(struct drm_rect *r) +{ + return drm_rect_height(r) << 16 | (drm_rect_width(r) & 0x0000ffff); +} + +static inline u32 armada_rect_yx(struct drm_rect *r) +{ + return (r)->y1 << 16 | ((r)->x1 & 0x0000ffff); +} + #endif diff --git a/drivers/gpu/drm/armada/armada_overlay.c b/drivers/gpu/drm/armada/armada_overlay.c index afa7ded3ae31..2347811ccf1b 100644 --- a/drivers/gpu/drm/armada/armada_overlay.c +++ b/drivers/gpu/drm/armada/armada_overlay.c @@ -146,22 +146,21 @@ static void armada_ovl_plane_update_state(struct drm_plane_state *state, LCD_SPU_DMA_PITCH_UV); } - val = (drm_rect_height(&state->src) & 0xffff0000) | - drm_rect_width(&state->src) >> 16; + val = armada_rect_hw_fp(&state->src); if (dplane->base.state.src_hw != val) { dplane->base.state.src_hw = val; armada_reg_queue_set(regs, idx, val, LCD_SPU_DMA_HPXL_VLN); } - val = drm_rect_height(&state->dst) << 16 | drm_rect_width(&state->dst); + val = armada_rect_hw(&state->dst); if (dplane->base.state.dst_hw != val) { dplane->base.state.dst_hw = val; armada_reg_queue_set(regs, idx, val, LCD_SPU_DZM_HPXL_VLN); } - val = state->dst.y1 << 16 | state->dst.x1; + val = armada_rect_yx(&state->dst); if (dplane->base.state.dst_yx != val) { dplane->base.state.dst_yx = val; armada_reg_queue_set(regs, idx, val, |