drm/etnaviv: fix dma configuration of the virtual device
authorMichael Walle <michael@walle.cc>
Tue, 7 Sep 2021 16:49:44 +0000 (18:49 +0200)
committerLucas Stach <l.stach@pengutronix.de>
Wed, 1 Dec 2021 12:27:12 +0000 (13:27 +0100)
commit0ea057a9cb2be406b104b92ab4d8e246276e3fb8
tree7604f1af0522fda98f1a2e0339a6d741baff7e26
parent3c7e0ccc946c01e33ee5fb5a7991f0f396348e5a
drm/etnaviv: fix dma configuration of the virtual device

The DMA configuration of the virtual device is inherited from the first
actual etnaviv device. Unfortunately, this doesn't work with an IOMMU:

[    5.191008] Failed to set up IOMMU for device (null); retaining platform DMA ops

This is because there is no associated iommu_group with the device. The
group is set in iommu_group_add_device() which is eventually called by
device_add() via the platform bus:
  device_add()
    blocking_notifier_call_chain()
      iommu_bus_notifier()
        iommu_probe_device()
          __iommu_probe_device()
            iommu_group_get_for_dev()
              iommu_group_add_device()

Move of_dma_configure() into the probe function, which is called after
device_add(). Normally, the platform code will already call it itself
if .of_node is set. Unfortunately, this isn't the case here.

Signed-off-by: Michael Walle <michael@walle.cc>
Signed-off-by: Lucas Stach <l.stach@pengutronix.de>
drivers/gpu/drm/etnaviv/etnaviv_drv.c