drm/amdgpu: cleanup VM manager init/fini
authorChristian König <christian.koenig@amd.com>
Thu, 11 May 2017 14:21:20 +0000 (16:21 +0200)
committerAlex Deucher <alexander.deucher@amd.com>
Wed, 24 May 2017 22:17:58 +0000 (18:17 -0400)
VM is mandatory for all hw amdgpu supports. So remove the leftovers
to make it optionally.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c
drivers/gpu/drm/amd/amdgpu/amdgpu_vm.h
drivers/gpu/drm/amd/amdgpu/gmc_v6_0.c
drivers/gpu/drm/amd/amdgpu/gmc_v7_0.c
drivers/gpu/drm/amd/amdgpu/gmc_v8_0.c
drivers/gpu/drm/amd/amdgpu/gmc_v9_0.c

index 7d1bb44c013636580595c888d6899860e9d2b52e..621f739103a6a30c9cf38801343ff5397a928d63 100644 (file)
@@ -569,9 +569,6 @@ int amdgpu_gem_va_ioctl(struct drm_device *dev, void *data,
        uint64_t va_flags;
        int r = 0;
 
-       if (!adev->vm_manager.enabled)
-               return -ENOTTY;
-
        if (args->va_address < AMDGPU_VA_RESERVED_SIZE) {
                dev_err(&dev->pdev->dev,
                        "va_address 0x%lX is in reserved area 0x%X\n",
index 9c7b15925aa778f36ee3313c381daeb2eb301e71..8309bc7ffd71fc087c0f8475075ff7693368f356 100644 (file)
@@ -173,8 +173,6 @@ struct amdgpu_vm_manager {
        uint32_t                                block_size;
        /* vram base address for page table entry  */
        u64                                     vram_base_offset;
-       /* is vm enabled? */
-       bool                                    enabled;
        /* vm pte handling */
        const struct amdgpu_vm_pte_funcs        *vm_pte_funcs;
        struct amdgpu_ring                      *vm_pte_rings[AMDGPU_MAX_RINGS];
index d860939152df234517e7806135015a23aa316df9..1e6263a31a10646127e975abc7719b8d8d47d88a 100644 (file)
@@ -614,33 +614,6 @@ static void gmc_v6_0_gart_fini(struct amdgpu_device *adev)
        amdgpu_gart_fini(adev);
 }
 
-static int gmc_v6_0_vm_init(struct amdgpu_device *adev)
-{
-       /*
-        * number of VMs
-        * VMID 0 is reserved for System
-        * amdgpu graphics/compute will use VMIDs 1-7
-        * amdkfd will use VMIDs 8-15
-        */
-       adev->vm_manager.id_mgr[0].num_ids = AMDGPU_NUM_OF_VMIDS;
-       adev->vm_manager.num_level = 1;
-       amdgpu_vm_manager_init(adev);
-
-       /* base offset of vram pages */
-       if (adev->flags & AMD_IS_APU) {
-               u64 tmp = RREG32(mmMC_VM_FB_OFFSET);
-               tmp <<= 22;
-               adev->vm_manager.vram_base_offset = tmp;
-       } else
-               adev->vm_manager.vram_base_offset = 0;
-
-       return 0;
-}
-
-static void gmc_v6_0_vm_fini(struct amdgpu_device *adev)
-{
-}
-
 static void gmc_v6_0_vm_decode_fault(struct amdgpu_device *adev,
                                     u32 status, u32 addr, u32 mc_client)
 {
@@ -887,26 +860,34 @@ static int gmc_v6_0_sw_init(void *handle)
        if (r)
                return r;
 
-       if (!adev->vm_manager.enabled) {
-               r = gmc_v6_0_vm_init(adev);
-               if (r) {
-                       dev_err(adev->dev, "vm manager initialization failed (%d).\n", r);
-                       return r;
-               }
-               adev->vm_manager.enabled = true;
+       /*
+        * number of VMs
+        * VMID 0 is reserved for System
+        * amdgpu graphics/compute will use VMIDs 1-7
+        * amdkfd will use VMIDs 8-15
+        */
+       adev->vm_manager.id_mgr[0].num_ids = AMDGPU_NUM_OF_VMIDS;
+       adev->vm_manager.num_level = 1;
+       amdgpu_vm_manager_init(adev);
+
+       /* base offset of vram pages */
+       if (adev->flags & AMD_IS_APU) {
+               u64 tmp = RREG32(mmMC_VM_FB_OFFSET);
+
+               tmp <<= 22;
+               adev->vm_manager.vram_base_offset = tmp;
+       } else {
+               adev->vm_manager.vram_base_offset = 0;
        }
 
-       return r;
+       return 0;
 }
 
 static int gmc_v6_0_sw_fini(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       if (adev->vm_manager.enabled) {
-               gmc_v6_0_vm_fini(adev);
-               adev->vm_manager.enabled = false;
-       }
+       amdgpu_vm_manager_fini(adev);
        gmc_v6_0_gart_fini(adev);
        amdgpu_gem_force_release(adev);
        amdgpu_bo_fini(adev);
index 2750e5c2381301ceebddb8f614f7e5868de23d2c..967505bd2fc88b6da10d4d0b3ea9f7ffbd1b793b 100644 (file)
@@ -724,55 +724,6 @@ static void gmc_v7_0_gart_fini(struct amdgpu_device *adev)
        amdgpu_gart_fini(adev);
 }
 
-/*
- * vm
- * VMID 0 is the physical GPU addresses as used by the kernel.
- * VMIDs 1-15 are used for userspace clients and are handled
- * by the amdgpu vm/hsa code.
- */
-/**
- * gmc_v7_0_vm_init - cik vm init callback
- *
- * @adev: amdgpu_device pointer
- *
- * Inits cik specific vm parameters (number of VMs, base of vram for
- * VMIDs 1-15) (CIK).
- * Returns 0 for success.
- */
-static int gmc_v7_0_vm_init(struct amdgpu_device *adev)
-{
-       /*
-        * number of VMs
-        * VMID 0 is reserved for System
-        * amdgpu graphics/compute will use VMIDs 1-7
-        * amdkfd will use VMIDs 8-15
-        */
-       adev->vm_manager.id_mgr[0].num_ids = AMDGPU_NUM_OF_VMIDS;
-       adev->vm_manager.num_level = 1;
-       amdgpu_vm_manager_init(adev);
-
-       /* base offset of vram pages */
-       if (adev->flags & AMD_IS_APU) {
-               u64 tmp = RREG32(mmMC_VM_FB_OFFSET);
-               tmp <<= 22;
-               adev->vm_manager.vram_base_offset = tmp;
-       } else
-               adev->vm_manager.vram_base_offset = 0;
-
-       return 0;
-}
-
-/**
- * gmc_v7_0_vm_fini - cik vm fini callback
- *
- * @adev: amdgpu_device pointer
- *
- * Tear down any asic specific VM setup (CIK).
- */
-static void gmc_v7_0_vm_fini(struct amdgpu_device *adev)
-{
-}
-
 /**
  * gmc_v7_0_vm_decode_fault - print human readable fault info
  *
@@ -1051,27 +1002,34 @@ static int gmc_v7_0_sw_init(void *handle)
        if (r)
                return r;
 
-       if (!adev->vm_manager.enabled) {
-               r = gmc_v7_0_vm_init(adev);
-               if (r) {
-                       dev_err(adev->dev, "vm manager initialization failed (%d).\n", r);
-                       return r;
-               }
-               adev->vm_manager.enabled = true;
+       /*
+        * number of VMs
+        * VMID 0 is reserved for System
+        * amdgpu graphics/compute will use VMIDs 1-7
+        * amdkfd will use VMIDs 8-15
+        */
+       adev->vm_manager.id_mgr[0].num_ids = AMDGPU_NUM_OF_VMIDS;
+       adev->vm_manager.num_level = 1;
+       amdgpu_vm_manager_init(adev);
+
+       /* base offset of vram pages */
+       if (adev->flags & AMD_IS_APU) {
+               u64 tmp = RREG32(mmMC_VM_FB_OFFSET);
+
+               tmp <<= 22;
+               adev->vm_manager.vram_base_offset = tmp;
+       } else {
+               adev->vm_manager.vram_base_offset = 0;
        }
 
-       return r;
+       return 0;
 }
 
 static int gmc_v7_0_sw_fini(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       if (adev->vm_manager.enabled) {
-               amdgpu_vm_manager_fini(adev);
-               gmc_v7_0_vm_fini(adev);
-               adev->vm_manager.enabled = false;
-       }
+       amdgpu_vm_manager_fini(adev);
        gmc_v7_0_gart_fini(adev);
        amdgpu_gem_force_release(adev);
        amdgpu_bo_fini(adev);
index f56b4089ee9f3fe7581cd6c541d434867c613cbb..3b5ea0f52d89c2ed92417cade41ec91757431418 100644 (file)
@@ -927,55 +927,6 @@ static void gmc_v8_0_gart_fini(struct amdgpu_device *adev)
        amdgpu_gart_fini(adev);
 }
 
-/*
- * vm
- * VMID 0 is the physical GPU addresses as used by the kernel.
- * VMIDs 1-15 are used for userspace clients and are handled
- * by the amdgpu vm/hsa code.
- */
-/**
- * gmc_v8_0_vm_init - cik vm init callback
- *
- * @adev: amdgpu_device pointer
- *
- * Inits cik specific vm parameters (number of VMs, base of vram for
- * VMIDs 1-15) (CIK).
- * Returns 0 for success.
- */
-static int gmc_v8_0_vm_init(struct amdgpu_device *adev)
-{
-       /*
-        * number of VMs
-        * VMID 0 is reserved for System
-        * amdgpu graphics/compute will use VMIDs 1-7
-        * amdkfd will use VMIDs 8-15
-        */
-       adev->vm_manager.id_mgr[0].num_ids = AMDGPU_NUM_OF_VMIDS;
-       adev->vm_manager.num_level = 1;
-       amdgpu_vm_manager_init(adev);
-
-       /* base offset of vram pages */
-       if (adev->flags & AMD_IS_APU) {
-               u64 tmp = RREG32(mmMC_VM_FB_OFFSET);
-               tmp <<= 22;
-               adev->vm_manager.vram_base_offset = tmp;
-       } else
-               adev->vm_manager.vram_base_offset = 0;
-
-       return 0;
-}
-
-/**
- * gmc_v8_0_vm_fini - cik vm fini callback
- *
- * @adev: amdgpu_device pointer
- *
- * Tear down any asic specific VM setup (CIK).
- */
-static void gmc_v8_0_vm_fini(struct amdgpu_device *adev)
-{
-}
-
 /**
  * gmc_v8_0_vm_decode_fault - print human readable fault info
  *
@@ -1135,27 +1086,34 @@ static int gmc_v8_0_sw_init(void *handle)
        if (r)
                return r;
 
-       if (!adev->vm_manager.enabled) {
-               r = gmc_v8_0_vm_init(adev);
-               if (r) {
-                       dev_err(adev->dev, "vm manager initialization failed (%d).\n", r);
-                       return r;
-               }
-               adev->vm_manager.enabled = true;
+       /*
+        * number of VMs
+        * VMID 0 is reserved for System
+        * amdgpu graphics/compute will use VMIDs 1-7
+        * amdkfd will use VMIDs 8-15
+        */
+       adev->vm_manager.id_mgr[0].num_ids = AMDGPU_NUM_OF_VMIDS;
+       adev->vm_manager.num_level = 1;
+       amdgpu_vm_manager_init(adev);
+
+       /* base offset of vram pages */
+       if (adev->flags & AMD_IS_APU) {
+               u64 tmp = RREG32(mmMC_VM_FB_OFFSET);
+
+               tmp <<= 22;
+               adev->vm_manager.vram_base_offset = tmp;
+       } else {
+               adev->vm_manager.vram_base_offset = 0;
        }
 
-       return r;
+       return 0;
 }
 
 static int gmc_v8_0_sw_fini(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       if (adev->vm_manager.enabled) {
-               amdgpu_vm_manager_fini(adev);
-               gmc_v8_0_vm_fini(adev);
-               adev->vm_manager.enabled = false;
-       }
+       amdgpu_vm_manager_fini(adev);
        gmc_v8_0_gart_fini(adev);
        amdgpu_gem_force_release(adev);
        amdgpu_bo_fini(adev);
index 1bc82926a7bb882f3ad333b83cf5240a7fa699e8..19e10276e585715199c3a8d5d60f94b6b6473ed3 100644 (file)
@@ -524,54 +524,6 @@ static int gmc_v9_0_gart_init(struct amdgpu_device *adev)
        return amdgpu_gart_table_vram_alloc(adev);
 }
 
-/*
- * vm
- * VMID 0 is the physical GPU addresses as used by the kernel.
- * VMIDs 1-15 are used for userspace clients and are handled
- * by the amdgpu vm/hsa code.
- */
-/**
- * gmc_v9_0_vm_init - vm init callback
- *
- * @adev: amdgpu_device pointer
- *
- * Inits vega10 specific vm parameters (number of VMs, base of vram for
- * VMIDs 1-15) (vega10).
- * Returns 0 for success.
- */
-static int gmc_v9_0_vm_init(struct amdgpu_device *adev)
-{
-       /*
-        * number of VMs
-        * VMID 0 is reserved for System
-        * amdgpu graphics/compute will use VMIDs 1-7
-        * amdkfd will use VMIDs 8-15
-        */
-       adev->vm_manager.id_mgr[AMDGPU_GFXHUB].num_ids = AMDGPU_NUM_OF_VMIDS;
-       adev->vm_manager.id_mgr[AMDGPU_MMHUB].num_ids = AMDGPU_NUM_OF_VMIDS;
-
-       /* TODO: fix num_level for APU when updating vm size and block size */
-       if (adev->flags & AMD_IS_APU)
-               adev->vm_manager.num_level = 1;
-       else
-               adev->vm_manager.num_level = 3;
-       amdgpu_vm_manager_init(adev);
-
-       return 0;
-}
-
-/**
- * gmc_v9_0_vm_fini - vm fini callback
- *
- * @adev: amdgpu_device pointer
- *
- * Tear down any asic specific VM setup.
- */
-static void gmc_v9_0_vm_fini(struct amdgpu_device *adev)
-{
-       return;
-}
-
 static int gmc_v9_0_sw_init(void *handle)
 {
        int r;
@@ -647,15 +599,23 @@ static int gmc_v9_0_sw_init(void *handle)
        if (r)
                return r;
 
-       if (!adev->vm_manager.enabled) {
-               r = gmc_v9_0_vm_init(adev);
-               if (r) {
-                       dev_err(adev->dev, "vm manager initialization failed (%d).\n", r);
-                       return r;
-               }
-               adev->vm_manager.enabled = true;
-       }
-       return r;
+       /*
+        * number of VMs
+        * VMID 0 is reserved for System
+        * amdgpu graphics/compute will use VMIDs 1-7
+        * amdkfd will use VMIDs 8-15
+        */
+       adev->vm_manager.id_mgr[AMDGPU_GFXHUB].num_ids = AMDGPU_NUM_OF_VMIDS;
+       adev->vm_manager.id_mgr[AMDGPU_MMHUB].num_ids = AMDGPU_NUM_OF_VMIDS;
+
+       /* TODO: fix num_level for APU when updating vm size and block size */
+       if (adev->flags & AMD_IS_APU)
+               adev->vm_manager.num_level = 1;
+       else
+               adev->vm_manager.num_level = 3;
+       amdgpu_vm_manager_init(adev);
+
+       return 0;
 }
 
 /**
@@ -675,11 +635,7 @@ static int gmc_v9_0_sw_fini(void *handle)
 {
        struct amdgpu_device *adev = (struct amdgpu_device *)handle;
 
-       if (adev->vm_manager.enabled) {
-               amdgpu_vm_manager_fini(adev);
-               gmc_v9_0_vm_fini(adev);
-               adev->vm_manager.enabled = false;
-       }
+       amdgpu_vm_manager_fini(adev);
        gmc_v9_0_gart_fini(adev);
        amdgpu_gem_force_release(adev);
        amdgpu_bo_fini(adev);