Commit a50ca39f authored by Matthew Auld's avatar Matthew Auld Committed by Daniel Vetter
Browse files

drm/i915: setup the LMEM region



Hook up the LMEM region. Addresses will start from zero, and for CPU
access we get LMEM_BAR which is just a 1:1 mapping of said region.

Based on a patch from Michel Thierry.

v2 by Jani:
- use intel_uncore_read/intel_uncore_write
- remove trailing blank line

v3: s/drm_info/drm_dbg for info which in non-pertinent for the user

Cc: Lucas De Marchi <lucas.demarchi@intel.com>
Cc: Joonas Lahtinen <joonas.lahtinen@linux.intel.com>
Cc: Rodrigo Vivi <rodrigo.vivi@intel.com>
Signed-off-by: default avatarMatthew Auld <matthew.auld@intel.com>
Signed-off-by: default avatarLucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: default avatarJani Nikula <jani.nikula@intel.com>
Reviewed-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20210127131417.393872-2-matthew.auld@intel.com


Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 2dfcc7f4
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -46,6 +46,8 @@ int intel_gt_probe_lmem(struct intel_gt *gt)
	int id;
	int err;

	mem = intel_gt_setup_lmem(gt);
	if (mem == ERR_PTR(-ENODEV))
		mem = intel_gt_setup_fake_lmem(gt);
	if (IS_ERR(mem)) {
		err = PTR_ERR(mem);
+36 −0
Original line number Diff line number Diff line
@@ -142,3 +142,39 @@ intel_gt_setup_fake_lmem(struct intel_gt *gt)

	return mem;
}

static struct intel_memory_region *setup_lmem(struct intel_gt *gt)
{
	struct drm_i915_private *i915 = gt->i915;
	struct pci_dev *pdev = i915->drm.pdev;
	struct intel_memory_region *mem;
	resource_size_t io_start;
	resource_size_t size;

	if (!IS_DGFX(i915))
		return ERR_PTR(-ENODEV);

	io_start = pci_resource_start(pdev, 2);
	size = pci_resource_len(pdev, 2);

	mem = intel_memory_region_create(i915,
					 0,
					 size,
					 I915_GTT_PAGE_SIZE_4K,
					 io_start,
					 &intel_region_lmem_ops);
	if (IS_ERR(mem))
		return mem;

	drm_dbg(&i915->drm, "Local memory: %pR\n", &mem->region);
	drm_dbg(&i915->drm, "Local memory IO start: %pa\n",
		&mem->io_start);
	drm_info(&i915->drm, "Local memory available: %pa\n", &size);

	return mem;
}

struct intel_memory_region *intel_gt_setup_lmem(struct intel_gt *gt)
{
	return setup_lmem(gt);
}
+2 −0
Original line number Diff line number Diff line
@@ -8,6 +8,8 @@

struct intel_gt;

struct intel_memory_region *intel_gt_setup_lmem(struct intel_gt *gt);

struct intel_memory_region *
intel_gt_setup_fake_lmem(struct intel_gt *gt);