drm/tegra: vic: Use tegra_dev_iommu_get_stream_id()
authorThierry Reding <treding@nvidia.com>
Thu, 17 Nov 2022 12:35:20 +0000 (13:35 +0100)
committerThierry Reding <treding@nvidia.com>
Fri, 27 Jan 2023 16:49:44 +0000 (17:49 +0100)
Use the newly implemented tegra_dev_iommu_get_stream_id() helper to
encapsulate and centralize the IOMMU stream ID access.

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

index 7382ee1..531a71c 100644 (file)
@@ -56,41 +56,30 @@ static void vic_writel(struct vic *vic, u32 value, unsigned int offset)
 
 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;
+       u32 fce_ucode_size, fce_bin_data_offset, stream_id;
        void *hdr;
        int err = 0;
 
-#ifdef CONFIG_IOMMU_API
-       if (vic->config->supports_sid && spec) {
+       if (vic->config->supports_sid && tegra_dev_iommu_get_stream_id(vic->dev, &stream_id)) {
                u32 value;
 
                value = TRANSCFG_ATT(1, TRANSCFG_SID_FALCON) |
                        TRANSCFG_ATT(0, TRANSCFG_SID_HW);
                vic_writel(vic, value, VIC_TFBIF_TRANSCFG);
 
-               if (spec->num_ids > 0) {
-                       value = spec->ids[0] & 0xffff;
-
-                       /*
-                        * STREAMID0 is used for input/output buffers.
-                        * Initialize it to SID_VIC in case context isolation
-                        * is not enabled, and SID_VIC is used for both firmware
-                        * and data buffers.
-                        *
-                        * If context isolation is enabled, it will be
-                        * overridden by the SETSTREAMID opcode as part of
-                        * each job.
-                        */
-                       vic_writel(vic, value, VIC_THI_STREAMID0);
-
-                       /* STREAMID1 is used for firmware loading. */
-                       vic_writel(vic, value, VIC_THI_STREAMID1);
-               }
+               /*
+                * STREAMID0 is used for input/output buffers. Initialize it to SID_VIC in case
+                * context isolation is not enabled, and SID_VIC is used for both firmware and
+                * data buffers.
+                *
+                * If context isolation is enabled, it will be overridden by the SETSTREAMID
+                * opcode as part of each job.
+                */
+               vic_writel(vic, stream_id, VIC_THI_STREAMID0);
+
+               /* STREAMID1 is used for firmware loading. */
+               vic_writel(vic, stream_id, VIC_THI_STREAMID1);
        }
-#endif
 
        /* setup clockgating registers */
        vic_writel(vic, CG_IDLE_CG_DLY_CNT(4) |