1f0e2f00cSMatt Roper // SPDX-License-Identifier: MIT
2f0e2f00cSMatt Roper /*
3f0e2f00cSMatt Roper  * Copyright © 2021 Intel Corporation
4f0e2f00cSMatt Roper  */
5f0e2f00cSMatt Roper 
6f0e2f00cSMatt Roper #include <drm/drm_managed.h>
7f0e2f00cSMatt Roper 
8f0e2f00cSMatt Roper #include "i915_drv.h"
9f0e2f00cSMatt Roper #include "gt/intel_gt.h"
10f0e2f00cSMatt Roper #include "gt/intel_sa_media.h"
11f0e2f00cSMatt Roper 
intel_sa_mediagt_setup(struct intel_gt * gt,phys_addr_t phys_addr,u32 gsi_offset)12f0e2f00cSMatt Roper int intel_sa_mediagt_setup(struct intel_gt *gt, phys_addr_t phys_addr,
13f0e2f00cSMatt Roper 			   u32 gsi_offset)
14f0e2f00cSMatt Roper {
15f0e2f00cSMatt Roper 	struct drm_i915_private *i915 = gt->i915;
16f0e2f00cSMatt Roper 	struct intel_uncore *uncore;
17f0e2f00cSMatt Roper 
18f0e2f00cSMatt Roper 	uncore = drmm_kzalloc(&i915->drm, sizeof(*uncore), GFP_KERNEL);
19f0e2f00cSMatt Roper 	if (!uncore)
20f0e2f00cSMatt Roper 		return -ENOMEM;
21f0e2f00cSMatt Roper 
22f0e2f00cSMatt Roper 	uncore->gsi_offset = gsi_offset;
23f0e2f00cSMatt Roper 
2403d2c54dSMatt Roper 	gt->irq_lock = to_gt(i915)->irq_lock;
25f0e2f00cSMatt Roper 	intel_gt_common_init_early(gt);
26f0e2f00cSMatt Roper 	intel_uncore_init_early(uncore, gt);
27f0e2f00cSMatt Roper 
28f0e2f00cSMatt Roper 	/*
29f0e2f00cSMatt Roper 	 * Standalone media shares the general MMIO space with the primary
30f0e2f00cSMatt Roper 	 * GT.  We'll re-use the primary GT's mapping.
31f0e2f00cSMatt Roper 	 */
32*72e9abc3SJani Nikula 	uncore->regs = intel_uncore_regs(&i915->uncore);
33f0e2f00cSMatt Roper 	if (drm_WARN_ON(&i915->drm, uncore->regs == NULL))
34f0e2f00cSMatt Roper 		return -EIO;
35f0e2f00cSMatt Roper 
36f0e2f00cSMatt Roper 	gt->uncore = uncore;
37f0e2f00cSMatt Roper 	gt->phys_addr = phys_addr;
38f0e2f00cSMatt Roper 
3951aec8bfSMatt Roper 	/*
4051aec8bfSMatt Roper 	 * For current platforms we can assume there's only a single
4151aec8bfSMatt Roper 	 * media GT and cache it for quick lookup.
4251aec8bfSMatt Roper 	 */
4351aec8bfSMatt Roper 	drm_WARN_ON(&i915->drm, i915->media_gt);
4451aec8bfSMatt Roper 	i915->media_gt = gt;
4551aec8bfSMatt Roper 
46f0e2f00cSMatt Roper 	return 0;
47f0e2f00cSMatt Roper }
48