Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

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: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20210127131417.393872-2-matthew.auld@intel.com
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>

authored by

Matthew Auld and committed by
Daniel Vetter
a50ca39f 2dfcc7f4

+41 -1
+3 -1
drivers/gpu/drm/i915/gt/intel_gt.c
··· 46 46 int id; 47 47 int err; 48 48 49 - mem = intel_gt_setup_fake_lmem(gt); 49 + mem = intel_gt_setup_lmem(gt); 50 + if (mem == ERR_PTR(-ENODEV)) 51 + mem = intel_gt_setup_fake_lmem(gt); 50 52 if (IS_ERR(mem)) { 51 53 err = PTR_ERR(mem); 52 54 if (err == -ENODEV)
+36
drivers/gpu/drm/i915/gt/intel_region_lmem.c
··· 142 142 143 143 return mem; 144 144 } 145 + 146 + static struct intel_memory_region *setup_lmem(struct intel_gt *gt) 147 + { 148 + struct drm_i915_private *i915 = gt->i915; 149 + struct pci_dev *pdev = i915->drm.pdev; 150 + struct intel_memory_region *mem; 151 + resource_size_t io_start; 152 + resource_size_t size; 153 + 154 + if (!IS_DGFX(i915)) 155 + return ERR_PTR(-ENODEV); 156 + 157 + io_start = pci_resource_start(pdev, 2); 158 + size = pci_resource_len(pdev, 2); 159 + 160 + mem = intel_memory_region_create(i915, 161 + 0, 162 + size, 163 + I915_GTT_PAGE_SIZE_4K, 164 + io_start, 165 + &intel_region_lmem_ops); 166 + if (IS_ERR(mem)) 167 + return mem; 168 + 169 + drm_dbg(&i915->drm, "Local memory: %pR\n", &mem->region); 170 + drm_dbg(&i915->drm, "Local memory IO start: %pa\n", 171 + &mem->io_start); 172 + drm_info(&i915->drm, "Local memory available: %pa\n", &size); 173 + 174 + return mem; 175 + } 176 + 177 + struct intel_memory_region *intel_gt_setup_lmem(struct intel_gt *gt) 178 + { 179 + return setup_lmem(gt); 180 + }
+2
drivers/gpu/drm/i915/gt/intel_region_lmem.h
··· 8 8 9 9 struct intel_gt; 10 10 11 + struct intel_memory_region *intel_gt_setup_lmem(struct intel_gt *gt); 12 + 11 13 struct intel_memory_region * 12 14 intel_gt_setup_fake_lmem(struct intel_gt *gt); 13 15