All of lore.kernel.org
 help / color / mirror / Atom feed
* [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&amp;data=02%7C01%7CLuben.Tuikov%40amd.com%7C3297c2cd4a9347a202ff08d7856137ad%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637124524929052366&amp;sdata=0z7AeiekGUW1PsvttFCi%2FcxV1tmLlnRZU%2FkvTRUPm70%3D&amp;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&amp;data=02%7C01%7CLuben.Tuikov%40amd.com%7C3297c2cd4a9347a202ff08d7856137ad%7C3dd8961fe4884e608e11a82d994e183d%7C0%7C0%7C637124524929052366&amp;sdata=0z7AeiekGUW1PsvttFCi%2FcxV1tmLlnRZU%2FkvTRUPm70%3D&amp;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.