Loading drivers/video/msm/mdss/mdss_mdp_overlay.c +35 −16 Original line number Diff line number Diff line Loading @@ -2903,17 +2903,50 @@ int mdss_mdp_cursor_pipe_setup(struct msm_fb_data_type *mfd, struct mdp_overlay *req, int cursor_pipe) { struct mdss_mdp_pipe *pipe; struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); struct mdss_data_type *mdata = mdss_mdp_get_mdata(); int ret = 0; u32 cursor_addr; struct mdss_mdp_data *buf = NULL; req->id = mdp5_data->cursor_ndx[cursor_pipe]; ret = mdss_mdp_overlay_pipe_setup(mfd, req, &pipe, NULL, false); if (ret) { pr_err("cursor pipe setup failed, cursor_pipe:%d, ret:%d", pr_err("cursor pipe setup failed, cursor_pipe:%d, ret:%d\n", cursor_pipe, ret); mdp5_data->cursor_ndx[cursor_pipe] = MSMFB_NEW_REQUEST; return ret; } mdp5_data->cursor_ndx[cursor_pipe] = req->id; pr_debug("req id:%d cursor_pipe:%d pnum:%d\n", req->id, cursor_pipe, pipe->ndx); if (mdata->mdss_util->iommu_attached()) { cursor_addr = mfd->cursor_buf_iova; } else { if (MDSS_LPAE_CHECK(mfd->cursor_buf_phys)) { pr_err("can't access phy mem >4GB w/o iommu\n"); ret = -ERANGE; goto done; } cursor_addr = mfd->cursor_buf_phys; } buf = mdss_mdp_overlay_buf_alloc(mfd, pipe); if (!buf) { pr_err("unable to allocate memory for cursor buffer\n"); ret = -ENOMEM; goto done; } mdp5_data->cursor_ndx[cursor_pipe] = pipe->ndx; buf->p[0].addr = cursor_addr; buf->p[0].len = MDSS_MDP_CURSOR_SIZE; buf->num_planes = 1; done: if (ret && mdp5_data->cursor_ndx[cursor_pipe] == MSMFB_NEW_REQUEST) mdss_mdp_overlay_release(mfd, pipe->ndx); return ret; } Loading Loading @@ -3042,7 +3075,6 @@ static int mdss_mdp_hw_cursor_pipe_update(struct msm_fb_data_type *mfd, req.transp_mask = (img->bg_color & 0xffffff); if (mfd->cursor_buf && (cursor->set & FB_CUR_SETIMAGE)) { u32 cursor_addr; ret = copy_from_user(mfd->cursor_buf, img->data, img->width * img->height * 4); if (ret) { Loading @@ -3050,21 +3082,8 @@ static int mdss_mdp_hw_cursor_pipe_update(struct msm_fb_data_type *mfd, goto done; } if (mdata->mdss_util->iommu_attached()) { cursor_addr = mfd->cursor_buf_iova; } else { if (MDSS_LPAE_CHECK(mfd->cursor_buf_phys)) { pr_err("can't access phy mem >4GB w/o iommu\n"); ret = -ERANGE; goto done; } cursor_addr = mfd->cursor_buf_phys; } mixer->cursor_hotx = 0; mixer->cursor_hoty = 0; mdp5_data->cursor_ndx[CURSOR_PIPE_LEFT] = MSMFB_NEW_REQUEST; mdp5_data->cursor_ndx[CURSOR_PIPE_RIGHT] = MSMFB_NEW_REQUEST; } if (start_x + roi.w <= left_lm_w) { Loading drivers/video/msm/mdss/mdss_mdp_pipe.c +3 −0 Original line number Diff line number Diff line Loading @@ -873,6 +873,9 @@ static struct mdss_mdp_pipe *mdss_mdp_pipe_init(struct mdss_mdp_mixer *mixer, if (pipe && type == MDSS_MDP_PIPE_TYPE_CURSOR) { kref_init(&pipe->kref); INIT_LIST_HEAD(&pipe->buf_queue); pr_debug("cursor: type=%x pnum=%d\n", pipe->type, pipe->num); goto cursor_done; } Loading drivers/video/msm/mdss/mdss_mdp_pp.c +3 −0 Original line number Diff line number Diff line Loading @@ -1415,6 +1415,9 @@ int mdss_mdp_pipe_sspp_setup(struct mdss_mdp_pipe *pipe, u32 *op) pipe_num = pipe->num - MDSS_MDP_SSPP_DMA0; pipe_cnt = mdata->ndma_pipes; break; case MDSS_MDP_PIPE_TYPE_CURSOR: /* cursor does not support the feature */ return 0; default: pr_err("Invalid pipe type %d\n", pipe->type); return -EINVAL; Loading Loading
drivers/video/msm/mdss/mdss_mdp_overlay.c +35 −16 Original line number Diff line number Diff line Loading @@ -2903,17 +2903,50 @@ int mdss_mdp_cursor_pipe_setup(struct msm_fb_data_type *mfd, struct mdp_overlay *req, int cursor_pipe) { struct mdss_mdp_pipe *pipe; struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); struct mdss_data_type *mdata = mdss_mdp_get_mdata(); int ret = 0; u32 cursor_addr; struct mdss_mdp_data *buf = NULL; req->id = mdp5_data->cursor_ndx[cursor_pipe]; ret = mdss_mdp_overlay_pipe_setup(mfd, req, &pipe, NULL, false); if (ret) { pr_err("cursor pipe setup failed, cursor_pipe:%d, ret:%d", pr_err("cursor pipe setup failed, cursor_pipe:%d, ret:%d\n", cursor_pipe, ret); mdp5_data->cursor_ndx[cursor_pipe] = MSMFB_NEW_REQUEST; return ret; } mdp5_data->cursor_ndx[cursor_pipe] = req->id; pr_debug("req id:%d cursor_pipe:%d pnum:%d\n", req->id, cursor_pipe, pipe->ndx); if (mdata->mdss_util->iommu_attached()) { cursor_addr = mfd->cursor_buf_iova; } else { if (MDSS_LPAE_CHECK(mfd->cursor_buf_phys)) { pr_err("can't access phy mem >4GB w/o iommu\n"); ret = -ERANGE; goto done; } cursor_addr = mfd->cursor_buf_phys; } buf = mdss_mdp_overlay_buf_alloc(mfd, pipe); if (!buf) { pr_err("unable to allocate memory for cursor buffer\n"); ret = -ENOMEM; goto done; } mdp5_data->cursor_ndx[cursor_pipe] = pipe->ndx; buf->p[0].addr = cursor_addr; buf->p[0].len = MDSS_MDP_CURSOR_SIZE; buf->num_planes = 1; done: if (ret && mdp5_data->cursor_ndx[cursor_pipe] == MSMFB_NEW_REQUEST) mdss_mdp_overlay_release(mfd, pipe->ndx); return ret; } Loading Loading @@ -3042,7 +3075,6 @@ static int mdss_mdp_hw_cursor_pipe_update(struct msm_fb_data_type *mfd, req.transp_mask = (img->bg_color & 0xffffff); if (mfd->cursor_buf && (cursor->set & FB_CUR_SETIMAGE)) { u32 cursor_addr; ret = copy_from_user(mfd->cursor_buf, img->data, img->width * img->height * 4); if (ret) { Loading @@ -3050,21 +3082,8 @@ static int mdss_mdp_hw_cursor_pipe_update(struct msm_fb_data_type *mfd, goto done; } if (mdata->mdss_util->iommu_attached()) { cursor_addr = mfd->cursor_buf_iova; } else { if (MDSS_LPAE_CHECK(mfd->cursor_buf_phys)) { pr_err("can't access phy mem >4GB w/o iommu\n"); ret = -ERANGE; goto done; } cursor_addr = mfd->cursor_buf_phys; } mixer->cursor_hotx = 0; mixer->cursor_hoty = 0; mdp5_data->cursor_ndx[CURSOR_PIPE_LEFT] = MSMFB_NEW_REQUEST; mdp5_data->cursor_ndx[CURSOR_PIPE_RIGHT] = MSMFB_NEW_REQUEST; } if (start_x + roi.w <= left_lm_w) { Loading
drivers/video/msm/mdss/mdss_mdp_pipe.c +3 −0 Original line number Diff line number Diff line Loading @@ -873,6 +873,9 @@ static struct mdss_mdp_pipe *mdss_mdp_pipe_init(struct mdss_mdp_mixer *mixer, if (pipe && type == MDSS_MDP_PIPE_TYPE_CURSOR) { kref_init(&pipe->kref); INIT_LIST_HEAD(&pipe->buf_queue); pr_debug("cursor: type=%x pnum=%d\n", pipe->type, pipe->num); goto cursor_done; } Loading
drivers/video/msm/mdss/mdss_mdp_pp.c +3 −0 Original line number Diff line number Diff line Loading @@ -1415,6 +1415,9 @@ int mdss_mdp_pipe_sspp_setup(struct mdss_mdp_pipe *pipe, u32 *op) pipe_num = pipe->num - MDSS_MDP_SSPP_DMA0; pipe_cnt = mdata->ndma_pipes; break; case MDSS_MDP_PIPE_TYPE_CURSOR: /* cursor does not support the feature */ return 0; default: pr_err("Invalid pipe type %d\n", pipe->type); return -EINVAL; Loading