| // SPDX-License-Identifier: MIT |
| /* |
| * Copyright © 2021 Intel Corporation |
| */ |
| |
| #include <drm/drm_managed.h> |
| |
| #include "i915_drv.h" |
| #include "gt/intel_gt.h" |
| #include "gt/intel_sa_media.h" |
| |
| int intel_sa_mediagt_setup(struct intel_gt *gt, phys_addr_t phys_addr, |
| u32 gsi_offset) |
| { |
| struct drm_i915_private *i915 = gt->i915; |
| struct intel_uncore *uncore; |
| |
| uncore = drmm_kzalloc(&i915->drm, sizeof(*uncore), GFP_KERNEL); |
| if (!uncore) |
| return -ENOMEM; |
| |
| uncore->gsi_offset = gsi_offset; |
| |
| gt->irq_lock = to_gt(i915)->irq_lock; |
| intel_gt_common_init_early(gt); |
| intel_uncore_init_early(uncore, gt); |
| |
| /* |
| * Standalone media shares the general MMIO space with the primary |
| * GT. We'll re-use the primary GT's mapping. |
| */ |
| uncore->regs = intel_uncore_regs(&i915->uncore); |
| if (drm_WARN_ON(&i915->drm, uncore->regs == NULL)) |
| return -EIO; |
| |
| gt->uncore = uncore; |
| gt->phys_addr = phys_addr; |
| |
| /* |
| * For current platforms we can assume there's only a single |
| * media GT and cache it for quick lookup. |
| */ |
| drm_WARN_ON(&i915->drm, i915->media_gt); |
| i915->media_gt = gt; |
| |
| return 0; |
| } |