Commit ac6560df authored by Mark yao's avatar Mark yao Committed by Mark Yao

drm/rockchip: vop: move line_flag_num to interrupt registers

In the hardware design process, the design of line flags
register is associated with the interrupt register,
placing the line flags in the interrupt definition is
more reasonable, and it would make multi-vop define easilier.
Signed-off-by: default avatarMark Yao <mark.yao@rock-chips.com>
Reviewed-by: default avatarSean Paul <seanpaul@chromium.org>
Tested-by: default avatarHeiko Stuebner <heiko@sntech.de>
Link: https://patchwork.freedesktop.org/patch/msgid/1501049960-6006-1-git-send-email-mark.yao@rock-chips.com
parent 9548e1b4
...@@ -61,8 +61,12 @@ ...@@ -61,8 +61,12 @@
#define VOP_INTR_GET(vop, name) \ #define VOP_INTR_GET(vop, name) \
vop_read_reg(vop, 0, &vop->data->ctrl->name) vop_read_reg(vop, 0, &vop->data->ctrl->name)
#define VOP_INTR_SET(vop, name, mask, v) \ #define VOP_INTR_SET(vop, name, v) \
REG_SET(vop, 0, vop->data->intr->name, v)
#define VOP_INTR_SET_MASK(vop, name, mask, v) \
REG_SET_MASK(vop, 0, vop->data->intr->name, mask, v) REG_SET_MASK(vop, 0, vop->data->intr->name, mask, v)
#define VOP_INTR_SET_TYPE(vop, name, type, v) \ #define VOP_INTR_SET_TYPE(vop, name, type, v) \
do { \ do { \
int i, reg = 0, mask = 0; \ int i, reg = 0, mask = 0; \
...@@ -72,7 +76,7 @@ ...@@ -72,7 +76,7 @@
mask |= 1 << i; \ mask |= 1 << i; \
} \ } \
} \ } \
VOP_INTR_SET(vop, name, mask, reg); \ VOP_INTR_SET_MASK(vop, name, mask, reg); \
} while (0) } while (0)
#define VOP_INTR_GET_TYPE(vop, name, type) \ #define VOP_INTR_GET_TYPE(vop, name, type) \
vop_get_intr_type(vop, &vop->data->intr->name, type) vop_get_intr_type(vop, &vop->data->intr->name, type)
...@@ -984,7 +988,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc, ...@@ -984,7 +988,7 @@ static void vop_crtc_atomic_enable(struct drm_crtc *crtc,
VOP_CTRL_SET(vop, vact_st_end, val); VOP_CTRL_SET(vop, vact_st_end, val);
VOP_CTRL_SET(vop, vpost_st_end, val); VOP_CTRL_SET(vop, vpost_st_end, val);
VOP_CTRL_SET(vop, line_flag_num[0], vact_end); VOP_INTR_SET(vop, line_flag_num[0], vact_end);
clk_set_rate(vop->dclk, adjusted_mode->clock * 1000); clk_set_rate(vop->dclk, adjusted_mode->clock * 1000);
......
...@@ -60,8 +60,6 @@ struct vop_ctrl { ...@@ -60,8 +60,6 @@ struct vop_ctrl {
struct vop_reg hpost_st_end; struct vop_reg hpost_st_end;
struct vop_reg vpost_st_end; struct vop_reg vpost_st_end;
struct vop_reg line_flag_num[2];
struct vop_reg global_regdone_en; struct vop_reg global_regdone_en;
struct vop_reg cfg_done; struct vop_reg cfg_done;
}; };
...@@ -69,6 +67,8 @@ struct vop_ctrl { ...@@ -69,6 +67,8 @@ struct vop_ctrl {
struct vop_intr { struct vop_intr {
const int *intrs; const int *intrs;
uint32_t nintrs; uint32_t nintrs;
struct vop_reg line_flag_num[2];
struct vop_reg enable; struct vop_reg enable;
struct vop_reg clear; struct vop_reg clear;
struct vop_reg status; struct vop_reg status;
......
...@@ -116,6 +116,7 @@ static const int rk3036_vop_intrs[] = { ...@@ -116,6 +116,7 @@ static const int rk3036_vop_intrs[] = {
static const struct vop_intr rk3036_intr = { static const struct vop_intr rk3036_intr = {
.intrs = rk3036_vop_intrs, .intrs = rk3036_vop_intrs,
.nintrs = ARRAY_SIZE(rk3036_vop_intrs), .nintrs = ARRAY_SIZE(rk3036_vop_intrs),
.line_flag_num[0] = VOP_REG(RK3036_INT_STATUS, 0xfff, 12),
.status = VOP_REG(RK3036_INT_STATUS, 0xf, 0), .status = VOP_REG(RK3036_INT_STATUS, 0xf, 0),
.enable = VOP_REG(RK3036_INT_STATUS, 0xf, 4), .enable = VOP_REG(RK3036_INT_STATUS, 0xf, 4),
.clear = VOP_REG(RK3036_INT_STATUS, 0xf, 8), .clear = VOP_REG(RK3036_INT_STATUS, 0xf, 8),
...@@ -130,7 +131,6 @@ static const struct vop_ctrl rk3036_ctrl_data = { ...@@ -130,7 +131,6 @@ static const struct vop_ctrl rk3036_ctrl_data = {
.hact_st_end = VOP_REG(RK3036_DSP_HACT_ST_END, 0x1fff1fff, 0), .hact_st_end = VOP_REG(RK3036_DSP_HACT_ST_END, 0x1fff1fff, 0),
.vtotal_pw = VOP_REG(RK3036_DSP_VTOTAL_VS_END, 0x1fff1fff, 0), .vtotal_pw = VOP_REG(RK3036_DSP_VTOTAL_VS_END, 0x1fff1fff, 0),
.vact_st_end = VOP_REG(RK3036_DSP_VACT_ST_END, 0x1fff1fff, 0), .vact_st_end = VOP_REG(RK3036_DSP_VACT_ST_END, 0x1fff1fff, 0),
.line_flag_num[0] = VOP_REG(RK3036_INT_STATUS, 0xfff, 12),
.cfg_done = VOP_REG_SYNC(RK3036_REG_CFG_DONE, 0x1, 0), .cfg_done = VOP_REG_SYNC(RK3036_REG_CFG_DONE, 0x1, 0),
}; };
...@@ -226,7 +226,6 @@ static const struct vop_ctrl rk3288_ctrl_data = { ...@@ -226,7 +226,6 @@ static const struct vop_ctrl rk3288_ctrl_data = {
.vact_st_end = VOP_REG(RK3288_DSP_VACT_ST_END, 0x1fff1fff, 0), .vact_st_end = VOP_REG(RK3288_DSP_VACT_ST_END, 0x1fff1fff, 0),
.hpost_st_end = VOP_REG(RK3288_POST_DSP_HACT_INFO, 0x1fff1fff, 0), .hpost_st_end = VOP_REG(RK3288_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
.vpost_st_end = VOP_REG(RK3288_POST_DSP_VACT_INFO, 0x1fff1fff, 0), .vpost_st_end = VOP_REG(RK3288_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
.line_flag_num[0] = VOP_REG(RK3288_INTR_CTRL0, 0x1fff, 12),
.global_regdone_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 11), .global_regdone_en = VOP_REG(RK3288_SYS_CTRL, 0x1, 11),
.cfg_done = VOP_REG_SYNC(RK3288_REG_CFG_DONE, 0x1, 0), .cfg_done = VOP_REG_SYNC(RK3288_REG_CFG_DONE, 0x1, 0),
}; };
...@@ -258,6 +257,7 @@ static const int rk3288_vop_intrs[] = { ...@@ -258,6 +257,7 @@ static const int rk3288_vop_intrs[] = {
static const struct vop_intr rk3288_vop_intr = { static const struct vop_intr rk3288_vop_intr = {
.intrs = rk3288_vop_intrs, .intrs = rk3288_vop_intrs,
.nintrs = ARRAY_SIZE(rk3288_vop_intrs), .nintrs = ARRAY_SIZE(rk3288_vop_intrs),
.line_flag_num[0] = VOP_REG(RK3288_INTR_CTRL0, 0x1fff, 12),
.status = VOP_REG(RK3288_INTR_CTRL0, 0xf, 0), .status = VOP_REG(RK3288_INTR_CTRL0, 0xf, 0),
.enable = VOP_REG(RK3288_INTR_CTRL0, 0xf, 4), .enable = VOP_REG(RK3288_INTR_CTRL0, 0xf, 4),
.clear = VOP_REG(RK3288_INTR_CTRL0, 0xf, 8), .clear = VOP_REG(RK3288_INTR_CTRL0, 0xf, 8),
...@@ -294,8 +294,6 @@ static const struct vop_ctrl rk3399_ctrl_data = { ...@@ -294,8 +294,6 @@ static const struct vop_ctrl rk3399_ctrl_data = {
.vact_st_end = VOP_REG(RK3399_DSP_VACT_ST_END, 0x1fff1fff, 0), .vact_st_end = VOP_REG(RK3399_DSP_VACT_ST_END, 0x1fff1fff, 0),
.hpost_st_end = VOP_REG(RK3399_POST_DSP_HACT_INFO, 0x1fff1fff, 0), .hpost_st_end = VOP_REG(RK3399_POST_DSP_HACT_INFO, 0x1fff1fff, 0),
.vpost_st_end = VOP_REG(RK3399_POST_DSP_VACT_INFO, 0x1fff1fff, 0), .vpost_st_end = VOP_REG(RK3399_POST_DSP_VACT_INFO, 0x1fff1fff, 0),
.line_flag_num[0] = VOP_REG(RK3399_LINE_FLAG, 0xffff, 0),
.line_flag_num[1] = VOP_REG(RK3399_LINE_FLAG, 0xffff, 16),
.cfg_done = VOP_REG_MASK_SYNC(RK3399_REG_CFG_DONE, 0x1, 0), .cfg_done = VOP_REG_MASK_SYNC(RK3399_REG_CFG_DONE, 0x1, 0),
}; };
...@@ -312,6 +310,8 @@ static const int rk3399_vop_intrs[] = { ...@@ -312,6 +310,8 @@ static const int rk3399_vop_intrs[] = {
static const struct vop_intr rk3399_vop_intr = { static const struct vop_intr rk3399_vop_intr = {
.intrs = rk3399_vop_intrs, .intrs = rk3399_vop_intrs,
.nintrs = ARRAY_SIZE(rk3399_vop_intrs), .nintrs = ARRAY_SIZE(rk3399_vop_intrs),
.line_flag_num[0] = VOP_REG(RK3399_LINE_FLAG, 0xffff, 0),
.line_flag_num[1] = VOP_REG(RK3399_LINE_FLAG, 0xffff, 16),
.status = VOP_REG_MASK_SYNC(RK3399_INTR_STATUS0, 0xffff, 0), .status = VOP_REG_MASK_SYNC(RK3399_INTR_STATUS0, 0xffff, 0),
.enable = VOP_REG_MASK_SYNC(RK3399_INTR_EN0, 0xffff, 0), .enable = VOP_REG_MASK_SYNC(RK3399_INTR_EN0, 0xffff, 0),
.clear = VOP_REG_MASK_SYNC(RK3399_INTR_CLEAR0, 0xffff, 0), .clear = VOP_REG_MASK_SYNC(RK3399_INTR_CLEAR0, 0xffff, 0),
......
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