Commit db3b5cb6 authored by Lijo Lazar's avatar Lijo Lazar Committed by Alex Deucher

drm/amdgpu: Use apt name for FW reserved region

Use the generic term fw_reserved_memory for FW reserve region. This
region may also hold discovery TMR in addition to other reserve
regions. This region size could be larger than discovery tmr size, hence
don't change the discovery tmr size based on this.
Signed-off-by: default avatarLijo Lazar <lijo.lazar@amd.com>
Reviewed-by: default avatarLe Ma <le.ma@amd.com>
Signed-off-by: default avatarAlex Deucher <alexander.deucher@amd.com>
parent bc71daff
...@@ -1644,14 +1644,15 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev) ...@@ -1644,14 +1644,15 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev)
return 0; return 0;
} }
static void amdgpu_ttm_training_data_block_init(struct amdgpu_device *adev) static void amdgpu_ttm_training_data_block_init(struct amdgpu_device *adev,
uint32_t reserve_size)
{ {
struct psp_memory_training_context *ctx = &adev->psp.mem_train_ctx; struct psp_memory_training_context *ctx = &adev->psp.mem_train_ctx;
memset(ctx, 0, sizeof(*ctx)); memset(ctx, 0, sizeof(*ctx));
ctx->c2p_train_data_offset = ctx->c2p_train_data_offset =
ALIGN((adev->gmc.mc_vram_size - adev->mman.discovery_tmr_size - SZ_1M), SZ_1M); ALIGN((adev->gmc.mc_vram_size - reserve_size - SZ_1M), SZ_1M);
ctx->p2c_train_data_offset = ctx->p2c_train_data_offset =
(adev->gmc.mc_vram_size - GDDR6_MEM_TRAINING_OFFSET); (adev->gmc.mc_vram_size - GDDR6_MEM_TRAINING_OFFSET);
ctx->train_data_size = ctx->train_data_size =
...@@ -1669,9 +1670,10 @@ static void amdgpu_ttm_training_data_block_init(struct amdgpu_device *adev) ...@@ -1669,9 +1670,10 @@ static void amdgpu_ttm_training_data_block_init(struct amdgpu_device *adev)
*/ */
static int amdgpu_ttm_reserve_tmr(struct amdgpu_device *adev) static int amdgpu_ttm_reserve_tmr(struct amdgpu_device *adev)
{ {
int ret;
struct psp_memory_training_context *ctx = &adev->psp.mem_train_ctx; struct psp_memory_training_context *ctx = &adev->psp.mem_train_ctx;
bool mem_train_support = false; bool mem_train_support = false;
uint32_t reserve_size = 0;
int ret;
if (!amdgpu_sriov_vf(adev)) { if (!amdgpu_sriov_vf(adev)) {
if (amdgpu_atomfirmware_mem_training_supported(adev)) if (amdgpu_atomfirmware_mem_training_supported(adev))
...@@ -1687,14 +1689,15 @@ static int amdgpu_ttm_reserve_tmr(struct amdgpu_device *adev) ...@@ -1687,14 +1689,15 @@ static int amdgpu_ttm_reserve_tmr(struct amdgpu_device *adev)
* Otherwise, fallback to legacy approach to check and reserve tmr block for ip * Otherwise, fallback to legacy approach to check and reserve tmr block for ip
* discovery data and G6 memory training data respectively * discovery data and G6 memory training data respectively
*/ */
adev->mman.discovery_tmr_size = if (adev->bios)
amdgpu_atomfirmware_get_fw_reserved_fb_size(adev); reserve_size =
if (!adev->mman.discovery_tmr_size) amdgpu_atomfirmware_get_fw_reserved_fb_size(adev);
adev->mman.discovery_tmr_size = DISCOVERY_TMR_OFFSET; if (!reserve_size)
reserve_size = DISCOVERY_TMR_OFFSET;
if (mem_train_support) { if (mem_train_support) {
/* reserve vram for mem train according to TMR location */ /* reserve vram for mem train according to TMR location */
amdgpu_ttm_training_data_block_init(adev); amdgpu_ttm_training_data_block_init(adev, reserve_size);
ret = amdgpu_bo_create_kernel_at(adev, ret = amdgpu_bo_create_kernel_at(adev,
ctx->c2p_train_data_offset, ctx->c2p_train_data_offset,
ctx->train_data_size, ctx->train_data_size,
...@@ -1709,15 +1712,13 @@ static int amdgpu_ttm_reserve_tmr(struct amdgpu_device *adev) ...@@ -1709,15 +1712,13 @@ static int amdgpu_ttm_reserve_tmr(struct amdgpu_device *adev)
} }
if (!adev->gmc.is_app_apu) { if (!adev->gmc.is_app_apu) {
ret = amdgpu_bo_create_kernel_at(adev, ret = amdgpu_bo_create_kernel_at(
adev->gmc.real_vram_size - adev, adev->gmc.real_vram_size - reserve_size,
adev->mman.discovery_tmr_size, reserve_size, &adev->mman.fw_reserved_memory, NULL);
adev->mman.discovery_tmr_size,
&adev->mman.discovery_memory,
NULL);
if (ret) { if (ret) {
DRM_ERROR("alloc tmr failed(%d)!\n", ret); DRM_ERROR("alloc tmr failed(%d)!\n", ret);
amdgpu_bo_free_kernel(&adev->mman.discovery_memory, NULL, NULL); amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory,
NULL, NULL);
return ret; return ret;
} }
} else { } else {
...@@ -1905,8 +1906,9 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev) ...@@ -1905,8 +1906,9 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
if (!adev->gmc.is_app_apu) { if (!adev->gmc.is_app_apu) {
amdgpu_bo_free_kernel(&adev->mman.stolen_vga_memory, NULL, NULL); amdgpu_bo_free_kernel(&adev->mman.stolen_vga_memory, NULL, NULL);
amdgpu_bo_free_kernel(&adev->mman.stolen_extended_memory, NULL, NULL); amdgpu_bo_free_kernel(&adev->mman.stolen_extended_memory, NULL, NULL);
/* return the IP Discovery TMR memory back to VRAM */ /* return the FW reserved memory back to VRAM */
amdgpu_bo_free_kernel(&adev->mman.discovery_memory, NULL, NULL); amdgpu_bo_free_kernel(&adev->mman.fw_reserved_memory, NULL,
NULL);
if (adev->mman.stolen_reserved_size) if (adev->mman.stolen_reserved_size)
amdgpu_bo_free_kernel(&adev->mman.stolen_reserved_memory, amdgpu_bo_free_kernel(&adev->mman.stolen_reserved_memory,
NULL, NULL); NULL, NULL);
......
...@@ -78,7 +78,8 @@ struct amdgpu_mman { ...@@ -78,7 +78,8 @@ struct amdgpu_mman {
/* discovery */ /* discovery */
uint8_t *discovery_bin; uint8_t *discovery_bin;
uint32_t discovery_tmr_size; uint32_t discovery_tmr_size;
struct amdgpu_bo *discovery_memory; /* fw reserved memory */
struct amdgpu_bo *fw_reserved_memory;
/* firmware VRAM reservation */ /* firmware VRAM reservation */
u64 fw_vram_usage_start_offset; u64 fw_vram_usage_start_offset;
......
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