Commit 06350194 authored by Alex Deucher's avatar Alex Deucher

drm/amdgpu: add support for extended stolen vga memory

This will allow us to split the allocation for systems
where we have to keep the stolen memory around to avoid
S3 issues.  This way we don't waste as much memory and
still avoid any screen artifacts during the bios to
driver transition.
Reviewed-by: default avatarChristian König <christian.koenig@amd.com>
Reviewed-by: default avatarFelix Kuehling <Felix.Kuehling@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent 5db62dc8
...@@ -215,6 +215,8 @@ struct amdgpu_gmc { ...@@ -215,6 +215,8 @@ struct amdgpu_gmc {
bool prt_warning; bool prt_warning;
uint64_t stolen_vga_size; uint64_t stolen_vga_size;
struct amdgpu_bo *stolen_vga_memory; struct amdgpu_bo *stolen_vga_memory;
uint64_t stolen_extended_size;
struct amdgpu_bo *stolen_extended_memory;
bool keep_stolen_vga_memory; bool keep_stolen_vga_memory;
uint32_t sdpif_register; uint32_t sdpif_register;
/* apertures */ /* apertures */
......
...@@ -1915,7 +1915,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev) ...@@ -1915,7 +1915,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
uint64_t gtt_size; uint64_t gtt_size;
int r; int r;
u64 vis_vram_limit; u64 vis_vram_limit;
void *stolen_vga_buf; void *stolen_vga_buf, *stolen_extended_buf;
mutex_init(&adev->mman.gtt_window_lock); mutex_init(&adev->mman.gtt_window_lock);
...@@ -1985,6 +1985,13 @@ int amdgpu_ttm_init(struct amdgpu_device *adev) ...@@ -1985,6 +1985,13 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
&stolen_vga_buf); &stolen_vga_buf);
if (r) if (r)
return r; return r;
r = amdgpu_bo_create_kernel_at(adev, adev->gmc.stolen_vga_size,
adev->gmc.stolen_extended_size,
AMDGPU_GEM_DOMAIN_VRAM,
&adev->gmc.stolen_extended_memory,
&stolen_extended_buf);
if (r)
return r;
DRM_INFO("amdgpu: %uM of VRAM memory ready\n", DRM_INFO("amdgpu: %uM of VRAM memory ready\n",
(unsigned) (adev->gmc.real_vram_size / (1024 * 1024))); (unsigned) (adev->gmc.real_vram_size / (1024 * 1024)));
...@@ -2041,11 +2048,13 @@ int amdgpu_ttm_init(struct amdgpu_device *adev) ...@@ -2041,11 +2048,13 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
*/ */
void amdgpu_ttm_late_init(struct amdgpu_device *adev) void amdgpu_ttm_late_init(struct amdgpu_device *adev)
{ {
void *stolen_vga_buf; void *stolen_vga_buf, *stolen_extended_buf;
/* return the VGA stolen memory (if any) back to VRAM */ /* return the VGA stolen memory (if any) back to VRAM */
if (!adev->gmc.keep_stolen_vga_memory) if (!adev->gmc.keep_stolen_vga_memory)
amdgpu_bo_free_kernel(&adev->gmc.stolen_vga_memory, NULL, &stolen_vga_buf); amdgpu_bo_free_kernel(&adev->gmc.stolen_vga_memory, NULL, &stolen_vga_buf);
amdgpu_bo_free_kernel(&adev->gmc.stolen_extended_memory, NULL,
&stolen_extended_buf);
} }
/** /**
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment