mirror of
https://github.com/torvalds/linux.git
synced 2026-06-01 02:53:36 +02:00
drm/msm/mdp4: use msm_kms_init_vm() instead of duplicating it
Use the msm_kms_init_vm() function to allocate memory manager instead of hand-coding a copy of it. Although MDP4 platforms don't have MDSS device, it's still safe to use the function as all MDP4 devices have IOMMU and the parent of the MDP4 is the root SoC device. Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@oss.qualcomm.com> Patchwork: https://patchwork.freedesktop.org/patch/672563/ Signed-off-by: Rob Clark <robin.clark@oss.qualcomm.com>
This commit is contained in:
parent
618c11ea0b
commit
e05edbcf3a
|
|
@ -1110,7 +1110,7 @@ static int _dpu_kms_mmu_init(struct dpu_kms *dpu_kms)
|
|||
{
|
||||
struct drm_gpuvm *vm;
|
||||
|
||||
vm = msm_kms_init_vm(dpu_kms->dev);
|
||||
vm = msm_kms_init_vm(dpu_kms->dev, dpu_kms->dev->dev->parent);
|
||||
if (IS_ERR(vm))
|
||||
return PTR_ERR(vm);
|
||||
|
||||
|
|
|
|||
|
|
@ -391,11 +391,9 @@ static void read_mdp_hw_revision(struct mdp4_kms *mdp4_kms,
|
|||
|
||||
static int mdp4_kms_init(struct drm_device *dev)
|
||||
{
|
||||
struct platform_device *pdev = to_platform_device(dev->dev);
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct mdp4_kms *mdp4_kms = to_mdp4_kms(to_mdp_kms(priv->kms));
|
||||
struct msm_kms *kms = NULL;
|
||||
struct msm_mmu *mmu;
|
||||
struct drm_gpuvm *vm;
|
||||
int ret;
|
||||
u32 major, minor;
|
||||
|
|
@ -458,30 +456,13 @@ static int mdp4_kms_init(struct drm_device *dev)
|
|||
mdp4_disable(mdp4_kms);
|
||||
mdelay(16);
|
||||
|
||||
if (!device_iommu_mapped(&pdev->dev)) {
|
||||
DRM_DEV_INFO(dev->dev, "no IOMMU, bailing out\n");
|
||||
ret = -ENODEV;
|
||||
vm = msm_kms_init_vm(mdp4_kms->dev, NULL);
|
||||
if (IS_ERR(vm)) {
|
||||
ret = PTR_ERR(vm);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
mmu = msm_iommu_new(&pdev->dev, 0);
|
||||
if (IS_ERR(mmu)) {
|
||||
ret = PTR_ERR(mmu);
|
||||
goto fail;
|
||||
} else {
|
||||
vm = msm_gem_vm_create(dev, mmu, "mdp4",
|
||||
0x1000, 0x100000000 - 0x1000,
|
||||
true);
|
||||
|
||||
if (IS_ERR(vm)) {
|
||||
if (!IS_ERR(mmu))
|
||||
mmu->funcs->destroy(mmu);
|
||||
ret = PTR_ERR(vm);
|
||||
goto fail;
|
||||
}
|
||||
|
||||
kms->vm = vm;
|
||||
}
|
||||
kms->vm = vm;
|
||||
|
||||
ret = modeset_init(mdp4_kms);
|
||||
if (ret) {
|
||||
|
|
|
|||
|
|
@ -534,7 +534,7 @@ static int mdp5_kms_init(struct drm_device *dev)
|
|||
}
|
||||
mdelay(16);
|
||||
|
||||
vm = msm_kms_init_vm(mdp5_kms->dev);
|
||||
vm = msm_kms_init_vm(mdp5_kms->dev, pdev->dev.parent);
|
||||
if (IS_ERR(vm)) {
|
||||
ret = PTR_ERR(vm);
|
||||
goto fail;
|
||||
|
|
|
|||
|
|
@ -229,7 +229,7 @@ void msm_crtc_disable_vblank(struct drm_crtc *crtc);
|
|||
int msm_register_mmu(struct drm_device *dev, struct msm_mmu *mmu);
|
||||
void msm_unregister_mmu(struct drm_device *dev, struct msm_mmu *mmu);
|
||||
|
||||
struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev);
|
||||
struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev, struct device *mdss_dev);
|
||||
bool msm_use_mmu(struct drm_device *dev);
|
||||
|
||||
int msm_ioctl_gem_submit(struct drm_device *dev, void *data,
|
||||
|
|
|
|||
|
|
@ -177,12 +177,11 @@ static int msm_kms_fault_handler(void *arg, unsigned long iova, int flags, void
|
|||
return -ENOSYS;
|
||||
}
|
||||
|
||||
struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev)
|
||||
struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev, struct device *mdss_dev)
|
||||
{
|
||||
struct drm_gpuvm *vm;
|
||||
struct msm_mmu *mmu;
|
||||
struct device *mdp_dev = dev->dev;
|
||||
struct device *mdss_dev = mdp_dev->parent;
|
||||
struct msm_drm_private *priv = dev->dev_private;
|
||||
struct msm_kms *kms = priv->kms;
|
||||
struct device *iommu_dev;
|
||||
|
|
@ -193,7 +192,7 @@ struct drm_gpuvm *msm_kms_init_vm(struct drm_device *dev)
|
|||
*/
|
||||
if (device_iommu_mapped(mdp_dev))
|
||||
iommu_dev = mdp_dev;
|
||||
else if (device_iommu_mapped(mdss_dev))
|
||||
else if (mdss_dev && device_iommu_mapped(mdss_dev))
|
||||
iommu_dev = mdss_dev;
|
||||
else {
|
||||
drm_info(dev, "no IOMMU, bailing out\n");
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user