• Thierry Reding's avatar
    drm/tegra: vic: Load firmware on demand · 77a0b09d
    Thierry Reding authored
    Loading the firmware requires an allocation of IOVA space to make sure
    that the VIC's Falcon microcontroller can read the firmware if address
    translation via the SMMU is enabled.
    
    However, the allocation currently happens at a time where the geometry
    of an IOMMU domain may not have been initialized yet. This happens for
    example on Tegra186 and later where an ARM SMMU is used. Domains which
    are created by the ARM SMMU driver postpone the geometry setup until a
    device is attached to the domain. This is because IOMMU domains aren't
    attached to a specific IOMMU instance at allocation time and hence the
    input address space, which defines the geometry, is not known yet.
    
    Work around this by postponing the firmware load until it is needed at
    the time where a channel is opened to the VIC. At this time the shared
    IOMMU domain's geometry has been properly initialized.
    
    As a byproduct this allows the Tegra DRM to be created in the absence
    of VIC firmware, since the VIC initialization no longer fails if the
    firmware can't be found.
    
    Based on an earlier patch by Dmitry Osipenko <digetx@gmail.com>.
    Signed-off-by: default avatarThierry Reding <treding@nvidia.com>
    Reviewed-by: default avatarDmitry Osipenko <digetx@gmail.com>
    77a0b09d
vic.c 10.3 KB