diff options
| author | Ujwal Patel <ujwalp@codeaurora.org> | 2013-12-05 13:35:51 -0800 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:25:35 -0700 |
| commit | 938ee518e7e47ff7e4351a37ba1dee347a11d889 (patch) | |
| tree | bcae55ae1bf178cc68a8f1bdeee04d39b6e69b21 | |
| parent | 7593d245112a12c991fd09cd2cd73afc70c5a6eb (diff) | |
msm: mdss: move MDSS revision macros to uapi/linux/msm_mdp.h
Currently kernel driver and user mode libraries keep their own
copies of HW revision numbers. This strategy is prone to errors
and usually frowned upon. Fix this by moving revision information
to sanitized header which is shared by kernel drivers and user mode
libraries.
Change-Id: I59d1256ffd98e07f4ef9ae2b534f04b67abd2119
Signed-off-by: Ujwal Patel <ujwalp@codeaurora.org>
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.c | 5 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_ctl.c | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_hwio.h | 4 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_pipe.c | 3 | ||||
| -rw-r--r-- | include/uapi/linux/msm_mdp.h | 24 |
5 files changed, 30 insertions, 8 deletions
diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c index f61d64396053..5830c3f03e3b 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.c +++ b/drivers/video/fbdev/msm/mdss_mdp.c @@ -1040,8 +1040,9 @@ int mdss_hw_init(struct mdss_data_type *mdata) writel_relaxed(1, offset + 16); } - mdata->nmax_concurrent_ad_hw = (mdata->mdp_rev <= MDSS_MDP_HW_REV_102) ? - 1 : 2; + mdata->nmax_concurrent_ad_hw = + (mdata->mdp_rev < MDSS_MDP_HW_REV_103) ? 1 : 2; + mdss_mdp_clk_ctrl(MDP_BLOCK_POWER_OFF, false); pr_debug("MDP hw init done\n"); diff --git a/drivers/video/fbdev/msm/mdss_mdp_ctl.c b/drivers/video/fbdev/msm/mdss_mdp_ctl.c index a3dce7bfbc3b..7926beb5609a 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_ctl.c +++ b/drivers/video/fbdev/msm/mdss_mdp_ctl.c @@ -2307,7 +2307,7 @@ int mdss_mdp_display_wait4comp(struct mdss_mdp_ctl *ctl) mdss_mdp_ctl_perf_update(ctl, 0); - if (mdata->mdp_rev == MDSS_MDP_HW_REV_103) { + if (IS_MDSS_MAJOR_MINOR_SAME(mdata->mdp_rev, MDSS_MDP_HW_REV_103)) { reg_data = mdss_mdp_ctl_read(ctl, MDSS_MDP_REG_CTL_FLUSH); flush_data = readl_relaxed(mdata->mdp_base + AHB_CLK_OFFSET); if ((reg_data != ctl->flush_reg_data) && diff --git a/drivers/video/fbdev/msm/mdss_mdp_hwio.h b/drivers/video/fbdev/msm/mdss_mdp_hwio.h index 3a763474699e..66dfd255b30d 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_hwio.h +++ b/drivers/video/fbdev/msm/mdss_mdp_hwio.h @@ -21,10 +21,6 @@ #define ENHIST_LUT_ENTRIES 256 #define HIST_V_SIZE 256 -#define MDSS_MDP_HW_REV_100 0x10000000 -#define MDSS_MDP_HW_REV_102 0x10020000 -#define MDSS_MDP_HW_REV_103 0x10030000 - #define MDSS_MDP_FETCH_CONFIG_RESET_VALUE 0x00000087 #define MDSS_REG_HW_VERSION 0x0 diff --git a/drivers/video/fbdev/msm/mdss_mdp_pipe.c b/drivers/video/fbdev/msm/mdss_mdp_pipe.c index d36c34c2c362..340bfffc803d 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_pipe.c +++ b/drivers/video/fbdev/msm/mdss_mdp_pipe.c @@ -880,7 +880,8 @@ static int mdss_mdp_image_setup(struct mdss_mdp_pipe *pipe, } img_size = (height << 16) | width; - if (mdata->mdp_rev == MDSS_MDP_HW_REV_103 && pipe->bwc_mode) { + if (IS_MDSS_MAJOR_MINOR_SAME(mdata->mdp_rev, MDSS_MDP_HW_REV_103) && + pipe->bwc_mode) { /* check source dimensions change */ tmp_src_size = mdss_mdp_pipe_read(pipe, MDSS_MDP_REG_SSPP_SRC_SIZE); diff --git a/include/uapi/linux/msm_mdp.h b/include/uapi/linux/msm_mdp.h index e1d647f91791..f43173b1c7ec 100644 --- a/include/uapi/linux/msm_mdp.h +++ b/include/uapi/linux/msm_mdp.h @@ -74,6 +74,30 @@ #define MDP_IMGTYPE2_START 0x10000 #define MSMFB_DRIVER_VERSION 0xF9E8D701 +/* HW Revisions for different MDSS targets */ +#define MDSS_GET_MAJOR(rev) ((rev) >> 28) +#define MDSS_GET_MINOR(rev) (((rev) >> 16) & 0xFFF) +#define MDSS_GET_STEP(rev) ((rev) & 0xFFFF) +#define MDSS_GET_MAJOR_MINOR(rev) ((rev) >> 16) + +#define IS_MDSS_MAJOR_MINOR_SAME(rev1, rev2) \ + (MDSS_GET_MAJOR_MINOR((rev1)) == MDSS_GET_MAJOR_MINOR((rev2))) + +#define MDSS_MDP_REV(major, minor, step) \ + ((((major) & 0x000F) << 28) | \ + (((minor) & 0x0FFF) << 16) | \ + ((step) & 0xFFFF)) + +#define MDSS_MDP_HW_REV_100 MDSS_MDP_REV(1, 0, 0) /* 8974 v1.0 */ +#define MDSS_MDP_HW_REV_101 MDSS_MDP_REV(1, 1, 0) /* 8x26 v1.0 */ +#define MDSS_MDP_HW_REV_101_1 MDSS_MDP_REV(1, 1, 1) /* 8x26 v2.0, 8926 v1.0 */ +#define MDSS_MDP_HW_REV_101_2 MDSS_MDP_REV(1, 1, 2) /* 8926 v2.0 */ +#define MDSS_MDP_HW_REV_102 MDSS_MDP_REV(1, 2, 0) /* 8974 v2.0 */ +#define MDSS_MDP_HW_REV_102_1 MDSS_MDP_REV(1, 2, 1) /* 8974 v3.0 (Pro) */ +#define MDSS_MDP_HW_REV_103 MDSS_MDP_REV(1, 3, 0) /* 8084 v1.0 */ +#define MDSS_MDP_HW_REV_103_1 MDSS_MDP_REV(1, 3, 1) /* 8084 v1.1 */ +#define MDSS_MDP_HW_REV_200 MDSS_MDP_REV(2, 0, 0) /* 8092 v1.0 */ + enum { NOTIFY_UPDATE_START, NOTIFY_UPDATE_STOP, |
