lkml.org 
[lkml]   [2022]   [Aug]   [19]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.10 457/545] drm/vc4: drv: Adopt the dma configuration from the HVS or V3D component
    Date
    From: Dave Stevenson <dave.stevenson@raspberrypi.com>

    [ Upstream commit da8e393e23efb60eba8959856c7df88f9859f6eb ]

    vc4_drv isn't necessarily under the /soc node in DT as it is a
    virtual device, but it is the one that does the allocations.
    The DMA addresses are consumed by primarily the HVS or V3D, and
    those require VideoCore cache alias address mapping, and so will be
    under /soc.

    During probe find the a suitable device node for HVS or V3D,
    and adopt the DMA configuration of that node.

    Cc: <stable@vger.kernel.org>
    Signed-off-by: Dave Stevenson <dave.stevenson@raspberrypi.com>
    Link: https://lore.kernel.org/r/20220613144800.326124-2-maxime@cerno.tech
    Signed-off-by: Maxime Ripard <maxime@cerno.tech>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    drivers/gpu/drm/vc4/vc4_drv.c | 19 +++++++++++++++++++
    1 file changed, 19 insertions(+)

    diff --git a/drivers/gpu/drm/vc4/vc4_drv.c b/drivers/gpu/drm/vc4/vc4_drv.c
    index 839610f8092a..4bed62916b64 100644
    --- a/drivers/gpu/drm/vc4/vc4_drv.c
    +++ b/drivers/gpu/drm/vc4/vc4_drv.c
    @@ -246,6 +246,15 @@ static void vc4_match_add_drivers(struct device *dev,
    }
    }

    +const struct of_device_id vc4_dma_range_matches[] = {
    + { .compatible = "brcm,bcm2711-hvs" },
    + { .compatible = "brcm,bcm2835-hvs" },
    + { .compatible = "brcm,bcm2835-v3d" },
    + { .compatible = "brcm,cygnus-v3d" },
    + { .compatible = "brcm,vc4-v3d" },
    + {}
    +};
    +
    static int vc4_drm_bind(struct device *dev)
    {
    struct platform_device *pdev = to_platform_device(dev);
    @@ -263,6 +272,16 @@ static int vc4_drm_bind(struct device *dev)
    vc4_drm_driver.driver_features &= ~DRIVER_RENDER;
    of_node_put(node);

    + node = of_find_matching_node_and_match(NULL, vc4_dma_range_matches,
    + NULL);
    + if (node) {
    + ret = of_dma_configure(dev, node, true);
    + of_node_put(node);
    +
    + if (ret)
    + return ret;
    + }
    +
    vc4 = devm_drm_dev_alloc(dev, &vc4_drm_driver, struct vc4_dev, base);
    if (IS_ERR(vc4))
    return PTR_ERR(vc4);
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-08-19 18:45    [W:4.057 / U:0.052 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site