drm/tegra: vic: Skip stream ID programming without IOMMU
authorThierry Reding <treding@nvidia.com>
Fri, 8 Feb 2019 12:09:49 +0000 (13:09 +0100)
committerThierry Reding <treding@nvidia.com>
Mon, 28 Oct 2019 10:18:35 +0000 (11:18 +0100)
If VIC is not behind an IOMMU, don't touch any of the registers related
to stream ID programming.

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

index 8d98b0cfc47bd3333e64b5802814b1ad68529233..748798f2cdc822ea2a95a275f7d690e23793ca09 100644 (file)
@@ -97,6 +97,9 @@ static int vic_runtime_suspend(struct device *dev)
 
 static int vic_boot(struct vic *vic)
 {
+#ifdef CONFIG_IOMMU_API
+       struct iommu_fwspec *spec = dev_iommu_fwspec_get(vic->dev);
+#endif
        u32 fce_ucode_size, fce_bin_data_offset;
        void *hdr;
        int err = 0;
@@ -105,15 +108,14 @@ static int vic_boot(struct vic *vic)
                return 0;
 
 #ifdef CONFIG_IOMMU_API
-       if (vic->config->supports_sid) {
-               struct iommu_fwspec *spec = dev_iommu_fwspec_get(vic->dev);
+       if (vic->config->supports_sid && spec) {
                u32 value;
 
                value = TRANSCFG_ATT(1, TRANSCFG_SID_FALCON) |
                        TRANSCFG_ATT(0, TRANSCFG_SID_HW);
                vic_writel(vic, value, VIC_TFBIF_TRANSCFG);
 
-               if (spec && spec->num_ids > 0) {
+               if (spec->num_ids > 0) {
                        value = spec->ids[0] & 0xffff;
 
                        vic_writel(vic, value, VIC_THI_STREAMID0);