drm/tegra: Inherit device DMA parameters from host1x
authorThierry Reding <treding@nvidia.com>
Mon, 9 Sep 2019 12:25:45 +0000 (14:25 +0200)
committerThierry Reding <treding@nvidia.com>
Mon, 28 Oct 2019 10:18:34 +0000 (11:18 +0100)
The display controllers and VIC don't have any limitations on the
DMA segment size. Inherit the DMA parameters from the parent device,
which also doesn't have any such limitations.

Signed-off-by: Thierry Reding <treding@nvidia.com>
drivers/gpu/drm/tegra/dc.c
drivers/gpu/drm/tegra/vic.c

index fbf57bc..f7f7984 100644 (file)
@@ -2074,6 +2074,12 @@ static int tegra_dc_init(struct host1x_client *client)
                goto cleanup;
        }
 
+       /*
+        * Inherit the DMA parameters (such as maximum segment size) from the
+        * parent device.
+        */
+       client->dev->dma_parms = client->parent->dma_parms;
+
        return 0;
 
 cleanup:
@@ -2097,6 +2103,9 @@ static int tegra_dc_exit(struct host1x_client *client)
        if (!tegra_dc_has_window_groups(dc))
                return 0;
 
+       /* avoid a dangling pointer just in case this disappears */
+       client->dev->dma_parms = NULL;
+
        devm_free_irq(dc->dev, dc->irq, dc);
 
        err = tegra_dc_rgb_exit(dc);
index c97a61c..8d98b0c 100644 (file)
@@ -214,6 +214,12 @@ static int vic_init(struct host1x_client *client)
        if (err < 0)
                goto free_syncpt;
 
+       /*
+        * Inherit the DMA parameters (such as maximum segment size) from the
+        * parent device.
+        */
+       client->dev->dma_parms = client->parent->dma_parms;
+
        return 0;
 
 free_syncpt:
@@ -236,6 +242,9 @@ static int vic_exit(struct host1x_client *client)
        struct vic *vic = to_vic(drm);
        int err;
 
+       /* avoid a dangling pointer just in case this disappears */
+       client->dev->dma_parms = NULL;
+
        err = tegra_drm_unregister_client(tegra, drm);
        if (err < 0)
                return err;