Merge "msm: kgsl: Do not execute shader on wakeup from power collapse for 8064"
diff --git a/drivers/video/msm/external_common.c b/drivers/video/msm/external_common.c
index c6dce46..b952522 100644
--- a/drivers/video/msm/external_common.c
+++ b/drivers/video/msm/external_common.c
@@ -1363,7 +1363,7 @@
const uint8 *vsd = hdmi_edid_find_block(in_buf, DBC_START_OFFSET, 3,
&len);
- if (vsd == NULL || len < 8)
+ if (vsd == NULL)
return 0;
DEV_DBG("EDID: VSD PhyAddr=%04x, MaxTMDS=%dMHz\n",
diff --git a/drivers/video/msm/mdp.c b/drivers/video/msm/mdp.c
index 7af5d19..8dfa04b 100644
--- a/drivers/video/msm/mdp.c
+++ b/drivers/video/msm/mdp.c
@@ -45,7 +45,7 @@
#include "mipi_dsi.h"
uint32 mdp4_extn_disp;
-
+u32 mdp_iommu_max_map_size;
static struct clk *mdp_clk;
static struct clk *mdp_pclk;
static struct clk *mdp_lut_clk;
@@ -2434,6 +2434,8 @@
mfd->cont_splash_done = 1;
}
+ if(mfd->index == 0)
+ mdp_iommu_max_map_size = mfd->max_map_size;
mdp_pipe_ctrl(MDP_CMD_BLOCK, MDP_BLOCK_POWER_ON, FALSE);
ret = panel_next_on(pdev);
diff --git a/drivers/video/msm/mdp4.h b/drivers/video/msm/mdp4.h
index 50e50a9..9555b44 100644
--- a/drivers/video/msm/mdp4.h
+++ b/drivers/video/msm/mdp4.h
@@ -33,6 +33,7 @@
extern u64 mdp_max_bw;
extern u32 mdp_bw_ab_factor;
extern u32 mdp_bw_ib_factor;
+extern u32 mdp_iommu_max_map_size;
#define MDP4_BW_AB_DEFAULT_FACTOR (115) /* 1.15 */
#define MDP4_BW_IB_DEFAULT_FACTOR (150) /* 1.5 */
#define MDP_BUS_SCALE_AB_STEP (0x4000000)
diff --git a/drivers/video/msm/mdp4_overlay.c b/drivers/video/msm/mdp4_overlay.c
index e0b464d..039afaa 100644
--- a/drivers/video/msm/mdp4_overlay.c
+++ b/drivers/video/msm/mdp4_overlay.c
@@ -44,8 +44,6 @@
#define VERSION_KEY_MASK 0xFFFFFF00
-#define MDP_IOMMU_OVERMAP_SIZE 640 * 1024 * 4 * 2
-
struct mdp4_overlay_ctrl {
struct mdp4_overlay_pipe plist[OVERLAY_PIPE_MAX];
struct mdp4_overlay_pipe *stage[MDP4_MIXER_MAX][MDP4_MIXER_STAGE_MAX];
@@ -321,6 +319,8 @@
struct ion_handle **srcp_ihdl)
{
struct mdp4_iommu_pipe_info *iom;
+ unsigned long size = 0, map_size = 0;
+ int ret;
if (!display_iclient)
return -EINVAL;
@@ -335,8 +335,15 @@
pipe->pipe_ndx, plane);
if(mdp4_overlay_format2type(pipe->src_format) == OVERLAY_TYPE_RGB) {
+ ret = ion_handle_get_size(display_iclient, *srcp_ihdl, &size);
+ if (ret)
+ pr_err("ion_handle_get_size failed with ret %d\n", ret);
+ map_size = mdp_iommu_max_map_size;
+ if(map_size < size)
+ map_size = size;
+
if (ion_map_iommu(display_iclient, *srcp_ihdl,
- DISPLAY_READ_DOMAIN, GEN_POOL, SZ_4K, MDP_IOMMU_OVERMAP_SIZE, start,
+ DISPLAY_READ_DOMAIN, GEN_POOL, SZ_4K, map_size, start,
len, 0, 0)) {
ion_free(display_iclient, *srcp_ihdl);
pr_err("%s(): ion_map_iommu() failed\n",
diff --git a/drivers/video/msm/mhl/mhl_8334.c b/drivers/video/msm/mhl/mhl_8334.c
index 1a29677..3123d3d 100644
--- a/drivers/video/msm/mhl/mhl_8334.c
+++ b/drivers/video/msm/mhl/mhl_8334.c
@@ -77,7 +77,7 @@
{
static struct regulator *reg_8038_l20;
static struct regulator *reg_8038_l11;
- int rc;
+ int rc = -EINVAL;
pr_debug("Inside %s\n", __func__);
if (!reg_8038_l20) {
diff --git a/drivers/video/msm/msm_fb.c b/drivers/video/msm/msm_fb.c
index 0c832a2..ec5ee51 100644
--- a/drivers/video/msm/msm_fb.c
+++ b/drivers/video/msm/msm_fb.c
@@ -451,6 +451,11 @@
rc = msm_fb_register(mfd);
if (rc)
return rc;
+
+ mfd->panel_info.xres_aligned = ALIGN(mfd->panel_info.xres, 64);
+ mfd->panel_info.yres_aligned = ALIGN(mfd->panel_info.yres, 64);
+ mfd->max_map_size = mfd->panel_info.xres_aligned * mfd->panel_info.yres_aligned * 4 * 2;
+
err = pm_runtime_set_active(mfd->fbi->dev);
if (err < 0)
printk(KERN_ERR "pm_runtime: fail to set active.\n");
diff --git a/drivers/video/msm/msm_fb.h b/drivers/video/msm/msm_fb.h
index 7a6b1d2..647c20f 100644
--- a/drivers/video/msm/msm_fb.h
+++ b/drivers/video/msm/msm_fb.h
@@ -218,6 +218,7 @@
unsigned char *copy_splash_phys;
uint32 sec_mapped;
uint32 sec_active;
+ uint32 max_map_size;
};
struct msm_fb_backup_type {
struct fb_info info;
diff --git a/drivers/video/msm/msm_fb_panel.h b/drivers/video/msm/msm_fb_panel.h
index 5b5598b..c35f5e1 100644
--- a/drivers/video/msm/msm_fb_panel.h
+++ b/drivers/video/msm/msm_fb_panel.h
@@ -182,6 +182,8 @@
struct lcdc_panel_info lcdc;
struct mipi_panel_info mipi;
struct lvds_panel_info lvds;
+ __u32 xres_aligned;
+ __u32 yres_aligned;
};
#define MSM_FB_SINGLE_MODE_PANEL(pinfo) \
diff --git a/drivers/video/msm/vidc/common/enc/venc.c b/drivers/video/msm/vidc/common/enc/venc.c
index 3ccbfe5..8715d9c 100644
--- a/drivers/video/msm/vidc/common/enc/venc.c
+++ b/drivers/video/msm/vidc/common/enc/venc.c
@@ -1427,6 +1427,12 @@
return -EFAULT;
DBG("VEN_IOCTL_GET_SEQUENCE_HDR\n");
+ if (!access_ok(VERIFY_WRITE, seq_header.hdrbufptr,
+ seq_header.bufsize)) {
+ ERR("VEN_IOCTL_GET_SEQUENCE_HDR:"\
+ " Userspace address verification failed.\n");
+ return -EFAULT;
+ }
result = vid_enc_get_sequence_header(client_ctx,
&seq_header);
if (!result) {