aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/amd/amdkfd
diff options
context:
space:
mode:
authorXihan Zhang <xihan.zhang@amd.com>2015-03-17 07:32:53 -0400
committerOded Gabbay <oded.gabbay@amd.com>2015-03-25 08:02:05 -0400
commitcea405b172e3b1fd2cf9da5ec05c7d808d6af03d (patch)
tree02f0b670f9eb1ec27d2322bea19d70096ccdcec1 /drivers/gpu/drm/amd/amdkfd
parentaffa7d86441a9fe1ddd67f4ed551ed41313da561 (diff)
drm/amdkfd: Add multiple kgd support
The current code can only support one kgd instance. We have to support multiple kgd instances in one system. i.e two amdgpu or two radeon or one amdgpu + one radeon or more than two kgd instances. Signed-off-by: Xihan Zhang <xihan.zhang@amd.com> Signed-off-by: Oded Gabbay <oded.gabbay@amd.com>
Diffstat (limited to 'drivers/gpu/drm/amd/amdkfd')
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_chardev.c3
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_device.c17
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c14
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c17
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_module.c12
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c13
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_priv.h12
-rw-r--r--drivers/gpu/drm/amd/amdkfd/kfd_topology.c12
8 files changed, 53 insertions, 47 deletions
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
index 50fc8bad4964..19a4fba46e4e 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_chardev.c
@@ -442,7 +442,8 @@ static int kfd_ioctl_get_clock_counters(struct file *filep,
442 return -EINVAL; 442 return -EINVAL;
443 443
444 /* Reading GPU clock counter from KGD */ 444 /* Reading GPU clock counter from KGD */
445 args->gpu_clock_counter = kfd2kgd->get_gpu_clock_counter(dev->kgd); 445 args->gpu_clock_counter =
446 dev->kfd2kgd->get_gpu_clock_counter(dev->kgd);
446 447
447 /* No access to rdtsc. Using raw monotonic time */ 448 /* No access to rdtsc. Using raw monotonic time */
448 getrawmonotonic64(&time); 449 getrawmonotonic64(&time);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device.c b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
index 5bc32c26b989..ca7f2d3af2ff 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device.c
@@ -94,7 +94,8 @@ static const struct kfd_device_info *lookup_device_info(unsigned short did)
94 return NULL; 94 return NULL;
95} 95}
96 96
97struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, struct pci_dev *pdev) 97struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd,
98 struct pci_dev *pdev, const struct kfd2kgd_calls *f2g)
98{ 99{
99 struct kfd_dev *kfd; 100 struct kfd_dev *kfd;
100 101
@@ -112,6 +113,11 @@ struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, struct pci_dev *pdev)
112 kfd->device_info = device_info; 113 kfd->device_info = device_info;
113 kfd->pdev = pdev; 114 kfd->pdev = pdev;
114 kfd->init_complete = false; 115 kfd->init_complete = false;
116 kfd->kfd2kgd = f2g;
117
118 mutex_init(&kfd->doorbell_mutex);
119 memset(&kfd->doorbell_available_index, 0,
120 sizeof(kfd->doorbell_available_index));
115 121
116 return kfd; 122 return kfd;
117} 123}
@@ -200,8 +206,9 @@ bool kgd2kfd_device_init(struct kfd_dev *kfd,
200 /* add another 512KB for all other allocations on gart (HPD, fences) */ 206 /* add another 512KB for all other allocations on gart (HPD, fences) */
201 size += 512 * 1024; 207 size += 512 * 1024;
202 208
203 if (kfd2kgd->init_gtt_mem_allocation(kfd->kgd, size, &kfd->gtt_mem, 209 if (kfd->kfd2kgd->init_gtt_mem_allocation(
204 &kfd->gtt_start_gpu_addr, &kfd->gtt_start_cpu_ptr)) { 210 kfd->kgd, size, &kfd->gtt_mem,
211 &kfd->gtt_start_gpu_addr, &kfd->gtt_start_cpu_ptr)){
205 dev_err(kfd_device, 212 dev_err(kfd_device,
206 "Could not allocate %d bytes for device (%x:%x)\n", 213 "Could not allocate %d bytes for device (%x:%x)\n",
207 size, kfd->pdev->vendor, kfd->pdev->device); 214 size, kfd->pdev->vendor, kfd->pdev->device);
@@ -270,7 +277,7 @@ device_iommu_pasid_error:
270kfd_topology_add_device_error: 277kfd_topology_add_device_error:
271 kfd_gtt_sa_fini(kfd); 278 kfd_gtt_sa_fini(kfd);
272kfd_gtt_sa_init_error: 279kfd_gtt_sa_init_error:
273 kfd2kgd->free_gtt_mem(kfd->kgd, kfd->gtt_mem); 280 kfd->kfd2kgd->free_gtt_mem(kfd->kgd, kfd->gtt_mem);
274 dev_err(kfd_device, 281 dev_err(kfd_device,
275 "device (%x:%x) NOT added due to errors\n", 282 "device (%x:%x) NOT added due to errors\n",
276 kfd->pdev->vendor, kfd->pdev->device); 283 kfd->pdev->vendor, kfd->pdev->device);
@@ -285,7 +292,7 @@ void kgd2kfd_device_exit(struct kfd_dev *kfd)
285 amd_iommu_free_device(kfd->pdev); 292 amd_iommu_free_device(kfd->pdev);
286 kfd_topology_remove_device(kfd); 293 kfd_topology_remove_device(kfd);
287 kfd_gtt_sa_fini(kfd); 294 kfd_gtt_sa_fini(kfd);
288 kfd2kgd->free_gtt_mem(kfd->kgd, kfd->gtt_mem); 295 kfd->kfd2kgd->free_gtt_mem(kfd->kgd, kfd->gtt_mem);
289 } 296 }
290 297
291 kfree(kfd); 298 kfree(kfd);
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
index be68d58b564e..d7174300f501 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_device_queue_manager.c
@@ -82,7 +82,8 @@ static inline unsigned int get_pipes_num_cpsch(void)
82void program_sh_mem_settings(struct device_queue_manager *dqm, 82void program_sh_mem_settings(struct device_queue_manager *dqm,
83 struct qcm_process_device *qpd) 83 struct qcm_process_device *qpd)
84{ 84{
85 return kfd2kgd->program_sh_mem_settings(dqm->dev->kgd, qpd->vmid, 85 return dqm->dev->kfd2kgd->program_sh_mem_settings(
86 dqm->dev->kgd, qpd->vmid,
86 qpd->sh_mem_config, 87 qpd->sh_mem_config,
87 qpd->sh_mem_ape1_base, 88 qpd->sh_mem_ape1_base,
88 qpd->sh_mem_ape1_limit, 89 qpd->sh_mem_ape1_limit,
@@ -457,9 +458,12 @@ set_pasid_vmid_mapping(struct device_queue_manager *dqm, unsigned int pasid,
457{ 458{
458 uint32_t pasid_mapping; 459 uint32_t pasid_mapping;
459 460
460 pasid_mapping = (pasid == 0) ? 0 : (uint32_t)pasid | 461 pasid_mapping = (pasid == 0) ? 0 :
461 ATC_VMID_PASID_MAPPING_VALID; 462 (uint32_t)pasid |
462 return kfd2kgd->set_pasid_vmid_mapping(dqm->dev->kgd, pasid_mapping, 463 ATC_VMID_PASID_MAPPING_VALID;
464
465 return dqm->dev->kfd2kgd->set_pasid_vmid_mapping(
466 dqm->dev->kgd, pasid_mapping,
463 vmid); 467 vmid);
464} 468}
465 469
@@ -511,7 +515,7 @@ int init_pipelines(struct device_queue_manager *dqm,
511 pipe_hpd_addr = dqm->pipelines_addr + i * CIK_HPD_EOP_BYTES; 515 pipe_hpd_addr = dqm->pipelines_addr + i * CIK_HPD_EOP_BYTES;
512 pr_debug("kfd: pipeline address %llX\n", pipe_hpd_addr); 516 pr_debug("kfd: pipeline address %llX\n", pipe_hpd_addr);
513 /* = log2(bytes/4)-1 */ 517 /* = log2(bytes/4)-1 */
514 kfd2kgd->init_pipeline(dqm->dev->kgd, inx, 518 dqm->dev->kfd2kgd->init_pipeline(dqm->dev->kgd, inx,
515 CIK_HPD_EOP_BYTES_LOG2 - 3, pipe_hpd_addr); 519 CIK_HPD_EOP_BYTES_LOG2 - 3, pipe_hpd_addr);
516 } 520 }
517 521
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
index 1a9b355dd114..17e56dcc8540 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_doorbell.c
@@ -32,9 +32,6 @@
32 * and that's assures that any user process won't get access to the 32 * and that's assures that any user process won't get access to the
33 * kernel doorbells page 33 * kernel doorbells page
34 */ 34 */
35static DEFINE_MUTEX(doorbell_mutex);
36static unsigned long doorbell_available_index[
37 DIV_ROUND_UP(KFD_MAX_NUM_OF_QUEUES_PER_PROCESS, BITS_PER_LONG)] = { 0 };
38 35
39#define KERNEL_DOORBELL_PASID 1 36#define KERNEL_DOORBELL_PASID 1
40#define KFD_SIZE_OF_DOORBELL_IN_BYTES 4 37#define KFD_SIZE_OF_DOORBELL_IN_BYTES 4
@@ -170,12 +167,12 @@ u32 __iomem *kfd_get_kernel_doorbell(struct kfd_dev *kfd,
170 167
171 BUG_ON(!kfd || !doorbell_off); 168 BUG_ON(!kfd || !doorbell_off);
172 169
173 mutex_lock(&doorbell_mutex); 170 mutex_lock(&kfd->doorbell_mutex);
174 inx = find_first_zero_bit(doorbell_available_index, 171 inx = find_first_zero_bit(kfd->doorbell_available_index,
175 KFD_MAX_NUM_OF_QUEUES_PER_PROCESS); 172 KFD_MAX_NUM_OF_QUEUES_PER_PROCESS);
176 173
177 __set_bit(inx, doorbell_available_index); 174 __set_bit(inx, kfd->doorbell_available_index);
178 mutex_unlock(&doorbell_mutex); 175 mutex_unlock(&kfd->doorbell_mutex);
179 176
180 if (inx >= KFD_MAX_NUM_OF_QUEUES_PER_PROCESS) 177 if (inx >= KFD_MAX_NUM_OF_QUEUES_PER_PROCESS)
181 return NULL; 178 return NULL;
@@ -203,9 +200,9 @@ void kfd_release_kernel_doorbell(struct kfd_dev *kfd, u32 __iomem *db_addr)
203 200
204 inx = (unsigned int)(db_addr - kfd->doorbell_kernel_ptr); 201 inx = (unsigned int)(db_addr - kfd->doorbell_kernel_ptr);
205 202
206 mutex_lock(&doorbell_mutex); 203 mutex_lock(&kfd->doorbell_mutex);
207 __clear_bit(inx, doorbell_available_index); 204 __clear_bit(inx, kfd->doorbell_available_index);
208 mutex_unlock(&doorbell_mutex); 205 mutex_unlock(&kfd->doorbell_mutex);
209} 206}
210 207
211inline void write_kernel_doorbell(u32 __iomem *db, u32 value) 208inline void write_kernel_doorbell(u32 __iomem *db, u32 value)
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_module.c b/drivers/gpu/drm/amd/amdkfd/kfd_module.c
index 3f34ae16f075..4e0a68f13a77 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_module.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_module.c
@@ -34,7 +34,6 @@
34#define KFD_DRIVER_MINOR 7 34#define KFD_DRIVER_MINOR 7
35#define KFD_DRIVER_PATCHLEVEL 1 35#define KFD_DRIVER_PATCHLEVEL 1
36 36
37const struct kfd2kgd_calls *kfd2kgd;
38static const struct kgd2kfd_calls kgd2kfd = { 37static const struct kgd2kfd_calls kgd2kfd = {
39 .exit = kgd2kfd_exit, 38 .exit = kgd2kfd_exit,
40 .probe = kgd2kfd_probe, 39 .probe = kgd2kfd_probe,
@@ -55,9 +54,7 @@ module_param(max_num_of_queues_per_device, int, 0444);
55MODULE_PARM_DESC(max_num_of_queues_per_device, 54MODULE_PARM_DESC(max_num_of_queues_per_device,
56 "Maximum number of supported queues per device (1 = Minimum, 4096 = default)"); 55 "Maximum number of supported queues per device (1 = Minimum, 4096 = default)");
57 56
58bool kgd2kfd_init(unsigned interface_version, 57bool kgd2kfd_init(unsigned interface_version, const struct kgd2kfd_calls **g2f)
59 const struct kfd2kgd_calls *f2g,
60 const struct kgd2kfd_calls **g2f)
61{ 58{
62 /* 59 /*
63 * Only one interface version is supported, 60 * Only one interface version is supported,
@@ -66,11 +63,6 @@ bool kgd2kfd_init(unsigned interface_version,
66 if (interface_version != KFD_INTERFACE_VERSION) 63 if (interface_version != KFD_INTERFACE_VERSION)
67 return false; 64 return false;
68 65
69 /* Protection against multiple amd kgd loads */
70 if (kfd2kgd)
71 return true;
72
73 kfd2kgd = f2g;
74 *g2f = &kgd2kfd; 66 *g2f = &kgd2kfd;
75 67
76 return true; 68 return true;
@@ -85,8 +77,6 @@ static int __init kfd_module_init(void)
85{ 77{
86 int err; 78 int err;
87 79
88 kfd2kgd = NULL;
89
90 /* Verify module parameters */ 80 /* Verify module parameters */
91 if ((sched_policy < KFD_SCHED_POLICY_HWS) || 81 if ((sched_policy < KFD_SCHED_POLICY_HWS) ||
92 (sched_policy > KFD_SCHED_POLICY_NO_HWS)) { 82 (sched_policy > KFD_SCHED_POLICY_NO_HWS)) {
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
index a09e18a339f3..434979428fc0 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c
@@ -151,14 +151,15 @@ static void uninit_mqd_sdma(struct mqd_manager *mm, void *mqd,
151static int load_mqd(struct mqd_manager *mm, void *mqd, uint32_t pipe_id, 151static int load_mqd(struct mqd_manager *mm, void *mqd, uint32_t pipe_id,
152 uint32_t queue_id, uint32_t __user *wptr) 152 uint32_t queue_id, uint32_t __user *wptr)
153{ 153{
154 return kfd2kgd->hqd_load(mm->dev->kgd, mqd, pipe_id, queue_id, wptr); 154 return mm->dev->kfd2kgd->hqd_load
155 (mm->dev->kgd, mqd, pipe_id, queue_id, wptr);
155} 156}
156 157
157static int load_mqd_sdma(struct mqd_manager *mm, void *mqd, 158static int load_mqd_sdma(struct mqd_manager *mm, void *mqd,
158 uint32_t pipe_id, uint32_t queue_id, 159 uint32_t pipe_id, uint32_t queue_id,
159 uint32_t __user *wptr) 160 uint32_t __user *wptr)
160{ 161{
161 return kfd2kgd->hqd_sdma_load(mm->dev->kgd, mqd); 162 return mm->dev->kfd2kgd->hqd_sdma_load(mm->dev->kgd, mqd);
162} 163}
163 164
164static int update_mqd(struct mqd_manager *mm, void *mqd, 165static int update_mqd(struct mqd_manager *mm, void *mqd,
@@ -245,7 +246,7 @@ static int destroy_mqd(struct mqd_manager *mm, void *mqd,
245 unsigned int timeout, uint32_t pipe_id, 246 unsigned int timeout, uint32_t pipe_id,
246 uint32_t queue_id) 247 uint32_t queue_id)
247{ 248{
248 return kfd2kgd->hqd_destroy(mm->dev->kgd, type, timeout, 249 return mm->dev->kfd2kgd->hqd_destroy(mm->dev->kgd, type, timeout,
249 pipe_id, queue_id); 250 pipe_id, queue_id);
250} 251}
251 252
@@ -258,7 +259,7 @@ static int destroy_mqd_sdma(struct mqd_manager *mm, void *mqd,
258 unsigned int timeout, uint32_t pipe_id, 259 unsigned int timeout, uint32_t pipe_id,
259 uint32_t queue_id) 260 uint32_t queue_id)
260{ 261{
261 return kfd2kgd->hqd_sdma_destroy(mm->dev->kgd, mqd, timeout); 262 return mm->dev->kfd2kgd->hqd_sdma_destroy(mm->dev->kgd, mqd, timeout);
262} 263}
263 264
264static bool is_occupied(struct mqd_manager *mm, void *mqd, 265static bool is_occupied(struct mqd_manager *mm, void *mqd,
@@ -266,7 +267,7 @@ static bool is_occupied(struct mqd_manager *mm, void *mqd,
266 uint32_t queue_id) 267 uint32_t queue_id)
267{ 268{
268 269
269 return kfd2kgd->hqd_is_occupied(mm->dev->kgd, queue_address, 270 return mm->dev->kfd2kgd->hqd_is_occupied(mm->dev->kgd, queue_address,
270 pipe_id, queue_id); 271 pipe_id, queue_id);
271 272
272} 273}
@@ -275,7 +276,7 @@ static bool is_occupied_sdma(struct mqd_manager *mm, void *mqd,
275 uint64_t queue_address, uint32_t pipe_id, 276 uint64_t queue_address, uint32_t pipe_id,
276 uint32_t queue_id) 277 uint32_t queue_id)
277{ 278{
278 return kfd2kgd->hqd_sdma_is_occupied(mm->dev->kgd, mqd); 279 return mm->dev->kfd2kgd->hqd_sdma_is_occupied(mm->dev->kgd, mqd);
279} 280}
280 281
281/* 282/*
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
index b7bd7afd6fcf..f21fccebd75b 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_priv.h
@@ -148,6 +148,11 @@ struct kfd_dev {
148 148
149 struct kgd2kfd_shared_resources shared_resources; 149 struct kgd2kfd_shared_resources shared_resources;
150 150
151 const struct kfd2kgd_calls *kfd2kgd;
152 struct mutex doorbell_mutex;
153 unsigned long doorbell_available_index[DIV_ROUND_UP(
154 KFD_MAX_NUM_OF_QUEUES_PER_PROCESS, BITS_PER_LONG)];
155
151 void *gtt_mem; 156 void *gtt_mem;
152 uint64_t gtt_start_gpu_addr; 157 uint64_t gtt_start_gpu_addr;
153 void *gtt_start_cpu_ptr; 158 void *gtt_start_cpu_ptr;
@@ -164,13 +169,12 @@ struct kfd_dev {
164 169
165/* KGD2KFD callbacks */ 170/* KGD2KFD callbacks */
166void kgd2kfd_exit(void); 171void kgd2kfd_exit(void);
167struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd, struct pci_dev *pdev); 172struct kfd_dev *kgd2kfd_probe(struct kgd_dev *kgd,
173 struct pci_dev *pdev, const struct kfd2kgd_calls *f2g);
168bool kgd2kfd_device_init(struct kfd_dev *kfd, 174bool kgd2kfd_device_init(struct kfd_dev *kfd,
169 const struct kgd2kfd_shared_resources *gpu_resources); 175 const struct kgd2kfd_shared_resources *gpu_resources);
170void kgd2kfd_device_exit(struct kfd_dev *kfd); 176void kgd2kfd_device_exit(struct kfd_dev *kfd);
171 177
172extern const struct kfd2kgd_calls *kfd2kgd;
173
174enum kfd_mempool { 178enum kfd_mempool {
175 KFD_MEMPOOL_SYSTEM_CACHEABLE = 1, 179 KFD_MEMPOOL_SYSTEM_CACHEABLE = 1,
176 KFD_MEMPOOL_SYSTEM_WRITECOMBINE = 2, 180 KFD_MEMPOOL_SYSTEM_WRITECOMBINE = 2,
diff --git a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
index 498399323a8c..661c6605d31b 100644
--- a/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
+++ b/drivers/gpu/drm/amd/amdkfd/kfd_topology.c
@@ -726,13 +726,14 @@ static ssize_t node_show(struct kobject *kobj, struct attribute *attr,
726 } 726 }
727 727
728 sysfs_show_32bit_prop(buffer, "max_engine_clk_fcompute", 728 sysfs_show_32bit_prop(buffer, "max_engine_clk_fcompute",
729 kfd2kgd->get_max_engine_clock_in_mhz( 729 dev->gpu->kfd2kgd->get_max_engine_clock_in_mhz(
730 dev->gpu->kgd)); 730 dev->gpu->kgd));
731 sysfs_show_64bit_prop(buffer, "local_mem_size", 731 sysfs_show_64bit_prop(buffer, "local_mem_size",
732 kfd2kgd->get_vmem_size(dev->gpu->kgd)); 732 dev->gpu->kfd2kgd->get_vmem_size(
733 dev->gpu->kgd));
733 734
734 sysfs_show_32bit_prop(buffer, "fw_version", 735 sysfs_show_32bit_prop(buffer, "fw_version",
735 kfd2kgd->get_fw_version( 736 dev->gpu->kfd2kgd->get_fw_version(
736 dev->gpu->kgd, 737 dev->gpu->kgd,
737 KGD_ENGINE_MEC1)); 738 KGD_ENGINE_MEC1));
738 } 739 }
@@ -1099,8 +1100,9 @@ static uint32_t kfd_generate_gpu_id(struct kfd_dev *gpu)
1099 buf[2] = gpu->pdev->subsystem_device; 1100 buf[2] = gpu->pdev->subsystem_device;
1100 buf[3] = gpu->pdev->device; 1101 buf[3] = gpu->pdev->device;
1101 buf[4] = gpu->pdev->bus->number; 1102 buf[4] = gpu->pdev->bus->number;
1102 buf[5] = (uint32_t)(kfd2kgd->get_vmem_size(gpu->kgd) & 0xffffffff); 1103 buf[5] = (uint32_t)(gpu->kfd2kgd->get_vmem_size(gpu->kgd)
1103 buf[6] = (uint32_t)(kfd2kgd->get_vmem_size(gpu->kgd) >> 32); 1104 & 0xffffffff);
1105 buf[6] = (uint32_t)(gpu->kfd2kgd->get_vmem_size(gpu->kgd) >> 32);
1104 1106
1105 for (i = 0, hashout = 0; i < 7; i++) 1107 for (i = 0, hashout = 0; i < 7; i++)
1106 hashout ^= hash_32(buf[i], KFD_GPU_ID_HASH_WIDTH); 1108 hashout ^= hash_32(buf[i], KFD_GPU_ID_HASH_WIDTH);