Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 020a0bbc authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge branch 'msm-fixes-4.9' of git://people.freedesktop.org/~robclark/linux into drm-fixes

Fixes for some msm issues

* 'msm-fixes-4.9' of git://people.freedesktop.org/~robclark/linux:
  drm/msm: Fix error handling crashes seen when VRAM allocation fails
  drm/msm/mdp5: 8x16 actually has 8 mixer stages
  drm/msm/mdp5: no scaling support on RGBn pipes for 8x16
  drm/msm/mdp5: handle non-fullscreen base plane case
  drm/msm: Set CLK_IGNORE_UNUSED flag for PLL clocks
  drm/msm/dsi: Queue HPD helper work in attach/detach callbacks
parents 672c9891 16976085
Loading
Loading
Loading
Loading
+12 −2
Original line number Original line Diff line number Diff line
@@ -139,6 +139,7 @@ struct msm_dsi_host {


	u32 err_work_state;
	u32 err_work_state;
	struct work_struct err_work;
	struct work_struct err_work;
	struct work_struct hpd_work;
	struct workqueue_struct *workqueue;
	struct workqueue_struct *workqueue;


	/* DSI 6G TX buffer*/
	/* DSI 6G TX buffer*/
@@ -1294,6 +1295,14 @@ static void dsi_sw_reset_restore(struct msm_dsi_host *msm_host)
	wmb();	/* make sure dsi controller enabled again */
	wmb();	/* make sure dsi controller enabled again */
}
}


static void dsi_hpd_worker(struct work_struct *work)
{
	struct msm_dsi_host *msm_host =
		container_of(work, struct msm_dsi_host, hpd_work);

	drm_helper_hpd_irq_event(msm_host->dev);
}

static void dsi_err_worker(struct work_struct *work)
static void dsi_err_worker(struct work_struct *work)
{
{
	struct msm_dsi_host *msm_host =
	struct msm_dsi_host *msm_host =
@@ -1480,7 +1489,7 @@ static int dsi_host_attach(struct mipi_dsi_host *host,


	DBG("id=%d", msm_host->id);
	DBG("id=%d", msm_host->id);
	if (msm_host->dev)
	if (msm_host->dev)
		drm_helper_hpd_irq_event(msm_host->dev);
		queue_work(msm_host->workqueue, &msm_host->hpd_work);


	return 0;
	return 0;
}
}
@@ -1494,7 +1503,7 @@ static int dsi_host_detach(struct mipi_dsi_host *host,


	DBG("id=%d", msm_host->id);
	DBG("id=%d", msm_host->id);
	if (msm_host->dev)
	if (msm_host->dev)
		drm_helper_hpd_irq_event(msm_host->dev);
		queue_work(msm_host->workqueue, &msm_host->hpd_work);


	return 0;
	return 0;
}
}
@@ -1748,6 +1757,7 @@ int msm_dsi_host_init(struct msm_dsi *msm_dsi)
	/* setup workqueue */
	/* setup workqueue */
	msm_host->workqueue = alloc_ordered_workqueue("dsi_drm_work", 0);
	msm_host->workqueue = alloc_ordered_workqueue("dsi_drm_work", 0);
	INIT_WORK(&msm_host->err_work, dsi_err_worker);
	INIT_WORK(&msm_host->err_work, dsi_err_worker);
	INIT_WORK(&msm_host->hpd_work, dsi_hpd_worker);


	msm_dsi->host = &msm_host->base;
	msm_dsi->host = &msm_host->base;
	msm_dsi->id = msm_host->id;
	msm_dsi->id = msm_host->id;
+1 −0
Original line number Original line Diff line number Diff line
@@ -521,6 +521,7 @@ static int pll_28nm_register(struct dsi_pll_28nm *pll_28nm)
		.parent_names = (const char *[]){ "xo" },
		.parent_names = (const char *[]){ "xo" },
		.num_parents = 1,
		.num_parents = 1,
		.name = vco_name,
		.name = vco_name,
		.flags = CLK_IGNORE_UNUSED,
		.ops = &clk_ops_dsi_pll_28nm_vco,
		.ops = &clk_ops_dsi_pll_28nm_vco,
	};
	};
	struct device *dev = &pll_28nm->pdev->dev;
	struct device *dev = &pll_28nm->pdev->dev;
+1 −0
Original line number Original line Diff line number Diff line
@@ -412,6 +412,7 @@ static int pll_28nm_register(struct dsi_pll_28nm *pll_28nm)
	struct clk_init_data vco_init = {
	struct clk_init_data vco_init = {
		.parent_names = (const char *[]){ "pxo" },
		.parent_names = (const char *[]){ "pxo" },
		.num_parents = 1,
		.num_parents = 1,
		.flags = CLK_IGNORE_UNUSED,
		.ops = &clk_ops_dsi_pll_28nm_vco,
		.ops = &clk_ops_dsi_pll_28nm_vco,
	};
	};
	struct device *dev = &pll_28nm->pdev->dev;
	struct device *dev = &pll_28nm->pdev->dev;
+1 −0
Original line number Original line Diff line number Diff line
@@ -702,6 +702,7 @@ static struct clk_init_data pll_init = {
	.ops = &hdmi_8996_pll_ops,
	.ops = &hdmi_8996_pll_ops,
	.parent_names = hdmi_pll_parents,
	.parent_names = hdmi_pll_parents,
	.num_parents = ARRAY_SIZE(hdmi_pll_parents),
	.num_parents = ARRAY_SIZE(hdmi_pll_parents),
	.flags = CLK_IGNORE_UNUSED,
};
};


int msm_hdmi_pll_8996_init(struct platform_device *pdev)
int msm_hdmi_pll_8996_init(struct platform_device *pdev)
+1 −0
Original line number Original line Diff line number Diff line
@@ -424,6 +424,7 @@ static struct clk_init_data pll_init = {
	.ops = &hdmi_pll_ops,
	.ops = &hdmi_pll_ops,
	.parent_names = hdmi_pll_parents,
	.parent_names = hdmi_pll_parents,
	.num_parents = ARRAY_SIZE(hdmi_pll_parents),
	.num_parents = ARRAY_SIZE(hdmi_pll_parents),
	.flags = CLK_IGNORE_UNUSED,
};
};


int msm_hdmi_pll_8960_init(struct platform_device *pdev)
int msm_hdmi_pll_8960_init(struct platform_device *pdev)
Loading