* [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
@ 2019-12-19 9:16 Tianci Yin
2019-12-19 9:16 ` [PATCH 2/2] drm/amdgpu: remove memory training p2c buffer reservation(V2) Tianci Yin
2019-12-19 19:47 ` [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4) Luben Tuikov
0 siblings, 2 replies; 7+ messages in thread
From: Tianci Yin @ 2019-12-19 9:16 UTC (permalink / raw)
To: amd-gfx
Cc: Long Gang, Tianci Yin, Feifei Xu, Kevin Wang, Tuikov Luben,
Deucher Alexander, Hawking Zhang, Christian König,
Xiaojie Yuan
From: "Tianci.Yin" <tianci.yin@amd.com>
The method of getting fb_loc changed from parsing VBIOS to
taking certain offset from top of VRAM
Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
Signed-off-by: Tianci.Yin <tianci.yin@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 2 +-
.../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 38 ++-----------------
.../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 ++++-
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 7 ++++
drivers/gpu/drm/amd/include/atomfirmware.h | 14 -------
7 files changed, 23 insertions(+), 53 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
index a78a363b1d71..fa2cf8e7bc07 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
@@ -642,9 +642,8 @@ struct amdgpu_fw_vram_usage {
struct amdgpu_bo *reserved_bo;
void *va;
- /* Offset on the top of VRAM, used as c2p write buffer.
+ /* GDDR6 training support flag.
*/
- u64 mem_train_fb_loc;
bool mem_train_support;
};
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
index 9ba80d828876..fdd52d86a4d7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
@@ -2022,7 +2022,7 @@ int amdgpu_atombios_init(struct amdgpu_device *adev)
if (adev->is_atom_fw) {
amdgpu_atomfirmware_scratch_regs_init(adev);
amdgpu_atomfirmware_allocate_fb_scratch(adev);
- ret = amdgpu_atomfirmware_get_mem_train_fb_loc(adev);
+ ret = amdgpu_atomfirmware_get_mem_train_info(adev);
if (ret) {
DRM_ERROR("Failed to get mem train fb location.\n");
return ret;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
index ff4eb96bdfb5..58f9d8c3a17a 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
@@ -525,16 +525,12 @@ static int gddr6_mem_train_support(struct amdgpu_device *adev)
return ret;
}
-int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
+int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev)
{
struct atom_context *ctx = adev->mode_info.atom_context;
- unsigned char *bios = ctx->bios;
- struct vram_reserve_block *reserved_block;
- int index, block_number;
+ int index;
uint8_t frev, crev;
uint16_t data_offset, size;
- uint32_t start_address_in_kb;
- uint64_t offset;
int ret;
adev->fw_vram_usage.mem_train_support = false;
@@ -569,32 +565,6 @@ int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
return -EINVAL;
}
- reserved_block = (struct vram_reserve_block *)
- (bios + data_offset + sizeof(struct atom_common_table_header));
- block_number = ((unsigned int)size - sizeof(struct atom_common_table_header))
- / sizeof(struct vram_reserve_block);
- reserved_block += (block_number > 0) ? block_number-1 : 0;
- DRM_DEBUG("block_number:0x%04x, last block: 0x%08xkb sz, %dkb fw, %dkb drv.\n",
- block_number,
- le32_to_cpu(reserved_block->start_address_in_kb),
- le16_to_cpu(reserved_block->used_by_firmware_in_kb),
- le16_to_cpu(reserved_block->used_by_driver_in_kb));
- if (reserved_block->used_by_firmware_in_kb > 0) {
- start_address_in_kb = le32_to_cpu(reserved_block->start_address_in_kb);
- offset = (uint64_t)start_address_in_kb * ONE_KiB;
- if ((offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
- offset -= ONE_MiB;
- }
-
- offset &= ~(ONE_MiB - 1);
- adev->fw_vram_usage.mem_train_fb_loc = offset;
- adev->fw_vram_usage.mem_train_support = true;
- DRM_DEBUG("mem_train_fb_loc:0x%09llx.\n", offset);
- ret = 0;
- } else {
- DRM_ERROR("used_by_firmware_in_kb is 0!\n");
- ret = -EINVAL;
- }
-
- return ret;
+ adev->fw_vram_usage.mem_train_support = true;
+ return 0;
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
index f871af5ea6f3..434fe2fa0089 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
@@ -31,7 +31,7 @@ void amdgpu_atomfirmware_scratch_regs_init(struct amdgpu_device *adev);
int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev);
int amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
int *vram_width, int *vram_type, int *vram_vendor);
-int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev);
+int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev);
int amdgpu_atomfirmware_get_clock_info(struct amdgpu_device *adev);
int amdgpu_atomfirmware_get_gfx_info(struct amdgpu_device *adev);
bool amdgpu_atomfirmware_mem_ecc_supported(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 2ff63d0414c9..1515413fd356 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1687,6 +1687,14 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev)
return 0;
}
+static u64 amdgpu_ttm_training_get_c2p_offset(u64 vram_size)
+{
+ if ((vram_size & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) )
+ vram_size -= ONE_MiB;
+
+ return ALIGN(vram_size, ONE_MiB);
+}
+
/**
* amdgpu_ttm_training_reserve_vram_init - create bo vram reservation from memory training
*
@@ -1705,7 +1713,7 @@ static int amdgpu_ttm_training_reserve_vram_init(struct amdgpu_device *adev)
return 0;
}
- ctx->c2p_train_data_offset = adev->fw_vram_usage.mem_train_fb_loc;
+ ctx->c2p_train_data_offset = amdgpu_ttm_training_get_c2p_offset(adev->gmc.mc_vram_size);
ctx->p2c_train_data_offset = (adev->gmc.mc_vram_size - GDDR6_MEM_TRAINING_OFFSET);
ctx->train_data_size = GDDR6_MEM_TRAINING_DATA_SIZE_IN_BYTES;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
index f1ebd424510c..19eb3e8456c7 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -66,6 +66,13 @@ struct amdgpu_copy_mem {
unsigned long offset;
};
+/* Definitions for constance */
+enum amdgpu_internal_constants
+{
+ ONE_KiB = 0x400,
+ ONE_MiB = 0x100000,
+};
+
extern const struct ttm_mem_type_manager_func amdgpu_gtt_mgr_func;
extern const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func;
diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h
index dd7cbc00a0aa..70146518174c 100644
--- a/drivers/gpu/drm/amd/include/atomfirmware.h
+++ b/drivers/gpu/drm/amd/include/atomfirmware.h
@@ -672,20 +672,6 @@ struct vram_usagebyfirmware_v2_1
uint16_t used_by_driver_in_kb;
};
-/* This is part of vram_usagebyfirmware_v2_1 */
-struct vram_reserve_block
-{
- uint32_t start_address_in_kb;
- uint16_t used_by_firmware_in_kb;
- uint16_t used_by_driver_in_kb;
-};
-
-/* Definitions for constance */
-enum atomfirmware_internal_constants
-{
- ONE_KiB = 0x400,
- ONE_MiB = 0x100000,
-};
/*
***************************************************************************
--
2.17.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] drm/amdgpu: remove memory training p2c buffer reservation(V2)
2019-12-19 9:16 [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4) Tianci Yin
@ 2019-12-19 9:16 ` Tianci Yin
2019-12-19 19:47 ` [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4) Luben Tuikov
1 sibling, 0 replies; 7+ messages in thread
From: Tianci Yin @ 2019-12-19 9:16 UTC (permalink / raw)
To: amd-gfx
Cc: Long Gang, Tianci Yin, Feifei Xu, Kevin Wang, Tuikov Luben,
Deucher Alexander, Hawking Zhang, Christian König,
Xiaojie Yuan
From: "Tianci.Yin" <tianci.yin@amd.com>
IP discovery TMR(occupied the top VRAM with size DISCOVERY_TMR_SIZE)
has been reserved, and the p2c buffer is in the range of this TMR, so
the p2c buffer reservation is unnecessary.
Change-Id: Ib1f2f2b4a1f3869c03ffe22e2836cdbee17ba99f
Reviewed-by: Kevin Wang <kevin1.wang@amd.com>
Reviewed-by: Xiaojie Yuan <xiaojie.yuan@amd.com>
Signed-off-by: Tianci.Yin <tianci.yin@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h | 1 -
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 21 ++-------------------
2 files changed, 2 insertions(+), 20 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
index 5f8fd3e3535b..3265487b859f 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_psp.h
@@ -202,7 +202,6 @@ struct psp_memory_training_context {
/*vram offset of the p2c training data*/
u64 p2c_train_data_offset;
- struct amdgpu_bo *p2c_bo;
/*vram offset of the c2p training data*/
u64 c2p_train_data_offset;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 1515413fd356..1aab4e349bc8 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1681,9 +1681,6 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev)
amdgpu_bo_free_kernel(&ctx->c2p_bo, NULL, NULL);
ctx->c2p_bo = NULL;
- amdgpu_bo_free_kernel(&ctx->p2c_bo, NULL, NULL);
- ctx->p2c_bo = NULL;
-
return 0;
}
@@ -1722,17 +1719,6 @@ static int amdgpu_ttm_training_reserve_vram_init(struct amdgpu_device *adev)
ctx->p2c_train_data_offset,
ctx->c2p_train_data_offset);
- ret = amdgpu_bo_create_kernel_at(adev,
- ctx->p2c_train_data_offset,
- ctx->train_data_size,
- AMDGPU_GEM_DOMAIN_VRAM,
- &ctx->p2c_bo,
- NULL);
- if (ret) {
- DRM_ERROR("alloc p2c_bo failed(%d)!\n", ret);
- goto Err_out;
- }
-
ret = amdgpu_bo_create_kernel_at(adev,
ctx->c2p_train_data_offset,
ctx->train_data_size,
@@ -1741,15 +1727,12 @@ static int amdgpu_ttm_training_reserve_vram_init(struct amdgpu_device *adev)
NULL);
if (ret) {
DRM_ERROR("alloc c2p_bo failed(%d)!\n", ret);
- goto Err_out;
+ amdgpu_ttm_training_reserve_vram_fini(adev);
+ return ret;
}
ctx->init = PSP_MEM_TRAIN_RESERVE_SUCCESS;
return 0;
-
-Err_out:
- amdgpu_ttm_training_reserve_vram_fini(adev);
- return ret;
}
/**
--
2.17.1
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
2019-12-19 9:16 [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4) Tianci Yin
2019-12-19 9:16 ` [PATCH 2/2] drm/amdgpu: remove memory training p2c buffer reservation(V2) Tianci Yin
@ 2019-12-19 19:47 ` Luben Tuikov
2019-12-20 2:00 ` Yin, Tianci (Rico)
1 sibling, 1 reply; 7+ messages in thread
From: Luben Tuikov @ 2019-12-19 19:47 UTC (permalink / raw)
To: Tianci Yin, amd-gfx
Cc: Long Gang, Feifei Xu, Kevin Wang, Deucher Alexander,
Hawking Zhang, Christian König, Xiaojie Yuan
Yep! That's perfect--good job!
Regards,
Luben
On 2019-12-19 04:16, Tianci Yin wrote:
> From: "Tianci.Yin" <tianci.yin@amd.com>
>
> The method of getting fb_loc changed from parsing VBIOS to
> taking certain offset from top of VRAM
>
> Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
> Signed-off-by: Tianci.Yin <tianci.yin@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 2 +-
> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 38 ++-----------------
> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 ++++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 7 ++++
> drivers/gpu/drm/amd/include/atomfirmware.h | 14 -------
> 7 files changed, 23 insertions(+), 53 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index a78a363b1d71..fa2cf8e7bc07 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -642,9 +642,8 @@ struct amdgpu_fw_vram_usage {
> struct amdgpu_bo *reserved_bo;
> void *va;
>
> - /* Offset on the top of VRAM, used as c2p write buffer.
> + /* GDDR6 training support flag.
> */
> - u64 mem_train_fb_loc;
> bool mem_train_support;
> };
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> index 9ba80d828876..fdd52d86a4d7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> @@ -2022,7 +2022,7 @@ int amdgpu_atombios_init(struct amdgpu_device *adev)
> if (adev->is_atom_fw) {
> amdgpu_atomfirmware_scratch_regs_init(adev);
> amdgpu_atomfirmware_allocate_fb_scratch(adev);
> - ret = amdgpu_atomfirmware_get_mem_train_fb_loc(adev);
> + ret = amdgpu_atomfirmware_get_mem_train_info(adev);
> if (ret) {
> DRM_ERROR("Failed to get mem train fb location.\n");
> return ret;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> index ff4eb96bdfb5..58f9d8c3a17a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> @@ -525,16 +525,12 @@ static int gddr6_mem_train_support(struct amdgpu_device *adev)
> return ret;
> }
>
> -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
> +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev)
> {
> struct atom_context *ctx = adev->mode_info.atom_context;
> - unsigned char *bios = ctx->bios;
> - struct vram_reserve_block *reserved_block;
> - int index, block_number;
> + int index;
> uint8_t frev, crev;
> uint16_t data_offset, size;
> - uint32_t start_address_in_kb;
> - uint64_t offset;
> int ret;
>
> adev->fw_vram_usage.mem_train_support = false;
> @@ -569,32 +565,6 @@ int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
> return -EINVAL;
> }
>
> - reserved_block = (struct vram_reserve_block *)
> - (bios + data_offset + sizeof(struct atom_common_table_header));
> - block_number = ((unsigned int)size - sizeof(struct atom_common_table_header))
> - / sizeof(struct vram_reserve_block);
> - reserved_block += (block_number > 0) ? block_number-1 : 0;
> - DRM_DEBUG("block_number:0x%04x, last block: 0x%08xkb sz, %dkb fw, %dkb drv.\n",
> - block_number,
> - le32_to_cpu(reserved_block->start_address_in_kb),
> - le16_to_cpu(reserved_block->used_by_firmware_in_kb),
> - le16_to_cpu(reserved_block->used_by_driver_in_kb));
> - if (reserved_block->used_by_firmware_in_kb > 0) {
> - start_address_in_kb = le32_to_cpu(reserved_block->start_address_in_kb);
> - offset = (uint64_t)start_address_in_kb * ONE_KiB;
> - if ((offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
> - offset -= ONE_MiB;
> - }
> -
> - offset &= ~(ONE_MiB - 1);
> - adev->fw_vram_usage.mem_train_fb_loc = offset;
> - adev->fw_vram_usage.mem_train_support = true;
> - DRM_DEBUG("mem_train_fb_loc:0x%09llx.\n", offset);
> - ret = 0;
> - } else {
> - DRM_ERROR("used_by_firmware_in_kb is 0!\n");
> - ret = -EINVAL;
> - }
> -
> - return ret;
> + adev->fw_vram_usage.mem_train_support = true;
> + return 0;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> index f871af5ea6f3..434fe2fa0089 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> @@ -31,7 +31,7 @@ void amdgpu_atomfirmware_scratch_regs_init(struct amdgpu_device *adev);
> int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev);
> int amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
> int *vram_width, int *vram_type, int *vram_vendor);
> -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev);
> +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev);
> int amdgpu_atomfirmware_get_clock_info(struct amdgpu_device *adev);
> int amdgpu_atomfirmware_get_gfx_info(struct amdgpu_device *adev);
> bool amdgpu_atomfirmware_mem_ecc_supported(struct amdgpu_device *adev);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 2ff63d0414c9..1515413fd356 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1687,6 +1687,14 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev)
> return 0;
> }
>
> +static u64 amdgpu_ttm_training_get_c2p_offset(u64 vram_size)
> +{
> + if ((vram_size & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) )
> + vram_size -= ONE_MiB;
> +
> + return ALIGN(vram_size, ONE_MiB);
> +}
> +
> /**
> * amdgpu_ttm_training_reserve_vram_init - create bo vram reservation from memory training
> *
> @@ -1705,7 +1713,7 @@ static int amdgpu_ttm_training_reserve_vram_init(struct amdgpu_device *adev)
> return 0;
> }
>
> - ctx->c2p_train_data_offset = adev->fw_vram_usage.mem_train_fb_loc;
> + ctx->c2p_train_data_offset = amdgpu_ttm_training_get_c2p_offset(adev->gmc.mc_vram_size);
> ctx->p2c_train_data_offset = (adev->gmc.mc_vram_size - GDDR6_MEM_TRAINING_OFFSET);
> ctx->train_data_size = GDDR6_MEM_TRAINING_DATA_SIZE_IN_BYTES;
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> index f1ebd424510c..19eb3e8456c7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> @@ -66,6 +66,13 @@ struct amdgpu_copy_mem {
> unsigned long offset;
> };
>
> +/* Definitions for constance */
> +enum amdgpu_internal_constants
> +{
> + ONE_KiB = 0x400,
> + ONE_MiB = 0x100000,
> +};
> +
> extern const struct ttm_mem_type_manager_func amdgpu_gtt_mgr_func;
> extern const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func;
>
> diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h
> index dd7cbc00a0aa..70146518174c 100644
> --- a/drivers/gpu/drm/amd/include/atomfirmware.h
> +++ b/drivers/gpu/drm/amd/include/atomfirmware.h
> @@ -672,20 +672,6 @@ struct vram_usagebyfirmware_v2_1
> uint16_t used_by_driver_in_kb;
> };
>
> -/* This is part of vram_usagebyfirmware_v2_1 */
> -struct vram_reserve_block
> -{
> - uint32_t start_address_in_kb;
> - uint16_t used_by_firmware_in_kb;
> - uint16_t used_by_driver_in_kb;
> -};
> -
> -/* Definitions for constance */
> -enum atomfirmware_internal_constants
> -{
> - ONE_KiB = 0x400,
> - ONE_MiB = 0x100000,
> -};
>
> /*
> ***************************************************************************
>
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
2019-12-19 19:47 ` [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4) Luben Tuikov
@ 2019-12-20 2:00 ` Yin, Tianci (Rico)
2019-12-20 15:27 ` Alex Deucher
0 siblings, 1 reply; 7+ messages in thread
From: Yin, Tianci (Rico) @ 2019-12-20 2:00 UTC (permalink / raw)
To: Tuikov, Luben, amd-gfx
Cc: Long, Gang, Xu, Feifei, Wang, Kevin(Yang),
Deucher, Alexander, Zhang, Hawking, Koenig, Christian, Yuan,
Xiaojie
[-- Attachment #1.1: Type: text/plain, Size: 9150 bytes --]
[AMD Official Use Only - Internal Distribution Only]
Hi Luben,
May I have your Review-by?
Thanks a lot!
Rico
________________________________
From: Tuikov, Luben <Luben.Tuikov@amd.com>
Sent: Friday, December 20, 2019 3:47
To: Yin, Tianci (Rico) <Tianci.Yin@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
Cc: Koenig, Christian <Christian.Koenig@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Xu, Feifei <Feifei.Xu@amd.com>; Yuan, Xiaojie <Xiaojie.Yuan@amd.com>; Long, Gang <Gang.Long@amd.com>; Wang, Kevin(Yang) <Kevin1.Wang@amd.com>
Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
Yep! That's perfect--good job!
Regards,
Luben
On 2019-12-19 04:16, Tianci Yin wrote:
> From: "Tianci.Yin" <tianci.yin@amd.com>
>
> The method of getting fb_loc changed from parsing VBIOS to
> taking certain offset from top of VRAM
>
> Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
> Signed-off-by: Tianci.Yin <tianci.yin@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 2 +-
> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 38 ++-----------------
> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h | 2 +-
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 ++++-
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 7 ++++
> drivers/gpu/drm/amd/include/atomfirmware.h | 14 -------
> 7 files changed, 23 insertions(+), 53 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> index a78a363b1d71..fa2cf8e7bc07 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> @@ -642,9 +642,8 @@ struct amdgpu_fw_vram_usage {
> struct amdgpu_bo *reserved_bo;
> void *va;
>
> - /* Offset on the top of VRAM, used as c2p write buffer.
> + /* GDDR6 training support flag.
> */
> - u64 mem_train_fb_loc;
> bool mem_train_support;
> };
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> index 9ba80d828876..fdd52d86a4d7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> @@ -2022,7 +2022,7 @@ int amdgpu_atombios_init(struct amdgpu_device *adev)
> if (adev->is_atom_fw) {
> amdgpu_atomfirmware_scratch_regs_init(adev);
> amdgpu_atomfirmware_allocate_fb_scratch(adev);
> - ret = amdgpu_atomfirmware_get_mem_train_fb_loc(adev);
> + ret = amdgpu_atomfirmware_get_mem_train_info(adev);
> if (ret) {
> DRM_ERROR("Failed to get mem train fb location.\n");
> return ret;
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> index ff4eb96bdfb5..58f9d8c3a17a 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> @@ -525,16 +525,12 @@ static int gddr6_mem_train_support(struct amdgpu_device *adev)
> return ret;
> }
>
> -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
> +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev)
> {
> struct atom_context *ctx = adev->mode_info.atom_context;
> - unsigned char *bios = ctx->bios;
> - struct vram_reserve_block *reserved_block;
> - int index, block_number;
> + int index;
> uint8_t frev, crev;
> uint16_t data_offset, size;
> - uint32_t start_address_in_kb;
> - uint64_t offset;
> int ret;
>
> adev->fw_vram_usage.mem_train_support = false;
> @@ -569,32 +565,6 @@ int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
> return -EINVAL;
> }
>
> - reserved_block = (struct vram_reserve_block *)
> - (bios + data_offset + sizeof(struct atom_common_table_header));
> - block_number = ((unsigned int)size - sizeof(struct atom_common_table_header))
> - / sizeof(struct vram_reserve_block);
> - reserved_block += (block_number > 0) ? block_number-1 : 0;
> - DRM_DEBUG("block_number:0x%04x, last block: 0x%08xkb sz, %dkb fw, %dkb drv.\n",
> - block_number,
> - le32_to_cpu(reserved_block->start_address_in_kb),
> - le16_to_cpu(reserved_block->used_by_firmware_in_kb),
> - le16_to_cpu(reserved_block->used_by_driver_in_kb));
> - if (reserved_block->used_by_firmware_in_kb > 0) {
> - start_address_in_kb = le32_to_cpu(reserved_block->start_address_in_kb);
> - offset = (uint64_t)start_address_in_kb * ONE_KiB;
> - if ((offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
> - offset -= ONE_MiB;
> - }
> -
> - offset &= ~(ONE_MiB - 1);
> - adev->fw_vram_usage.mem_train_fb_loc = offset;
> - adev->fw_vram_usage.mem_train_support = true;
> - DRM_DEBUG("mem_train_fb_loc:0x%09llx.\n", offset);
> - ret = 0;
> - } else {
> - DRM_ERROR("used_by_firmware_in_kb is 0!\n");
> - ret = -EINVAL;
> - }
> -
> - return ret;
> + adev->fw_vram_usage.mem_train_support = true;
> + return 0;
> }
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> index f871af5ea6f3..434fe2fa0089 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> @@ -31,7 +31,7 @@ void amdgpu_atomfirmware_scratch_regs_init(struct amdgpu_device *adev);
> int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev);
> int amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
> int *vram_width, int *vram_type, int *vram_vendor);
> -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev);
> +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev);
> int amdgpu_atomfirmware_get_clock_info(struct amdgpu_device *adev);
> int amdgpu_atomfirmware_get_gfx_info(struct amdgpu_device *adev);
> bool amdgpu_atomfirmware_mem_ecc_supported(struct amdgpu_device *adev);
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 2ff63d0414c9..1515413fd356 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -1687,6 +1687,14 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev)
> return 0;
> }
>
> +static u64 amdgpu_ttm_training_get_c2p_offset(u64 vram_size)
> +{
> + if ((vram_size & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) )
> + vram_size -= ONE_MiB;
> +
> + return ALIGN(vram_size, ONE_MiB);
> +}
> +
> /**
> * amdgpu_ttm_training_reserve_vram_init - create bo vram reservation from memory training
> *
> @@ -1705,7 +1713,7 @@ static int amdgpu_ttm_training_reserve_vram_init(struct amdgpu_device *adev)
> return 0;
> }
>
> - ctx->c2p_train_data_offset = adev->fw_vram_usage.mem_train_fb_loc;
> + ctx->c2p_train_data_offset = amdgpu_ttm_training_get_c2p_offset(adev->gmc.mc_vram_size);
> ctx->p2c_train_data_offset = (adev->gmc.mc_vram_size - GDDR6_MEM_TRAINING_OFFSET);
> ctx->train_data_size = GDDR6_MEM_TRAINING_DATA_SIZE_IN_BYTES;
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> index f1ebd424510c..19eb3e8456c7 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> @@ -66,6 +66,13 @@ struct amdgpu_copy_mem {
> unsigned long offset;
> };
>
> +/* Definitions for constance */
> +enum amdgpu_internal_constants
> +{
> + ONE_KiB = 0x400,
> + ONE_MiB = 0x100000,
> +};
> +
> extern const struct ttm_mem_type_manager_func amdgpu_gtt_mgr_func;
> extern const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func;
>
> diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h
> index dd7cbc00a0aa..70146518174c 100644
> --- a/drivers/gpu/drm/amd/include/atomfirmware.h
> +++ b/drivers/gpu/drm/amd/include/atomfirmware.h
> @@ -672,20 +672,6 @@ struct vram_usagebyfirmware_v2_1
> uint16_t used_by_driver_in_kb;
> };
>
> -/* This is part of vram_usagebyfirmware_v2_1 */
> -struct vram_reserve_block
> -{
> - uint32_t start_address_in_kb;
> - uint16_t used_by_firmware_in_kb;
> - uint16_t used_by_driver_in_kb;
> -};
> -
> -/* Definitions for constance */
> -enum atomfirmware_internal_constants
> -{
> - ONE_KiB = 0x400,
> - ONE_MiB = 0x100000,
> -};
>
> /*
> ***************************************************************************
>
[-- Attachment #1.2: Type: text/html, Size: 16100 bytes --]
[-- Attachment #2: Type: text/plain, Size: 154 bytes --]
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
2019-12-20 2:00 ` Yin, Tianci (Rico)
@ 2019-12-20 15:27 ` Alex Deucher
2019-12-20 21:52 ` Luben Tuikov
0 siblings, 1 reply; 7+ messages in thread
From: Alex Deucher @ 2019-12-20 15:27 UTC (permalink / raw)
To: Yin, Tianci (Rico)
Cc: Long, Gang, Xu, Feifei, Wang, Kevin(Yang),
amd-gfx, Tuikov, Luben, Deucher, Alexander, Yuan, Xiaojie,
Koenig, Christian, Zhang, Hawking
On Thu, Dec 19, 2019 at 9:00 PM Yin, Tianci (Rico) <Tianci.Yin@amd.com> wrote:
>
> [AMD Official Use Only - Internal Distribution Only]
>
>
> Hi Luben,
>
> May I have your Review-by?
>
Series is:
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> Thanks a lot!
> Rico
> ________________________________
> From: Tuikov, Luben <Luben.Tuikov@amd.com>
> Sent: Friday, December 20, 2019 3:47
> To: Yin, Tianci (Rico) <Tianci.Yin@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
> Cc: Koenig, Christian <Christian.Koenig@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Xu, Feifei <Feifei.Xu@amd.com>; Yuan, Xiaojie <Xiaojie.Yuan@amd.com>; Long, Gang <Gang.Long@amd.com>; Wang, Kevin(Yang) <Kevin1.Wang@amd.com>
> Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
>
> Yep! That's perfect--good job!
>
> Regards,
> Luben
>
> On 2019-12-19 04:16, Tianci Yin wrote:
> > From: "Tianci.Yin" <tianci.yin@amd.com>
> >
> > The method of getting fb_loc changed from parsing VBIOS to
> > taking certain offset from top of VRAM
> >
> > Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
> > Signed-off-by: Tianci.Yin <tianci.yin@amd.com>
> > ---
> > drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 +-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 2 +-
> > .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 38 ++-----------------
> > .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h | 2 +-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 ++++-
> > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 7 ++++
> > drivers/gpu/drm/amd/include/atomfirmware.h | 14 -------
> > 7 files changed, 23 insertions(+), 53 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > index a78a363b1d71..fa2cf8e7bc07 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
> > @@ -642,9 +642,8 @@ struct amdgpu_fw_vram_usage {
> > struct amdgpu_bo *reserved_bo;
> > void *va;
> >
> > - /* Offset on the top of VRAM, used as c2p write buffer.
> > + /* GDDR6 training support flag.
> > */
> > - u64 mem_train_fb_loc;
> > bool mem_train_support;
> > };
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> > index 9ba80d828876..fdd52d86a4d7 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
> > @@ -2022,7 +2022,7 @@ int amdgpu_atombios_init(struct amdgpu_device *adev)
> > if (adev->is_atom_fw) {
> > amdgpu_atomfirmware_scratch_regs_init(adev);
> > amdgpu_atomfirmware_allocate_fb_scratch(adev);
> > - ret = amdgpu_atomfirmware_get_mem_train_fb_loc(adev);
> > + ret = amdgpu_atomfirmware_get_mem_train_info(adev);
> > if (ret) {
> > DRM_ERROR("Failed to get mem train fb location.\n");
> > return ret;
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> > index ff4eb96bdfb5..58f9d8c3a17a 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
> > @@ -525,16 +525,12 @@ static int gddr6_mem_train_support(struct amdgpu_device *adev)
> > return ret;
> > }
> >
> > -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
> > +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev)
> > {
> > struct atom_context *ctx = adev->mode_info.atom_context;
> > - unsigned char *bios = ctx->bios;
> > - struct vram_reserve_block *reserved_block;
> > - int index, block_number;
> > + int index;
> > uint8_t frev, crev;
> > uint16_t data_offset, size;
> > - uint32_t start_address_in_kb;
> > - uint64_t offset;
> > int ret;
> >
> > adev->fw_vram_usage.mem_train_support = false;
> > @@ -569,32 +565,6 @@ int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
> > return -EINVAL;
> > }
> >
> > - reserved_block = (struct vram_reserve_block *)
> > - (bios + data_offset + sizeof(struct atom_common_table_header));
> > - block_number = ((unsigned int)size - sizeof(struct atom_common_table_header))
> > - / sizeof(struct vram_reserve_block);
> > - reserved_block += (block_number > 0) ? block_number-1 : 0;
> > - DRM_DEBUG("block_number:0x%04x, last block: 0x%08xkb sz, %dkb fw, %dkb drv.\n",
> > - block_number,
> > - le32_to_cpu(reserved_block->start_address_in_kb),
> > - le16_to_cpu(reserved_block->used_by_firmware_in_kb),
> > - le16_to_cpu(reserved_block->used_by_driver_in_kb));
> > - if (reserved_block->used_by_firmware_in_kb > 0) {
> > - start_address_in_kb = le32_to_cpu(reserved_block->start_address_in_kb);
> > - offset = (uint64_t)start_address_in_kb * ONE_KiB;
> > - if ((offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
> > - offset -= ONE_MiB;
> > - }
> > -
> > - offset &= ~(ONE_MiB - 1);
> > - adev->fw_vram_usage.mem_train_fb_loc = offset;
> > - adev->fw_vram_usage.mem_train_support = true;
> > - DRM_DEBUG("mem_train_fb_loc:0x%09llx.\n", offset);
> > - ret = 0;
> > - } else {
> > - DRM_ERROR("used_by_firmware_in_kb is 0!\n");
> > - ret = -EINVAL;
> > - }
> > -
> > - return ret;
> > + adev->fw_vram_usage.mem_train_support = true;
> > + return 0;
> > }
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> > index f871af5ea6f3..434fe2fa0089 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
> > @@ -31,7 +31,7 @@ void amdgpu_atomfirmware_scratch_regs_init(struct amdgpu_device *adev);
> > int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev);
> > int amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
> > int *vram_width, int *vram_type, int *vram_vendor);
> > -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev);
> > +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev);
> > int amdgpu_atomfirmware_get_clock_info(struct amdgpu_device *adev);
> > int amdgpu_atomfirmware_get_gfx_info(struct amdgpu_device *adev);
> > bool amdgpu_atomfirmware_mem_ecc_supported(struct amdgpu_device *adev);
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> > index 2ff63d0414c9..1515413fd356 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> > @@ -1687,6 +1687,14 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev)
> > return 0;
> > }
> >
> > +static u64 amdgpu_ttm_training_get_c2p_offset(u64 vram_size)
> > +{
> > + if ((vram_size & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) )
> > + vram_size -= ONE_MiB;
> > +
> > + return ALIGN(vram_size, ONE_MiB);
> > +}
> > +
> > /**
> > * amdgpu_ttm_training_reserve_vram_init - create bo vram reservation from memory training
> > *
> > @@ -1705,7 +1713,7 @@ static int amdgpu_ttm_training_reserve_vram_init(struct amdgpu_device *adev)
> > return 0;
> > }
> >
> > - ctx->c2p_train_data_offset = adev->fw_vram_usage.mem_train_fb_loc;
> > + ctx->c2p_train_data_offset = amdgpu_ttm_training_get_c2p_offset(adev->gmc.mc_vram_size);
> > ctx->p2c_train_data_offset = (adev->gmc.mc_vram_size - GDDR6_MEM_TRAINING_OFFSET);
> > ctx->train_data_size = GDDR6_MEM_TRAINING_DATA_SIZE_IN_BYTES;
> >
> > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> > index f1ebd424510c..19eb3e8456c7 100644
> > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
> > @@ -66,6 +66,13 @@ struct amdgpu_copy_mem {
> > unsigned long offset;
> > };
> >
> > +/* Definitions for constance */
> > +enum amdgpu_internal_constants
> > +{
> > + ONE_KiB = 0x400,
> > + ONE_MiB = 0x100000,
> > +};
> > +
> > extern const struct ttm_mem_type_manager_func amdgpu_gtt_mgr_func;
> > extern const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func;
> >
> > diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h
> > index dd7cbc00a0aa..70146518174c 100644
> > --- a/drivers/gpu/drm/amd/include/atomfirmware.h
> > +++ b/drivers/gpu/drm/amd/include/atomfirmware.h
> > @@ -672,20 +672,6 @@ struct vram_usagebyfirmware_v2_1
> > uint16_t used_by_driver_in_kb;
> > };
> >
> > -/* This is part of vram_usagebyfirmware_v2_1 */
> > -struct vram_reserve_block
> > -{
> > - uint32_t start_address_in_kb;
> > - uint16_t used_by_firmware_in_kb;
> > - uint16_t used_by_driver_in_kb;
> > -};
> > -
> > -/* Definitions for constance */
> > -enum atomfirmware_internal_constants
> > -{
> > - ONE_KiB = 0x400,
> > - ONE_MiB = 0x100000,
> > -};
> >
> > /*
> > ***************************************************************************
> >
>
> _______________________________________________
> amd-gfx mailing list
> amd-gfx@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/amd-gfx
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
2019-12-20 15:27 ` Alex Deucher
@ 2019-12-20 21:52 ` Luben Tuikov
2019-12-23 2:10 ` Yin, Tianci (Rico)
0 siblings, 1 reply; 7+ messages in thread
From: Luben Tuikov @ 2019-12-20 21:52 UTC (permalink / raw)
To: Alex Deucher, Yin, Tianci (Rico)
Cc: Long, Gang, Xu, Feifei, Wang, Kevin(Yang),
amd-gfx, Deucher, Alexander, Yuan, Xiaojie, Koenig, Christian,
Zhang, Hawking
On 2019-12-20 10:27 a.m., Alex Deucher wrote:
> On Thu, Dec 19, 2019 at 9:00 PM Yin, Tianci (Rico) <Tianci.Yin@amd.com> wrote:
>>
>> [AMD Official Use Only - Internal Distribution Only]
>>
>>
>> Hi Luben,
>>
>> May I have your Review-by?
>>
If you'd like--it's completely up to you. If you choose to, like Alex's below.
Regards,
Luben
>
> Series is:
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>
>> Thanks a lot!
>> Rico
>> ________________________________
>> From: Tuikov, Luben <Luben.Tuikov@amd.com>
>> Sent: Friday, December 20, 2019 3:47
>> To: Yin, Tianci (Rico) <Tianci.Yin@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
>> Cc: Koenig, Christian <Christian.Koenig@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Xu, Feifei <Feifei.Xu@amd.com>; Yuan, Xiaojie <Xiaojie.Yuan@amd.com>; Long, Gang <Gang.Long@amd.com>; Wang, Kevin(Yang) <Kevin1.Wang@amd.com>
>> Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
>>
>> Yep! That's perfect--good job!
>>
>> Regards,
>> Luben
>>
>> On 2019-12-19 04:16, Tianci Yin wrote:
>>> From: "Tianci.Yin" <tianci.yin@amd.com>
>>>
>>> The method of getting fb_loc changed from parsing VBIOS to
>>> taking certain offset from top of VRAM
>>>
>>> Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
>>> Signed-off-by: Tianci.Yin <tianci.yin@amd.com>
>>> ---
>>> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 +-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 2 +-
>>> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 38 ++-----------------
>>> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h | 2 +-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 ++++-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 7 ++++
>>> drivers/gpu/drm/amd/include/atomfirmware.h | 14 -------
>>> 7 files changed, 23 insertions(+), 53 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> index a78a363b1d71..fa2cf8e7bc07 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> @@ -642,9 +642,8 @@ struct amdgpu_fw_vram_usage {
>>> struct amdgpu_bo *reserved_bo;
>>> void *va;
>>>
>>> - /* Offset on the top of VRAM, used as c2p write buffer.
>>> + /* GDDR6 training support flag.
>>> */
>>> - u64 mem_train_fb_loc;
>>> bool mem_train_support;
>>> };
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
>>> index 9ba80d828876..fdd52d86a4d7 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
>>> @@ -2022,7 +2022,7 @@ int amdgpu_atombios_init(struct amdgpu_device *adev)
>>> if (adev->is_atom_fw) {
>>> amdgpu_atomfirmware_scratch_regs_init(adev);
>>> amdgpu_atomfirmware_allocate_fb_scratch(adev);
>>> - ret = amdgpu_atomfirmware_get_mem_train_fb_loc(adev);
>>> + ret = amdgpu_atomfirmware_get_mem_train_info(adev);
>>> if (ret) {
>>> DRM_ERROR("Failed to get mem train fb location.\n");
>>> return ret;
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
>>> index ff4eb96bdfb5..58f9d8c3a17a 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
>>> @@ -525,16 +525,12 @@ static int gddr6_mem_train_support(struct amdgpu_device *adev)
>>> return ret;
>>> }
>>>
>>> -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
>>> +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev)
>>> {
>>> struct atom_context *ctx = adev->mode_info.atom_context;
>>> - unsigned char *bios = ctx->bios;
>>> - struct vram_reserve_block *reserved_block;
>>> - int index, block_number;
>>> + int index;
>>> uint8_t frev, crev;
>>> uint16_t data_offset, size;
>>> - uint32_t start_address_in_kb;
>>> - uint64_t offset;
>>> int ret;
>>>
>>> adev->fw_vram_usage.mem_train_support = false;
>>> @@ -569,32 +565,6 @@ int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
>>> return -EINVAL;
>>> }
>>>
>>> - reserved_block = (struct vram_reserve_block *)
>>> - (bios + data_offset + sizeof(struct atom_common_table_header));
>>> - block_number = ((unsigned int)size - sizeof(struct atom_common_table_header))
>>> - / sizeof(struct vram_reserve_block);
>>> - reserved_block += (block_number > 0) ? block_number-1 : 0;
>>> - DRM_DEBUG("block_number:0x%04x, last block: 0x%08xkb sz, %dkb fw, %dkb drv.\n",
>>> - block_number,
>>> - le32_to_cpu(reserved_block->start_address_in_kb),
>>> - le16_to_cpu(reserved_block->used_by_firmware_in_kb),
>>> - le16_to_cpu(reserved_block->used_by_driver_in_kb));
>>> - if (reserved_block->used_by_firmware_in_kb > 0) {
>>> - start_address_in_kb = le32_to_cpu(reserved_block->start_address_in_kb);
>>> - offset = (uint64_t)start_address_in_kb * ONE_KiB;
>>> - if ((offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
>>> - offset -= ONE_MiB;
>>> - }
>>> -
>>> - offset &= ~(ONE_MiB - 1);
>>> - adev->fw_vram_usage.mem_train_fb_loc = offset;
>>> - adev->fw_vram_usage.mem_train_support = true;
>>> - DRM_DEBUG("mem_train_fb_loc:0x%09llx.\n", offset);
>>> - ret = 0;
>>> - } else {
>>> - DRM_ERROR("used_by_firmware_in_kb is 0!\n");
>>> - ret = -EINVAL;
>>> - }
>>> -
>>> - return ret;
>>> + adev->fw_vram_usage.mem_train_support = true;
>>> + return 0;
>>> }
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
>>> index f871af5ea6f3..434fe2fa0089 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
>>> @@ -31,7 +31,7 @@ void amdgpu_atomfirmware_scratch_regs_init(struct amdgpu_device *adev);
>>> int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev);
>>> int amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
>>> int *vram_width, int *vram_type, int *vram_vendor);
>>> -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev);
>>> +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev);
>>> int amdgpu_atomfirmware_get_clock_info(struct amdgpu_device *adev);
>>> int amdgpu_atomfirmware_get_gfx_info(struct amdgpu_device *adev);
>>> bool amdgpu_atomfirmware_mem_ecc_supported(struct amdgpu_device *adev);
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> index 2ff63d0414c9..1515413fd356 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> @@ -1687,6 +1687,14 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev)
>>> return 0;
>>> }
>>>
>>> +static u64 amdgpu_ttm_training_get_c2p_offset(u64 vram_size)
>>> +{
>>> + if ((vram_size & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) )
>>> + vram_size -= ONE_MiB;
>>> +
>>> + return ALIGN(vram_size, ONE_MiB);
>>> +}
>>> +
>>> /**
>>> * amdgpu_ttm_training_reserve_vram_init - create bo vram reservation from memory training
>>> *
>>> @@ -1705,7 +1713,7 @@ static int amdgpu_ttm_training_reserve_vram_init(struct amdgpu_device *adev)
>>> return 0;
>>> }
>>>
>>> - ctx->c2p_train_data_offset = adev->fw_vram_usage.mem_train_fb_loc;
>>> + ctx->c2p_train_data_offset = amdgpu_ttm_training_get_c2p_offset(adev->gmc.mc_vram_size);
>>> ctx->p2c_train_data_offset = (adev->gmc.mc_vram_size - GDDR6_MEM_TRAINING_OFFSET);
>>> ctx->train_data_size = GDDR6_MEM_TRAINING_DATA_SIZE_IN_BYTES;
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
>>> index f1ebd424510c..19eb3e8456c7 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
>>> @@ -66,6 +66,13 @@ struct amdgpu_copy_mem {
>>> unsigned long offset;
>>> };
>>>
>>> +/* Definitions for constance */
>>> +enum amdgpu_internal_constants
>>> +{
>>> + ONE_KiB = 0x400,
>>> + ONE_MiB = 0x100000,
>>> +};
>>> +
>>> extern const struct ttm_mem_type_manager_func amdgpu_gtt_mgr_func;
>>> extern const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func;
>>>
>>> diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h
>>> index dd7cbc00a0aa..70146518174c 100644
>>> --- a/drivers/gpu/drm/amd/include/atomfirmware.h
>>> +++ b/drivers/gpu/drm/amd/include/atomfirmware.h
>>> @@ -672,20 +672,6 @@ struct vram_usagebyfirmware_v2_1
>>> uint16_t used_by_driver_in_kb;
>>> };
>>>
>>> -/* This is part of vram_usagebyfirmware_v2_1 */
>>> -struct vram_reserve_block
>>> -{
>>> - uint32_t start_address_in_kb;
>>> - uint16_t used_by_firmware_in_kb;
>>> - uint16_t used_by_driver_in_kb;
>>> -};
>>> -
>>> -/* Definitions for constance */
>>> -enum atomfirmware_internal_constants
>>> -{
>>> - ONE_KiB = 0x400,
>>> - ONE_MiB = 0x100000,
>>> -};
>>>
>>> /*
>>> ***************************************************************************
>>>
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx@lists.freedesktop.org
>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=02%7C01%7CLuben.Tuikov%40amd.com%7C3297c2cd4a9347a202ff08d7856137ad%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637124524929052366&sdata=0z7AeiekGUW1PsvttFCi%2FcxV1tmLlnRZU%2FkvTRUPm70%3D&reserved=0
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
2019-12-20 21:52 ` Luben Tuikov
@ 2019-12-23 2:10 ` Yin, Tianci (Rico)
0 siblings, 0 replies; 7+ messages in thread
From: Yin, Tianci (Rico) @ 2019-12-23 2:10 UTC (permalink / raw)
To: Tuikov, Luben, Alex Deucher
Cc: Long, Gang, Xu, Feifei, Wang, Kevin(Yang),
amd-gfx, Deucher, Alexander, Yuan, Xiaojie, Koenig, Christian,
Zhang, Hawking
[-- Attachment #1.1: Type: text/plain, Size: 11089 bytes --]
[AMD Official Use Only - Internal Distribution Only]
Thank you very much for your review!
________________________________
From: Tuikov, Luben <Luben.Tuikov@amd.com>
Sent: Saturday, December 21, 2019 5:52
To: Alex Deucher <alexdeucher@gmail.com>; Yin, Tianci (Rico) <Tianci.Yin@amd.com>
Cc: amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>; Long, Gang <Gang.Long@amd.com>; Xu, Feifei <Feifei.Xu@amd.com>; Wang, Kevin(Yang) <Kevin1.Wang@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Koenig, Christian <Christian.Koenig@amd.com>; Yuan, Xiaojie <Xiaojie.Yuan@amd.com>
Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
On 2019-12-20 10:27 a.m., Alex Deucher wrote:
> On Thu, Dec 19, 2019 at 9:00 PM Yin, Tianci (Rico) <Tianci.Yin@amd.com> wrote:
>>
>> [AMD Official Use Only - Internal Distribution Only]
>>
>>
>> Hi Luben,
>>
>> May I have your Review-by?
>>
If you'd like--it's completely up to you. If you choose to, like Alex's below.
Regards,
Luben
>
> Series is:
> Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
>
>> Thanks a lot!
>> Rico
>> ________________________________
>> From: Tuikov, Luben <Luben.Tuikov@amd.com>
>> Sent: Friday, December 20, 2019 3:47
>> To: Yin, Tianci (Rico) <Tianci.Yin@amd.com>; amd-gfx@lists.freedesktop.org <amd-gfx@lists.freedesktop.org>
>> Cc: Koenig, Christian <Christian.Koenig@amd.com>; Deucher, Alexander <Alexander.Deucher@amd.com>; Zhang, Hawking <Hawking.Zhang@amd.com>; Xu, Feifei <Feifei.Xu@amd.com>; Yuan, Xiaojie <Xiaojie.Yuan@amd.com>; Long, Gang <Gang.Long@amd.com>; Wang, Kevin(Yang) <Kevin1.Wang@amd.com>
>> Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)
>>
>> Yep! That's perfect--good job!
>>
>> Regards,
>> Luben
>>
>> On 2019-12-19 04:16, Tianci Yin wrote:
>>> From: "Tianci.Yin" <tianci.yin@amd.com>
>>>
>>> The method of getting fb_loc changed from parsing VBIOS to
>>> taking certain offset from top of VRAM
>>>
>>> Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
>>> Signed-off-by: Tianci.Yin <tianci.yin@amd.com>
>>> ---
>>> drivers/gpu/drm/amd/amdgpu/amdgpu.h | 3 +-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c | 2 +-
>>> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c | 38 ++-----------------
>>> .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h | 2 +-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 10 ++++-
>>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 7 ++++
>>> drivers/gpu/drm/amd/include/atomfirmware.h | 14 -------
>>> 7 files changed, 23 insertions(+), 53 deletions(-)
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> index a78a363b1d71..fa2cf8e7bc07 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h
>>> @@ -642,9 +642,8 @@ struct amdgpu_fw_vram_usage {
>>> struct amdgpu_bo *reserved_bo;
>>> void *va;
>>>
>>> - /* Offset on the top of VRAM, used as c2p write buffer.
>>> + /* GDDR6 training support flag.
>>> */
>>> - u64 mem_train_fb_loc;
>>> bool mem_train_support;
>>> };
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
>>> index 9ba80d828876..fdd52d86a4d7 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atombios.c
>>> @@ -2022,7 +2022,7 @@ int amdgpu_atombios_init(struct amdgpu_device *adev)
>>> if (adev->is_atom_fw) {
>>> amdgpu_atomfirmware_scratch_regs_init(adev);
>>> amdgpu_atomfirmware_allocate_fb_scratch(adev);
>>> - ret = amdgpu_atomfirmware_get_mem_train_fb_loc(adev);
>>> + ret = amdgpu_atomfirmware_get_mem_train_info(adev);
>>> if (ret) {
>>> DRM_ERROR("Failed to get mem train fb location.\n");
>>> return ret;
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
>>> index ff4eb96bdfb5..58f9d8c3a17a 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
>>> @@ -525,16 +525,12 @@ static int gddr6_mem_train_support(struct amdgpu_device *adev)
>>> return ret;
>>> }
>>>
>>> -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
>>> +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev)
>>> {
>>> struct atom_context *ctx = adev->mode_info.atom_context;
>>> - unsigned char *bios = ctx->bios;
>>> - struct vram_reserve_block *reserved_block;
>>> - int index, block_number;
>>> + int index;
>>> uint8_t frev, crev;
>>> uint16_t data_offset, size;
>>> - uint32_t start_address_in_kb;
>>> - uint64_t offset;
>>> int ret;
>>>
>>> adev->fw_vram_usage.mem_train_support = false;
>>> @@ -569,32 +565,6 @@ int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev)
>>> return -EINVAL;
>>> }
>>>
>>> - reserved_block = (struct vram_reserve_block *)
>>> - (bios + data_offset + sizeof(struct atom_common_table_header));
>>> - block_number = ((unsigned int)size - sizeof(struct atom_common_table_header))
>>> - / sizeof(struct vram_reserve_block);
>>> - reserved_block += (block_number > 0) ? block_number-1 : 0;
>>> - DRM_DEBUG("block_number:0x%04x, last block: 0x%08xkb sz, %dkb fw, %dkb drv.\n",
>>> - block_number,
>>> - le32_to_cpu(reserved_block->start_address_in_kb),
>>> - le16_to_cpu(reserved_block->used_by_firmware_in_kb),
>>> - le16_to_cpu(reserved_block->used_by_driver_in_kb));
>>> - if (reserved_block->used_by_firmware_in_kb > 0) {
>>> - start_address_in_kb = le32_to_cpu(reserved_block->start_address_in_kb);
>>> - offset = (uint64_t)start_address_in_kb * ONE_KiB;
>>> - if ((offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
>>> - offset -= ONE_MiB;
>>> - }
>>> -
>>> - offset &= ~(ONE_MiB - 1);
>>> - adev->fw_vram_usage.mem_train_fb_loc = offset;
>>> - adev->fw_vram_usage.mem_train_support = true;
>>> - DRM_DEBUG("mem_train_fb_loc:0x%09llx.\n", offset);
>>> - ret = 0;
>>> - } else {
>>> - DRM_ERROR("used_by_firmware_in_kb is 0!\n");
>>> - ret = -EINVAL;
>>> - }
>>> -
>>> - return ret;
>>> + adev->fw_vram_usage.mem_train_support = true;
>>> + return 0;
>>> }
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
>>> index f871af5ea6f3..434fe2fa0089 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.h
>>> @@ -31,7 +31,7 @@ void amdgpu_atomfirmware_scratch_regs_init(struct amdgpu_device *adev);
>>> int amdgpu_atomfirmware_allocate_fb_scratch(struct amdgpu_device *adev);
>>> int amdgpu_atomfirmware_get_vram_info(struct amdgpu_device *adev,
>>> int *vram_width, int *vram_type, int *vram_vendor);
>>> -int amdgpu_atomfirmware_get_mem_train_fb_loc(struct amdgpu_device *adev);
>>> +int amdgpu_atomfirmware_get_mem_train_info(struct amdgpu_device *adev);
>>> int amdgpu_atomfirmware_get_clock_info(struct amdgpu_device *adev);
>>> int amdgpu_atomfirmware_get_gfx_info(struct amdgpu_device *adev);
>>> bool amdgpu_atomfirmware_mem_ecc_supported(struct amdgpu_device *adev);
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> index 2ff63d0414c9..1515413fd356 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>>> @@ -1687,6 +1687,14 @@ static int amdgpu_ttm_training_reserve_vram_fini(struct amdgpu_device *adev)
>>> return 0;
>>> }
>>>
>>> +static u64 amdgpu_ttm_training_get_c2p_offset(u64 vram_size)
>>> +{
>>> + if ((vram_size & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) )
>>> + vram_size -= ONE_MiB;
>>> +
>>> + return ALIGN(vram_size, ONE_MiB);
>>> +}
>>> +
>>> /**
>>> * amdgpu_ttm_training_reserve_vram_init - create bo vram reservation from memory training
>>> *
>>> @@ -1705,7 +1713,7 @@ static int amdgpu_ttm_training_reserve_vram_init(struct amdgpu_device *adev)
>>> return 0;
>>> }
>>>
>>> - ctx->c2p_train_data_offset = adev->fw_vram_usage.mem_train_fb_loc;
>>> + ctx->c2p_train_data_offset = amdgpu_ttm_training_get_c2p_offset(adev->gmc.mc_vram_size);
>>> ctx->p2c_train_data_offset = (adev->gmc.mc_vram_size - GDDR6_MEM_TRAINING_OFFSET);
>>> ctx->train_data_size = GDDR6_MEM_TRAINING_DATA_SIZE_IN_BYTES;
>>>
>>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
>>> index f1ebd424510c..19eb3e8456c7 100644
>>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
>>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
>>> @@ -66,6 +66,13 @@ struct amdgpu_copy_mem {
>>> unsigned long offset;
>>> };
>>>
>>> +/* Definitions for constance */
>>> +enum amdgpu_internal_constants
>>> +{
>>> + ONE_KiB = 0x400,
>>> + ONE_MiB = 0x100000,
>>> +};
>>> +
>>> extern const struct ttm_mem_type_manager_func amdgpu_gtt_mgr_func;
>>> extern const struct ttm_mem_type_manager_func amdgpu_vram_mgr_func;
>>>
>>> diff --git a/drivers/gpu/drm/amd/include/atomfirmware.h b/drivers/gpu/drm/amd/include/atomfirmware.h
>>> index dd7cbc00a0aa..70146518174c 100644
>>> --- a/drivers/gpu/drm/amd/include/atomfirmware.h
>>> +++ b/drivers/gpu/drm/amd/include/atomfirmware.h
>>> @@ -672,20 +672,6 @@ struct vram_usagebyfirmware_v2_1
>>> uint16_t used_by_driver_in_kb;
>>> };
>>>
>>> -/* This is part of vram_usagebyfirmware_v2_1 */
>>> -struct vram_reserve_block
>>> -{
>>> - uint32_t start_address_in_kb;
>>> - uint16_t used_by_firmware_in_kb;
>>> - uint16_t used_by_driver_in_kb;
>>> -};
>>> -
>>> -/* Definitions for constance */
>>> -enum atomfirmware_internal_constants
>>> -{
>>> - ONE_KiB = 0x400,
>>> - ONE_MiB = 0x100000,
>>> -};
>>>
>>> /*
>>> ***************************************************************************
>>>
>>
>> _______________________________________________
>> amd-gfx mailing list
>> amd-gfx@lists.freedesktop.org
>> https://nam11.safelinks.protection.outlook.com/?url=https%3A%2F%2Flists.freedesktop.org%2Fmailman%2Flistinfo%2Famd-gfx&data=02%7C01%7CLuben.Tuikov%40amd.com%7C3297c2cd4a9347a202ff08d7856137ad%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637124524929052366&sdata=0z7AeiekGUW1PsvttFCi%2FcxV1tmLlnRZU%2FkvTRUPm70%3D&reserved=0
[-- Attachment #1.2: Type: text/html, Size: 19287 bytes --]
[-- Attachment #2: Type: text/plain, Size: 154 bytes --]
_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx
^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2019-12-23 2:11 UTC | newest]
Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2019-12-19 9:16 [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4) Tianci Yin
2019-12-19 9:16 ` [PATCH 2/2] drm/amdgpu: remove memory training p2c buffer reservation(V2) Tianci Yin
2019-12-19 19:47 ` [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4) Luben Tuikov
2019-12-20 2:00 ` Yin, Tianci (Rico)
2019-12-20 15:27 ` Alex Deucher
2019-12-20 21:52 ` Luben Tuikov
2019-12-23 2:10 ` Yin, Tianci (Rico)
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.