Commit 0239520e authored by Russell King's avatar Russell King

drm/armada: add rectangle helpers

Add helpers to convert rectangle width/height and x/y to register
values.
Signed-off-by: default avatarRussell King <rmk+kernel@armlinux.org.uk>
parent 1729f560
...@@ -1158,11 +1158,9 @@ static void armada_drm_primary_update_state(struct drm_plane_state *state, ...@@ -1158,11 +1158,9 @@ static void armada_drm_primary_update_state(struct drm_plane_state *state,
0, CFG_PDWN64x66, LCD_SPU_SRAM_PARA1); 0, CFG_PDWN64x66, LCD_SPU_SRAM_PARA1);
dplane->state.ctrl0 = val; dplane->state.ctrl0 = val;
dplane->state.src_hw = (drm_rect_height(&state->src) & 0xffff0000) | dplane->state.src_hw = armada_rect_hw_fp(&state->src);
drm_rect_width(&state->src) >> 16; dplane->state.dst_hw = armada_rect_hw(&state->dst);
dplane->state.dst_hw = drm_rect_height(&state->dst) << 16 | dplane->state.dst_yx = armada_rect_yx(&state->dst);
drm_rect_width(&state->dst);
dplane->state.dst_yx = state->dst.y1 << 16 | state->dst.x1;
armada_drm_gra_plane_regs(regs + idx, &dfb->fb, &dplane->state, armada_drm_gra_plane_regs(regs + idx, &dfb->fb, &dplane->state,
state->src.x1 >> 16, state->src.y1 >> 16, state->src.x1 >> 16, state->src.y1 >> 16,
......
...@@ -316,4 +316,19 @@ enum { ...@@ -316,4 +316,19 @@ enum {
PWRDN_IRQ_LEVEL = 1 << 0, 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 #endif
...@@ -146,22 +146,21 @@ static void armada_ovl_plane_update_state(struct drm_plane_state *state, ...@@ -146,22 +146,21 @@ static void armada_ovl_plane_update_state(struct drm_plane_state *state,
LCD_SPU_DMA_PITCH_UV); LCD_SPU_DMA_PITCH_UV);
} }
val = (drm_rect_height(&state->src) & 0xffff0000) | val = armada_rect_hw_fp(&state->src);
drm_rect_width(&state->src) >> 16;
if (dplane->base.state.src_hw != val) { if (dplane->base.state.src_hw != val) {
dplane->base.state.src_hw = val; dplane->base.state.src_hw = val;
armada_reg_queue_set(regs, idx, val, armada_reg_queue_set(regs, idx, val,
LCD_SPU_DMA_HPXL_VLN); 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) { if (dplane->base.state.dst_hw != val) {
dplane->base.state.dst_hw = val; dplane->base.state.dst_hw = val;
armada_reg_queue_set(regs, idx, val, armada_reg_queue_set(regs, idx, val,
LCD_SPU_DZM_HPXL_VLN); 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) { if (dplane->base.state.dst_yx != val) {
dplane->base.state.dst_yx = val; dplane->base.state.dst_yx = val;
armada_reg_queue_set(regs, idx, val, armada_reg_queue_set(regs, idx, val,
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment