diff options
author | Evan Quan <evan.quan@amd.com> | 2018-09-27 01:26:58 -0400 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2018-10-09 17:59:33 -0400 |
commit | 62d73fbcfb367104db57253a186f410020289517 (patch) | |
tree | 5af88c81f02a5cee2aea2d96816610ec42446b5f /drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |
parent | e92b83e50839eced31aede94a39901581b71bada (diff) |
drm/amdgpu: added AMD GPU instance counting V2
Count all GPU instances from AMD(including iGPUs and
dGPUs) in the system.
V2: drop unnecessary initialization for other gpu_info
members except mutex
Signed-off-by: Evan Quan <evan.quan@amd.com>
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 52 |
1 files changed, 52 insertions, 0 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c index a64056dadc58..81732a84c2ab 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | |||
@@ -40,6 +40,30 @@ | |||
40 | #include "amdgpu_gem.h" | 40 | #include "amdgpu_gem.h" |
41 | #include "amdgpu_display.h" | 41 | #include "amdgpu_display.h" |
42 | 42 | ||
43 | static void amdgpu_unregister_gpu_instance(struct amdgpu_device *adev) | ||
44 | { | ||
45 | struct amdgpu_gpu_instance *gpu_instance; | ||
46 | int i; | ||
47 | |||
48 | mutex_lock(&mgpu_info.mutex); | ||
49 | |||
50 | for (i = 0; i < mgpu_info.num_gpu; i++) { | ||
51 | gpu_instance = &(mgpu_info.gpu_ins[i]); | ||
52 | if (gpu_instance->adev == adev) { | ||
53 | mgpu_info.gpu_ins[i] = | ||
54 | mgpu_info.gpu_ins[mgpu_info.num_gpu - 1]; | ||
55 | mgpu_info.num_gpu--; | ||
56 | if (adev->flags & AMD_IS_APU) | ||
57 | mgpu_info.num_apu--; | ||
58 | else | ||
59 | mgpu_info.num_dgpu--; | ||
60 | break; | ||
61 | } | ||
62 | } | ||
63 | |||
64 | mutex_unlock(&mgpu_info.mutex); | ||
65 | } | ||
66 | |||
43 | /** | 67 | /** |
44 | * amdgpu_driver_unload_kms - Main unload function for KMS. | 68 | * amdgpu_driver_unload_kms - Main unload function for KMS. |
45 | * | 69 | * |
@@ -55,6 +79,8 @@ void amdgpu_driver_unload_kms(struct drm_device *dev) | |||
55 | if (adev == NULL) | 79 | if (adev == NULL) |
56 | return; | 80 | return; |
57 | 81 | ||
82 | amdgpu_unregister_gpu_instance(adev); | ||
83 | |||
58 | if (adev->rmmio == NULL) | 84 | if (adev->rmmio == NULL) |
59 | goto done_free; | 85 | goto done_free; |
60 | 86 | ||
@@ -75,6 +101,31 @@ done_free: | |||
75 | dev->dev_private = NULL; | 101 | dev->dev_private = NULL; |
76 | } | 102 | } |
77 | 103 | ||
104 | static void amdgpu_register_gpu_instance(struct amdgpu_device *adev) | ||
105 | { | ||
106 | struct amdgpu_gpu_instance *gpu_instance; | ||
107 | |||
108 | mutex_lock(&mgpu_info.mutex); | ||
109 | |||
110 | if (mgpu_info.num_gpu >= MAX_GPU_INSTANCE) { | ||
111 | DRM_ERROR("Cannot register more gpu instance\n"); | ||
112 | mutex_unlock(&mgpu_info.mutex); | ||
113 | return; | ||
114 | } | ||
115 | |||
116 | gpu_instance = &(mgpu_info.gpu_ins[mgpu_info.num_gpu]); | ||
117 | gpu_instance->adev = adev; | ||
118 | gpu_instance->mgpu_fan_enabled = 0; | ||
119 | |||
120 | mgpu_info.num_gpu++; | ||
121 | if (adev->flags & AMD_IS_APU) | ||
122 | mgpu_info.num_apu++; | ||
123 | else | ||
124 | mgpu_info.num_dgpu++; | ||
125 | |||
126 | mutex_unlock(&mgpu_info.mutex); | ||
127 | } | ||
128 | |||
78 | /** | 129 | /** |
79 | * amdgpu_driver_load_kms - Main load function for KMS. | 130 | * amdgpu_driver_load_kms - Main load function for KMS. |
80 | * | 131 | * |
@@ -169,6 +220,7 @@ int amdgpu_driver_load_kms(struct drm_device *dev, unsigned long flags) | |||
169 | pm_runtime_put_autosuspend(dev->dev); | 220 | pm_runtime_put_autosuspend(dev->dev); |
170 | } | 221 | } |
171 | 222 | ||
223 | amdgpu_register_gpu_instance(adev); | ||
172 | out: | 224 | out: |
173 | if (r) { | 225 | if (r) { |
174 | /* balance pm_runtime_get_sync in amdgpu_driver_unload_kms */ | 226 | /* balance pm_runtime_get_sync in amdgpu_driver_unload_kms */ |