[PATCH 2/3] drm/amdgpu: Fix Vega10 VM initialization
Felix Kuehling
felix.kuehling at amd.com
Wed Mar 29 01:48:04 UTC 2017
On 17-03-28 09:39 PM, Zhang, Jerry (Junwei) wrote:
> On 03/29/2017 09:00 AM, Felix Kuehling wrote:
>> adev->family is not initialized yet when amdgpu_get_block_size is
>> called. Use adev->asic_type instead.
>>
>> Minimum VM size is 512GB, not 256GB, for a single page table entry
>> in the root page table.
>>
>> gmc_v9_0_vm_init is called after adev->vm_manager.max_pfn is
>> initialized. Move the minimum VM-size enforcement ahead of max_pfn
>> initializtion. Cast to 64-bit before the left-shift.
>>
>> Signed-off-by: Felix Kuehling <Felix.Kuehling at amd.com>
> Reviewed-by: Junwei Zhang <Jerry.Zhang at amd.com>
>
> Just note:
> For now, it's OK to set the minimum vm size 256G,
> In this case, there is no PD bit anyway.
With VM size of 256GB, the amdgpu_vm_bo_size(adev, 0) calculates 0, and
the page directory allocation with amdgpu_bo_create fails in amdgpu_vm_init.
In other words, amdgpu_vm_num_entries(adev, 0) needs to return at least
1. That means vm_size needs to be at least 512GB.
Regards,
Felix
>
> Christian also mentioned that PD should be 4k size, then 256T was
> required.
> When reach an agreement, we may update them all.
>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_device.c | 6 +++---
>> drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c | 17 +++++++----------
>> 2 files changed, 10 insertions(+), 13 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> index 3500da3..57ccac4 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_device.c
>> @@ -1042,10 +1042,10 @@ static bool amdgpu_check_pot_argument(int arg)
>> static void amdgpu_get_block_size(struct amdgpu_device *adev)
>> {
>> /* from AI, asic starts to support multiple level VMPT */
>> - if (adev->family >= AMDGPU_FAMILY_AI) {
>> + if (adev->asic_type >= CHIP_VEGA10) {
>> if (amdgpu_vm_block_size != 9)
>> - dev_warn(adev->dev, "Multi-VMPT limits block size to"
>> - "one page!\n");
>> + dev_warn(adev->dev,
>> + "Multi-VMPT limits block size to one page!\n");
>> amdgpu_vm_block_size = 9;
>> return;
>> }
>
> Nice catch.
>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>> b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>> index 1e4734d..df69aae 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c
>> @@ -511,12 +511,6 @@ static int gmc_v9_0_vm_init(struct amdgpu_device
>> *adev)
>> * amdkfd will use VMIDs 8-15
>> */
>> adev->vm_manager.num_ids = AMDGPU_NUM_OF_VMIDS;
>> - /* Because of four level VMPTs, vm size at least is 256GB.
>> - 256TB is OK as well */
>> - if (amdgpu_vm_size < 256) {
>> - DRM_WARN("vm size at least is 256GB!\n");
>> - amdgpu_vm_size = 256;
>> - }
>
> David had a patch to fix it yesterday.
> But your patch involves by vm size checking. :)
>
>> adev->vm_manager.num_level = 3;
>> amdgpu_vm_manager_init(adev);
>>
>> @@ -563,11 +557,14 @@ static int gmc_v9_0_sw_init(void *handle)
>> if (r)
>> return r;
>>
>> - /* Adjust VM size here.
>> - * Currently default to 64GB ((16 << 20) 4k pages).
>> - * Max GPUVM size is 48 bits.
>> + /* Because of four level VMPTs, vm size is at least 512GB.
>> + * The maximum size is 256TB (48bit).
>> */
>> - adev->vm_manager.max_pfn = amdgpu_vm_size << 18;
>> + if (amdgpu_vm_size < 512) {
>> + DRM_WARN("VM size is at least 512GB!\n");
>> + amdgpu_vm_size = 512;
>> + }
>> + adev->vm_manager.max_pfn = (uint64_t)amdgpu_vm_size << 18;
>>
>> /* Set the internal MC address mask
>> * This is the max address of the GPU's
>>
More information about the amd-gfx
mailing list