summaryrefslogtreecommitdiff
path: root/drivers/gpu
diff options
context:
space:
mode:
authorClarence Ip <cip@codeaurora.org>2017-02-16 15:25:38 -0500
committerClarence Ip <cip@codeaurora.org>2017-07-21 10:50:11 -0400
commite9e11292d7c50fa1c9d69ba8c0fa90ce15e9410c (patch)
tree2da0b728627b41382d73666b73ba10594a079148 /drivers/gpu
parent7aa065cbc4f86125895f6c7c6a5ac1fdda231505 (diff)
drm/msm/sde: add null checks to scaler3 lut setup
Plane state is set to NULL during color fill operations. This patch adds checks to gracefully handle NULL plane state during the scaler3 setup path. CRs-Fixed: 2019301 Change-Id: I3ac5bd8f26e68afe559bf7c815da904392d3de13 Signed-off-by: Clarence Ip <cip@codeaurora.org>
Diffstat (limited to 'drivers/gpu')
-rw-r--r--drivers/gpu/drm/msm/sde/sde_plane.c19
1 files changed, 15 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/sde/sde_plane.c b/drivers/gpu/drm/msm/sde/sde_plane.c
index 6fe1d1629d22..094a07109834 100644
--- a/drivers/gpu/drm/msm/sde/sde_plane.c
+++ b/drivers/gpu/drm/msm/sde/sde_plane.c
@@ -686,9 +686,20 @@ static int _sde_plane_setup_scaler3_lut(struct sde_phy_plane *pp,
struct sde_plane_state *pstate)
{
struct sde_plane *psde = pp->sde_plane;
- struct sde_hw_scaler3_cfg *cfg = pp->scaler3_cfg;
+ struct sde_hw_scaler3_cfg *cfg;
int ret = 0;
+ if (!pp || !pp->scaler3_cfg) {
+ SDE_ERROR("invalid args\n");
+ return -EINVAL;
+ } else if (!pstate) {
+ /* pstate is expected to be null on forced color fill */
+ SDE_DEBUG("null pstate\n");
+ return -EINVAL;
+ }
+
+ cfg = pp->scaler3_cfg;
+
cfg->dir_lut = msm_property_get_blob(
&psde->property_info,
pstate->property_blobs, &cfg->dir_len,
@@ -1081,7 +1092,7 @@ static void _sde_plane_setup_scaler(struct sde_phy_plane *pp,
pp->scaler3_cfg, fmt,
chroma_subsmpl_h, chroma_subsmpl_v);
}
- } else if (!pp->pixel_ext_usr) {
+ } else if (!pp->pixel_ext_usr || !pstate) {
uint32_t deci_dim, i;
/* calculate default configuration for QSEED2 */
@@ -1701,8 +1712,8 @@ void sde_plane_flush(struct drm_plane *plane)
*/
list_for_each_entry(pp, &psde->phy_plane_head, phy_plane_list) {
if (psde->is_error)
- /* force white frame with 0% alpha pipe output on error */
- _sde_plane_color_fill(pp, 0xFFFFFF, 0x0);
+ /* force white frame with 100% alpha pipe output on error */
+ _sde_plane_color_fill(pp, 0xFFFFFF, 0xFF);
else if (pp->color_fill & SDE_PLANE_COLOR_FILL_FLAG)
/* force 100% alpha */
_sde_plane_color_fill(pp, pp->color_fill, 0xFF);