aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorLloyd Atkinson <latkinso@codeaurora.org>2018-01-16 16:26:01 -0500
committerRob Clark <robdclark@gmail.com>2018-02-20 10:41:20 -0500
commitf0efc831d9439589efaf6406695470eca93ba08d (patch)
treec08b08600d233fc1e5607900b874e2e2c7f2e9d0 /drivers
parent933519a5a269d8460450545adefcb5caec622cac (diff)
drm/msm/dsi: check for failure on retrieving pll in dsi manager
Make msm_dsi_pll_init consistently return an error code instead of NULL when pll initialization fails so that later pll retrieval can check against an error code. Add checks for these failures after retrieval of src_pll to avoid invalid pointer dereferences later in msm_dsi_pll_get_clk_provider. Signed-off-by: Lloyd Atkinson <latkinso@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/drm/msm/dsi/dsi_manager.c4
-rw-r--r--drivers/gpu/drm/msm/dsi/phy/dsi_phy.c6
-rw-r--r--drivers/gpu/drm/msm/dsi/pll/dsi_pll.c2
3 files changed, 8 insertions, 4 deletions
diff --git a/drivers/gpu/drm/msm/dsi/dsi_manager.c b/drivers/gpu/drm/msm/dsi/dsi_manager.c
index 855248132b2b..1a54fd67c9c4 100644
--- a/drivers/gpu/drm/msm/dsi/dsi_manager.c
+++ b/drivers/gpu/drm/msm/dsi/dsi_manager.c
@@ -88,6 +88,8 @@ static int dsi_mgr_setup_components(int id)
88 88
89 msm_dsi_phy_set_usecase(msm_dsi->phy, MSM_DSI_PHY_STANDALONE); 89 msm_dsi_phy_set_usecase(msm_dsi->phy, MSM_DSI_PHY_STANDALONE);
90 src_pll = msm_dsi_phy_get_pll(msm_dsi->phy); 90 src_pll = msm_dsi_phy_get_pll(msm_dsi->phy);
91 if (IS_ERR(src_pll))
92 return PTR_ERR(src_pll);
91 ret = msm_dsi_host_set_src_pll(msm_dsi->host, src_pll); 93 ret = msm_dsi_host_set_src_pll(msm_dsi->host, src_pll);
92 } else if (!other_dsi) { 94 } else if (!other_dsi) {
93 ret = 0; 95 ret = 0;
@@ -116,6 +118,8 @@ static int dsi_mgr_setup_components(int id)
116 msm_dsi_phy_set_usecase(clk_slave_dsi->phy, 118 msm_dsi_phy_set_usecase(clk_slave_dsi->phy,
117 MSM_DSI_PHY_SLAVE); 119 MSM_DSI_PHY_SLAVE);
118 src_pll = msm_dsi_phy_get_pll(clk_master_dsi->phy); 120 src_pll = msm_dsi_phy_get_pll(clk_master_dsi->phy);
121 if (IS_ERR(src_pll))
122 return PTR_ERR(src_pll);
119 ret = msm_dsi_host_set_src_pll(msm_dsi->host, src_pll); 123 ret = msm_dsi_host_set_src_pll(msm_dsi->host, src_pll);
120 if (ret) 124 if (ret)
121 return ret; 125 return ret;
diff --git a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
index 790ca280cbfd..c8bfaa780651 100644
--- a/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
+++ b/drivers/gpu/drm/msm/dsi/phy/dsi_phy.c
@@ -503,10 +503,10 @@ static int dsi_phy_driver_probe(struct platform_device *pdev)
503 goto fail; 503 goto fail;
504 504
505 phy->pll = msm_dsi_pll_init(pdev, phy->cfg->type, phy->id); 505 phy->pll = msm_dsi_pll_init(pdev, phy->cfg->type, phy->id);
506 if (!phy->pll) 506 if (IS_ERR_OR_NULL(phy->pll))
507 dev_info(dev, 507 dev_info(dev,
508 "%s: pll init failed, need separate pll clk driver\n", 508 "%s: pll init failed: %ld, need separate pll clk driver\n",
509 __func__); 509 __func__, PTR_ERR(phy->pll));
510 510
511 dsi_phy_disable_resource(phy); 511 dsi_phy_disable_resource(phy);
512 512
diff --git a/drivers/gpu/drm/msm/dsi/pll/dsi_pll.c b/drivers/gpu/drm/msm/dsi/pll/dsi_pll.c
index bc289f5c9078..491f08dce969 100644
--- a/drivers/gpu/drm/msm/dsi/pll/dsi_pll.c
+++ b/drivers/gpu/drm/msm/dsi/pll/dsi_pll.c
@@ -173,7 +173,7 @@ struct msm_dsi_pll *msm_dsi_pll_init(struct platform_device *pdev,
173 173
174 if (IS_ERR(pll)) { 174 if (IS_ERR(pll)) {
175 dev_err(dev, "%s: failed to init DSI PLL\n", __func__); 175 dev_err(dev, "%s: failed to init DSI PLL\n", __func__);
176 return NULL; 176 return pll;
177 } 177 }
178 178
179 pll->type = type; 179 pll->type = type;