diff options
| author | Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org> | 2013-03-28 13:11:12 -0700 |
|---|---|---|
| committer | David Keitel <dkeitel@codeaurora.org> | 2016-03-23 20:16:09 -0700 |
| commit | b3663936b1555fbc2e2f7249e81b51712187f120 (patch) | |
| tree | 5277b23226955ba6a92ee4647d4a2c3672d9a752 | |
| parent | 95eba1e8c6cbdef9013a340da7fb0e9b7dc6bed6 (diff) | |
msm: mdss: Expose bandwidth compression capability to user
The userspace needs to be aware of the presence of bandwidth
compression use case which is a new hardware feature
Change-Id: I02ec320a2ab9add78000df0459c8095c8f8505fb
Signed-off-by: Sree Sesha Aravind Vadrevu <svadrevu@codeaurora.org>
| -rw-r--r-- | Documentation/devicetree/bindings/fb/mdss-mdp.txt | 5 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss.h | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp.c | 2 | ||||
| -rw-r--r-- | drivers/video/fbdev/msm/mdss_mdp_overlay.c | 24 | ||||
| -rw-r--r-- | include/uapi/linux/msm_mdp.h | 1 |
5 files changed, 28 insertions, 6 deletions
diff --git a/Documentation/devicetree/bindings/fb/mdss-mdp.txt b/Documentation/devicetree/bindings/fb/mdss-mdp.txt index 0422b57708e6..3bd8caa80e4f 100644 --- a/Documentation/devicetree/bindings/fb/mdss-mdp.txt +++ b/Documentation/devicetree/bindings/fb/mdss-mdp.txt @@ -108,7 +108,8 @@ Optional properties: - qcom,mdss-rot-block-size: The size of a memory block (in pixels) to be used by the rotator. If this property is not specified, then a default value of 128 pixels would be used. - +- qcom,mdss-has-bwc: Boolean property to indicate the presence of bandwidth + compression feature in the rotator. Optional subnodes: Child nodes representing the frame buffer virtual devices. @@ -141,7 +142,7 @@ Example: qcom,mdss-pipe-dma-fetch-id = <10 13>; qcom,mdss-smp-data = <22 4096>; qcom,mdss-rot-block-size = <64>; - + qcom,mdss-has-bwc; qcom,mdss-ctl-off = <0x00000600 0x00000700 0x00000800 0x00000900 0x0000A00>; qcom,mdss-mixer-intf-off = <0x00003200 0x00003600 diff --git a/drivers/video/fbdev/msm/mdss.h b/drivers/video/fbdev/msm/mdss.h index bc2c509cf07d..1a34c6e558ea 100644 --- a/drivers/video/fbdev/msm/mdss.h +++ b/drivers/video/fbdev/msm/mdss.h @@ -73,7 +73,7 @@ struct mdss_data_type { u32 irq_mask; u32 irq_ena; u32 irq_buzy; - + u32 has_bwc; u32 mdp_irq_mask; u32 mdp_hist_irq_mask; diff --git a/drivers/video/fbdev/msm/mdss_mdp.c b/drivers/video/fbdev/msm/mdss_mdp.c index fb4c34aa3afa..783a8edf5fa2 100644 --- a/drivers/video/fbdev/msm/mdss_mdp.c +++ b/drivers/video/fbdev/msm/mdss_mdp.c @@ -1510,6 +1510,8 @@ static int mdss_mdp_parse_dt_misc(struct platform_device *pdev) &data); mdata->rot_block_size = (!rc ? data : 128); + mdata->has_bwc = of_property_read_bool(pdev->dev.of_node, + "qcom,mdss-has-bwc"); return 0; } diff --git a/drivers/video/fbdev/msm/mdss_mdp_overlay.c b/drivers/video/fbdev/msm/mdss_mdp_overlay.c index 3cce4f9c15d3..718af09b04de 100644 --- a/drivers/video/fbdev/msm/mdss_mdp_overlay.c +++ b/drivers/video/fbdev/msm/mdss_mdp_overlay.c @@ -176,6 +176,7 @@ static int mdss_mdp_overlay_rotator_setup(struct msm_fb_data_type *mfd, struct mdss_mdp_rotator_session *rot; struct mdss_mdp_format_params *fmt; int ret = 0; + u32 bwc_enabled; pr_debug("rot ctl=%u req id=%x\n", mdp5_data->ctl->num, req->id); @@ -212,7 +213,14 @@ static int mdss_mdp_overlay_rotator_setup(struct msm_fb_data_type *mfd, rot->flags = req->flags & (MDP_ROT_90 | MDP_FLIP_LR | MDP_FLIP_UD | MDP_SECURE_OVERLAY_SESSION); - rot->bwc_mode = (req->flags & MDP_BWC_EN) ? 1 : 0; + bwc_enabled = req->flags & MDP_BWC_EN; + if (bwc_enabled && !mdp5_data->mdata->has_bwc) { + pr_err("BWC is not supported in MDP version %x\n", + mdp5_data->mdata->mdp_rev); + rot->bwc_mode = 0; + } else { + rot->bwc_mode = bwc_enabled ? 1 : 0; + } rot->format = fmt->format; rot->img_width = req->src.width; rot->img_height = req->src.height; @@ -248,6 +256,7 @@ static int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd, struct mdss_overlay_private *mdp5_data = mfd_to_mdp5_data(mfd); struct mdp_histogram_start_req hist; int ret; + u32 bwc_enabled; if (mdp5_data->ctl == NULL) return -ENODEV; @@ -356,8 +365,15 @@ static int mdss_mdp_overlay_pipe_setup(struct msm_fb_data_type *mfd, } pipe->flags = req->flags; - pipe->bwc_mode = pipe->mixer->rotator_mode ? - 0 : (req->flags & MDP_BWC_EN ? 1 : 0) ; + bwc_enabled = req->flags & MDP_BWC_EN; + if (bwc_enabled && !mdp5_data->mdata->has_bwc) { + pr_err("BWC is not supported in MDP version %x\n", + mdp5_data->mdata->mdp_rev); + pipe->bwc_mode = 0; + } else { + pipe->bwc_mode = pipe->mixer->rotator_mode ? + 0 : (bwc_enabled ? 1 : 0) ; + } pipe->img_width = req->src.width & 0x3fff; pipe->img_height = req->src.height & 0x3fff; pipe->src.x = req->src_rect.x; @@ -1562,6 +1578,8 @@ static int mdss_fb_get_hw_caps(struct msm_fb_data_type *mfd, caps->vig_pipes = mdata->nvig_pipes; caps->rgb_pipes = mdata->nrgb_pipes; caps->dma_pipes = mdata->ndma_pipes; + if (mdata->has_bwc) + caps->features |= MDP_BWC_EN; return 0; } diff --git a/include/uapi/linux/msm_mdp.h b/include/uapi/linux/msm_mdp.h index 00e7d771d1a1..5a767754a114 100644 --- a/include/uapi/linux/msm_mdp.h +++ b/include/uapi/linux/msm_mdp.h @@ -686,6 +686,7 @@ struct mdss_hw_caps { uint8_t rgb_pipes; uint8_t vig_pipes; uint8_t dma_pipes; + uint32_t features; }; struct msmfb_metadata { |
