Skip to content

Commit

Permalink
drm/i915: Kill the fake lmem support
Browse files Browse the repository at this point in the history
This was useful for early development of lmem, but it's not used
anymore, so remove it.

v2: Remove unneeded fields from struct intel_memory_region

Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Matthew Auld <matthew.auld@intel.com>
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Reviewed-by: Matthew Auld <matthew.auld@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220217175634.4128754-1-lucas.demarchi@intel.com
  • Loading branch information
Lucas De Marchi committed Feb 19, 2022
1 parent edf176f commit 8c26491
Show file tree
Hide file tree
Showing 8 changed files with 2 additions and 149 deletions.
8 changes: 0 additions & 8 deletions drivers/gpu/drm/i915/Kconfig.unstable
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,3 @@ config DRM_I915_UNSTABLE
Recommended for driver developers _only_.

If in the slightest bit of doubt, say "N".

config DRM_I915_UNSTABLE_FAKE_LMEM
bool "Enable the experimental fake lmem"
depends on DRM_I915_UNSTABLE
default n
help
Convert some system memory into a fake local memory region for
testing.
2 changes: 0 additions & 2 deletions drivers/gpu/drm/i915/gt/intel_gt.c
Original file line number Diff line number Diff line change
Expand Up @@ -62,8 +62,6 @@ int intel_gt_probe_lmem(struct intel_gt *gt)
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);
if (err == -ENODEV)
Expand Down
112 changes: 2 additions & 110 deletions drivers/gpu/drm/i915/gt/intel_region_lmem.c
Original file line number Diff line number Diff line change
Expand Up @@ -12,68 +12,13 @@
#include "gem/i915_gem_ttm.h"
#include "gt/intel_gt.h"

static int init_fake_lmem_bar(struct intel_memory_region *mem)
{
struct drm_i915_private *i915 = mem->i915;
struct i915_ggtt *ggtt = to_gt(i915)->ggtt;
unsigned long n;
int ret;

/* We want to 1:1 map the mappable aperture to our reserved region */

mem->fake_mappable.start = 0;
mem->fake_mappable.size = resource_size(&mem->region);
mem->fake_mappable.color = I915_COLOR_UNEVICTABLE;

ret = drm_mm_reserve_node(&ggtt->vm.mm, &mem->fake_mappable);
if (ret)
return ret;

mem->remap_addr = dma_map_resource(i915->drm.dev,
mem->region.start,
mem->fake_mappable.size,
DMA_BIDIRECTIONAL,
DMA_ATTR_FORCE_CONTIGUOUS);
if (dma_mapping_error(i915->drm.dev, mem->remap_addr)) {
drm_mm_remove_node(&mem->fake_mappable);
return -EINVAL;
}

for (n = 0; n < mem->fake_mappable.size >> PAGE_SHIFT; ++n) {
ggtt->vm.insert_page(&ggtt->vm,
mem->remap_addr + (n << PAGE_SHIFT),
n << PAGE_SHIFT,
I915_CACHE_NONE, 0);
}

mem->region = (struct resource)DEFINE_RES_MEM(mem->remap_addr,
mem->fake_mappable.size);

return 0;
}

static void release_fake_lmem_bar(struct intel_memory_region *mem)
{
if (!drm_mm_node_allocated(&mem->fake_mappable))
return;

drm_mm_remove_node(&mem->fake_mappable);

dma_unmap_resource(mem->i915->drm.dev,
mem->remap_addr,
mem->fake_mappable.size,
DMA_BIDIRECTIONAL,
DMA_ATTR_FORCE_CONTIGUOUS);
}

static int
region_lmem_release(struct intel_memory_region *mem)
{
int ret;

ret = intel_region_ttm_fini(mem);
io_mapping_fini(&mem->iomap);
release_fake_lmem_bar(mem);

return ret;
}
Expand All @@ -83,17 +28,10 @@ region_lmem_init(struct intel_memory_region *mem)
{
int ret;

if (mem->i915->params.fake_lmem_start) {
ret = init_fake_lmem_bar(mem);
GEM_BUG_ON(ret);
}

if (!io_mapping_init_wc(&mem->iomap,
mem->io_start,
resource_size(&mem->region))) {
ret = -EIO;
goto out_no_io;
}
resource_size(&mem->region)))
return -EIO;

ret = intel_region_ttm_init(mem);
if (ret)
Expand All @@ -103,8 +41,6 @@ region_lmem_init(struct intel_memory_region *mem)

out_no_buddy:
io_mapping_fini(&mem->iomap);
out_no_io:
release_fake_lmem_bar(mem);

return ret;
}
Expand All @@ -115,50 +51,6 @@ static const struct intel_memory_region_ops intel_region_lmem_ops = {
.init_object = __i915_gem_ttm_object_init,
};

struct intel_memory_region *
intel_gt_setup_fake_lmem(struct intel_gt *gt)
{
struct drm_i915_private *i915 = gt->i915;
struct pci_dev *pdev = to_pci_dev(i915->drm.dev);
struct intel_memory_region *mem;
resource_size_t mappable_end;
resource_size_t io_start;
resource_size_t start;

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

if (!i915->params.fake_lmem_start)
return ERR_PTR(-ENODEV);

GEM_BUG_ON(i915_ggtt_has_aperture(to_gt(i915)->ggtt));

/* Your mappable aperture belongs to me now! */
mappable_end = pci_resource_len(pdev, 2);
io_start = pci_resource_start(pdev, 2);
start = i915->params.fake_lmem_start;

mem = intel_memory_region_create(i915,
start,
mappable_end,
PAGE_SIZE,
io_start,
INTEL_MEMORY_LOCAL,
0,
&intel_region_lmem_ops);
if (!IS_ERR(mem)) {
drm_info(&i915->drm, "Intel graphics fake LMEM: %pR\n",
&mem->region);
drm_info(&i915->drm,
"Intel graphics fake LMEM IO start: %llx\n",
(u64)mem->io_start);
drm_info(&i915->drm, "Intel graphics fake LMEM size: %llx\n",
(u64)resource_size(&mem->region));
}

return mem;
}

static bool get_legacy_lowmem_region(struct intel_uncore *uncore,
u64 *start, u32 *size)
{
Expand Down
3 changes: 0 additions & 3 deletions drivers/gpu/drm/i915/gt/intel_region_lmem.h
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,4 @@ 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);

#endif /* !__INTEL_REGION_LMEM_H */
15 changes: 0 additions & 15 deletions drivers/gpu/drm/i915/i915_driver.c
Original file line number Diff line number Diff line change
Expand Up @@ -829,21 +829,6 @@ int i915_driver_probe(struct pci_dev *pdev, const struct pci_device_id *ent)
if (!i915->params.nuclear_pageflip && match_info->graphics.ver < 5)
i915->drm.driver_features &= ~DRIVER_ATOMIC;

/*
* Check if we support fake LMEM -- for now we only unleash this for
* the live selftests(test-and-exit).
*/
#if IS_ENABLED(CONFIG_DRM_I915_SELFTEST)
if (IS_ENABLED(CONFIG_DRM_I915_UNSTABLE_FAKE_LMEM)) {
if (GRAPHICS_VER(i915) >= 9 && i915_selftest.live < 0 &&
i915->params.fake_lmem_start) {
mkwrite_device_info(i915)->memory_regions =
REGION_SMEM | REGION_LMEM | REGION_STOLEN_SMEM;
GEM_BUG_ON(!HAS_LMEM(i915));
}
}
#endif

ret = pci_enable_device(pdev);
if (ret)
goto out_fini;
Expand Down
5 changes: 0 additions & 5 deletions drivers/gpu/drm/i915/i915_params.c
Original file line number Diff line number Diff line change
Expand Up @@ -195,11 +195,6 @@ i915_param_named(enable_gvt, bool, 0400,
"Enable support for Intel GVT-g graphics virtualization host support(default:false)");
#endif

#if IS_ENABLED(CONFIG_DRM_I915_UNSTABLE_FAKE_LMEM)
i915_param_named_unsafe(fake_lmem_start, ulong, 0400,
"Fake LMEM start offset (default: 0)");
#endif

#if CONFIG_DRM_I915_REQUEST_TIMEOUT
i915_param_named_unsafe(request_timeout_ms, uint, 0600,
"Default request/fence/batch buffer expiration timeout.");
Expand Down
1 change: 0 additions & 1 deletion drivers/gpu/drm/i915/i915_params.h
Original file line number Diff line number Diff line change
Expand Up @@ -72,7 +72,6 @@ struct drm_printer;
param(int, fastboot, -1, 0600) \
param(int, enable_dpcd_backlight, -1, 0600) \
param(char *, force_probe, CONFIG_DRM_I915_FORCE_PROBE, 0400) \
param(unsigned long, fake_lmem_start, 0, IS_ENABLED(CONFIG_DRM_I915_UNSTABLE_FAKE_LMEM) ? 0400 : 0) \
param(unsigned int, request_timeout_ms, CONFIG_DRM_I915_REQUEST_TIMEOUT, CONFIG_DRM_I915_REQUEST_TIMEOUT ? 0600 : 0) \
/* leave bools at the end to not create holes */ \
param(bool, enable_hangcheck, true, 0600) \
Expand Down
5 changes: 0 additions & 5 deletions drivers/gpu/drm/i915/intel_memory_region.h
Original file line number Diff line number Diff line change
Expand Up @@ -67,9 +67,6 @@ struct intel_memory_region {
struct io_mapping iomap;
struct resource region;

/* For fake LMEM */
struct drm_mm_node fake_mappable;

resource_size_t io_start;
resource_size_t min_page_size;
resource_size_t total;
Expand All @@ -81,8 +78,6 @@ struct intel_memory_region {
char name[16];
bool private; /* not for userspace */

dma_addr_t remap_addr;

struct {
struct mutex lock; /* Protects access to objects */
struct list_head list;
Expand Down

0 comments on commit 8c26491

Please sign in to comment.