Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)

2019-12-22 Thread Yin, Tianci (Rico)
[AMD Official Use Only - Internal Distribution Only]

Thank you very much for your review!

From: Tuikov, Luben 
Sent: Saturday, December 21, 2019 5:52
To: Alex Deucher ; Yin, Tianci (Rico) 

Cc: amd-gfx@lists.freedesktop.org ; Long, Gang 
; Xu, Feifei ; Wang, Kevin(Yang) 
; Deucher, Alexander ; Zhang, 
Hawking ; Koenig, Christian ; 
Yuan, Xiaojie 
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)  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 
>
>> Thanks a lot!
>> Rico
>> 
>> From: Tuikov, Luben 
>> Sent: Friday, December 20, 2019 3:47
>> To: Yin, Tianci (Rico) ; amd-gfx@lists.freedesktop.org 
>> 
>> Cc: Koenig, Christian ; Deucher, Alexander 
>> ; Zhang, Hawking ; Xu, 
>> Feifei ; Yuan, Xiaojie ; Long, Gang 
>> ; Wang, Kevin(Yang) 
>> 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" 
>>>
>>> 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 
>>> ---
>>>  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;
>>> -   

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)

2019-12-20 Thread Luben Tuikov
On 2019-12-20 10:27 a.m., Alex Deucher wrote:
> On Thu, Dec 19, 2019 at 9:00 PM Yin, Tianci (Rico)  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 
> 
>> Thanks a lot!
>> Rico
>> 
>> From: Tuikov, Luben 
>> Sent: Friday, December 20, 2019 3:47
>> To: Yin, Tianci (Rico) ; amd-gfx@lists.freedesktop.org 
>> 
>> Cc: Koenig, Christian ; Deucher, Alexander 
>> ; Zhang, Hawking ; Xu, 
>> Feifei ; Yuan, Xiaojie ; Long, Gang 
>> ; Wang, Kevin(Yang) 
>> 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" 
>>>
>>> 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 
>>> ---
>>>  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 = 
>>> 

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)

2019-12-20 Thread Alex Deucher
On Thu, Dec 19, 2019 at 9:00 PM Yin, Tianci (Rico)  wrote:
>
> [AMD Official Use Only - Internal Distribution Only]
>
>
> Hi Luben,
>
> May I have your Review-by?
>

Series is:
Reviewed-by: Alex Deucher 

> Thanks a lot!
> Rico
> 
> From: Tuikov, Luben 
> Sent: Friday, December 20, 2019 3:47
> To: Yin, Tianci (Rico) ; amd-gfx@lists.freedesktop.org 
> 
> Cc: Koenig, Christian ; Deucher, Alexander 
> ; Zhang, Hawking ; Xu, 
> Feifei ; Yuan, Xiaojie ; Long, Gang 
> ; Wang, Kevin(Yang) 
> 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" 
> >
> > 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 
> > ---
> >  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) ) {
> > - 

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)

2019-12-19 Thread Yin, Tianci (Rico)
[AMD Official Use Only - Internal Distribution Only]

Hi Luben,

May I have your Review-by?

Thanks a lot!
Rico

From: Tuikov, Luben 
Sent: Friday, December 20, 2019 3:47
To: Yin, Tianci (Rico) ; amd-gfx@lists.freedesktop.org 

Cc: Koenig, Christian ; Deucher, Alexander 
; Zhang, Hawking ; Xu, Feifei 
; Yuan, Xiaojie ; Long, Gang 
; Wang, Kevin(Yang) 
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" 
>
> 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 
> ---
>  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 {
> - 

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)

2019-12-19 Thread Luben Tuikov
Yep! That's perfect--good job!

Regards,
Luben

On 2019-12-19 04:16, Tianci Yin wrote:
> From: "Tianci.Yin" 
> 
> 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 
> ---
>  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 

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V3)

2019-12-19 Thread Yin, Tianci (Rico)
[AMD Official Use Only - Internal Distribution Only]

Hi Luben,

What a brilliant thought! Concise and easy for eyes!
Thanks so much!

Rico


From: Tuikov, Luben 
Sent: Thursday, December 19, 2019 11:10
To: Yin, Tianci (Rico) ; amd-gfx@lists.freedesktop.org 

Cc: Koenig, Christian ; Deucher, Alexander 
; Zhang, Hawking ; Xu, Feifei 
; Yuan, Xiaojie ; Long, Gang 
; Wang, Kevin(Yang) 
Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory 
training(V3)

On 2019-12-18 9:44 p.m., Tianci Yin wrote:
> From: "Tianci.Yin" 
>
> 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 
> ---
>  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   | 13 ++-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
>  drivers/gpu/drm/amd/include/atomfirmware.h| 14 ---
>  7 files changed, 26 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 {
> - 

[PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V4)

2019-12-19 Thread Tianci Yin
From: "Tianci.Yin" 

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 
---
 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,

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V3)

2019-12-18 Thread Luben Tuikov
On 2019-12-18 9:44 p.m., Tianci Yin wrote:
> From: "Tianci.Yin" 
> 
> 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 
> ---
>  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   | 13 ++-
>  drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
>  drivers/gpu/drm/amd/include/atomfirmware.h| 14 ---
>  7 files changed, 26 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 
> 

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V2)

2019-12-18 Thread Yin, Tianci (Rico)
[AMD Official Use Only - Internal Distribution Only]

Hi Luben,

Thank you very much for your suggestion and detailed explanation!

Patch has been refined, please help review.

Rico

From: Tuikov, Luben 
Sent: Thursday, December 19, 2019 4:14
To: Yin, Tianci (Rico) ; Wang, Kevin(Yang) 
; amd-gfx@lists.freedesktop.org 

Cc: Koenig, Christian ; Deucher, Alexander 
; Zhang, Hawking ; Xu, Feifei 
; Yuan, Xiaojie ; Long, Gang 

Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory 
training(V2)

On 2019-12-18 4:14 a.m., Yin, Tianci (Rico) wrote:
> Hi Kevin,
>
> You mean like this? It's a bit lengthy.
> - ctx->c2p_train_data_offset &= ~(ONE_MiB - 1);
> + ctx->c2p_train_data_offset = ALIGN(ctx->c2p_train_data_offset, ONE_MiB);
>
> -   ctx->c2p_train_data_offset = adev->fw_vram_usage.mem_train_fb_loc;
> +   ctx->c2p_train_data_offset = adev->gmc.mc_vram_size;
> +   if ((ctx->c2p_train_data_offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) 
> ) {
> +   ctx->c2p_train_data_offset -= ONE_MiB;
> +   }
> +   ctx->c2p_train_data_offset &= ~(ONE_MiB - 1);

Using the macro ALIGN() is a good practice.
Usually when calculating a quantity, such as the one above, you'd
use a working variable, say 'a', and after you're done with
the calculation, you'd then assign it to the variable which
needs it. Something like this:

a = adev->gmc.mc_vram_size;
if ((a & (ONE_MiB - 1)) < (4 * ONE_KiB + 1))
a -= ONE_MiB;
ctx->c2p_train_data_offset = ALIGN(a, ONE_MiB);

The easiest way to see this is, imagine, if all this calculation
was offloaded to a dedicated function, f(), to do:

ctx->c2p_train_data_offset = f(adev->gmc.mc_vram_size);

Now, by using the working variable 'a', you've shown this
abstraction just the same. (By using the working variable 'a',
you've shown to the reader,that this calculation is abstracted,
and could be relocated to a function.)

Regards,
Luben
P.S. The compiler is probably already doing this, and not working
directly on the ctx->c2p_train_data_offs, but assigns a final
result, as explicitly shown above. The above is to make it easy
for humans to read and understand the code. Hope this helps.

>
> *[kevin]:*
> *i'd like to use the marco ALIGN() to simple above code.*
> *anyway, the patch Reviewed-by: Kevin Wang *
>
>  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 = 0x10,
> +};
> +
>  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 = 0x10,
> -};
>
>  /*
>***
> --
> 2.17.1
>

___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx


[PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V3)

2019-12-18 Thread Tianci Yin
From: "Tianci.Yin" 

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 
---
 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   | 13 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
 drivers/gpu/drm/amd/include/atomfirmware.h| 14 ---
 7 files changed, 26 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,
  

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V2)

2019-12-18 Thread Luben Tuikov
On 2019-12-18 4:14 a.m., Yin, Tianci (Rico) wrote:
> Hi Kevin,
> 
> You mean like this? It's a bit lengthy.
> - ctx->c2p_train_data_offset &= ~(ONE_MiB - 1);
> + ctx->c2p_train_data_offset = ALIGN(ctx->c2p_train_data_offset, ONE_MiB);
> 
> -   ctx->c2p_train_data_offset = adev->fw_vram_usage.mem_train_fb_loc;
> +   ctx->c2p_train_data_offset = adev->gmc.mc_vram_size;
> +   if ((ctx->c2p_train_data_offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) 
> ) {
> +   ctx->c2p_train_data_offset -= ONE_MiB;
> +   }
> +   ctx->c2p_train_data_offset &= ~(ONE_MiB - 1);

Using the macro ALIGN() is a good practice.
Usually when calculating a quantity, such as the one above, you'd
use a working variable, say 'a', and after you're done with
the calculation, you'd then assign it to the variable which
needs it. Something like this:

a = adev->gmc.mc_vram_size;
if ((a & (ONE_MiB - 1)) < (4 * ONE_KiB + 1))
a -= ONE_MiB;
ctx->c2p_train_data_offset = ALIGN(a, ONE_MiB);

The easiest way to see this is, imagine, if all this calculation
was offloaded to a dedicated function, f(), to do:

ctx->c2p_train_data_offset = f(adev->gmc.mc_vram_size);

Now, by using the working variable 'a', you've shown this
abstraction just the same. (By using the working variable 'a',
you've shown to the reader,that this calculation is abstracted,
and could be relocated to a function.)

Regards,
Luben
P.S. The compiler is probably already doing this, and not working
directly on the ctx->c2p_train_data_offs, but assigns a final
result, as explicitly shown above. The above is to make it easy
for humans to read and understand the code. Hope this helps.

> 
> *[kevin]:*
> *i'd like to use the marco ALIGN() to simple above code.*
> *anyway, the patch Reviewed-by: Kevin Wang *
> 
>  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 = 0x10,
> +};
> +
>  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 = 0x10,
> -};
>  
>  /*
>    ***
> -- 
> 2.17.1
> 

___
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx


Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V2)

2019-12-18 Thread Yin, Tianci (Rico)
Hi Kevin,

You mean like this? It's a bit lengthy.
- ctx->c2p_train_data_offset &= ~(ONE_MiB - 1);
+ ctx->c2p_train_data_offset = ALIGN(ctx->c2p_train_data_offset, ONE_MiB);

Rico


From: Wang, Kevin(Yang) 
Sent: Wednesday, December 18, 2019 16:56
To: Yin, Tianci (Rico) ; amd-gfx@lists.freedesktop.org 

Cc: Tuikov, Luben ; Koenig, Christian 
; Deucher, Alexander ; 
Zhang, Hawking ; Xu, Feifei ; Yuan, 
Xiaojie ; Long, Gang 
Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory 
training(V2)


[AMD Official Use Only - Internal Distribution Only]

comment inline.

From: Tianci Yin 
Sent: Wednesday, December 18, 2019 4:50 PM
To: amd-gfx@lists.freedesktop.org 
Cc: Tuikov, Luben ; Koenig, Christian 
; Deucher, Alexander ; 
Zhang, Hawking ; Xu, Feifei ; Yuan, 
Xiaojie ; Long, Gang ; Wang, 
Kevin(Yang) ; Yin, Tianci (Rico) 
Subject: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory 
training(V2)

From: "Tianci.Yin" 

The method of getting fb_loc changed from parsing VBIOS to
taking certain offset from top of VRAM

Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
---
 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   |  6 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
 drivers/gpu/drm/amd/include/atomfirmware.h| 14 ---
 7 files changed, 19 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;
-   

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V2)

2019-12-18 Thread Wang, Kevin(Yang)
[AMD Official Use Only - Internal Distribution Only]

comment inline.

From: Tianci Yin 
Sent: Wednesday, December 18, 2019 4:50 PM
To: amd-gfx@lists.freedesktop.org 
Cc: Tuikov, Luben ; Koenig, Christian 
; Deucher, Alexander ; 
Zhang, Hawking ; Xu, Feifei ; Yuan, 
Xiaojie ; Long, Gang ; Wang, 
Kevin(Yang) ; Yin, Tianci (Rico) 
Subject: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory 
training(V2)

From: "Tianci.Yin" 

The method of getting fb_loc changed from parsing VBIOS to
taking certain offset from top of VRAM

Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
---
 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   |  6 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
 drivers/gpu/drm/amd/include/atomfirmware.h| 14 ---
 7 files changed, 19 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 

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training

2019-12-18 Thread Yin, Tianci (Rico)
Hi Kevin,

Thanks very much!

I have rename the amdgpu_atomfirmware_get_mem_train_fb_loc function to 
amdgpu_atomfirmware_get_mem_train_info, please review again.

Rico

From: Wang, Kevin(Yang) 
Sent: Wednesday, December 18, 2019 13:32
To: Yin, Tianci (Rico) ; amd-gfx@lists.freedesktop.org 

Cc: Tuikov, Luben ; Koenig, Christian 
; Deucher, Alexander ; 
Zhang, Hawking ; Xu, Feifei ; Yuan, 
Xiaojie ; Long, Gang 
Subject: Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory 
training


[AMD Official Use Only - Internal Distribution Only]



From: Tianci Yin 
Sent: Wednesday, December 18, 2019 10:21 AM
To: amd-gfx@lists.freedesktop.org 
Cc: Tuikov, Luben ; Koenig, Christian 
; Deucher, Alexander ; 
Zhang, Hawking ; Xu, Feifei ; Yuan, 
Xiaojie ; Long, Gang ; Wang, 
Kevin(Yang) ; Yin, Tianci (Rico) 
Subject: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory 
training

From: "Tianci.Yin" 

The method of getting fb_loc changed from parsing VBIOS to
taking certain offset from top of VRAM

Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h   |  3 +-
 .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c  | 36 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c   |  6 +++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
 drivers/gpu/drm/amd/include/atomfirmware.h| 14 
 5 files changed, 16 insertions(+), 50 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_atomfirmware.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
index ff4eb96bdfb5..009cb0b03d13 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
@@ -528,13 +528,9 @@ static int gddr6_mem_train_support(struct amdgpu_device 
*adev)
 int amdgpu_atomfirmware_get_mem_train_fb_loc(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)
[kevin]:
this function is not return any address after change,
i think we'd better to rename this function to another is well.
the code can be merge to function gddr6_mem_train_support().

 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_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 2ff63d0414c9..ce5cb854bdb9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1705,7 +1705,11 @@ static int amdgpu_ttm_training_reserve_vram_init(struct 
amdgpu_device 

[PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training(V2)

2019-12-18 Thread Tianci Yin
From: "Tianci.Yin" 

The method of getting fb_loc changed from parsing VBIOS to
taking certain offset from top of VRAM

Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
---
 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   |  6 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
 drivers/gpu/drm/amd/include/atomfirmware.h| 14 ---
 7 files changed, 19 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 

Re: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training

2019-12-17 Thread Wang, Kevin(Yang)
[AMD Official Use Only - Internal Distribution Only]



From: Tianci Yin 
Sent: Wednesday, December 18, 2019 10:21 AM
To: amd-gfx@lists.freedesktop.org 
Cc: Tuikov, Luben ; Koenig, Christian 
; Deucher, Alexander ; 
Zhang, Hawking ; Xu, Feifei ; Yuan, 
Xiaojie ; Long, Gang ; Wang, 
Kevin(Yang) ; Yin, Tianci (Rico) 
Subject: [PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory 
training

From: "Tianci.Yin" 

The method of getting fb_loc changed from parsing VBIOS to
taking certain offset from top of VRAM

Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h   |  3 +-
 .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c  | 36 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c   |  6 +++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
 drivers/gpu/drm/amd/include/atomfirmware.h| 14 
 5 files changed, 16 insertions(+), 50 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_atomfirmware.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
index ff4eb96bdfb5..009cb0b03d13 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
@@ -528,13 +528,9 @@ static int gddr6_mem_train_support(struct amdgpu_device 
*adev)
 int amdgpu_atomfirmware_get_mem_train_fb_loc(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)
[kevin]:
this function is not return any address after change,
i think we'd better to rename this function to another is well.
the code can be merge to function gddr6_mem_train_support().

 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_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 2ff63d0414c9..ce5cb854bdb9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1705,7 +1705,11 @@ 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 = adev->gmc.mc_vram_size;
+   if ((ctx->c2p_train_data_offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
+   ctx->c2p_train_data_offset -= ONE_MiB;
+   }
+   ctx->c2p_train_data_offset &= ~(ONE_MiB - 1);
 ctx->p2c_train_data_offset = (adev->gmc.mc_vram_size - 
GDDR6_MEM_TRAINING_OFFSET);
 ctx->train_data_size = 

[PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training

2019-12-17 Thread Tianci Yin
From: "Tianci.Yin" 

The method of getting fb_loc changed from parsing VBIOS to
taking certain offset from top of VRAM

Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h   |  3 +-
 .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c  | 36 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c   |  6 +++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
 drivers/gpu/drm/amd/include/atomfirmware.h| 14 
 5 files changed, 16 insertions(+), 50 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_atomfirmware.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
index ff4eb96bdfb5..009cb0b03d13 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
@@ -528,13 +528,9 @@ static int gddr6_mem_train_support(struct amdgpu_device 
*adev)
 int amdgpu_atomfirmware_get_mem_train_fb_loc(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_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 2ff63d0414c9..ce5cb854bdb9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1705,7 +1705,11 @@ 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 = adev->gmc.mc_vram_size;
+   if ((ctx->c2p_train_data_offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
+   ctx->c2p_train_data_offset -= ONE_MiB;
+   }
+   ctx->c2p_train_data_offset &= ~(ONE_MiB - 1);
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 = 0x10,
+};
+
 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 

[PATCH 1/2] drm/amdgpu: update the method to get fb_loc of memory training

2019-12-17 Thread Tianci Yin
From: "Tianci.Yin" 

The method of getting fb_loc changed from parsing VBIOS to
taking certain offset from top of VRAM

Change-Id: I053b42fdb1d822722fa7980b2cd9f86b3fdce539
---
 drivers/gpu/drm/amd/amdgpu/amdgpu.h   |  3 +-
 .../gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c  | 36 ++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c   |  6 +++-
 drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h   |  7 
 drivers/gpu/drm/amd/include/atomfirmware.h| 14 
 5 files changed, 16 insertions(+), 50 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_atomfirmware.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
index ff4eb96bdfb5..009cb0b03d13 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_atomfirmware.c
@@ -528,13 +528,9 @@ static int gddr6_mem_train_support(struct amdgpu_device 
*adev)
 int amdgpu_atomfirmware_get_mem_train_fb_loc(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_ttm.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 2ff63d0414c9..ce5cb854bdb9 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1705,7 +1705,11 @@ 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 = adev->gmc.mc_vram_size;
+   if ((ctx->c2p_train_data_offset & (ONE_MiB - 1)) < (4 * ONE_KiB + 1) ) {
+   ctx->c2p_train_data_offset -= ONE_MiB;
+   }
+   ctx->c2p_train_data_offset &= ~(ONE_MiB - 1);
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 = 0x10,
+};
+
 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