Skip to content

Commit

Permalink
drm/tegra: vic: Use tegra_dev_iommu_get_stream_id()
Browse files Browse the repository at this point in the history
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>
  • Loading branch information
Thierry Reding committed Jan 27, 2023
1 parent b8cbb04 commit b50ad38
Showing 1 changed file with 14 additions and 25 deletions.
39 changes: 14 additions & 25 deletions drivers/gpu/drm/tegra/vic.c
Original file line number Diff line number Diff line change
Expand Up @@ -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) |
Expand Down

0 comments on commit b50ad38

Please sign in to comment.