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: Sricharan R <sricharan@codeaurora.org> Signed-off-by: Archit Taneja <architt@codeaurora.org> Signed-off-by: Rob Clark <robdclark@gmail.com>
This commit is contained in:
parent
d72ab59931
commit
f759020530
|
@ -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 @@ fail:
|
||||||
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)
|
||||||
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 {
|
||||||
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;
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue