Commit f7590205 authored by Sricharan R's avatar Sricharan R Committed by Rob Clark

drm/msm/mdp: Detach iommu in mdp4_destroy

attach_dev gets called in mdp4_kms_init, but there is no corresponding
detach_dev called in the error path or in the kms driver unload path.

Detach and destroy mmu in mdp4_destroy.
Signed-off-by: default avatarSricharan R <sricharan@codeaurora.org>
Signed-off-by: default avatarArchit Taneja <architt@codeaurora.org>
Signed-off-by: default avatarRob Clark <robdclark@gmail.com>
parent d72ab599
...@@ -179,9 +179,20 @@ static long mdp4_round_pixclk(struct msm_kms *kms, unsigned long rate, ...@@ -179,9 +179,20 @@ static long mdp4_round_pixclk(struct msm_kms *kms, unsigned long rate,
} }
} }
static const char * const iommu_ports[] = {
"mdp_port0_cb0", "mdp_port1_cb0",
};
static void mdp4_destroy(struct msm_kms *kms) static void mdp4_destroy(struct msm_kms *kms)
{ {
struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms)); struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(kms));
struct msm_mmu *mmu = mdp4_kms->mmu;
if (mmu) {
mmu->funcs->detach(mmu, iommu_ports, ARRAY_SIZE(iommu_ports));
mmu->funcs->destroy(mmu);
}
if (mdp4_kms->blank_cursor_iova) if (mdp4_kms->blank_cursor_iova)
msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id); msm_gem_put_iova(mdp4_kms->blank_cursor_bo, mdp4_kms->id);
if (mdp4_kms->blank_cursor_bo) if (mdp4_kms->blank_cursor_bo)
...@@ -446,10 +457,6 @@ static int modeset_init(struct mdp4_kms *mdp4_kms) ...@@ -446,10 +457,6 @@ static int modeset_init(struct mdp4_kms *mdp4_kms)
return ret; return ret;
} }
static const char *iommu_ports[] = {
"mdp_port0_cb0", "mdp_port1_cb0",
};
struct msm_kms *mdp4_kms_init(struct drm_device *dev) struct msm_kms *mdp4_kms_init(struct drm_device *dev)
{ {
struct platform_device *pdev = dev->platformdev; struct platform_device *pdev = dev->platformdev;
...@@ -554,6 +561,8 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev) ...@@ -554,6 +561,8 @@ struct msm_kms *mdp4_kms_init(struct drm_device *dev)
ARRAY_SIZE(iommu_ports)); ARRAY_SIZE(iommu_ports));
if (ret) if (ret)
goto fail; goto fail;
mdp4_kms->mmu = mmu;
} else { } else {
dev_info(dev->dev, "no iommu, fallback to phys " dev_info(dev->dev, "no iommu, fallback to phys "
"contig buffers for scanout\n"); "contig buffers for scanout\n");
......
...@@ -45,6 +45,7 @@ struct mdp4_kms { ...@@ -45,6 +45,7 @@ struct mdp4_kms {
struct clk *pclk; struct clk *pclk;
struct clk *lut_clk; struct clk *lut_clk;
struct clk *axi_clk; struct clk *axi_clk;
struct msm_mmu *mmu;
struct mdp_irq error_handler; struct mdp_irq error_handler;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment