Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 6a7f76e7 authored by Christian König's avatar Christian König Committed by Alex Deucher
Browse files

drm/amdgpu: add VRAM manager v2



Split VRAM allocations into 4MB blocks.

v2: fix typo in comment, some suggested cleanups
v3: document how to disable the feature, fix rebase issue

Signed-off-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarEdward O'Callaghan <funfunctor@folklore1984.net>
Tested-by: default avatarMike Lothian <mike@fireburn.co.uk>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 8892f153
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -24,7 +24,7 @@ amdgpu-y += amdgpu_device.o amdgpu_kms.o \
	atombios_encoders.o amdgpu_sa.o atombios_i2c.o \
	atombios_encoders.o amdgpu_sa.o atombios_i2c.o \
	amdgpu_prime.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \
	amdgpu_prime.o amdgpu_vm.o amdgpu_ib.o amdgpu_pll.o \
	amdgpu_ucode.o amdgpu_bo_list.o amdgpu_ctx.o amdgpu_sync.o \
	amdgpu_ucode.o amdgpu_bo_list.o amdgpu_ctx.o amdgpu_sync.o \
	amdgpu_gtt_mgr.o
	amdgpu_gtt_mgr.o amdgpu_vram_mgr.o


# add asic specific block
# add asic specific block
amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o kv_smc.o kv_dpm.o \
amdgpu-$(CONFIG_DRM_AMDGPU_CIK)+= cik.o cik_ih.o kv_smc.o kv_dpm.o \
+1 −0
Original line number Original line Diff line number Diff line
@@ -97,6 +97,7 @@ extern char *amdgpu_disable_cu;
extern int amdgpu_sclk_deep_sleep_en;
extern int amdgpu_sclk_deep_sleep_en;
extern char *amdgpu_virtual_display;
extern char *amdgpu_virtual_display;
extern unsigned amdgpu_pp_feature_mask;
extern unsigned amdgpu_pp_feature_mask;
extern int amdgpu_vram_page_split;


#define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS	        3000
#define AMDGPU_WAIT_IDLE_TIMEOUT_IN_MS	        3000
#define AMDGPU_MAX_USEC_TIMEOUT			100000	/* 100 ms */
#define AMDGPU_MAX_USEC_TIMEOUT			100000	/* 100 ms */
+7 −0
Original line number Original line Diff line number Diff line
@@ -1052,6 +1052,13 @@ static void amdgpu_check_arguments(struct amdgpu_device *adev)
			 amdgpu_vm_block_size);
			 amdgpu_vm_block_size);
		amdgpu_vm_block_size = 9;
		amdgpu_vm_block_size = 9;
	}
	}

	if ((amdgpu_vram_page_split != -1 && amdgpu_vram_page_split < 16) ||
	    !amdgpu_check_pot_argument(amdgpu_vram_page_split)) {
		dev_warn(adev->dev, "invalid VRAM page split (%d)\n",
			 amdgpu_vram_page_split);
		amdgpu_vram_page_split = 1024;
	}
}
}


/**
/**
+4 −0
Original line number Original line Diff line number Diff line
@@ -85,6 +85,7 @@ int amdgpu_vm_size = 64;
int amdgpu_vm_block_size = -1;
int amdgpu_vm_block_size = -1;
int amdgpu_vm_fault_stop = 0;
int amdgpu_vm_fault_stop = 0;
int amdgpu_vm_debug = 0;
int amdgpu_vm_debug = 0;
int amdgpu_vram_page_split = 1024;
int amdgpu_exp_hw_support = 0;
int amdgpu_exp_hw_support = 0;
int amdgpu_sched_jobs = 32;
int amdgpu_sched_jobs = 32;
int amdgpu_sched_hw_submission = 2;
int amdgpu_sched_hw_submission = 2;
@@ -165,6 +166,9 @@ module_param_named(vm_fault_stop, amdgpu_vm_fault_stop, int, 0444);
MODULE_PARM_DESC(vm_debug, "Debug VM handling (0 = disabled (default), 1 = enabled)");
MODULE_PARM_DESC(vm_debug, "Debug VM handling (0 = disabled (default), 1 = enabled)");
module_param_named(vm_debug, amdgpu_vm_debug, int, 0644);
module_param_named(vm_debug, amdgpu_vm_debug, int, 0644);


MODULE_PARM_DESC(vram_page_split, "Number of pages after we split VRAM allocations (default 1024, -1 = disable)");
module_param_named(vram_page_split, amdgpu_vram_page_split, int, 0444);

MODULE_PARM_DESC(exp_hw_support, "experimental hw support (1 = enable, 0 = disable (default))");
MODULE_PARM_DESC(exp_hw_support, "experimental hw support (1 = enable, 0 = disable (default))");
module_param_named(exp_hw_support, amdgpu_exp_hw_support, int, 0444);
module_param_named(exp_hw_support, amdgpu_exp_hw_support, int, 0444);


+1 −1
Original line number Original line Diff line number Diff line
@@ -168,7 +168,7 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
		break;
		break;
	case TTM_PL_VRAM:
	case TTM_PL_VRAM:
		/* "On-card" video ram */
		/* "On-card" video ram */
		man->func = &ttm_bo_manager_func;
		man->func = &amdgpu_vram_mgr_func;
		man->gpu_offset = adev->mc.vram_start;
		man->gpu_offset = adev->mc.vram_start;
		man->flags = TTM_MEMTYPE_FLAG_FIXED |
		man->flags = TTM_MEMTYPE_FLAG_FIXED |
			     TTM_MEMTYPE_FLAG_MAPPABLE;
			     TTM_MEMTYPE_FLAG_MAPPABLE;
Loading