1 /*
2 * Copyright 2008 Advanced Micro Devices, Inc.
3 * Copyright 2008 Red Hat Inc.
4 * Copyright 2009 Jerome Glisse.
5 *
6 * Permission is hereby granted, free of charge, to any person obtaining a
7 * copy of this software and associated documentation files (the "Software"),
8 * to deal in the Software without restriction, including without limitation
9 * the rights to use, copy, modify, merge, publish, distribute, sublicense,
10 * and/or sell copies of the Software, and to permit persons to whom the
11 * Software is furnished to do so, subject to the following conditions:
12 *
13 * The above copyright notice and this permission notice shall be included in
14 * all copies or substantial portions of the Software.
15 *
16 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
17 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
18 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
19 * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
20 * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
21 * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
22 * OTHER DEALINGS IN THE SOFTWARE.
23 *
24 * Authors: Dave Airlie
25 * Alex Deucher
26 * Jerome Glisse
27 */
28
29 #include <linux/aperture.h>
30 #include <linux/power_supply.h>
31 #include <linux/kthread.h>
32 #include <linux/module.h>
33 #include <linux/console.h>
34 #include <linux/slab.h>
35 #include <linux/iommu.h>
36 #include <linux/pci.h>
37 #include <linux/pci-p2pdma.h>
38 #include <linux/apple-gmux.h>
39 #include <linux/nospec.h>
40
41 #include <drm/drm_atomic_helper.h>
42 #include <drm/drm_client_event.h>
43 #include <drm/drm_crtc_helper.h>
44 #include <drm/drm_probe_helper.h>
45 #include <drm/amdgpu_drm.h>
46 #include <linux/device.h>
47 #include <linux/vgaarb.h>
48 #include <linux/vga_switcheroo.h>
49 #include <linux/efi.h>
50 #include "amdgpu.h"
51 #include "amdgpu_trace.h"
52 #include "amdgpu_i2c.h"
53 #include "atom.h"
54 #include "amdgpu_atombios.h"
55 #include "amdgpu_atomfirmware.h"
56 #include "amd_pcie.h"
57 #ifdef CONFIG_DRM_AMDGPU_SI
58 #include "si.h"
59 #endif
60 #ifdef CONFIG_DRM_AMDGPU_CIK
61 #include "cik.h"
62 #endif
63 #include "vi.h"
64 #include "soc15.h"
65 #include "nv.h"
66 #include "bif/bif_4_1_d.h"
67 #include <linux/firmware.h>
68 #include "amdgpu_vf_error.h"
69
70 #include "amdgpu_amdkfd.h"
71 #include "amdgpu_pm.h"
72
73 #include "amdgpu_xgmi.h"
74 #include "amdgpu_ras.h"
75 #include "amdgpu_ras_mgr.h"
76 #include "amdgpu_pmu.h"
77 #include "amdgpu_fru_eeprom.h"
78 #include "amdgpu_reset.h"
79 #include "amdgpu_virt.h"
80 #include "amdgpu_dev_coredump.h"
81
82 #include <linux/suspend.h>
83 #include <drm/task_barrier.h>
84 #include <linux/pm_runtime.h>
85
86 #include <drm/drm_drv.h>
87
88 #if IS_ENABLED(CONFIG_X86)
89 #include <asm/intel-family.h>
90 #include <asm/cpu_device_id.h>
91 #endif
92
93 MODULE_FIRMWARE("amdgpu/vega10_gpu_info.bin");
94 MODULE_FIRMWARE("amdgpu/vega12_gpu_info.bin");
95 MODULE_FIRMWARE("amdgpu/raven_gpu_info.bin");
96 MODULE_FIRMWARE("amdgpu/picasso_gpu_info.bin");
97 MODULE_FIRMWARE("amdgpu/raven2_gpu_info.bin");
98 MODULE_FIRMWARE("amdgpu/arcturus_gpu_info.bin");
99 MODULE_FIRMWARE("amdgpu/navi12_gpu_info.bin");
100 MODULE_FIRMWARE("amdgpu/cyan_skillfish_gpu_info.bin");
101
102 #define AMDGPU_RESUME_MS 2000
103 #define AMDGPU_MAX_RETRY_LIMIT 2
104 #define AMDGPU_RETRY_SRIOV_RESET(r) ((r) == -EBUSY || (r) == -ETIMEDOUT || (r) == -EINVAL)
105 #define AMDGPU_PCIE_INDEX_FALLBACK (0x38 >> 2)
106 #define AMDGPU_PCIE_INDEX_HI_FALLBACK (0x44 >> 2)
107 #define AMDGPU_PCIE_DATA_FALLBACK (0x3C >> 2)
108
109 #define AMDGPU_VBIOS_SKIP (1U << 0)
110 #define AMDGPU_VBIOS_OPTIONAL (1U << 1)
111
112 static const struct drm_driver amdgpu_kms_driver;
113
114 const char *amdgpu_asic_name[] = {
115 "TAHITI",
116 "PITCAIRN",
117 "VERDE",
118 "OLAND",
119 "HAINAN",
120 "BONAIRE",
121 "KAVERI",
122 "KABINI",
123 "HAWAII",
124 "MULLINS",
125 "TOPAZ",
126 "TONGA",
127 "FIJI",
128 "CARRIZO",
129 "STONEY",
130 "POLARIS10",
131 "POLARIS11",
132 "POLARIS12",
133 "VEGAM",
134 "VEGA10",
135 "VEGA12",
136 "VEGA20",
137 "RAVEN",
138 "ARCTURUS",
139 "RENOIR",
140 "ALDEBARAN",
141 "NAVI10",
142 "CYAN_SKILLFISH",
143 "NAVI14",
144 "NAVI12",
145 "SIENNA_CICHLID",
146 "NAVY_FLOUNDER",
147 "VANGOGH",
148 "DIMGREY_CAVEFISH",
149 "BEIGE_GOBY",
150 "YELLOW_CARP",
151 "IP DISCOVERY",
152 "LAST",
153 };
154
155 #define AMDGPU_IP_BLK_MASK_ALL GENMASK(AMD_IP_BLOCK_TYPE_NUM - 1, 0)
156 /*
157 * Default init level where all blocks are expected to be initialized. This is
158 * the level of initialization expected by default and also after a full reset
159 * of the device.
160 */
161 struct amdgpu_init_level amdgpu_init_default = {
162 .level = AMDGPU_INIT_LEVEL_DEFAULT,
163 .hwini_ip_block_mask = AMDGPU_IP_BLK_MASK_ALL,
164 };
165
166 struct amdgpu_init_level amdgpu_init_recovery = {
167 .level = AMDGPU_INIT_LEVEL_RESET_RECOVERY,
168 .hwini_ip_block_mask = AMDGPU_IP_BLK_MASK_ALL,
169 };
170
171 /*
172 * Minimal blocks needed to be initialized before a XGMI hive can be reset. This
173 * is used for cases like reset on initialization where the entire hive needs to
174 * be reset before first use.
175 */
176 struct amdgpu_init_level amdgpu_init_minimal_xgmi = {
177 .level = AMDGPU_INIT_LEVEL_MINIMAL_XGMI,
178 .hwini_ip_block_mask =
179 BIT(AMD_IP_BLOCK_TYPE_GMC) | BIT(AMD_IP_BLOCK_TYPE_SMC) |
180 BIT(AMD_IP_BLOCK_TYPE_COMMON) | BIT(AMD_IP_BLOCK_TYPE_IH) |
181 BIT(AMD_IP_BLOCK_TYPE_PSP)
182 };
183
184 static int amdgpu_device_ip_resume_phase1(struct amdgpu_device *adev);
185 static int amdgpu_device_ip_resume_phase2(struct amdgpu_device *adev);
186 static int amdgpu_device_ip_resume_phase3(struct amdgpu_device *adev);
187
188 static void amdgpu_device_load_switch_state(struct amdgpu_device *adev);
189
amdgpu_ip_member_of_hwini(struct amdgpu_device * adev,enum amd_ip_block_type block)190 static inline bool amdgpu_ip_member_of_hwini(struct amdgpu_device *adev,
191 enum amd_ip_block_type block)
192 {
193 return (adev->init_lvl->hwini_ip_block_mask & (1U << block)) != 0;
194 }
195
amdgpu_set_init_level(struct amdgpu_device * adev,enum amdgpu_init_lvl_id lvl)196 void amdgpu_set_init_level(struct amdgpu_device *adev,
197 enum amdgpu_init_lvl_id lvl)
198 {
199 switch (lvl) {
200 case AMDGPU_INIT_LEVEL_MINIMAL_XGMI:
201 adev->init_lvl = &amdgpu_init_minimal_xgmi;
202 break;
203 case AMDGPU_INIT_LEVEL_RESET_RECOVERY:
204 adev->init_lvl = &amdgpu_init_recovery;
205 break;
206 case AMDGPU_INIT_LEVEL_DEFAULT:
207 fallthrough;
208 default:
209 adev->init_lvl = &amdgpu_init_default;
210 break;
211 }
212 }
213
214 static inline void amdgpu_device_stop_pending_resets(struct amdgpu_device *adev);
215 static int amdgpu_device_pm_notifier(struct notifier_block *nb, unsigned long mode,
216 void *data);
217
218 /**
219 * DOC: pcie_replay_count
220 *
221 * The amdgpu driver provides a sysfs API for reporting the total number
222 * of PCIe replays (NAKs).
223 * The file pcie_replay_count is used for this and returns the total
224 * number of replays as a sum of the NAKs generated and NAKs received.
225 */
226
amdgpu_device_get_pcie_replay_count(struct device * dev,struct device_attribute * attr,char * buf)227 static ssize_t amdgpu_device_get_pcie_replay_count(struct device *dev,
228 struct device_attribute *attr, char *buf)
229 {
230 struct drm_device *ddev = dev_get_drvdata(dev);
231 struct amdgpu_device *adev = drm_to_adev(ddev);
232 uint64_t cnt = amdgpu_asic_get_pcie_replay_count(adev);
233
234 return sysfs_emit(buf, "%llu\n", cnt);
235 }
236
237 static DEVICE_ATTR(pcie_replay_count, 0444,
238 amdgpu_device_get_pcie_replay_count, NULL);
239
amdgpu_device_attr_sysfs_init(struct amdgpu_device * adev)240 static int amdgpu_device_attr_sysfs_init(struct amdgpu_device *adev)
241 {
242 int ret = 0;
243
244 if (amdgpu_nbio_is_replay_cnt_supported(adev))
245 ret = sysfs_create_file(&adev->dev->kobj,
246 &dev_attr_pcie_replay_count.attr);
247
248 return ret;
249 }
250
amdgpu_device_attr_sysfs_fini(struct amdgpu_device * adev)251 static void amdgpu_device_attr_sysfs_fini(struct amdgpu_device *adev)
252 {
253 if (amdgpu_nbio_is_replay_cnt_supported(adev))
254 sysfs_remove_file(&adev->dev->kobj,
255 &dev_attr_pcie_replay_count.attr);
256 }
257
amdgpu_sysfs_reg_state_get(struct file * f,struct kobject * kobj,const struct bin_attribute * attr,char * buf,loff_t ppos,size_t count)258 static ssize_t amdgpu_sysfs_reg_state_get(struct file *f, struct kobject *kobj,
259 const struct bin_attribute *attr, char *buf,
260 loff_t ppos, size_t count)
261 {
262 struct device *dev = kobj_to_dev(kobj);
263 struct drm_device *ddev = dev_get_drvdata(dev);
264 struct amdgpu_device *adev = drm_to_adev(ddev);
265 ssize_t bytes_read;
266
267 switch (ppos) {
268 case AMDGPU_SYS_REG_STATE_XGMI:
269 bytes_read = amdgpu_asic_get_reg_state(
270 adev, AMDGPU_REG_STATE_TYPE_XGMI, buf, count);
271 break;
272 case AMDGPU_SYS_REG_STATE_WAFL:
273 bytes_read = amdgpu_asic_get_reg_state(
274 adev, AMDGPU_REG_STATE_TYPE_WAFL, buf, count);
275 break;
276 case AMDGPU_SYS_REG_STATE_PCIE:
277 bytes_read = amdgpu_asic_get_reg_state(
278 adev, AMDGPU_REG_STATE_TYPE_PCIE, buf, count);
279 break;
280 case AMDGPU_SYS_REG_STATE_USR:
281 bytes_read = amdgpu_asic_get_reg_state(
282 adev, AMDGPU_REG_STATE_TYPE_USR, buf, count);
283 break;
284 case AMDGPU_SYS_REG_STATE_USR_1:
285 bytes_read = amdgpu_asic_get_reg_state(
286 adev, AMDGPU_REG_STATE_TYPE_USR_1, buf, count);
287 break;
288 default:
289 return -EINVAL;
290 }
291
292 return bytes_read;
293 }
294
295 static const BIN_ATTR(reg_state, 0444, amdgpu_sysfs_reg_state_get, NULL,
296 AMDGPU_SYS_REG_STATE_END);
297
amdgpu_reg_state_sysfs_init(struct amdgpu_device * adev)298 int amdgpu_reg_state_sysfs_init(struct amdgpu_device *adev)
299 {
300 int ret;
301
302 if (!amdgpu_asic_get_reg_state_supported(adev))
303 return 0;
304
305 ret = sysfs_create_bin_file(&adev->dev->kobj, &bin_attr_reg_state);
306
307 return ret;
308 }
309
amdgpu_reg_state_sysfs_fini(struct amdgpu_device * adev)310 void amdgpu_reg_state_sysfs_fini(struct amdgpu_device *adev)
311 {
312 if (!amdgpu_asic_get_reg_state_supported(adev))
313 return;
314 sysfs_remove_bin_file(&adev->dev->kobj, &bin_attr_reg_state);
315 }
316
317 /**
318 * DOC: board_info
319 *
320 * The amdgpu driver provides a sysfs API for giving board related information.
321 * It provides the form factor information in the format
322 *
323 * type : form factor
324 *
325 * Possible form factor values
326 *
327 * - "cem" - PCIE CEM card
328 * - "oam" - Open Compute Accelerator Module
329 * - "unknown" - Not known
330 *
331 */
332
amdgpu_device_get_board_info(struct device * dev,struct device_attribute * attr,char * buf)333 static ssize_t amdgpu_device_get_board_info(struct device *dev,
334 struct device_attribute *attr,
335 char *buf)
336 {
337 struct drm_device *ddev = dev_get_drvdata(dev);
338 struct amdgpu_device *adev = drm_to_adev(ddev);
339 enum amdgpu_pkg_type pkg_type = AMDGPU_PKG_TYPE_CEM;
340 const char *pkg;
341
342 if (adev->smuio.funcs && adev->smuio.funcs->get_pkg_type)
343 pkg_type = adev->smuio.funcs->get_pkg_type(adev);
344
345 switch (pkg_type) {
346 case AMDGPU_PKG_TYPE_CEM:
347 pkg = "cem";
348 break;
349 case AMDGPU_PKG_TYPE_OAM:
350 pkg = "oam";
351 break;
352 default:
353 pkg = "unknown";
354 break;
355 }
356
357 return sysfs_emit(buf, "%s : %s\n", "type", pkg);
358 }
359
360 static DEVICE_ATTR(board_info, 0444, amdgpu_device_get_board_info, NULL);
361
362 static struct attribute *amdgpu_board_attrs[] = {
363 &dev_attr_board_info.attr,
364 NULL,
365 };
366
amdgpu_board_attrs_is_visible(struct kobject * kobj,struct attribute * attr,int n)367 static umode_t amdgpu_board_attrs_is_visible(struct kobject *kobj,
368 struct attribute *attr, int n)
369 {
370 struct device *dev = kobj_to_dev(kobj);
371 struct drm_device *ddev = dev_get_drvdata(dev);
372 struct amdgpu_device *adev = drm_to_adev(ddev);
373
374 if (adev->flags & AMD_IS_APU)
375 return 0;
376
377 return attr->mode;
378 }
379
380 static const struct attribute_group amdgpu_board_attrs_group = {
381 .attrs = amdgpu_board_attrs,
382 .is_visible = amdgpu_board_attrs_is_visible
383 };
384
385 /**
386 * DOC: uma/carveout_options
387 *
388 * This is a read-only file that lists all available UMA allocation
389 * options and their corresponding indices. Example output::
390 *
391 * $ cat uma/carveout_options
392 * 0: Minimum (512 MB)
393 * 1: (1 GB)
394 * 2: (2 GB)
395 * 3: (4 GB)
396 * 4: (6 GB)
397 * 5: (8 GB)
398 * 6: (12 GB)
399 * 7: Medium (16 GB)
400 * 8: (24 GB)
401 * 9: High (32 GB)
402 */
carveout_options_show(struct device * dev,struct device_attribute * attr,char * buf)403 static ssize_t carveout_options_show(struct device *dev,
404 struct device_attribute *attr,
405 char *buf)
406 {
407 struct drm_device *ddev = dev_get_drvdata(dev);
408 struct amdgpu_device *adev = drm_to_adev(ddev);
409 struct amdgpu_uma_carveout_info *uma_info = &adev->uma_info;
410 uint32_t memory_carved;
411 ssize_t size = 0;
412
413 if (!uma_info || !uma_info->num_entries)
414 return -ENODEV;
415
416 for (int i = 0; i < uma_info->num_entries; i++) {
417 memory_carved = uma_info->entries[i].memory_carved_mb;
418 if (memory_carved >= SZ_1G/SZ_1M) {
419 size += sysfs_emit_at(buf, size, "%d: %s (%u GB)\n",
420 i,
421 uma_info->entries[i].name,
422 memory_carved >> 10);
423 } else {
424 size += sysfs_emit_at(buf, size, "%d: %s (%u MB)\n",
425 i,
426 uma_info->entries[i].name,
427 memory_carved);
428 }
429 }
430
431 return size;
432 }
433 static DEVICE_ATTR_RO(carveout_options);
434
435 /**
436 * DOC: uma/carveout
437 *
438 * This file is both readable and writable. When read, it shows the
439 * index of the current setting. Writing a valid index to this file
440 * allows users to change the UMA carveout size to the selected option
441 * on the next boot.
442 *
443 * The available options and their corresponding indices can be read
444 * from the uma/carveout_options file.
445 */
carveout_show(struct device * dev,struct device_attribute * attr,char * buf)446 static ssize_t carveout_show(struct device *dev,
447 struct device_attribute *attr,
448 char *buf)
449 {
450 struct drm_device *ddev = dev_get_drvdata(dev);
451 struct amdgpu_device *adev = drm_to_adev(ddev);
452
453 return sysfs_emit(buf, "%u\n", adev->uma_info.uma_option_index);
454 }
455
carveout_store(struct device * dev,struct device_attribute * attr,const char * buf,size_t count)456 static ssize_t carveout_store(struct device *dev,
457 struct device_attribute *attr,
458 const char *buf, size_t count)
459 {
460 struct drm_device *ddev = dev_get_drvdata(dev);
461 struct amdgpu_device *adev = drm_to_adev(ddev);
462 struct amdgpu_uma_carveout_info *uma_info = &adev->uma_info;
463 struct amdgpu_uma_carveout_option *opt;
464 unsigned long val;
465 uint8_t flags;
466 int r;
467
468 r = kstrtoul(buf, 10, &val);
469 if (r)
470 return r;
471
472 if (val >= uma_info->num_entries)
473 return -EINVAL;
474
475 val = array_index_nospec(val, uma_info->num_entries);
476 opt = &uma_info->entries[val];
477
478 if (!(opt->flags & AMDGPU_UMA_FLAG_AUTO) &&
479 !(opt->flags & AMDGPU_UMA_FLAG_CUSTOM)) {
480 drm_err_once(ddev, "Option %lu not supported due to lack of Custom/Auto flag", val);
481 return -EINVAL;
482 }
483
484 flags = opt->flags;
485 flags &= ~((flags & AMDGPU_UMA_FLAG_AUTO) >> 1);
486
487 guard(mutex)(&uma_info->update_lock);
488
489 r = amdgpu_acpi_set_uma_allocation_size(adev, val, flags);
490 if (r)
491 return r;
492
493 uma_info->uma_option_index = val;
494
495 return count;
496 }
497 static DEVICE_ATTR_RW(carveout);
498
499 static struct attribute *amdgpu_uma_attrs[] = {
500 &dev_attr_carveout.attr,
501 &dev_attr_carveout_options.attr,
502 NULL
503 };
504
505 const struct attribute_group amdgpu_uma_attr_group = {
506 .name = "uma",
507 .attrs = amdgpu_uma_attrs
508 };
509
amdgpu_uma_sysfs_init(struct amdgpu_device * adev)510 static void amdgpu_uma_sysfs_init(struct amdgpu_device *adev)
511 {
512 int rc;
513
514 if (!(adev->flags & AMD_IS_APU))
515 return;
516
517 if (!amdgpu_acpi_is_set_uma_allocation_size_supported())
518 return;
519
520 rc = amdgpu_atomfirmware_get_uma_carveout_info(adev, &adev->uma_info);
521 if (rc) {
522 drm_dbg(adev_to_drm(adev),
523 "Failed to parse UMA carveout info from VBIOS: %d\n", rc);
524 goto out_info;
525 }
526
527 mutex_init(&adev->uma_info.update_lock);
528
529 rc = devm_device_add_group(adev->dev, &amdgpu_uma_attr_group);
530 if (rc) {
531 drm_dbg(adev_to_drm(adev), "Failed to add UMA carveout sysfs interfaces %d\n", rc);
532 goto out_attr;
533 }
534
535 return;
536
537 out_attr:
538 mutex_destroy(&adev->uma_info.update_lock);
539 out_info:
540 return;
541 }
542
amdgpu_uma_sysfs_fini(struct amdgpu_device * adev)543 static void amdgpu_uma_sysfs_fini(struct amdgpu_device *adev)
544 {
545 struct amdgpu_uma_carveout_info *uma_info = &adev->uma_info;
546
547 if (!amdgpu_acpi_is_set_uma_allocation_size_supported())
548 return;
549
550 mutex_destroy(&uma_info->update_lock);
551 uma_info->num_entries = 0;
552 }
553
554 static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev);
555
556 /**
557 * amdgpu_device_supports_px - Is the device a dGPU with ATPX power control
558 *
559 * @adev: amdgpu device pointer
560 *
561 * Returns true if the device is a dGPU with ATPX power control,
562 * otherwise return false.
563 */
amdgpu_device_supports_px(struct amdgpu_device * adev)564 bool amdgpu_device_supports_px(struct amdgpu_device *adev)
565 {
566 if ((adev->flags & AMD_IS_PX) && !amdgpu_is_atpx_hybrid())
567 return true;
568 return false;
569 }
570
571 /**
572 * amdgpu_device_supports_boco - Is the device a dGPU with ACPI power resources
573 *
574 * @adev: amdgpu device pointer
575 *
576 * Returns true if the device is a dGPU with ACPI power control,
577 * otherwise return false.
578 */
amdgpu_device_supports_boco(struct amdgpu_device * adev)579 bool amdgpu_device_supports_boco(struct amdgpu_device *adev)
580 {
581 if (!IS_ENABLED(CONFIG_HOTPLUG_PCI_PCIE))
582 return false;
583
584 if (adev->has_pr3 ||
585 ((adev->flags & AMD_IS_PX) && amdgpu_is_atpx_hybrid()))
586 return true;
587 return false;
588 }
589
590 /**
591 * amdgpu_device_supports_baco - Does the device support BACO
592 *
593 * @adev: amdgpu device pointer
594 *
595 * Return:
596 * 1 if the device supports BACO;
597 * 3 if the device supports MACO (only works if BACO is supported)
598 * otherwise return 0.
599 */
amdgpu_device_supports_baco(struct amdgpu_device * adev)600 int amdgpu_device_supports_baco(struct amdgpu_device *adev)
601 {
602 return amdgpu_asic_supports_baco(adev);
603 }
604
amdgpu_device_detect_runtime_pm_mode(struct amdgpu_device * adev)605 void amdgpu_device_detect_runtime_pm_mode(struct amdgpu_device *adev)
606 {
607 int bamaco_support;
608
609 adev->pm.rpm_mode = AMDGPU_RUNPM_NONE;
610 bamaco_support = amdgpu_device_supports_baco(adev);
611
612 switch (amdgpu_runtime_pm) {
613 case 2:
614 if (bamaco_support & MACO_SUPPORT) {
615 adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
616 dev_info(adev->dev, "Forcing BAMACO for runtime pm\n");
617 } else if (bamaco_support == BACO_SUPPORT) {
618 adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
619 dev_info(adev->dev, "Requested mode BAMACO not available,fallback to use BACO\n");
620 }
621 break;
622 case 1:
623 if (bamaco_support & BACO_SUPPORT) {
624 adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
625 dev_info(adev->dev, "Forcing BACO for runtime pm\n");
626 }
627 break;
628 case -1:
629 case -2:
630 if (amdgpu_device_supports_px(adev)) {
631 /* enable PX as runtime mode */
632 adev->pm.rpm_mode = AMDGPU_RUNPM_PX;
633 dev_info(adev->dev, "Using ATPX for runtime pm\n");
634 } else if (amdgpu_device_supports_boco(adev)) {
635 /* enable boco as runtime mode */
636 adev->pm.rpm_mode = AMDGPU_RUNPM_BOCO;
637 dev_info(adev->dev, "Using BOCO for runtime pm\n");
638 } else {
639 if (!bamaco_support)
640 goto no_runtime_pm;
641
642 switch (adev->asic_type) {
643 case CHIP_VEGA20:
644 case CHIP_ARCTURUS:
645 /* BACO are not supported on vega20 and arctrus */
646 break;
647 case CHIP_VEGA10:
648 /* enable BACO as runpm mode if noretry=0 */
649 if (!adev->gmc.noretry && !amdgpu_passthrough(adev))
650 adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
651 break;
652 default:
653 /* enable BACO as runpm mode on CI+ */
654 if (!amdgpu_passthrough(adev))
655 adev->pm.rpm_mode = AMDGPU_RUNPM_BACO;
656 break;
657 }
658
659 if (adev->pm.rpm_mode == AMDGPU_RUNPM_BACO) {
660 if (bamaco_support & MACO_SUPPORT) {
661 adev->pm.rpm_mode = AMDGPU_RUNPM_BAMACO;
662 dev_info(adev->dev, "Using BAMACO for runtime pm\n");
663 } else {
664 dev_info(adev->dev, "Using BACO for runtime pm\n");
665 }
666 }
667 }
668 break;
669 case 0:
670 dev_info(adev->dev, "runtime pm is manually disabled\n");
671 break;
672 default:
673 break;
674 }
675
676 no_runtime_pm:
677 if (adev->pm.rpm_mode == AMDGPU_RUNPM_NONE)
678 dev_info(adev->dev, "Runtime PM not available\n");
679 }
680 /**
681 * amdgpu_device_supports_smart_shift - Is the device dGPU with
682 * smart shift support
683 *
684 * @adev: amdgpu device pointer
685 *
686 * Returns true if the device is a dGPU with Smart Shift support,
687 * otherwise returns false.
688 */
amdgpu_device_supports_smart_shift(struct amdgpu_device * adev)689 bool amdgpu_device_supports_smart_shift(struct amdgpu_device *adev)
690 {
691 return (amdgpu_device_supports_boco(adev) &&
692 amdgpu_acpi_is_power_shift_control_supported());
693 }
694
695 /*
696 * VRAM access helper functions
697 */
698
699 /**
700 * amdgpu_device_mm_access - access vram by MM_INDEX/MM_DATA
701 *
702 * @adev: amdgpu_device pointer
703 * @pos: offset of the buffer in vram
704 * @buf: virtual address of the buffer in system memory
705 * @size: read/write size, sizeof(@buf) must > @size
706 * @write: true - write to vram, otherwise - read from vram
707 */
amdgpu_device_mm_access(struct amdgpu_device * adev,loff_t pos,void * buf,size_t size,bool write)708 void amdgpu_device_mm_access(struct amdgpu_device *adev, loff_t pos,
709 void *buf, size_t size, bool write)
710 {
711 unsigned long flags;
712 uint32_t hi = ~0, tmp = 0;
713 uint32_t *data = buf;
714 uint64_t last;
715 int idx;
716
717 if (!drm_dev_enter(adev_to_drm(adev), &idx))
718 return;
719
720 BUG_ON(!IS_ALIGNED(pos, 4) || !IS_ALIGNED(size, 4));
721
722 spin_lock_irqsave(&adev->mmio_idx_lock, flags);
723 for (last = pos + size; pos < last; pos += 4) {
724 tmp = pos >> 31;
725
726 WREG32_NO_KIQ(mmMM_INDEX, ((uint32_t)pos) | 0x80000000);
727 if (tmp != hi) {
728 WREG32_NO_KIQ(mmMM_INDEX_HI, tmp);
729 hi = tmp;
730 }
731 if (write)
732 WREG32_NO_KIQ(mmMM_DATA, *data++);
733 else
734 *data++ = RREG32_NO_KIQ(mmMM_DATA);
735 }
736
737 spin_unlock_irqrestore(&adev->mmio_idx_lock, flags);
738 drm_dev_exit(idx);
739 }
740
741 /**
742 * amdgpu_device_aper_access - access vram by vram aperture
743 *
744 * @adev: amdgpu_device pointer
745 * @pos: offset of the buffer in vram
746 * @buf: virtual address of the buffer in system memory
747 * @size: read/write size, sizeof(@buf) must > @size
748 * @write: true - write to vram, otherwise - read from vram
749 *
750 * The return value means how many bytes have been transferred.
751 */
amdgpu_device_aper_access(struct amdgpu_device * adev,loff_t pos,void * buf,size_t size,bool write)752 size_t amdgpu_device_aper_access(struct amdgpu_device *adev, loff_t pos,
753 void *buf, size_t size, bool write)
754 {
755 #ifdef CONFIG_64BIT
756 void __iomem *addr;
757 size_t count = 0;
758 uint64_t last;
759
760 if (!adev->mman.aper_base_kaddr)
761 return 0;
762
763 last = min(pos + size, adev->gmc.visible_vram_size);
764 if (last > pos) {
765 addr = adev->mman.aper_base_kaddr + pos;
766 count = last - pos;
767
768 if (write) {
769 memcpy_toio(addr, buf, count);
770 /* Make sure HDP write cache flush happens without any reordering
771 * after the system memory contents are sent over PCIe device
772 */
773 mb();
774 amdgpu_device_flush_hdp(adev, NULL);
775 } else {
776 amdgpu_device_invalidate_hdp(adev, NULL);
777 /* Make sure HDP read cache is invalidated before issuing a read
778 * to the PCIe device
779 */
780 mb();
781 memcpy_fromio(buf, addr, count);
782 }
783
784 }
785
786 return count;
787 #else
788 return 0;
789 #endif
790 }
791
792 /**
793 * amdgpu_device_vram_access - read/write a buffer in vram
794 *
795 * @adev: amdgpu_device pointer
796 * @pos: offset of the buffer in vram
797 * @buf: virtual address of the buffer in system memory
798 * @size: read/write size, sizeof(@buf) must > @size
799 * @write: true - write to vram, otherwise - read from vram
800 */
amdgpu_device_vram_access(struct amdgpu_device * adev,loff_t pos,void * buf,size_t size,bool write)801 void amdgpu_device_vram_access(struct amdgpu_device *adev, loff_t pos,
802 void *buf, size_t size, bool write)
803 {
804 size_t count;
805
806 /* try to using vram apreature to access vram first */
807 count = amdgpu_device_aper_access(adev, pos, buf, size, write);
808 size -= count;
809 if (size) {
810 /* using MM to access rest vram */
811 pos += count;
812 buf += count;
813 amdgpu_device_mm_access(adev, pos, buf, size, write);
814 }
815 }
816
817 /*
818 * register access helper functions.
819 */
820
821 /* Check if hw access should be skipped because of hotplug or device error */
amdgpu_device_skip_hw_access(struct amdgpu_device * adev)822 bool amdgpu_device_skip_hw_access(struct amdgpu_device *adev)
823 {
824 if (adev->no_hw_access)
825 return true;
826
827 #ifdef CONFIG_LOCKDEP
828 /*
829 * This is a bit complicated to understand, so worth a comment. What we assert
830 * here is that the GPU reset is not running on another thread in parallel.
831 *
832 * For this we trylock the read side of the reset semaphore, if that succeeds
833 * we know that the reset is not running in parallel.
834 *
835 * If the trylock fails we assert that we are either already holding the read
836 * side of the lock or are the reset thread itself and hold the write side of
837 * the lock.
838 */
839 if (in_task()) {
840 if (down_read_trylock(&adev->reset_domain->sem))
841 up_read(&adev->reset_domain->sem);
842 else
843 lockdep_assert_held(&adev->reset_domain->sem);
844 }
845 #endif
846 return false;
847 }
848
849 /**
850 * amdgpu_device_get_rev_id - query device rev_id
851 *
852 * @adev: amdgpu_device pointer
853 *
854 * Return device rev_id
855 */
amdgpu_device_get_rev_id(struct amdgpu_device * adev)856 u32 amdgpu_device_get_rev_id(struct amdgpu_device *adev)
857 {
858 return adev->nbio.funcs->get_rev_id(adev);
859 }
860
amdgpu_device_get_vbios_flags(struct amdgpu_device * adev)861 static uint32_t amdgpu_device_get_vbios_flags(struct amdgpu_device *adev)
862 {
863 if (hweight32(adev->aid_mask) && (adev->flags & AMD_IS_APU))
864 return AMDGPU_VBIOS_SKIP;
865
866 if (hweight32(adev->aid_mask) && amdgpu_passthrough(adev))
867 return AMDGPU_VBIOS_OPTIONAL;
868
869 return 0;
870 }
871
872 /**
873 * amdgpu_device_asic_init - Wrapper for atom asic_init
874 *
875 * @adev: amdgpu_device pointer
876 *
877 * Does any asic specific work and then calls atom asic init.
878 */
amdgpu_device_asic_init(struct amdgpu_device * adev)879 static int amdgpu_device_asic_init(struct amdgpu_device *adev)
880 {
881 uint32_t flags;
882 bool optional;
883 int ret;
884
885 amdgpu_asic_pre_asic_init(adev);
886 flags = amdgpu_device_get_vbios_flags(adev);
887 optional = !!(flags & (AMDGPU_VBIOS_OPTIONAL | AMDGPU_VBIOS_SKIP));
888
889 if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
890 amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
891 amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0) ||
892 amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(11, 0, 0)) {
893 amdgpu_psp_wait_for_bootloader(adev);
894 if (optional && !adev->bios)
895 return 0;
896
897 ret = amdgpu_atomfirmware_asic_init(adev, true);
898 return ret;
899 } else {
900 if (optional && !adev->bios)
901 return 0;
902
903 return amdgpu_atom_asic_init(adev->mode_info.atom_context);
904 }
905
906 return 0;
907 }
908
909 /**
910 * amdgpu_device_mem_scratch_init - allocate the VRAM scratch page
911 *
912 * @adev: amdgpu_device pointer
913 *
914 * Allocates a scratch page of VRAM for use by various things in the
915 * driver.
916 */
amdgpu_device_mem_scratch_init(struct amdgpu_device * adev)917 static int amdgpu_device_mem_scratch_init(struct amdgpu_device *adev)
918 {
919 return amdgpu_bo_create_kernel(adev, AMDGPU_GPU_PAGE_SIZE, PAGE_SIZE,
920 AMDGPU_GEM_DOMAIN_VRAM |
921 AMDGPU_GEM_DOMAIN_GTT,
922 &adev->mem_scratch.robj,
923 &adev->mem_scratch.gpu_addr,
924 (void **)&adev->mem_scratch.ptr);
925 }
926
927 /**
928 * amdgpu_device_mem_scratch_fini - Free the VRAM scratch page
929 *
930 * @adev: amdgpu_device pointer
931 *
932 * Frees the VRAM scratch page.
933 */
amdgpu_device_mem_scratch_fini(struct amdgpu_device * adev)934 static void amdgpu_device_mem_scratch_fini(struct amdgpu_device *adev)
935 {
936 amdgpu_bo_free_kernel(&adev->mem_scratch.robj, NULL, NULL);
937 }
938
939 /**
940 * amdgpu_device_program_register_sequence - program an array of registers.
941 *
942 * @adev: amdgpu_device pointer
943 * @registers: pointer to the register array
944 * @array_size: size of the register array
945 *
946 * Programs an array or registers with and or masks.
947 * This is a helper for setting golden registers.
948 */
amdgpu_device_program_register_sequence(struct amdgpu_device * adev,const u32 * registers,const u32 array_size)949 void amdgpu_device_program_register_sequence(struct amdgpu_device *adev,
950 const u32 *registers,
951 const u32 array_size)
952 {
953 u32 tmp, reg, and_mask, or_mask;
954 int i;
955
956 if (array_size % 3)
957 return;
958
959 for (i = 0; i < array_size; i += 3) {
960 reg = registers[i + 0];
961 and_mask = registers[i + 1];
962 or_mask = registers[i + 2];
963
964 if (and_mask == 0xffffffff) {
965 tmp = or_mask;
966 } else {
967 tmp = RREG32(reg);
968 tmp &= ~and_mask;
969 if (adev->family >= AMDGPU_FAMILY_AI)
970 tmp |= (or_mask & and_mask);
971 else
972 tmp |= or_mask;
973 }
974 WREG32(reg, tmp);
975 }
976 }
977
978 /**
979 * amdgpu_device_pci_config_reset - reset the GPU
980 *
981 * @adev: amdgpu_device pointer
982 *
983 * Resets the GPU using the pci config reset sequence.
984 * Only applicable to asics prior to vega10.
985 */
amdgpu_device_pci_config_reset(struct amdgpu_device * adev)986 void amdgpu_device_pci_config_reset(struct amdgpu_device *adev)
987 {
988 pci_write_config_dword(adev->pdev, 0x7c, AMDGPU_ASIC_RESET_DATA);
989 }
990
991 /**
992 * amdgpu_device_pci_reset - reset the GPU using generic PCI means
993 *
994 * @adev: amdgpu_device pointer
995 *
996 * Resets the GPU using generic pci reset interfaces (FLR, SBR, etc.).
997 */
amdgpu_device_pci_reset(struct amdgpu_device * adev)998 int amdgpu_device_pci_reset(struct amdgpu_device *adev)
999 {
1000 return pci_reset_function(adev->pdev);
1001 }
1002
1003 /*
1004 * amdgpu_device_wb_*()
1005 * Writeback is the method by which the GPU updates special pages in memory
1006 * with the status of certain GPU events (fences, ring pointers,etc.).
1007 */
1008
1009 /**
1010 * amdgpu_device_wb_fini - Disable Writeback and free memory
1011 *
1012 * @adev: amdgpu_device pointer
1013 *
1014 * Disables Writeback and frees the Writeback memory (all asics).
1015 * Used at driver shutdown.
1016 */
amdgpu_device_wb_fini(struct amdgpu_device * adev)1017 static void amdgpu_device_wb_fini(struct amdgpu_device *adev)
1018 {
1019 if (adev->wb.wb_obj) {
1020 amdgpu_bo_free_kernel(&adev->wb.wb_obj,
1021 &adev->wb.gpu_addr,
1022 (void **)&adev->wb.wb);
1023 adev->wb.wb_obj = NULL;
1024 }
1025 }
1026
1027 /**
1028 * amdgpu_device_wb_init - Init Writeback driver info and allocate memory
1029 *
1030 * @adev: amdgpu_device pointer
1031 *
1032 * Initializes writeback and allocates writeback memory (all asics).
1033 * Used at driver startup.
1034 * Returns 0 on success or an -error on failure.
1035 */
amdgpu_device_wb_init(struct amdgpu_device * adev)1036 static int amdgpu_device_wb_init(struct amdgpu_device *adev)
1037 {
1038 int r;
1039
1040 if (adev->wb.wb_obj == NULL) {
1041 /* AMDGPU_MAX_WB * sizeof(uint32_t) * 8 = AMDGPU_MAX_WB 256bit slots */
1042 r = amdgpu_bo_create_kernel(adev, AMDGPU_MAX_WB * sizeof(uint32_t) * 8,
1043 PAGE_SIZE, AMDGPU_GEM_DOMAIN_GTT,
1044 &adev->wb.wb_obj, &adev->wb.gpu_addr,
1045 (void **)&adev->wb.wb);
1046 if (r) {
1047 dev_warn(adev->dev, "(%d) create WB bo failed\n", r);
1048 return r;
1049 }
1050
1051 adev->wb.num_wb = AMDGPU_MAX_WB;
1052 memset(&adev->wb.used, 0, sizeof(adev->wb.used));
1053
1054 /* clear wb memory */
1055 memset((char *)adev->wb.wb, 0, AMDGPU_MAX_WB * sizeof(uint32_t) * 8);
1056 }
1057
1058 return 0;
1059 }
1060
1061 /**
1062 * amdgpu_device_wb_get - Allocate a wb entry
1063 *
1064 * @adev: amdgpu_device pointer
1065 * @wb: wb index
1066 *
1067 * Allocate a wb slot for use by the driver (all asics).
1068 * Returns 0 on success or -EINVAL on failure.
1069 */
amdgpu_device_wb_get(struct amdgpu_device * adev,u32 * wb)1070 int amdgpu_device_wb_get(struct amdgpu_device *adev, u32 *wb)
1071 {
1072 unsigned long flags, offset;
1073
1074 spin_lock_irqsave(&adev->wb.lock, flags);
1075 offset = find_first_zero_bit(adev->wb.used, adev->wb.num_wb);
1076 if (offset < adev->wb.num_wb) {
1077 __set_bit(offset, adev->wb.used);
1078 spin_unlock_irqrestore(&adev->wb.lock, flags);
1079 *wb = offset << 3; /* convert to dw offset */
1080 return 0;
1081 } else {
1082 spin_unlock_irqrestore(&adev->wb.lock, flags);
1083 return -EINVAL;
1084 }
1085 }
1086
1087 /**
1088 * amdgpu_device_wb_free - Free a wb entry
1089 *
1090 * @adev: amdgpu_device pointer
1091 * @wb: wb index
1092 *
1093 * Free a wb slot allocated for use by the driver (all asics)
1094 */
amdgpu_device_wb_free(struct amdgpu_device * adev,u32 wb)1095 void amdgpu_device_wb_free(struct amdgpu_device *adev, u32 wb)
1096 {
1097 unsigned long flags;
1098
1099 wb >>= 3;
1100 spin_lock_irqsave(&adev->wb.lock, flags);
1101 if (wb < adev->wb.num_wb)
1102 __clear_bit(wb, adev->wb.used);
1103 spin_unlock_irqrestore(&adev->wb.lock, flags);
1104 }
1105
1106 /**
1107 * amdgpu_device_resize_fb_bar - try to resize FB BAR
1108 *
1109 * @adev: amdgpu_device pointer
1110 *
1111 * Try to resize FB BAR to make all VRAM CPU accessible. We try very hard not
1112 * to fail, but if any of the BARs is not accessible after the size we abort
1113 * driver loading by returning -ENODEV.
1114 */
amdgpu_device_resize_fb_bar(struct amdgpu_device * adev)1115 int amdgpu_device_resize_fb_bar(struct amdgpu_device *adev)
1116 {
1117 int rbar_size = pci_rebar_bytes_to_size(adev->gmc.real_vram_size);
1118 struct pci_bus *root;
1119 struct resource *res;
1120 int max_size, r;
1121 unsigned int i;
1122 u16 cmd;
1123
1124 if (!IS_ENABLED(CONFIG_PHYS_ADDR_T_64BIT))
1125 return 0;
1126
1127 /* Bypass for VF */
1128 if (amdgpu_sriov_vf(adev))
1129 return 0;
1130
1131 if (!amdgpu_rebar)
1132 return 0;
1133
1134 /* resizing on Dell G5 SE platforms causes problems with runtime pm */
1135 if ((amdgpu_runtime_pm != 0) &&
1136 adev->pdev->vendor == PCI_VENDOR_ID_ATI &&
1137 adev->pdev->device == 0x731f &&
1138 adev->pdev->subsystem_vendor == PCI_VENDOR_ID_DELL)
1139 return 0;
1140
1141 /* PCI_EXT_CAP_ID_VNDR extended capability is located at 0x100 */
1142 if (!pci_find_ext_capability(adev->pdev, PCI_EXT_CAP_ID_VNDR))
1143 dev_warn(
1144 adev->dev,
1145 "System can't access extended configuration space, please check!!\n");
1146
1147 /* skip if the bios has already enabled large BAR */
1148 if (adev->gmc.real_vram_size &&
1149 (pci_resource_len(adev->pdev, 0) >= adev->gmc.real_vram_size))
1150 return 0;
1151
1152 /* Check if the root BUS has 64bit memory resources */
1153 root = adev->pdev->bus;
1154 while (root->parent)
1155 root = root->parent;
1156
1157 pci_bus_for_each_resource(root, res, i) {
1158 if (res && res->flags & (IORESOURCE_MEM | IORESOURCE_MEM_64) &&
1159 res->start > 0x100000000ull)
1160 break;
1161 }
1162
1163 /* Trying to resize is pointless without a root hub window above 4GB */
1164 if (!res)
1165 return 0;
1166
1167 /* Limit the BAR size to what is available */
1168 max_size = pci_rebar_get_max_size(adev->pdev, 0);
1169 if (max_size < 0)
1170 return 0;
1171 rbar_size = min(max_size, rbar_size);
1172
1173 /* Disable memory decoding while we change the BAR addresses and size */
1174 pci_read_config_word(adev->pdev, PCI_COMMAND, &cmd);
1175 pci_write_config_word(adev->pdev, PCI_COMMAND,
1176 cmd & ~PCI_COMMAND_MEMORY);
1177
1178 /* Tear down doorbell as resizing will release BARs */
1179 amdgpu_doorbell_fini(adev);
1180
1181 r = pci_resize_resource(adev->pdev, 0, rbar_size,
1182 (adev->asic_type >= CHIP_BONAIRE) ? 1 << 5
1183 : 1 << 2);
1184 if (r == -ENOSPC)
1185 dev_info(adev->dev,
1186 "Not enough PCI address space for a large BAR.");
1187 else if (r && r != -ENOTSUPP)
1188 dev_err(adev->dev, "Problem resizing BAR0 (%d).", r);
1189
1190 /* When the doorbell or fb BAR isn't available we have no chance of
1191 * using the device.
1192 */
1193 r = amdgpu_doorbell_init(adev);
1194 if (r || (pci_resource_flags(adev->pdev, 0) & IORESOURCE_UNSET))
1195 return -ENODEV;
1196
1197 pci_write_config_word(adev->pdev, PCI_COMMAND, cmd);
1198
1199 return 0;
1200 }
1201
1202 /*
1203 * GPU helpers function.
1204 */
1205 /**
1206 * amdgpu_device_need_post - check if the hw need post or not
1207 *
1208 * @adev: amdgpu_device pointer
1209 *
1210 * Check if the asic has been initialized (all asics) at driver startup
1211 * or post is needed if hw reset is performed.
1212 * Returns true if need or false if not.
1213 */
amdgpu_device_need_post(struct amdgpu_device * adev)1214 bool amdgpu_device_need_post(struct amdgpu_device *adev)
1215 {
1216 uint32_t reg, flags;
1217
1218 if (amdgpu_sriov_vf(adev))
1219 return false;
1220
1221 flags = amdgpu_device_get_vbios_flags(adev);
1222 if (flags & AMDGPU_VBIOS_SKIP)
1223 return false;
1224 if ((flags & AMDGPU_VBIOS_OPTIONAL) && !adev->bios)
1225 return false;
1226
1227 if (amdgpu_passthrough(adev)) {
1228 /* for FIJI: In whole GPU pass-through virtualization case, after VM reboot
1229 * some old smc fw still need driver do vPost otherwise gpu hang, while
1230 * those smc fw version above 22.15 doesn't have this flaw, so we force
1231 * vpost executed for smc version below 22.15
1232 */
1233 if (adev->asic_type == CHIP_FIJI) {
1234 int err;
1235 uint32_t fw_ver;
1236
1237 err = request_firmware(&adev->pm.fw, "amdgpu/fiji_smc.bin", adev->dev);
1238 /* force vPost if error occurred */
1239 if (err)
1240 return true;
1241
1242 fw_ver = *((uint32_t *)adev->pm.fw->data + 69);
1243 release_firmware(adev->pm.fw);
1244 if (fw_ver < 0x00160e00)
1245 return true;
1246 }
1247 }
1248
1249 /* Don't post if we need to reset whole hive on init */
1250 if (adev->init_lvl->level == AMDGPU_INIT_LEVEL_MINIMAL_XGMI)
1251 return false;
1252
1253 if (adev->has_hw_reset) {
1254 adev->has_hw_reset = false;
1255 return true;
1256 }
1257
1258 /* bios scratch used on CIK+ */
1259 if (adev->asic_type >= CHIP_BONAIRE)
1260 return amdgpu_atombios_scratch_need_asic_init(adev);
1261
1262 /* check MEM_SIZE for older asics */
1263 reg = amdgpu_asic_get_config_memsize(adev);
1264
1265 if ((reg != 0) && (reg != 0xffffffff))
1266 return false;
1267
1268 return true;
1269 }
1270
1271 /*
1272 * Check whether seamless boot is supported.
1273 *
1274 * So far we only support seamless boot on DCE 3.0 or later.
1275 * If users report that it works on older ASICS as well, we may
1276 * loosen this.
1277 */
amdgpu_device_seamless_boot_supported(struct amdgpu_device * adev)1278 bool amdgpu_device_seamless_boot_supported(struct amdgpu_device *adev)
1279 {
1280 switch (amdgpu_seamless) {
1281 case -1:
1282 break;
1283 case 1:
1284 return true;
1285 case 0:
1286 return false;
1287 default:
1288 dev_err(adev->dev, "Invalid value for amdgpu.seamless: %d\n",
1289 amdgpu_seamless);
1290 return false;
1291 }
1292
1293 if (!(adev->flags & AMD_IS_APU))
1294 return false;
1295
1296 if (adev->mman.keep_stolen_vga_memory)
1297 return false;
1298
1299 return amdgpu_ip_version(adev, DCE_HWIP, 0) >= IP_VERSION(3, 0, 0);
1300 }
1301
1302 /*
1303 * Intel hosts such as Rocket Lake, Alder Lake, Raptor Lake and Sapphire Rapids
1304 * don't support dynamic speed switching. Until we have confirmation from Intel
1305 * that a specific host supports it, it's safer that we keep it disabled for all.
1306 *
1307 * https://edc.intel.com/content/www/us/en/design/products/platforms/details/raptor-lake-s/13th-generation-core-processors-datasheet-volume-1-of-2/005/pci-express-support/
1308 * https://gitlab.freedesktop.org/drm/amd/-/issues/2663
1309 */
amdgpu_device_pcie_dynamic_switching_supported(struct amdgpu_device * adev)1310 static bool amdgpu_device_pcie_dynamic_switching_supported(struct amdgpu_device *adev)
1311 {
1312 #if IS_ENABLED(CONFIG_X86)
1313 struct cpuinfo_x86 *c = &cpu_data(0);
1314
1315 /* eGPU change speeds based on USB4 fabric conditions */
1316 if (dev_is_removable(adev->dev))
1317 return true;
1318
1319 if (c->x86_vendor == X86_VENDOR_INTEL)
1320 return false;
1321 #endif
1322 return true;
1323 }
1324
amdgpu_device_aspm_support_quirk(struct amdgpu_device * adev)1325 static bool amdgpu_device_aspm_support_quirk(struct amdgpu_device *adev)
1326 {
1327 /* Enabling ASPM causes randoms hangs on Tahiti and Oland on Zen4.
1328 * It's unclear if this is a platform-specific or GPU-specific issue.
1329 * Disable ASPM on SI for the time being.
1330 */
1331 if (adev->family == AMDGPU_FAMILY_SI)
1332 return true;
1333
1334 #if IS_ENABLED(CONFIG_X86)
1335 struct cpuinfo_x86 *c = &cpu_data(0);
1336
1337 if (c->x86_vendor == X86_VENDOR_INTEL) {
1338 switch (c->x86_model) {
1339 case VFM_MODEL(INTEL_ALDERLAKE):
1340 case VFM_MODEL(INTEL_ALDERLAKE_L):
1341 case VFM_MODEL(INTEL_RAPTORLAKE):
1342 case VFM_MODEL(INTEL_RAPTORLAKE_P):
1343 case VFM_MODEL(INTEL_RAPTORLAKE_S):
1344 case VFM_MODEL(INTEL_TIGERLAKE):
1345 case VFM_MODEL(INTEL_TIGERLAKE_L):
1346 return true;
1347 default:
1348 return false;
1349 }
1350 } else {
1351 return false;
1352 }
1353 #else
1354 return false;
1355 #endif
1356 }
1357
1358 /**
1359 * amdgpu_device_should_use_aspm - check if the device should program ASPM
1360 *
1361 * @adev: amdgpu_device pointer
1362 *
1363 * Confirm whether the module parameter and pcie bridge agree that ASPM should
1364 * be set for this device.
1365 *
1366 * Returns true if it should be used or false if not.
1367 */
amdgpu_device_should_use_aspm(struct amdgpu_device * adev)1368 bool amdgpu_device_should_use_aspm(struct amdgpu_device *adev)
1369 {
1370 switch (amdgpu_aspm) {
1371 case -1:
1372 break;
1373 case 0:
1374 return false;
1375 case 1:
1376 return true;
1377 default:
1378 return false;
1379 }
1380 if (adev->flags & AMD_IS_APU)
1381 return false;
1382 if (amdgpu_device_aspm_support_quirk(adev))
1383 return false;
1384 return pcie_aspm_enabled(adev->pdev);
1385 }
1386
1387 /* if we get transitioned to only one device, take VGA back */
1388 /**
1389 * amdgpu_device_vga_set_decode - enable/disable vga decode
1390 *
1391 * @pdev: PCI device pointer
1392 * @state: enable/disable vga decode
1393 *
1394 * Enable/disable vga decode (all asics).
1395 * Returns VGA resource flags.
1396 */
amdgpu_device_vga_set_decode(struct pci_dev * pdev,bool state)1397 static unsigned int amdgpu_device_vga_set_decode(struct pci_dev *pdev,
1398 bool state)
1399 {
1400 struct amdgpu_device *adev = drm_to_adev(pci_get_drvdata(pdev));
1401
1402 amdgpu_asic_set_vga_state(adev, state);
1403 if (state)
1404 return VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM |
1405 VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
1406 else
1407 return VGA_RSRC_NORMAL_IO | VGA_RSRC_NORMAL_MEM;
1408 }
1409
1410 /**
1411 * amdgpu_device_check_block_size - validate the vm block size
1412 *
1413 * @adev: amdgpu_device pointer
1414 *
1415 * Validates the vm block size specified via module parameter.
1416 * The vm block size defines number of bits in page table versus page directory,
1417 * a page is 4KB so we have 12 bits offset, minimum 9 bits in the
1418 * page table and the remaining bits are in the page directory.
1419 */
amdgpu_device_check_block_size(struct amdgpu_device * adev)1420 static void amdgpu_device_check_block_size(struct amdgpu_device *adev)
1421 {
1422 /* defines number of bits in page table versus page directory,
1423 * a page is 4KB so we have 12 bits offset, minimum 9 bits in the
1424 * page table and the remaining bits are in the page directory
1425 */
1426 if (amdgpu_vm_block_size == -1)
1427 return;
1428
1429 if (amdgpu_vm_block_size < 9) {
1430 dev_warn(adev->dev, "VM page table size (%d) too small\n",
1431 amdgpu_vm_block_size);
1432 amdgpu_vm_block_size = -1;
1433 }
1434 }
1435
1436 /**
1437 * amdgpu_device_check_vm_size - validate the vm size
1438 *
1439 * @adev: amdgpu_device pointer
1440 *
1441 * Validates the vm size in GB specified via module parameter.
1442 * The VM size is the size of the GPU virtual memory space in GB.
1443 */
amdgpu_device_check_vm_size(struct amdgpu_device * adev)1444 static void amdgpu_device_check_vm_size(struct amdgpu_device *adev)
1445 {
1446 /* no need to check the default value */
1447 if (amdgpu_vm_size == -1)
1448 return;
1449
1450 if (amdgpu_vm_size < 1) {
1451 dev_warn(adev->dev, "VM size (%d) too small, min is 1GB\n",
1452 amdgpu_vm_size);
1453 amdgpu_vm_size = -1;
1454 }
1455 }
1456
amdgpu_device_check_smu_prv_buffer_size(struct amdgpu_device * adev)1457 static void amdgpu_device_check_smu_prv_buffer_size(struct amdgpu_device *adev)
1458 {
1459 struct sysinfo si;
1460 bool is_os_64 = (sizeof(void *) == 8);
1461 uint64_t total_memory;
1462 uint64_t dram_size_seven_GB = 0x1B8000000;
1463 uint64_t dram_size_three_GB = 0xB8000000;
1464
1465 if (amdgpu_smu_memory_pool_size == 0)
1466 return;
1467
1468 if (!is_os_64) {
1469 dev_warn(adev->dev, "Not 64-bit OS, feature not supported\n");
1470 goto def_value;
1471 }
1472 si_meminfo(&si);
1473 total_memory = (uint64_t)si.totalram * si.mem_unit;
1474
1475 if ((amdgpu_smu_memory_pool_size == 1) ||
1476 (amdgpu_smu_memory_pool_size == 2)) {
1477 if (total_memory < dram_size_three_GB)
1478 goto def_value1;
1479 } else if ((amdgpu_smu_memory_pool_size == 4) ||
1480 (amdgpu_smu_memory_pool_size == 8)) {
1481 if (total_memory < dram_size_seven_GB)
1482 goto def_value1;
1483 } else {
1484 dev_warn(adev->dev, "Smu memory pool size not supported\n");
1485 goto def_value;
1486 }
1487 adev->pm.smu_prv_buffer_size = amdgpu_smu_memory_pool_size << 28;
1488
1489 return;
1490
1491 def_value1:
1492 dev_warn(adev->dev, "No enough system memory\n");
1493 def_value:
1494 adev->pm.smu_prv_buffer_size = 0;
1495 }
1496
amdgpu_device_init_apu_flags(struct amdgpu_device * adev)1497 static int amdgpu_device_init_apu_flags(struct amdgpu_device *adev)
1498 {
1499 if (!(adev->flags & AMD_IS_APU) ||
1500 adev->asic_type < CHIP_RAVEN)
1501 return 0;
1502
1503 switch (adev->asic_type) {
1504 case CHIP_RAVEN:
1505 if (adev->pdev->device == 0x15dd)
1506 adev->apu_flags |= AMD_APU_IS_RAVEN;
1507 if (adev->pdev->device == 0x15d8)
1508 adev->apu_flags |= AMD_APU_IS_PICASSO;
1509 break;
1510 case CHIP_RENOIR:
1511 if ((adev->pdev->device == 0x1636) ||
1512 (adev->pdev->device == 0x164c))
1513 adev->apu_flags |= AMD_APU_IS_RENOIR;
1514 else
1515 adev->apu_flags |= AMD_APU_IS_GREEN_SARDINE;
1516 break;
1517 case CHIP_VANGOGH:
1518 adev->apu_flags |= AMD_APU_IS_VANGOGH;
1519 break;
1520 case CHIP_YELLOW_CARP:
1521 break;
1522 case CHIP_CYAN_SKILLFISH:
1523 if ((adev->pdev->device == 0x13FE) ||
1524 (adev->pdev->device == 0x143F))
1525 adev->apu_flags |= AMD_APU_IS_CYAN_SKILLFISH2;
1526 break;
1527 default:
1528 break;
1529 }
1530
1531 return 0;
1532 }
1533
1534 /**
1535 * amdgpu_device_check_arguments - validate module params
1536 *
1537 * @adev: amdgpu_device pointer
1538 *
1539 * Validates certain module parameters and updates
1540 * the associated values used by the driver (all asics).
1541 */
amdgpu_device_check_arguments(struct amdgpu_device * adev)1542 static int amdgpu_device_check_arguments(struct amdgpu_device *adev)
1543 {
1544 int i;
1545
1546 if (amdgpu_sched_jobs < 4) {
1547 dev_warn(adev->dev, "sched jobs (%d) must be at least 4\n",
1548 amdgpu_sched_jobs);
1549 amdgpu_sched_jobs = 4;
1550 } else if (!is_power_of_2(amdgpu_sched_jobs)) {
1551 dev_warn(adev->dev, "sched jobs (%d) must be a power of 2\n",
1552 amdgpu_sched_jobs);
1553 amdgpu_sched_jobs = roundup_pow_of_two(amdgpu_sched_jobs);
1554 }
1555
1556 if (amdgpu_gart_size != -1 && amdgpu_gart_size < 32) {
1557 /* gart size must be greater or equal to 32M */
1558 dev_warn(adev->dev, "gart size (%d) too small\n",
1559 amdgpu_gart_size);
1560 amdgpu_gart_size = -1;
1561 }
1562
1563 if (amdgpu_gtt_size != -1 && amdgpu_gtt_size < 32) {
1564 /* gtt size must be greater or equal to 32M */
1565 dev_warn(adev->dev, "gtt size (%d) too small\n",
1566 amdgpu_gtt_size);
1567 amdgpu_gtt_size = -1;
1568 }
1569
1570 /* valid range is between 4 and 9 inclusive */
1571 if (amdgpu_vm_fragment_size != -1 &&
1572 (amdgpu_vm_fragment_size > 9 || amdgpu_vm_fragment_size < 4)) {
1573 dev_warn(adev->dev, "valid range is between 4 and 9\n");
1574 amdgpu_vm_fragment_size = -1;
1575 }
1576
1577 if (amdgpu_sched_hw_submission < 2) {
1578 dev_warn(adev->dev, "sched hw submission jobs (%d) must be at least 2\n",
1579 amdgpu_sched_hw_submission);
1580 amdgpu_sched_hw_submission = 2;
1581 } else if (!is_power_of_2(amdgpu_sched_hw_submission)) {
1582 dev_warn(adev->dev, "sched hw submission jobs (%d) must be a power of 2\n",
1583 amdgpu_sched_hw_submission);
1584 amdgpu_sched_hw_submission = roundup_pow_of_two(amdgpu_sched_hw_submission);
1585 }
1586
1587 if (amdgpu_reset_method < -1 || amdgpu_reset_method > 4) {
1588 dev_warn(adev->dev, "invalid option for reset method, reverting to default\n");
1589 amdgpu_reset_method = -1;
1590 }
1591
1592 amdgpu_device_check_smu_prv_buffer_size(adev);
1593
1594 amdgpu_device_check_vm_size(adev);
1595
1596 amdgpu_device_check_block_size(adev);
1597
1598 adev->firmware.load_type = amdgpu_ucode_get_load_type(adev, amdgpu_fw_load_type);
1599
1600 for (i = 0; i < MAX_XCP; i++) {
1601 switch (amdgpu_enforce_isolation) {
1602 case -1:
1603 case 0:
1604 default:
1605 /* disable */
1606 adev->enforce_isolation[i] = AMDGPU_ENFORCE_ISOLATION_DISABLE;
1607 break;
1608 case 1:
1609 /* enable */
1610 adev->enforce_isolation[i] =
1611 AMDGPU_ENFORCE_ISOLATION_ENABLE;
1612 break;
1613 case 2:
1614 /* enable legacy mode */
1615 adev->enforce_isolation[i] =
1616 AMDGPU_ENFORCE_ISOLATION_ENABLE_LEGACY;
1617 break;
1618 case 3:
1619 /* enable only process isolation without submitting cleaner shader */
1620 adev->enforce_isolation[i] =
1621 AMDGPU_ENFORCE_ISOLATION_NO_CLEANER_SHADER;
1622 break;
1623 }
1624 }
1625
1626 return 0;
1627 }
1628
1629 /**
1630 * amdgpu_switcheroo_set_state - set switcheroo state
1631 *
1632 * @pdev: pci dev pointer
1633 * @state: vga_switcheroo state
1634 *
1635 * Callback for the switcheroo driver. Suspends or resumes
1636 * the asics before or after it is powered up using ACPI methods.
1637 */
amdgpu_switcheroo_set_state(struct pci_dev * pdev,enum vga_switcheroo_state state)1638 static void amdgpu_switcheroo_set_state(struct pci_dev *pdev,
1639 enum vga_switcheroo_state state)
1640 {
1641 struct drm_device *dev = pci_get_drvdata(pdev);
1642 int r;
1643
1644 if (amdgpu_device_supports_px(drm_to_adev(dev)) &&
1645 state == VGA_SWITCHEROO_OFF)
1646 return;
1647
1648 if (state == VGA_SWITCHEROO_ON) {
1649 pr_info("switched on\n");
1650 /* don't suspend or resume card normally */
1651 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
1652
1653 pci_set_power_state(pdev, PCI_D0);
1654 amdgpu_device_load_pci_state(pdev);
1655 r = pci_enable_device(pdev);
1656 if (r)
1657 dev_warn(&pdev->dev, "pci_enable_device failed (%d)\n",
1658 r);
1659 amdgpu_device_resume(dev, true);
1660
1661 dev->switch_power_state = DRM_SWITCH_POWER_ON;
1662 } else {
1663 dev_info(&pdev->dev, "switched off\n");
1664 dev->switch_power_state = DRM_SWITCH_POWER_CHANGING;
1665 amdgpu_device_prepare(dev);
1666 amdgpu_device_suspend(dev, true);
1667 amdgpu_device_cache_pci_state(pdev);
1668 /* Shut down the device */
1669 pci_disable_device(pdev);
1670 pci_set_power_state(pdev, PCI_D3cold);
1671 dev->switch_power_state = DRM_SWITCH_POWER_OFF;
1672 }
1673 }
1674
1675 /**
1676 * amdgpu_switcheroo_can_switch - see if switcheroo state can change
1677 *
1678 * @pdev: pci dev pointer
1679 *
1680 * Callback for the switcheroo driver. Check of the switcheroo
1681 * state can be changed.
1682 * Returns true if the state can be changed, false if not.
1683 */
amdgpu_switcheroo_can_switch(struct pci_dev * pdev)1684 static bool amdgpu_switcheroo_can_switch(struct pci_dev *pdev)
1685 {
1686 struct drm_device *dev = pci_get_drvdata(pdev);
1687
1688 /*
1689 * FIXME: open_count is protected by drm_global_mutex but that would lead to
1690 * locking inversion with the driver load path. And the access here is
1691 * completely racy anyway. So don't bother with locking for now.
1692 */
1693 return atomic_read(&dev->open_count) == 0;
1694 }
1695
1696 static const struct vga_switcheroo_client_ops amdgpu_switcheroo_ops = {
1697 .set_gpu_state = amdgpu_switcheroo_set_state,
1698 .reprobe = NULL,
1699 .can_switch = amdgpu_switcheroo_can_switch,
1700 };
1701
1702 /**
1703 * amdgpu_device_enable_virtual_display - enable virtual display feature
1704 *
1705 * @adev: amdgpu_device pointer
1706 *
1707 * Enabled the virtual display feature if the user has enabled it via
1708 * the module parameter virtual_display. This feature provides a virtual
1709 * display hardware on headless boards or in virtualized environments.
1710 * This function parses and validates the configuration string specified by
1711 * the user and configures the virtual display configuration (number of
1712 * virtual connectors, crtcs, etc.) specified.
1713 */
amdgpu_device_enable_virtual_display(struct amdgpu_device * adev)1714 static void amdgpu_device_enable_virtual_display(struct amdgpu_device *adev)
1715 {
1716 adev->enable_virtual_display = false;
1717
1718 if (amdgpu_virtual_display) {
1719 const char *pci_address_name = pci_name(adev->pdev);
1720 char *pciaddstr, *pciaddstr_tmp, *pciaddname_tmp, *pciaddname;
1721
1722 pciaddstr = kstrdup(amdgpu_virtual_display, GFP_KERNEL);
1723 pciaddstr_tmp = pciaddstr;
1724 while ((pciaddname_tmp = strsep(&pciaddstr_tmp, ";"))) {
1725 pciaddname = strsep(&pciaddname_tmp, ",");
1726 if (!strcmp("all", pciaddname)
1727 || !strcmp(pci_address_name, pciaddname)) {
1728 long num_crtc;
1729 int res = -1;
1730
1731 adev->enable_virtual_display = true;
1732
1733 if (pciaddname_tmp)
1734 res = kstrtol(pciaddname_tmp, 10,
1735 &num_crtc);
1736
1737 if (!res) {
1738 if (num_crtc < 1)
1739 num_crtc = 1;
1740 if (num_crtc > 6)
1741 num_crtc = 6;
1742 adev->mode_info.num_crtc = num_crtc;
1743 } else {
1744 adev->mode_info.num_crtc = 1;
1745 }
1746 break;
1747 }
1748 }
1749
1750 dev_info(
1751 adev->dev,
1752 "virtual display string:%s, %s:virtual_display:%d, num_crtc:%d\n",
1753 amdgpu_virtual_display, pci_address_name,
1754 adev->enable_virtual_display, adev->mode_info.num_crtc);
1755
1756 kfree(pciaddstr);
1757 }
1758 }
1759
amdgpu_device_set_sriov_virtual_display(struct amdgpu_device * adev)1760 void amdgpu_device_set_sriov_virtual_display(struct amdgpu_device *adev)
1761 {
1762 if (amdgpu_sriov_vf(adev) && !adev->enable_virtual_display) {
1763 adev->mode_info.num_crtc = 1;
1764 adev->enable_virtual_display = true;
1765 dev_info(adev->dev, "virtual_display:%d, num_crtc:%d\n",
1766 adev->enable_virtual_display,
1767 adev->mode_info.num_crtc);
1768 }
1769 }
1770
1771 /**
1772 * amdgpu_device_parse_gpu_info_fw - parse gpu info firmware
1773 *
1774 * @adev: amdgpu_device pointer
1775 *
1776 * Parses the asic configuration parameters specified in the gpu info
1777 * firmware and makes them available to the driver for use in configuring
1778 * the asic.
1779 * Returns 0 on success, -EINVAL on failure.
1780 */
amdgpu_device_parse_gpu_info_fw(struct amdgpu_device * adev)1781 static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
1782 {
1783 const char *chip_name;
1784 int err;
1785 const struct gpu_info_firmware_header_v1_0 *hdr;
1786
1787 adev->firmware.gpu_info_fw = NULL;
1788
1789 switch (adev->asic_type) {
1790 default:
1791 return 0;
1792 case CHIP_VEGA10:
1793 chip_name = "vega10";
1794 break;
1795 case CHIP_VEGA12:
1796 chip_name = "vega12";
1797 break;
1798 case CHIP_RAVEN:
1799 if (adev->apu_flags & AMD_APU_IS_RAVEN2)
1800 chip_name = "raven2";
1801 else if (adev->apu_flags & AMD_APU_IS_PICASSO)
1802 chip_name = "picasso";
1803 else
1804 chip_name = "raven";
1805 break;
1806 case CHIP_ARCTURUS:
1807 chip_name = "arcturus";
1808 break;
1809 case CHIP_NAVI12:
1810 if (adev->discovery.bin)
1811 return 0;
1812 chip_name = "navi12";
1813 break;
1814 case CHIP_CYAN_SKILLFISH:
1815 if (adev->discovery.bin)
1816 return 0;
1817 chip_name = "cyan_skillfish";
1818 break;
1819 }
1820
1821 err = amdgpu_ucode_request(adev, &adev->firmware.gpu_info_fw,
1822 AMDGPU_UCODE_OPTIONAL,
1823 "amdgpu/%s_gpu_info.bin", chip_name);
1824 if (err) {
1825 dev_err(adev->dev,
1826 "Failed to get gpu_info firmware \"%s_gpu_info.bin\"\n",
1827 chip_name);
1828 goto out;
1829 }
1830
1831 hdr = (const struct gpu_info_firmware_header_v1_0 *)adev->firmware.gpu_info_fw->data;
1832 amdgpu_ucode_print_gpu_info_hdr(&hdr->header);
1833
1834 switch (hdr->version_major) {
1835 case 1:
1836 {
1837 const struct gpu_info_firmware_v1_0 *gpu_info_fw =
1838 (const struct gpu_info_firmware_v1_0 *)(adev->firmware.gpu_info_fw->data +
1839 le32_to_cpu(hdr->header.ucode_array_offset_bytes));
1840
1841 /*
1842 * Should be dropped when DAL no longer needs it.
1843 */
1844 if (adev->asic_type == CHIP_NAVI12)
1845 goto parse_soc_bounding_box;
1846
1847 adev->gfx.config.max_shader_engines = le32_to_cpu(gpu_info_fw->gc_num_se);
1848 adev->gfx.config.max_cu_per_sh = le32_to_cpu(gpu_info_fw->gc_num_cu_per_sh);
1849 adev->gfx.config.max_sh_per_se = le32_to_cpu(gpu_info_fw->gc_num_sh_per_se);
1850 adev->gfx.config.max_backends_per_se = le32_to_cpu(gpu_info_fw->gc_num_rb_per_se);
1851 adev->gfx.config.max_texture_channel_caches =
1852 le32_to_cpu(gpu_info_fw->gc_num_tccs);
1853 adev->gfx.config.max_gprs = le32_to_cpu(gpu_info_fw->gc_num_gprs);
1854 adev->gfx.config.max_gs_threads = le32_to_cpu(gpu_info_fw->gc_num_max_gs_thds);
1855 adev->gfx.config.gs_vgt_table_depth = le32_to_cpu(gpu_info_fw->gc_gs_table_depth);
1856 adev->gfx.config.gs_prim_buffer_depth = le32_to_cpu(gpu_info_fw->gc_gsprim_buff_depth);
1857 adev->gfx.config.double_offchip_lds_buf =
1858 le32_to_cpu(gpu_info_fw->gc_double_offchip_lds_buffer);
1859 adev->gfx.cu_info.wave_front_size = le32_to_cpu(gpu_info_fw->gc_wave_size);
1860 adev->gfx.cu_info.max_waves_per_simd =
1861 le32_to_cpu(gpu_info_fw->gc_max_waves_per_simd);
1862 adev->gfx.cu_info.max_scratch_slots_per_cu =
1863 le32_to_cpu(gpu_info_fw->gc_max_scratch_slots_per_cu);
1864 adev->gfx.cu_info.lds_size = le32_to_cpu(gpu_info_fw->gc_lds_size);
1865 if (hdr->version_minor >= 1) {
1866 const struct gpu_info_firmware_v1_1 *gpu_info_fw =
1867 (const struct gpu_info_firmware_v1_1 *)(adev->firmware.gpu_info_fw->data +
1868 le32_to_cpu(hdr->header.ucode_array_offset_bytes));
1869 adev->gfx.config.num_sc_per_sh =
1870 le32_to_cpu(gpu_info_fw->num_sc_per_sh);
1871 adev->gfx.config.num_packer_per_sc =
1872 le32_to_cpu(gpu_info_fw->num_packer_per_sc);
1873 }
1874
1875 parse_soc_bounding_box:
1876 /*
1877 * soc bounding box info is not integrated in disocovery table,
1878 * we always need to parse it from gpu info firmware if needed.
1879 */
1880 if (hdr->version_minor == 2) {
1881 const struct gpu_info_firmware_v1_2 *gpu_info_fw =
1882 (const struct gpu_info_firmware_v1_2 *)(adev->firmware.gpu_info_fw->data +
1883 le32_to_cpu(hdr->header.ucode_array_offset_bytes));
1884 adev->dm.soc_bounding_box = &gpu_info_fw->soc_bounding_box;
1885 }
1886 break;
1887 }
1888 default:
1889 dev_err(adev->dev,
1890 "Unsupported gpu_info table %d\n", hdr->header.ucode_version);
1891 err = -EINVAL;
1892 goto out;
1893 }
1894 out:
1895 return err;
1896 }
1897
amdgpu_uid_init(struct amdgpu_device * adev)1898 static void amdgpu_uid_init(struct amdgpu_device *adev)
1899 {
1900 /* Initialize the UID for the device */
1901 adev->uid_info = kzalloc_obj(struct amdgpu_uid);
1902 if (!adev->uid_info) {
1903 dev_warn(adev->dev, "Failed to allocate memory for UID\n");
1904 return;
1905 }
1906 adev->uid_info->adev = adev;
1907 }
1908
amdgpu_uid_fini(struct amdgpu_device * adev)1909 static void amdgpu_uid_fini(struct amdgpu_device *adev)
1910 {
1911 /* Free the UID memory */
1912 kfree(adev->uid_info);
1913 adev->uid_info = NULL;
1914 }
1915
1916 /**
1917 * amdgpu_device_ip_early_init - run early init for hardware IPs
1918 *
1919 * @adev: amdgpu_device pointer
1920 *
1921 * Early initialization pass for hardware IPs. The hardware IPs that make
1922 * up each asic are discovered each IP's early_init callback is run. This
1923 * is the first stage in initializing the asic.
1924 * Returns 0 on success, negative error code on failure.
1925 */
amdgpu_device_ip_early_init(struct amdgpu_device * adev)1926 static int amdgpu_device_ip_early_init(struct amdgpu_device *adev)
1927 {
1928 struct amdgpu_ip_block *ip_block;
1929 struct pci_dev *parent;
1930 bool total, skip_bios;
1931 uint32_t bios_flags;
1932 int i, r;
1933
1934 amdgpu_device_enable_virtual_display(adev);
1935
1936 if (amdgpu_sriov_vf(adev)) {
1937 r = amdgpu_virt_request_full_gpu(adev, true);
1938 if (r)
1939 return r;
1940
1941 r = amdgpu_virt_init_critical_region(adev);
1942 if (r)
1943 return r;
1944 }
1945
1946 switch (adev->asic_type) {
1947 #ifdef CONFIG_DRM_AMDGPU_SI
1948 case CHIP_VERDE:
1949 case CHIP_TAHITI:
1950 case CHIP_PITCAIRN:
1951 case CHIP_OLAND:
1952 case CHIP_HAINAN:
1953 adev->family = AMDGPU_FAMILY_SI;
1954 r = si_set_ip_blocks(adev);
1955 if (r)
1956 return r;
1957 break;
1958 #endif
1959 #ifdef CONFIG_DRM_AMDGPU_CIK
1960 case CHIP_BONAIRE:
1961 case CHIP_HAWAII:
1962 case CHIP_KAVERI:
1963 case CHIP_KABINI:
1964 case CHIP_MULLINS:
1965 if (adev->flags & AMD_IS_APU)
1966 adev->family = AMDGPU_FAMILY_KV;
1967 else
1968 adev->family = AMDGPU_FAMILY_CI;
1969
1970 r = cik_set_ip_blocks(adev);
1971 if (r)
1972 return r;
1973 break;
1974 #endif
1975 case CHIP_TOPAZ:
1976 case CHIP_TONGA:
1977 case CHIP_FIJI:
1978 case CHIP_POLARIS10:
1979 case CHIP_POLARIS11:
1980 case CHIP_POLARIS12:
1981 case CHIP_VEGAM:
1982 case CHIP_CARRIZO:
1983 case CHIP_STONEY:
1984 if (adev->flags & AMD_IS_APU)
1985 adev->family = AMDGPU_FAMILY_CZ;
1986 else
1987 adev->family = AMDGPU_FAMILY_VI;
1988
1989 r = vi_set_ip_blocks(adev);
1990 if (r)
1991 return r;
1992 break;
1993 default:
1994 r = amdgpu_discovery_set_ip_blocks(adev);
1995 if (r) {
1996 adev->num_ip_blocks = 0;
1997 return r;
1998 }
1999 break;
2000 }
2001
2002 /* Check for IP version 9.4.3 with A0 hardware */
2003 if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) &&
2004 !amdgpu_device_get_rev_id(adev)) {
2005 dev_err(adev->dev, "Unsupported A0 hardware\n");
2006 return -ENODEV; /* device unsupported - no device error */
2007 }
2008
2009 if (amdgpu_has_atpx() &&
2010 (amdgpu_is_atpx_hybrid() ||
2011 amdgpu_has_atpx_dgpu_power_cntl()) &&
2012 ((adev->flags & AMD_IS_APU) == 0) &&
2013 !dev_is_removable(&adev->pdev->dev))
2014 adev->flags |= AMD_IS_PX;
2015
2016 if (!(adev->flags & AMD_IS_APU)) {
2017 parent = pcie_find_root_port(adev->pdev);
2018 adev->has_pr3 = parent ? pci_pr3_present(parent) : false;
2019 }
2020
2021 adev->pm.pp_feature = amdgpu_pp_feature_mask;
2022 if (amdgpu_sriov_vf(adev) || sched_policy == KFD_SCHED_POLICY_NO_HWS)
2023 adev->pm.pp_feature &= ~PP_GFXOFF_MASK;
2024 if (amdgpu_sriov_vf(adev) && adev->asic_type == CHIP_SIENNA_CICHLID)
2025 adev->pm.pp_feature &= ~PP_OVERDRIVE_MASK;
2026 if (!amdgpu_device_pcie_dynamic_switching_supported(adev))
2027 adev->pm.pp_feature &= ~PP_PCIE_DPM_MASK;
2028
2029 adev->virt.is_xgmi_node_migrate_enabled = false;
2030 if (amdgpu_sriov_vf(adev)) {
2031 adev->virt.is_xgmi_node_migrate_enabled =
2032 amdgpu_ip_version((adev), GC_HWIP, 0) == IP_VERSION(9, 4, 4);
2033 }
2034
2035 total = true;
2036 for (i = 0; i < adev->num_ip_blocks; i++) {
2037 ip_block = &adev->ip_blocks[i];
2038
2039 if ((amdgpu_ip_block_mask & (1 << i)) == 0) {
2040 dev_warn(adev->dev, "disabled ip block: %d <%s>\n", i,
2041 adev->ip_blocks[i].version->funcs->name);
2042 adev->ip_blocks[i].status.valid = false;
2043 } else if (ip_block->version->funcs->early_init) {
2044 r = ip_block->version->funcs->early_init(ip_block);
2045 if (r == -ENOENT) {
2046 adev->ip_blocks[i].status.valid = false;
2047 } else if (r) {
2048 dev_err(adev->dev,
2049 "early_init of IP block <%s> failed %d\n",
2050 adev->ip_blocks[i].version->funcs->name,
2051 r);
2052 total = false;
2053 } else {
2054 adev->ip_blocks[i].status.valid = true;
2055 }
2056 } else {
2057 adev->ip_blocks[i].status.valid = true;
2058 }
2059 /* get the vbios after the asic_funcs are set up */
2060 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON) {
2061 r = amdgpu_device_parse_gpu_info_fw(adev);
2062 if (r)
2063 return r;
2064
2065 bios_flags = amdgpu_device_get_vbios_flags(adev);
2066 skip_bios = !!(bios_flags & AMDGPU_VBIOS_SKIP);
2067 /* Read BIOS */
2068 if (!skip_bios) {
2069 bool optional =
2070 !!(bios_flags & AMDGPU_VBIOS_OPTIONAL);
2071 if (!amdgpu_get_bios(adev) && !optional)
2072 return -EINVAL;
2073
2074 if (optional && !adev->bios)
2075 dev_info(
2076 adev->dev,
2077 "VBIOS image optional, proceeding without VBIOS image");
2078
2079 if (adev->bios) {
2080 r = amdgpu_atombios_init(adev);
2081 if (r) {
2082 dev_err(adev->dev,
2083 "amdgpu_atombios_init failed\n");
2084 amdgpu_vf_error_put(
2085 adev,
2086 AMDGIM_ERROR_VF_ATOMBIOS_INIT_FAIL,
2087 0, 0);
2088 return r;
2089 }
2090 }
2091 }
2092
2093 /*get pf2vf msg info at it's earliest time*/
2094 if (amdgpu_sriov_vf(adev))
2095 amdgpu_virt_init_data_exchange(adev);
2096
2097 }
2098 }
2099 if (!total)
2100 return -ENODEV;
2101
2102 if (adev->gmc.xgmi.supported)
2103 amdgpu_xgmi_early_init(adev);
2104
2105 if (amdgpu_is_multi_aid(adev))
2106 amdgpu_uid_init(adev);
2107 ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_GFX);
2108 if (ip_block->status.valid != false)
2109 amdgpu_amdkfd_device_probe(adev);
2110
2111 adev->cg_flags &= amdgpu_cg_mask;
2112 adev->pg_flags &= amdgpu_pg_mask;
2113
2114 return 0;
2115 }
2116
amdgpu_device_ip_hw_init_phase1(struct amdgpu_device * adev)2117 static int amdgpu_device_ip_hw_init_phase1(struct amdgpu_device *adev)
2118 {
2119 int i, r;
2120
2121 for (i = 0; i < adev->num_ip_blocks; i++) {
2122 if (!adev->ip_blocks[i].status.sw)
2123 continue;
2124 if (adev->ip_blocks[i].status.hw)
2125 continue;
2126 if (!amdgpu_ip_member_of_hwini(
2127 adev, adev->ip_blocks[i].version->type))
2128 continue;
2129 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
2130 (amdgpu_sriov_vf(adev) && (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP)) ||
2131 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH) {
2132 r = adev->ip_blocks[i].version->funcs->hw_init(&adev->ip_blocks[i]);
2133 if (r) {
2134 dev_err(adev->dev,
2135 "hw_init of IP block <%s> failed %d\n",
2136 adev->ip_blocks[i].version->funcs->name,
2137 r);
2138 return r;
2139 }
2140 adev->ip_blocks[i].status.hw = true;
2141 }
2142 }
2143
2144 return 0;
2145 }
2146
amdgpu_device_ip_hw_init_phase2(struct amdgpu_device * adev)2147 static int amdgpu_device_ip_hw_init_phase2(struct amdgpu_device *adev)
2148 {
2149 int i, r;
2150
2151 for (i = 0; i < adev->num_ip_blocks; i++) {
2152 if (!adev->ip_blocks[i].status.sw)
2153 continue;
2154 if (adev->ip_blocks[i].status.hw)
2155 continue;
2156 if (!amdgpu_ip_member_of_hwini(
2157 adev, adev->ip_blocks[i].version->type))
2158 continue;
2159 r = adev->ip_blocks[i].version->funcs->hw_init(&adev->ip_blocks[i]);
2160 if (r) {
2161 dev_err(adev->dev,
2162 "hw_init of IP block <%s> failed %d\n",
2163 adev->ip_blocks[i].version->funcs->name, r);
2164 return r;
2165 }
2166 adev->ip_blocks[i].status.hw = true;
2167 }
2168
2169 return 0;
2170 }
2171
amdgpu_device_fw_loading(struct amdgpu_device * adev)2172 static int amdgpu_device_fw_loading(struct amdgpu_device *adev)
2173 {
2174 int r = 0;
2175 int i;
2176 uint32_t smu_version;
2177
2178 if (adev->asic_type >= CHIP_VEGA10) {
2179 for (i = 0; i < adev->num_ip_blocks; i++) {
2180 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_PSP)
2181 continue;
2182
2183 if (!amdgpu_ip_member_of_hwini(adev,
2184 AMD_IP_BLOCK_TYPE_PSP))
2185 break;
2186
2187 if (!adev->ip_blocks[i].status.sw)
2188 continue;
2189
2190 /* no need to do the fw loading again if already done*/
2191 if (adev->ip_blocks[i].status.hw == true)
2192 break;
2193
2194 if (amdgpu_in_reset(adev) || adev->in_suspend) {
2195 r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
2196 if (r)
2197 return r;
2198 } else {
2199 r = adev->ip_blocks[i].version->funcs->hw_init(&adev->ip_blocks[i]);
2200 if (r) {
2201 dev_err(adev->dev,
2202 "hw_init of IP block <%s> failed %d\n",
2203 adev->ip_blocks[i]
2204 .version->funcs->name,
2205 r);
2206 return r;
2207 }
2208 adev->ip_blocks[i].status.hw = true;
2209 }
2210 break;
2211 }
2212 }
2213
2214 if (!amdgpu_sriov_vf(adev) || adev->asic_type == CHIP_TONGA)
2215 r = amdgpu_pm_load_smu_firmware(adev, &smu_version);
2216
2217 return r;
2218 }
2219
amdgpu_device_init_schedulers(struct amdgpu_device * adev)2220 static int amdgpu_device_init_schedulers(struct amdgpu_device *adev)
2221 {
2222 struct drm_sched_init_args args = {
2223 .ops = &amdgpu_sched_ops,
2224 .num_rqs = DRM_SCHED_PRIORITY_COUNT,
2225 .timeout_wq = adev->reset_domain->wq,
2226 .dev = adev->dev,
2227 };
2228 long timeout;
2229 int r, i;
2230
2231 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
2232 struct amdgpu_ring *ring = adev->rings[i];
2233
2234 /* No need to setup the GPU scheduler for rings that don't need it */
2235 if (!ring || ring->no_scheduler)
2236 continue;
2237
2238 switch (ring->funcs->type) {
2239 case AMDGPU_RING_TYPE_GFX:
2240 timeout = adev->gfx_timeout;
2241 break;
2242 case AMDGPU_RING_TYPE_COMPUTE:
2243 timeout = adev->compute_timeout;
2244 break;
2245 case AMDGPU_RING_TYPE_SDMA:
2246 timeout = adev->sdma_timeout;
2247 break;
2248 default:
2249 timeout = adev->video_timeout;
2250 break;
2251 }
2252
2253 args.timeout = timeout;
2254 args.credit_limit = ring->num_hw_submission;
2255 args.score = ring->sched_score;
2256 args.name = ring->name;
2257
2258 r = drm_sched_init(&ring->sched, &args);
2259 if (r) {
2260 dev_err(adev->dev,
2261 "Failed to create scheduler on ring %s.\n",
2262 ring->name);
2263 return r;
2264 }
2265 r = amdgpu_uvd_entity_init(adev, ring);
2266 if (r) {
2267 dev_err(adev->dev,
2268 "Failed to create UVD scheduling entity on ring %s.\n",
2269 ring->name);
2270 return r;
2271 }
2272 r = amdgpu_vce_entity_init(adev, ring);
2273 if (r) {
2274 dev_err(adev->dev,
2275 "Failed to create VCE scheduling entity on ring %s.\n",
2276 ring->name);
2277 return r;
2278 }
2279 }
2280
2281 if (adev->xcp_mgr)
2282 amdgpu_xcp_update_partition_sched_list(adev);
2283
2284 return 0;
2285 }
2286
2287
2288 /**
2289 * amdgpu_device_ip_init - run init for hardware IPs
2290 *
2291 * @adev: amdgpu_device pointer
2292 *
2293 * Main initialization pass for hardware IPs. The list of all the hardware
2294 * IPs that make up the asic is walked and the sw_init and hw_init callbacks
2295 * are run. sw_init initializes the software state associated with each IP
2296 * and hw_init initializes the hardware associated with each IP.
2297 * Returns 0 on success, negative error code on failure.
2298 */
amdgpu_device_ip_init(struct amdgpu_device * adev)2299 static int amdgpu_device_ip_init(struct amdgpu_device *adev)
2300 {
2301 bool init_badpage;
2302 int i, r;
2303
2304 r = amdgpu_ras_init(adev);
2305 if (r)
2306 return r;
2307
2308 for (i = 0; i < adev->num_ip_blocks; i++) {
2309 if (!adev->ip_blocks[i].status.valid)
2310 continue;
2311 if (adev->ip_blocks[i].version->funcs->sw_init) {
2312 r = adev->ip_blocks[i].version->funcs->sw_init(&adev->ip_blocks[i]);
2313 if (r) {
2314 dev_err(adev->dev,
2315 "sw_init of IP block <%s> failed %d\n",
2316 adev->ip_blocks[i].version->funcs->name,
2317 r);
2318 goto init_failed;
2319 }
2320 }
2321 adev->ip_blocks[i].status.sw = true;
2322
2323 if (!amdgpu_ip_member_of_hwini(
2324 adev, adev->ip_blocks[i].version->type))
2325 continue;
2326
2327 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON) {
2328 /* need to do common hw init early so everything is set up for gmc */
2329 r = adev->ip_blocks[i].version->funcs->hw_init(&adev->ip_blocks[i]);
2330 if (r) {
2331 dev_err(adev->dev, "hw_init %d failed %d\n", i,
2332 r);
2333 goto init_failed;
2334 }
2335 adev->ip_blocks[i].status.hw = true;
2336 } else if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
2337 /* need to do gmc hw init early so we can allocate gpu mem */
2338 /* Try to reserve bad pages early */
2339 if (amdgpu_sriov_vf(adev))
2340 amdgpu_virt_exchange_data(adev);
2341
2342 r = amdgpu_device_mem_scratch_init(adev);
2343 if (r) {
2344 dev_err(adev->dev,
2345 "amdgpu_mem_scratch_init failed %d\n",
2346 r);
2347 goto init_failed;
2348 }
2349 r = adev->ip_blocks[i].version->funcs->hw_init(&adev->ip_blocks[i]);
2350 if (r) {
2351 dev_err(adev->dev, "hw_init %d failed %d\n", i,
2352 r);
2353 goto init_failed;
2354 }
2355 r = amdgpu_device_wb_init(adev);
2356 if (r) {
2357 dev_err(adev->dev,
2358 "amdgpu_device_wb_init failed %d\n", r);
2359 goto init_failed;
2360 }
2361 adev->ip_blocks[i].status.hw = true;
2362
2363 /* right after GMC hw init, we create CSA */
2364 if (adev->gfx.mcbp) {
2365 r = amdgpu_allocate_static_csa(adev, &adev->virt.csa_obj,
2366 AMDGPU_GEM_DOMAIN_VRAM |
2367 AMDGPU_GEM_DOMAIN_GTT,
2368 AMDGPU_CSA_SIZE);
2369 if (r) {
2370 dev_err(adev->dev,
2371 "allocate CSA failed %d\n", r);
2372 goto init_failed;
2373 }
2374 }
2375
2376 r = amdgpu_seq64_init(adev);
2377 if (r) {
2378 dev_err(adev->dev, "allocate seq64 failed %d\n",
2379 r);
2380 goto init_failed;
2381 }
2382 }
2383 }
2384
2385 if (amdgpu_sriov_vf(adev))
2386 amdgpu_virt_init_data_exchange(adev);
2387
2388 r = amdgpu_ib_pool_init(adev);
2389 if (r) {
2390 dev_err(adev->dev, "IB initialization failed (%d).\n", r);
2391 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_IB_INIT_FAIL, 0, r);
2392 goto init_failed;
2393 }
2394
2395 r = amdgpu_ucode_create_bo(adev); /* create ucode bo when sw_init complete*/
2396 if (r)
2397 goto init_failed;
2398
2399 r = amdgpu_device_ip_hw_init_phase1(adev);
2400 if (r)
2401 goto init_failed;
2402
2403 r = amdgpu_device_fw_loading(adev);
2404 if (r)
2405 goto init_failed;
2406
2407 r = amdgpu_device_ip_hw_init_phase2(adev);
2408 if (r)
2409 goto init_failed;
2410
2411 /*
2412 * retired pages will be loaded from eeprom and reserved here,
2413 * it should be called after amdgpu_device_ip_hw_init_phase2 since
2414 * for some ASICs the RAS EEPROM code relies on SMU fully functioning
2415 * for I2C communication which only true at this point.
2416 *
2417 * amdgpu_ras_recovery_init may fail, but the upper only cares the
2418 * failure from bad gpu situation and stop amdgpu init process
2419 * accordingly. For other failed cases, it will still release all
2420 * the resource and print error message, rather than returning one
2421 * negative value to upper level.
2422 *
2423 * Note: theoretically, this should be called before all vram allocations
2424 * to protect retired page from abusing
2425 */
2426 init_badpage = (adev->init_lvl->level != AMDGPU_INIT_LEVEL_MINIMAL_XGMI);
2427 r = amdgpu_ras_recovery_init(adev, init_badpage);
2428 if (r)
2429 goto init_failed;
2430
2431 /**
2432 * In case of XGMI grab extra reference for reset domain for this device
2433 */
2434 if (adev->gmc.xgmi.num_physical_nodes > 1) {
2435 if (amdgpu_xgmi_add_device(adev) == 0) {
2436 if (!amdgpu_sriov_vf(adev)) {
2437 struct amdgpu_hive_info *hive = amdgpu_get_xgmi_hive(adev);
2438
2439 if (WARN_ON(!hive)) {
2440 r = -ENOENT;
2441 goto init_failed;
2442 }
2443
2444 if (!hive->reset_domain ||
2445 !amdgpu_reset_get_reset_domain(hive->reset_domain)) {
2446 r = -ENOENT;
2447 amdgpu_put_xgmi_hive(hive);
2448 goto init_failed;
2449 }
2450
2451 /* Drop the early temporary reset domain we created for device */
2452 amdgpu_reset_put_reset_domain(adev->reset_domain);
2453 adev->reset_domain = hive->reset_domain;
2454 amdgpu_put_xgmi_hive(hive);
2455 }
2456 }
2457 }
2458
2459 r = amdgpu_device_init_schedulers(adev);
2460 if (r)
2461 goto init_failed;
2462
2463 amdgpu_ttm_set_buffer_funcs_status(adev, true);
2464
2465 /* Don't init kfd if whole hive need to be reset during init */
2466 if (adev->init_lvl->level != AMDGPU_INIT_LEVEL_MINIMAL_XGMI) {
2467 amdgpu_amdkfd_device_init(adev);
2468 }
2469
2470 amdgpu_fru_get_product_info(adev);
2471
2472 r = amdgpu_cper_init(adev);
2473
2474 init_failed:
2475
2476 return r;
2477 }
2478
2479 /**
2480 * amdgpu_device_fill_reset_magic - writes reset magic to gart pointer
2481 *
2482 * @adev: amdgpu_device pointer
2483 *
2484 * Writes a reset magic value to the gart pointer in VRAM. The driver calls
2485 * this function before a GPU reset. If the value is retained after a
2486 * GPU reset, VRAM has not been lost. Some GPU resets may destroy VRAM contents.
2487 */
amdgpu_device_fill_reset_magic(struct amdgpu_device * adev)2488 static void amdgpu_device_fill_reset_magic(struct amdgpu_device *adev)
2489 {
2490 memcpy(adev->reset_magic, adev->gart.ptr, AMDGPU_RESET_MAGIC_NUM);
2491 }
2492
2493 /**
2494 * amdgpu_device_check_vram_lost - check if vram is valid
2495 *
2496 * @adev: amdgpu_device pointer
2497 *
2498 * Checks the reset magic value written to the gart pointer in VRAM.
2499 * The driver calls this after a GPU reset to see if the contents of
2500 * VRAM is lost or now.
2501 * returns true if vram is lost, false if not.
2502 */
amdgpu_device_check_vram_lost(struct amdgpu_device * adev)2503 static bool amdgpu_device_check_vram_lost(struct amdgpu_device *adev)
2504 {
2505 if (memcmp(adev->gart.ptr, adev->reset_magic,
2506 AMDGPU_RESET_MAGIC_NUM))
2507 return true;
2508
2509 if (!amdgpu_in_reset(adev))
2510 return false;
2511
2512 /*
2513 * For all ASICs with baco/mode1 reset, the VRAM is
2514 * always assumed to be lost.
2515 */
2516 switch (amdgpu_asic_reset_method(adev)) {
2517 case AMD_RESET_METHOD_LEGACY:
2518 case AMD_RESET_METHOD_LINK:
2519 case AMD_RESET_METHOD_BACO:
2520 case AMD_RESET_METHOD_MODE1:
2521 return true;
2522 default:
2523 return false;
2524 }
2525 }
2526
2527 /**
2528 * amdgpu_device_set_cg_state - set clockgating for amdgpu device
2529 *
2530 * @adev: amdgpu_device pointer
2531 * @state: clockgating state (gate or ungate)
2532 *
2533 * The list of all the hardware IPs that make up the asic is walked and the
2534 * set_clockgating_state callbacks are run.
2535 * Late initialization pass enabling clockgating for hardware IPs.
2536 * Fini or suspend, pass disabling clockgating for hardware IPs.
2537 * Returns 0 on success, negative error code on failure.
2538 */
2539
amdgpu_device_set_cg_state(struct amdgpu_device * adev,enum amd_clockgating_state state)2540 int amdgpu_device_set_cg_state(struct amdgpu_device *adev,
2541 enum amd_clockgating_state state)
2542 {
2543 int i, j, r;
2544
2545 if (amdgpu_emu_mode == 1)
2546 return 0;
2547
2548 for (j = 0; j < adev->num_ip_blocks; j++) {
2549 i = state == AMD_CG_STATE_GATE ? j : adev->num_ip_blocks - j - 1;
2550 if (!adev->ip_blocks[i].status.late_initialized)
2551 continue;
2552 if (!adev->ip_blocks[i].version)
2553 continue;
2554 /* skip CG for GFX, SDMA on S0ix */
2555 if (adev->in_s0ix &&
2556 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX ||
2557 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SDMA))
2558 continue;
2559 /* skip CG for VCE/UVD, it's handled specially */
2560 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD &&
2561 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE &&
2562 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCN &&
2563 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_JPEG &&
2564 adev->ip_blocks[i].version->funcs->set_clockgating_state) {
2565 /* enable clockgating to save power */
2566 r = adev->ip_blocks[i].version->funcs->set_clockgating_state(&adev->ip_blocks[i],
2567 state);
2568 if (r) {
2569 dev_err(adev->dev,
2570 "set_clockgating_state(gate) of IP block <%s> failed %d\n",
2571 adev->ip_blocks[i].version->funcs->name,
2572 r);
2573 return r;
2574 }
2575 }
2576 }
2577
2578 return 0;
2579 }
2580
amdgpu_device_set_pg_state(struct amdgpu_device * adev,enum amd_powergating_state state)2581 int amdgpu_device_set_pg_state(struct amdgpu_device *adev,
2582 enum amd_powergating_state state)
2583 {
2584 int i, j, r;
2585
2586 if (amdgpu_emu_mode == 1)
2587 return 0;
2588
2589 for (j = 0; j < adev->num_ip_blocks; j++) {
2590 i = state == AMD_PG_STATE_GATE ? j : adev->num_ip_blocks - j - 1;
2591 if (!adev->ip_blocks[i].status.late_initialized)
2592 continue;
2593 if (!adev->ip_blocks[i].version)
2594 continue;
2595 /* skip PG for GFX, SDMA on S0ix */
2596 if (adev->in_s0ix &&
2597 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX ||
2598 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SDMA))
2599 continue;
2600 /* skip CG for VCE/UVD, it's handled specially */
2601 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_UVD &&
2602 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCE &&
2603 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_VCN &&
2604 adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_JPEG &&
2605 adev->ip_blocks[i].version->funcs->set_powergating_state) {
2606 /* enable powergating to save power */
2607 r = adev->ip_blocks[i].version->funcs->set_powergating_state(&adev->ip_blocks[i],
2608 state);
2609 if (r) {
2610 dev_err(adev->dev,
2611 "set_powergating_state(gate) of IP block <%s> failed %d\n",
2612 adev->ip_blocks[i].version->funcs->name,
2613 r);
2614 return r;
2615 }
2616 }
2617 }
2618 return 0;
2619 }
2620
amdgpu_device_enable_mgpu_fan_boost(void)2621 static int amdgpu_device_enable_mgpu_fan_boost(void)
2622 {
2623 struct amdgpu_gpu_instance *gpu_ins;
2624 struct amdgpu_device *adev;
2625 int i, ret = 0;
2626
2627 mutex_lock(&mgpu_info.mutex);
2628
2629 /*
2630 * MGPU fan boost feature should be enabled
2631 * only when there are two or more dGPUs in
2632 * the system
2633 */
2634 if (mgpu_info.num_dgpu < 2)
2635 goto out;
2636
2637 for (i = 0; i < mgpu_info.num_dgpu; i++) {
2638 gpu_ins = &(mgpu_info.gpu_ins[i]);
2639 adev = gpu_ins->adev;
2640 if (!(adev->flags & AMD_IS_APU || amdgpu_sriov_multi_vf_mode(adev)) &&
2641 !gpu_ins->mgpu_fan_enabled) {
2642 ret = amdgpu_dpm_enable_mgpu_fan_boost(adev);
2643 if (ret)
2644 break;
2645
2646 gpu_ins->mgpu_fan_enabled = 1;
2647 }
2648 }
2649
2650 out:
2651 mutex_unlock(&mgpu_info.mutex);
2652
2653 return ret;
2654 }
2655
2656 /**
2657 * amdgpu_device_ip_late_init - run late init for hardware IPs
2658 *
2659 * @adev: amdgpu_device pointer
2660 *
2661 * Late initialization pass for hardware IPs. The list of all the hardware
2662 * IPs that make up the asic is walked and the late_init callbacks are run.
2663 * late_init covers any special initialization that an IP requires
2664 * after all of the have been initialized or something that needs to happen
2665 * late in the init process.
2666 * Returns 0 on success, negative error code on failure.
2667 */
amdgpu_device_ip_late_init(struct amdgpu_device * adev)2668 static int amdgpu_device_ip_late_init(struct amdgpu_device *adev)
2669 {
2670 struct amdgpu_gpu_instance *gpu_instance;
2671 int i = 0, r;
2672
2673 for (i = 0; i < adev->num_ip_blocks; i++) {
2674 if (!adev->ip_blocks[i].status.hw)
2675 continue;
2676 if (adev->ip_blocks[i].version->funcs->late_init) {
2677 r = adev->ip_blocks[i].version->funcs->late_init(&adev->ip_blocks[i]);
2678 if (r) {
2679 dev_err(adev->dev,
2680 "late_init of IP block <%s> failed %d\n",
2681 adev->ip_blocks[i].version->funcs->name,
2682 r);
2683 return r;
2684 }
2685 }
2686 adev->ip_blocks[i].status.late_initialized = true;
2687 }
2688
2689 r = amdgpu_ras_late_init(adev);
2690 if (r) {
2691 dev_err(adev->dev, "amdgpu_ras_late_init failed %d", r);
2692 return r;
2693 }
2694
2695 if (!amdgpu_reset_in_recovery(adev))
2696 amdgpu_ras_set_error_query_ready(adev, true);
2697
2698 amdgpu_device_set_cg_state(adev, AMD_CG_STATE_GATE);
2699 amdgpu_device_set_pg_state(adev, AMD_PG_STATE_GATE);
2700
2701 amdgpu_device_fill_reset_magic(adev);
2702
2703 r = amdgpu_device_enable_mgpu_fan_boost();
2704 if (r)
2705 dev_err(adev->dev, "enable mgpu fan boost failed (%d).\n", r);
2706
2707 /* For passthrough configuration on arcturus and aldebaran, enable special handling SBR */
2708 if (amdgpu_passthrough(adev) &&
2709 ((adev->asic_type == CHIP_ARCTURUS && adev->gmc.xgmi.num_physical_nodes > 1) ||
2710 adev->asic_type == CHIP_ALDEBARAN))
2711 amdgpu_dpm_handle_passthrough_sbr(adev, true);
2712
2713 if (adev->gmc.xgmi.num_physical_nodes > 1) {
2714 mutex_lock(&mgpu_info.mutex);
2715
2716 /*
2717 * Reset device p-state to low as this was booted with high.
2718 *
2719 * This should be performed only after all devices from the same
2720 * hive get initialized.
2721 *
2722 * However, it's unknown how many device in the hive in advance.
2723 * As this is counted one by one during devices initializations.
2724 *
2725 * So, we wait for all XGMI interlinked devices initialized.
2726 * This may bring some delays as those devices may come from
2727 * different hives. But that should be OK.
2728 */
2729 if (mgpu_info.num_dgpu == adev->gmc.xgmi.num_physical_nodes) {
2730 for (i = 0; i < mgpu_info.num_gpu; i++) {
2731 gpu_instance = &(mgpu_info.gpu_ins[i]);
2732 if (gpu_instance->adev->flags & AMD_IS_APU)
2733 continue;
2734
2735 r = amdgpu_xgmi_set_pstate(gpu_instance->adev,
2736 AMDGPU_XGMI_PSTATE_MIN);
2737 if (r) {
2738 dev_err(adev->dev,
2739 "pstate setting failed (%d).\n",
2740 r);
2741 break;
2742 }
2743 }
2744 }
2745
2746 mutex_unlock(&mgpu_info.mutex);
2747 }
2748
2749 return 0;
2750 }
2751
amdgpu_ip_block_hw_fini(struct amdgpu_ip_block * ip_block)2752 static void amdgpu_ip_block_hw_fini(struct amdgpu_ip_block *ip_block)
2753 {
2754 struct amdgpu_device *adev = ip_block->adev;
2755 int r;
2756
2757 if (!ip_block->version->funcs->hw_fini) {
2758 dev_err(adev->dev, "hw_fini of IP block <%s> not defined\n",
2759 ip_block->version->funcs->name);
2760 } else {
2761 r = ip_block->version->funcs->hw_fini(ip_block);
2762 /* XXX handle errors */
2763 if (r) {
2764 dev_dbg(adev->dev,
2765 "hw_fini of IP block <%s> failed %d\n",
2766 ip_block->version->funcs->name, r);
2767 }
2768 }
2769
2770 ip_block->status.hw = false;
2771 }
2772
2773 /**
2774 * amdgpu_device_smu_fini_early - smu hw_fini wrapper
2775 *
2776 * @adev: amdgpu_device pointer
2777 *
2778 * For ASICs need to disable SMC first
2779 */
amdgpu_device_smu_fini_early(struct amdgpu_device * adev)2780 static void amdgpu_device_smu_fini_early(struct amdgpu_device *adev)
2781 {
2782 int i;
2783
2784 if (amdgpu_ip_version(adev, GC_HWIP, 0) > IP_VERSION(9, 0, 0))
2785 return;
2786
2787 for (i = 0; i < adev->num_ip_blocks; i++) {
2788 if (!adev->ip_blocks[i].status.hw)
2789 continue;
2790 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) {
2791 amdgpu_ip_block_hw_fini(&adev->ip_blocks[i]);
2792 break;
2793 }
2794 }
2795 }
2796
amdgpu_device_ip_fini_early(struct amdgpu_device * adev)2797 static int amdgpu_device_ip_fini_early(struct amdgpu_device *adev)
2798 {
2799 int i, r;
2800
2801 for (i = 0; i < adev->num_ip_blocks; i++) {
2802 if (!adev->ip_blocks[i].version)
2803 continue;
2804 if (!adev->ip_blocks[i].version->funcs->early_fini)
2805 continue;
2806
2807 r = adev->ip_blocks[i].version->funcs->early_fini(&adev->ip_blocks[i]);
2808 if (r) {
2809 dev_dbg(adev->dev,
2810 "early_fini of IP block <%s> failed %d\n",
2811 adev->ip_blocks[i].version->funcs->name, r);
2812 }
2813 }
2814
2815 amdgpu_amdkfd_suspend(adev, true);
2816 amdgpu_amdkfd_teardown_processes(adev);
2817 amdgpu_userq_suspend(adev);
2818
2819 /* Workaround for ASICs need to disable SMC first */
2820 amdgpu_device_smu_fini_early(adev);
2821
2822 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2823 if (!adev->ip_blocks[i].status.hw)
2824 continue;
2825
2826 amdgpu_ip_block_hw_fini(&adev->ip_blocks[i]);
2827 }
2828
2829 if (amdgpu_sriov_vf(adev)) {
2830 if (amdgpu_virt_release_full_gpu(adev, false))
2831 dev_err(adev->dev,
2832 "failed to release exclusive mode on fini\n");
2833 }
2834
2835 /*
2836 * Driver reload on the APU can fail due to firmware validation because
2837 * the PSP is always running, as it is shared across the whole SoC.
2838 * This same issue does not occur on dGPU because it has a mechanism
2839 * that checks whether the PSP is running. A solution for those issues
2840 * in the APU is to trigger a GPU reset, but this should be done during
2841 * the unload phase to avoid adding boot latency and screen flicker.
2842 * GFX V11 has GC block as default off IP. Every time AMDGPU driver sends
2843 * a request to PMFW to unload MP1, PMFW will put GC in reset and power down
2844 * the voltage. Hence, skipping reset for APUs with GFX V11 or later.
2845 */
2846 if ((adev->flags & AMD_IS_APU) && !adev->gmc.is_app_apu &&
2847 amdgpu_ip_version(adev, GC_HWIP, 0) < IP_VERSION(11, 0, 0)) {
2848 r = amdgpu_asic_reset(adev);
2849 if (r)
2850 dev_err(adev->dev, "asic reset on %s failed\n", __func__);
2851 }
2852
2853 return 0;
2854 }
2855
2856 /**
2857 * amdgpu_device_ip_fini - run fini for hardware IPs
2858 *
2859 * @adev: amdgpu_device pointer
2860 *
2861 * Main teardown pass for hardware IPs. The list of all the hardware
2862 * IPs that make up the asic is walked and the hw_fini and sw_fini callbacks
2863 * are run. hw_fini tears down the hardware associated with each IP
2864 * and sw_fini tears down any software state associated with each IP.
2865 * Returns 0 on success, negative error code on failure.
2866 */
amdgpu_device_ip_fini(struct amdgpu_device * adev)2867 static int amdgpu_device_ip_fini(struct amdgpu_device *adev)
2868 {
2869 int i, r;
2870
2871 amdgpu_cper_fini(adev);
2872
2873 if (amdgpu_sriov_vf(adev) && adev->virt.ras_init_done)
2874 amdgpu_virt_release_ras_err_handler_data(adev);
2875
2876 if (adev->gmc.xgmi.num_physical_nodes > 1)
2877 amdgpu_xgmi_remove_device(adev);
2878
2879 amdgpu_amdkfd_device_fini_sw(adev);
2880
2881 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2882 if (!adev->ip_blocks[i].status.sw)
2883 continue;
2884
2885 if (!adev->ip_blocks[i].version)
2886 continue;
2887 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) {
2888 amdgpu_ucode_free_bo(adev);
2889 amdgpu_free_static_csa(&adev->virt.csa_obj);
2890 amdgpu_device_wb_fini(adev);
2891 amdgpu_device_mem_scratch_fini(adev);
2892 amdgpu_ib_pool_fini(adev);
2893 amdgpu_seq64_fini(adev);
2894 amdgpu_doorbell_fini(adev);
2895 }
2896 if (adev->ip_blocks[i].version->funcs->sw_fini) {
2897 r = adev->ip_blocks[i].version->funcs->sw_fini(&adev->ip_blocks[i]);
2898 /* XXX handle errors */
2899 if (r) {
2900 dev_dbg(adev->dev,
2901 "sw_fini of IP block <%s> failed %d\n",
2902 adev->ip_blocks[i].version->funcs->name,
2903 r);
2904 }
2905 }
2906 adev->ip_blocks[i].status.sw = false;
2907 adev->ip_blocks[i].status.valid = false;
2908 }
2909
2910 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2911 if (!adev->ip_blocks[i].status.late_initialized)
2912 continue;
2913 if (!adev->ip_blocks[i].version)
2914 continue;
2915 if (adev->ip_blocks[i].version->funcs->late_fini)
2916 adev->ip_blocks[i].version->funcs->late_fini(&adev->ip_blocks[i]);
2917 adev->ip_blocks[i].status.late_initialized = false;
2918 }
2919
2920 amdgpu_ras_fini(adev);
2921 amdgpu_uid_fini(adev);
2922
2923 return 0;
2924 }
2925
2926 /**
2927 * amdgpu_device_delayed_init_work_handler - work handler for IB tests
2928 *
2929 * @work: work_struct.
2930 */
amdgpu_device_delayed_init_work_handler(struct work_struct * work)2931 static void amdgpu_device_delayed_init_work_handler(struct work_struct *work)
2932 {
2933 struct amdgpu_device *adev =
2934 container_of(work, struct amdgpu_device, delayed_init_work.work);
2935 int r;
2936
2937 r = amdgpu_ib_ring_tests(adev);
2938 if (r)
2939 dev_err(adev->dev, "ib ring test failed (%d).\n", r);
2940 }
2941
amdgpu_device_delay_enable_gfx_off(struct work_struct * work)2942 static void amdgpu_device_delay_enable_gfx_off(struct work_struct *work)
2943 {
2944 struct amdgpu_device *adev =
2945 container_of(work, struct amdgpu_device, gfx.gfx_off_delay_work.work);
2946
2947 WARN_ON_ONCE(adev->gfx.gfx_off_state);
2948 WARN_ON_ONCE(adev->gfx.gfx_off_req_count);
2949
2950 if (!amdgpu_dpm_set_powergating_by_smu(adev, AMD_IP_BLOCK_TYPE_GFX, true, 0))
2951 adev->gfx.gfx_off_state = true;
2952 }
2953
2954 /**
2955 * amdgpu_device_ip_suspend_phase1 - run suspend for hardware IPs (phase 1)
2956 *
2957 * @adev: amdgpu_device pointer
2958 *
2959 * Main suspend function for hardware IPs. The list of all the hardware
2960 * IPs that make up the asic is walked, clockgating is disabled and the
2961 * suspend callbacks are run. suspend puts the hardware and software state
2962 * in each IP into a state suitable for suspend.
2963 * Returns 0 on success, negative error code on failure.
2964 */
amdgpu_device_ip_suspend_phase1(struct amdgpu_device * adev)2965 static int amdgpu_device_ip_suspend_phase1(struct amdgpu_device *adev)
2966 {
2967 int i, r, rec;
2968
2969 amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
2970 amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
2971
2972 /*
2973 * Per PMFW team's suggestion, driver needs to handle gfxoff
2974 * and df cstate features disablement for gpu reset(e.g. Mode1Reset)
2975 * scenario. Add the missing df cstate disablement here.
2976 */
2977 if (amdgpu_dpm_set_df_cstate(adev, DF_CSTATE_DISALLOW))
2978 dev_warn(adev->dev, "Failed to disallow df cstate");
2979
2980 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
2981 if (!adev->ip_blocks[i].status.valid)
2982 continue;
2983
2984 /* displays are handled separately */
2985 if (adev->ip_blocks[i].version->type != AMD_IP_BLOCK_TYPE_DCE)
2986 continue;
2987
2988 r = amdgpu_ip_block_suspend(&adev->ip_blocks[i]);
2989 if (r)
2990 goto unwind;
2991 }
2992
2993 return 0;
2994 unwind:
2995 rec = amdgpu_device_ip_resume_phase3(adev);
2996 if (rec)
2997 dev_err(adev->dev,
2998 "amdgpu_device_ip_resume_phase3 failed during unwind: %d\n",
2999 rec);
3000
3001 amdgpu_dpm_set_df_cstate(adev, DF_CSTATE_ALLOW);
3002
3003 amdgpu_device_set_pg_state(adev, AMD_PG_STATE_GATE);
3004 amdgpu_device_set_cg_state(adev, AMD_CG_STATE_GATE);
3005
3006 return r;
3007 }
3008
3009 /**
3010 * amdgpu_device_ip_suspend_phase2 - run suspend for hardware IPs (phase 2)
3011 *
3012 * @adev: amdgpu_device pointer
3013 *
3014 * Main suspend function for hardware IPs. The list of all the hardware
3015 * IPs that make up the asic is walked, clockgating is disabled and the
3016 * suspend callbacks are run. suspend puts the hardware and software state
3017 * in each IP into a state suitable for suspend.
3018 * Returns 0 on success, negative error code on failure.
3019 */
amdgpu_device_ip_suspend_phase2(struct amdgpu_device * adev)3020 static int amdgpu_device_ip_suspend_phase2(struct amdgpu_device *adev)
3021 {
3022 int i, r, rec;
3023
3024 if (adev->in_s0ix)
3025 amdgpu_dpm_gfx_state_change(adev, sGpuChangeState_D3Entry);
3026
3027 for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
3028 if (!adev->ip_blocks[i].status.valid)
3029 continue;
3030 /* displays are handled in phase1 */
3031 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE)
3032 continue;
3033 /* PSP lost connection when err_event_athub occurs */
3034 if (amdgpu_ras_intr_triggered() &&
3035 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP) {
3036 adev->ip_blocks[i].status.hw = false;
3037 continue;
3038 }
3039
3040 /* skip unnecessary suspend if we do not initialize them yet */
3041 if (!amdgpu_ip_member_of_hwini(
3042 adev, adev->ip_blocks[i].version->type))
3043 continue;
3044
3045 /* Since we skip suspend for S0i3, we need to cancel the delayed
3046 * idle work here as the suspend callback never gets called.
3047 */
3048 if (adev->in_s0ix &&
3049 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX &&
3050 amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(10, 0, 0))
3051 cancel_delayed_work_sync(&adev->gfx.idle_work);
3052 /* skip suspend of gfx/mes and psp for S0ix
3053 * gfx is in gfxoff state, so on resume it will exit gfxoff just
3054 * like at runtime. PSP is also part of the always on hardware
3055 * so no need to suspend it.
3056 */
3057 if (adev->in_s0ix &&
3058 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP ||
3059 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GFX ||
3060 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_MES))
3061 continue;
3062
3063 /* SDMA 5.x+ is part of GFX power domain so it's covered by GFXOFF */
3064 if (adev->in_s0ix &&
3065 (amdgpu_ip_version(adev, SDMA0_HWIP, 0) >=
3066 IP_VERSION(5, 0, 0)) &&
3067 (adev->ip_blocks[i].version->type ==
3068 AMD_IP_BLOCK_TYPE_SDMA))
3069 continue;
3070
3071 /* Once swPSP provides the IMU, RLC FW binaries to TOS during cold-boot.
3072 * These are in TMR, hence are expected to be reused by PSP-TOS to reload
3073 * from this location and RLC Autoload automatically also gets loaded
3074 * from here based on PMFW -> PSP message during re-init sequence.
3075 * Therefore, the psp suspend & resume should be skipped to avoid destroy
3076 * the TMR and reload FWs again for IMU enabled APU ASICs.
3077 */
3078 if (amdgpu_in_reset(adev) &&
3079 (adev->flags & AMD_IS_APU) && adev->gfx.imu.funcs &&
3080 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP)
3081 continue;
3082
3083 r = amdgpu_ip_block_suspend(&adev->ip_blocks[i]);
3084 if (r)
3085 goto unwind;
3086
3087 /* handle putting the SMC in the appropriate state */
3088 if (!amdgpu_sriov_vf(adev)) {
3089 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) {
3090 r = amdgpu_dpm_set_mp1_state(adev, adev->mp1_state);
3091 if (r) {
3092 dev_err(adev->dev,
3093 "SMC failed to set mp1 state %d, %d\n",
3094 adev->mp1_state, r);
3095 goto unwind;
3096 }
3097 }
3098 }
3099 }
3100
3101 return 0;
3102 unwind:
3103 /* suspend phase 2 = resume phase 1 + resume phase 2 */
3104 rec = amdgpu_device_ip_resume_phase1(adev);
3105 if (rec) {
3106 dev_err(adev->dev,
3107 "amdgpu_device_ip_resume_phase1 failed during unwind: %d\n",
3108 rec);
3109 return r;
3110 }
3111
3112 rec = amdgpu_device_fw_loading(adev);
3113 if (rec) {
3114 dev_err(adev->dev,
3115 "amdgpu_device_fw_loading failed during unwind: %d\n",
3116 rec);
3117 return r;
3118 }
3119
3120 rec = amdgpu_device_ip_resume_phase2(adev);
3121 if (rec) {
3122 dev_err(adev->dev,
3123 "amdgpu_device_ip_resume_phase2 failed during unwind: %d\n",
3124 rec);
3125 return r;
3126 }
3127
3128 return r;
3129 }
3130
3131 /**
3132 * amdgpu_device_ip_suspend - run suspend for hardware IPs
3133 *
3134 * @adev: amdgpu_device pointer
3135 *
3136 * Main suspend function for hardware IPs. The list of all the hardware
3137 * IPs that make up the asic is walked, clockgating is disabled and the
3138 * suspend callbacks are run. suspend puts the hardware and software state
3139 * in each IP into a state suitable for suspend.
3140 * Returns 0 on success, negative error code on failure.
3141 */
amdgpu_device_ip_suspend(struct amdgpu_device * adev)3142 static int amdgpu_device_ip_suspend(struct amdgpu_device *adev)
3143 {
3144 int r;
3145
3146 if (amdgpu_sriov_vf(adev)) {
3147 amdgpu_virt_fini_data_exchange(adev);
3148 amdgpu_virt_request_full_gpu(adev, false);
3149 }
3150
3151 amdgpu_ttm_set_buffer_funcs_status(adev, false);
3152
3153 r = amdgpu_device_ip_suspend_phase1(adev);
3154 if (r)
3155 return r;
3156 r = amdgpu_device_ip_suspend_phase2(adev);
3157
3158 if (amdgpu_sriov_vf(adev))
3159 amdgpu_virt_release_full_gpu(adev, false);
3160
3161 return r;
3162 }
3163
amdgpu_device_ip_reinit_early_sriov(struct amdgpu_device * adev)3164 static int amdgpu_device_ip_reinit_early_sriov(struct amdgpu_device *adev)
3165 {
3166 int i, r;
3167
3168 static enum amd_ip_block_type ip_order[] = {
3169 AMD_IP_BLOCK_TYPE_COMMON,
3170 AMD_IP_BLOCK_TYPE_GMC,
3171 AMD_IP_BLOCK_TYPE_PSP,
3172 AMD_IP_BLOCK_TYPE_IH,
3173 };
3174
3175 for (i = 0; i < adev->num_ip_blocks; i++) {
3176 int j;
3177 struct amdgpu_ip_block *block;
3178
3179 block = &adev->ip_blocks[i];
3180 block->status.hw = false;
3181
3182 for (j = 0; j < ARRAY_SIZE(ip_order); j++) {
3183
3184 if (block->version->type != ip_order[j] ||
3185 !block->status.valid)
3186 continue;
3187
3188 r = block->version->funcs->hw_init(&adev->ip_blocks[i]);
3189 if (r) {
3190 dev_err(adev->dev, "RE-INIT-early: %s failed\n",
3191 block->version->funcs->name);
3192 return r;
3193 }
3194 block->status.hw = true;
3195 }
3196 }
3197
3198 return 0;
3199 }
3200
amdgpu_device_ip_reinit_late_sriov(struct amdgpu_device * adev)3201 static int amdgpu_device_ip_reinit_late_sriov(struct amdgpu_device *adev)
3202 {
3203 struct amdgpu_ip_block *block;
3204 int i, r = 0;
3205
3206 static enum amd_ip_block_type ip_order[] = {
3207 AMD_IP_BLOCK_TYPE_SMC,
3208 AMD_IP_BLOCK_TYPE_DCE,
3209 AMD_IP_BLOCK_TYPE_GFX,
3210 AMD_IP_BLOCK_TYPE_SDMA,
3211 AMD_IP_BLOCK_TYPE_MES,
3212 AMD_IP_BLOCK_TYPE_UVD,
3213 AMD_IP_BLOCK_TYPE_VCE,
3214 AMD_IP_BLOCK_TYPE_VCN,
3215 AMD_IP_BLOCK_TYPE_JPEG
3216 };
3217
3218 for (i = 0; i < ARRAY_SIZE(ip_order); i++) {
3219 block = amdgpu_device_ip_get_ip_block(adev, ip_order[i]);
3220
3221 if (!block)
3222 continue;
3223
3224 if (block->status.valid && !block->status.hw) {
3225 if (block->version->type == AMD_IP_BLOCK_TYPE_SMC) {
3226 r = amdgpu_ip_block_resume(block);
3227 } else {
3228 r = block->version->funcs->hw_init(block);
3229 }
3230
3231 if (r) {
3232 dev_err(adev->dev, "RE-INIT-late: %s failed\n",
3233 block->version->funcs->name);
3234 break;
3235 }
3236 block->status.hw = true;
3237 }
3238 }
3239
3240 return r;
3241 }
3242
3243 /**
3244 * amdgpu_device_ip_resume_phase1 - run resume for hardware IPs
3245 *
3246 * @adev: amdgpu_device pointer
3247 *
3248 * First resume function for hardware IPs. The list of all the hardware
3249 * IPs that make up the asic is walked and the resume callbacks are run for
3250 * COMMON, GMC, and IH. resume puts the hardware into a functional state
3251 * after a suspend and updates the software state as necessary. This
3252 * function is also used for restoring the GPU after a GPU reset.
3253 * Returns 0 on success, negative error code on failure.
3254 */
amdgpu_device_ip_resume_phase1(struct amdgpu_device * adev)3255 static int amdgpu_device_ip_resume_phase1(struct amdgpu_device *adev)
3256 {
3257 int i, r;
3258
3259 for (i = 0; i < adev->num_ip_blocks; i++) {
3260 if (!adev->ip_blocks[i].status.valid || adev->ip_blocks[i].status.hw)
3261 continue;
3262 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
3263 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC ||
3264 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ||
3265 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP && amdgpu_sriov_vf(adev))) {
3266
3267 r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
3268 if (r)
3269 return r;
3270 }
3271 }
3272
3273 return 0;
3274 }
3275
3276 /**
3277 * amdgpu_device_ip_resume_phase2 - run resume for hardware IPs
3278 *
3279 * @adev: amdgpu_device pointer
3280 *
3281 * Second resume function for hardware IPs. The list of all the hardware
3282 * IPs that make up the asic is walked and the resume callbacks are run for
3283 * all blocks except COMMON, GMC, and IH. resume puts the hardware into a
3284 * functional state after a suspend and updates the software state as
3285 * necessary. This function is also used for restoring the GPU after a GPU
3286 * reset.
3287 * Returns 0 on success, negative error code on failure.
3288 */
amdgpu_device_ip_resume_phase2(struct amdgpu_device * adev)3289 static int amdgpu_device_ip_resume_phase2(struct amdgpu_device *adev)
3290 {
3291 int i, r;
3292
3293 for (i = 0; i < adev->num_ip_blocks; i++) {
3294 if (!adev->ip_blocks[i].status.valid || adev->ip_blocks[i].status.hw)
3295 continue;
3296 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_COMMON ||
3297 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC ||
3298 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_IH ||
3299 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE ||
3300 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP)
3301 continue;
3302 r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
3303 if (r)
3304 return r;
3305 }
3306
3307 return 0;
3308 }
3309
3310 /**
3311 * amdgpu_device_ip_resume_phase3 - run resume for hardware IPs
3312 *
3313 * @adev: amdgpu_device pointer
3314 *
3315 * Third resume function for hardware IPs. The list of all the hardware
3316 * IPs that make up the asic is walked and the resume callbacks are run for
3317 * all DCE. resume puts the hardware into a functional state after a suspend
3318 * and updates the software state as necessary. This function is also used
3319 * for restoring the GPU after a GPU reset.
3320 *
3321 * Returns 0 on success, negative error code on failure.
3322 */
amdgpu_device_ip_resume_phase3(struct amdgpu_device * adev)3323 static int amdgpu_device_ip_resume_phase3(struct amdgpu_device *adev)
3324 {
3325 int i, r;
3326
3327 for (i = 0; i < adev->num_ip_blocks; i++) {
3328 if (!adev->ip_blocks[i].status.valid || adev->ip_blocks[i].status.hw)
3329 continue;
3330 if (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE) {
3331 r = amdgpu_ip_block_resume(&adev->ip_blocks[i]);
3332 if (r)
3333 return r;
3334 }
3335 }
3336
3337 return 0;
3338 }
3339
3340 /**
3341 * amdgpu_device_ip_resume - run resume for hardware IPs
3342 *
3343 * @adev: amdgpu_device pointer
3344 *
3345 * Main resume function for hardware IPs. The hardware IPs
3346 * are split into two resume functions because they are
3347 * also used in recovering from a GPU reset and some additional
3348 * steps need to be take between them. In this case (S3/S4) they are
3349 * run sequentially.
3350 * Returns 0 on success, negative error code on failure.
3351 */
amdgpu_device_ip_resume(struct amdgpu_device * adev)3352 static int amdgpu_device_ip_resume(struct amdgpu_device *adev)
3353 {
3354 int r;
3355
3356 r = amdgpu_device_ip_resume_phase1(adev);
3357 if (r)
3358 return r;
3359
3360 r = amdgpu_device_fw_loading(adev);
3361 if (r)
3362 return r;
3363
3364 r = amdgpu_device_ip_resume_phase2(adev);
3365
3366 amdgpu_ttm_set_buffer_funcs_status(adev, true);
3367
3368 if (r)
3369 return r;
3370
3371 amdgpu_fence_driver_hw_init(adev);
3372
3373 r = amdgpu_device_ip_resume_phase3(adev);
3374
3375 return r;
3376 }
3377
3378 /**
3379 * amdgpu_device_detect_sriov_bios - determine if the board supports SR-IOV
3380 *
3381 * @adev: amdgpu_device pointer
3382 *
3383 * Query the VBIOS data tables to determine if the board supports SR-IOV.
3384 */
amdgpu_device_detect_sriov_bios(struct amdgpu_device * adev)3385 static void amdgpu_device_detect_sriov_bios(struct amdgpu_device *adev)
3386 {
3387 if (amdgpu_sriov_vf(adev)) {
3388 if (adev->is_atom_fw) {
3389 if (amdgpu_atomfirmware_gpu_virtualization_supported(adev))
3390 adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS;
3391 } else {
3392 if (amdgpu_atombios_has_gpu_virtualization_table(adev))
3393 adev->virt.caps |= AMDGPU_SRIOV_CAPS_SRIOV_VBIOS;
3394 }
3395
3396 if (!(adev->virt.caps & AMDGPU_SRIOV_CAPS_SRIOV_VBIOS))
3397 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_NO_VBIOS, 0, 0);
3398 }
3399 }
3400
3401 /**
3402 * amdgpu_device_asic_has_dc_support - determine if DC supports the asic
3403 *
3404 * @pdev : pci device context
3405 * @asic_type: AMD asic type
3406 *
3407 * Check if there is DC (new modesetting infrastructre) support for an asic.
3408 * returns true if DC has support, false if not.
3409 */
amdgpu_device_asic_has_dc_support(struct pci_dev * pdev,enum amd_asic_type asic_type)3410 bool amdgpu_device_asic_has_dc_support(struct pci_dev *pdev,
3411 enum amd_asic_type asic_type)
3412 {
3413 switch (asic_type) {
3414 #ifdef CONFIG_DRM_AMDGPU_SI
3415 case CHIP_HAINAN:
3416 #endif
3417 case CHIP_TOPAZ:
3418 /* chips with no display hardware */
3419 return false;
3420 #if defined(CONFIG_DRM_AMD_DC)
3421 case CHIP_TAHITI:
3422 case CHIP_PITCAIRN:
3423 case CHIP_VERDE:
3424 case CHIP_OLAND:
3425 return amdgpu_dc != 0 && IS_ENABLED(CONFIG_DRM_AMD_DC_SI);
3426 default:
3427 return amdgpu_dc != 0;
3428 #else
3429 default:
3430 if (amdgpu_dc > 0)
3431 dev_info_once(
3432 &pdev->dev,
3433 "Display Core has been requested via kernel parameter but isn't supported by ASIC, ignoring\n");
3434 return false;
3435 #endif
3436 }
3437 }
3438
3439 /**
3440 * amdgpu_device_has_dc_support - check if dc is supported
3441 *
3442 * @adev: amdgpu_device pointer
3443 *
3444 * Returns true for supported, false for not supported
3445 */
amdgpu_device_has_dc_support(struct amdgpu_device * adev)3446 bool amdgpu_device_has_dc_support(struct amdgpu_device *adev)
3447 {
3448 if (adev->enable_virtual_display ||
3449 (adev->harvest_ip_mask & AMD_HARVEST_IP_DMU_MASK))
3450 return false;
3451
3452 return amdgpu_device_asic_has_dc_support(adev->pdev, adev->asic_type);
3453 }
3454
amdgpu_device_xgmi_reset_func(struct work_struct * __work)3455 static void amdgpu_device_xgmi_reset_func(struct work_struct *__work)
3456 {
3457 struct amdgpu_device *adev =
3458 container_of(__work, struct amdgpu_device, xgmi_reset_work);
3459 struct amdgpu_hive_info *hive = amdgpu_get_xgmi_hive(adev);
3460
3461 /* It's a bug to not have a hive within this function */
3462 if (WARN_ON(!hive))
3463 return;
3464
3465 /*
3466 * Use task barrier to synchronize all xgmi reset works across the
3467 * hive. task_barrier_enter and task_barrier_exit will block
3468 * until all the threads running the xgmi reset works reach
3469 * those points. task_barrier_full will do both blocks.
3470 */
3471 if (amdgpu_asic_reset_method(adev) == AMD_RESET_METHOD_BACO) {
3472
3473 task_barrier_enter(&hive->tb);
3474 adev->asic_reset_res = amdgpu_device_baco_enter(adev);
3475
3476 if (adev->asic_reset_res)
3477 goto fail;
3478
3479 task_barrier_exit(&hive->tb);
3480 adev->asic_reset_res = amdgpu_device_baco_exit(adev);
3481
3482 if (adev->asic_reset_res)
3483 goto fail;
3484
3485 amdgpu_ras_reset_error_count(adev, AMDGPU_RAS_BLOCK__MMHUB);
3486 } else {
3487
3488 task_barrier_full(&hive->tb);
3489 adev->asic_reset_res = amdgpu_asic_reset(adev);
3490 }
3491
3492 fail:
3493 if (adev->asic_reset_res)
3494 dev_warn(adev->dev,
3495 "ASIC reset failed with error, %d for drm dev, %s",
3496 adev->asic_reset_res, adev_to_drm(adev)->unique);
3497 amdgpu_put_xgmi_hive(hive);
3498 }
3499
amdgpu_device_get_job_timeout_settings(struct amdgpu_device * adev)3500 static int amdgpu_device_get_job_timeout_settings(struct amdgpu_device *adev)
3501 {
3502 char buf[AMDGPU_MAX_TIMEOUT_PARAM_LENGTH];
3503 char *input = buf;
3504 char *timeout_setting = NULL;
3505 int index = 0;
3506 long timeout;
3507 int ret = 0;
3508
3509 /* By default timeout for all queues is 2 sec */
3510 adev->gfx_timeout = adev->compute_timeout = adev->sdma_timeout =
3511 adev->video_timeout = msecs_to_jiffies(2000);
3512
3513 if (!strnlen(amdgpu_lockup_timeout, AMDGPU_MAX_TIMEOUT_PARAM_LENGTH))
3514 return 0;
3515
3516 /*
3517 * strsep() destructively modifies its input by replacing delimiters
3518 * with '\0'. Use a stack copy so the global module parameter buffer
3519 * remains intact for multi-GPU systems where this function is called
3520 * once per device.
3521 */
3522 strscpy(buf, amdgpu_lockup_timeout, sizeof(buf));
3523
3524 while ((timeout_setting = strsep(&input, ",")) &&
3525 strnlen(timeout_setting, AMDGPU_MAX_TIMEOUT_PARAM_LENGTH)) {
3526 ret = kstrtol(timeout_setting, 0, &timeout);
3527 if (ret)
3528 return ret;
3529
3530 if (timeout == 0) {
3531 index++;
3532 continue;
3533 } else if (timeout < 0) {
3534 timeout = MAX_SCHEDULE_TIMEOUT;
3535 dev_warn(adev->dev, "lockup timeout disabled");
3536 add_taint(TAINT_SOFTLOCKUP, LOCKDEP_STILL_OK);
3537 } else {
3538 timeout = msecs_to_jiffies(timeout);
3539 }
3540
3541 switch (index++) {
3542 case 0:
3543 adev->gfx_timeout = timeout;
3544 break;
3545 case 1:
3546 adev->compute_timeout = timeout;
3547 break;
3548 case 2:
3549 adev->sdma_timeout = timeout;
3550 break;
3551 case 3:
3552 adev->video_timeout = timeout;
3553 break;
3554 default:
3555 break;
3556 }
3557 }
3558
3559 /* When only one value specified apply it to all queues. */
3560 if (index == 1)
3561 adev->gfx_timeout = adev->compute_timeout = adev->sdma_timeout =
3562 adev->video_timeout = timeout;
3563
3564 return ret;
3565 }
3566
3567 /**
3568 * amdgpu_device_check_iommu_direct_map - check if RAM direct mapped to GPU
3569 *
3570 * @adev: amdgpu_device pointer
3571 *
3572 * RAM direct mapped to GPU if IOMMU is not enabled or is pass through mode
3573 */
amdgpu_device_check_iommu_direct_map(struct amdgpu_device * adev)3574 static void amdgpu_device_check_iommu_direct_map(struct amdgpu_device *adev)
3575 {
3576 struct iommu_domain *domain;
3577
3578 domain = iommu_get_domain_for_dev(adev->dev);
3579 if (!domain || domain->type == IOMMU_DOMAIN_IDENTITY)
3580 adev->ram_is_direct_mapped = true;
3581 }
3582
3583 #if defined(CONFIG_HSA_AMD_P2P)
3584 /**
3585 * amdgpu_device_check_iommu_remap - Check if DMA remapping is enabled.
3586 *
3587 * @adev: amdgpu_device pointer
3588 *
3589 * return if IOMMU remapping bar address
3590 */
amdgpu_device_check_iommu_remap(struct amdgpu_device * adev)3591 static bool amdgpu_device_check_iommu_remap(struct amdgpu_device *adev)
3592 {
3593 struct iommu_domain *domain;
3594
3595 domain = iommu_get_domain_for_dev(adev->dev);
3596 if (domain && (domain->type == IOMMU_DOMAIN_DMA ||
3597 domain->type == IOMMU_DOMAIN_DMA_FQ))
3598 return true;
3599
3600 return false;
3601 }
3602 #endif
3603
amdgpu_device_set_mcbp(struct amdgpu_device * adev)3604 static void amdgpu_device_set_mcbp(struct amdgpu_device *adev)
3605 {
3606 if (amdgpu_mcbp == 1)
3607 adev->gfx.mcbp = true;
3608 else if (amdgpu_mcbp == 0)
3609 adev->gfx.mcbp = false;
3610
3611 if (amdgpu_sriov_vf(adev))
3612 adev->gfx.mcbp = true;
3613
3614 if (adev->gfx.mcbp)
3615 dev_info(adev->dev, "MCBP is enabled\n");
3616 }
3617
amdgpu_device_sys_interface_init(struct amdgpu_device * adev)3618 static int amdgpu_device_sys_interface_init(struct amdgpu_device *adev)
3619 {
3620 int r;
3621
3622 r = amdgpu_atombios_sysfs_init(adev);
3623 if (r)
3624 drm_err(&adev->ddev,
3625 "registering atombios sysfs failed (%d).\n", r);
3626
3627 r = amdgpu_pm_sysfs_init(adev);
3628 if (r)
3629 dev_err(adev->dev, "registering pm sysfs failed (%d).\n", r);
3630
3631 r = amdgpu_ucode_sysfs_init(adev);
3632 if (r) {
3633 adev->ucode_sysfs_en = false;
3634 dev_err(adev->dev, "Creating firmware sysfs failed (%d).\n", r);
3635 } else
3636 adev->ucode_sysfs_en = true;
3637
3638 r = amdgpu_device_attr_sysfs_init(adev);
3639 if (r)
3640 dev_err(adev->dev, "Could not create amdgpu device attr\n");
3641
3642 r = devm_device_add_group(adev->dev, &amdgpu_board_attrs_group);
3643 if (r)
3644 dev_err(adev->dev,
3645 "Could not create amdgpu board attributes\n");
3646
3647 amdgpu_fru_sysfs_init(adev);
3648 amdgpu_reg_state_sysfs_init(adev);
3649 amdgpu_xcp_sysfs_init(adev);
3650 amdgpu_uma_sysfs_init(adev);
3651
3652 return r;
3653 }
3654
amdgpu_device_sys_interface_fini(struct amdgpu_device * adev)3655 static void amdgpu_device_sys_interface_fini(struct amdgpu_device *adev)
3656 {
3657 if (adev->pm.sysfs_initialized)
3658 amdgpu_pm_sysfs_fini(adev);
3659 if (adev->ucode_sysfs_en)
3660 amdgpu_ucode_sysfs_fini(adev);
3661 amdgpu_device_attr_sysfs_fini(adev);
3662 amdgpu_fru_sysfs_fini(adev);
3663
3664 amdgpu_reg_state_sysfs_fini(adev);
3665 amdgpu_xcp_sysfs_fini(adev);
3666 amdgpu_uma_sysfs_fini(adev);
3667 }
3668
3669 /**
3670 * amdgpu_device_init - initialize the driver
3671 *
3672 * @adev: amdgpu_device pointer
3673 * @flags: driver flags
3674 *
3675 * Initializes the driver info and hw (all asics).
3676 * Returns 0 for success or an error on failure.
3677 * Called at driver startup.
3678 */
amdgpu_device_init(struct amdgpu_device * adev,uint32_t flags)3679 int amdgpu_device_init(struct amdgpu_device *adev,
3680 uint32_t flags)
3681 {
3682 struct pci_dev *pdev = adev->pdev;
3683 int r, i;
3684 bool px = false;
3685 u32 max_MBps;
3686 int tmp;
3687
3688 adev->shutdown = false;
3689 adev->flags = flags;
3690
3691 if (amdgpu_force_asic_type >= 0 && amdgpu_force_asic_type < CHIP_LAST)
3692 adev->asic_type = amdgpu_force_asic_type;
3693 else
3694 adev->asic_type = flags & AMD_ASIC_MASK;
3695
3696 adev->usec_timeout = AMDGPU_MAX_USEC_TIMEOUT;
3697 if (amdgpu_emu_mode == 1)
3698 adev->usec_timeout *= 10;
3699 adev->gmc.gart_size = 512 * 1024 * 1024;
3700 adev->accel_working = false;
3701 adev->num_rings = 0;
3702 RCU_INIT_POINTER(adev->gang_submit, dma_fence_get_stub());
3703 adev->mman.buffer_funcs = NULL;
3704 adev->mman.buffer_funcs_ring = NULL;
3705 adev->vm_manager.vm_pte_funcs = NULL;
3706 adev->vm_manager.vm_pte_num_scheds = 0;
3707 adev->gmc.gmc_funcs = NULL;
3708 adev->harvest_ip_mask = 0x0;
3709 adev->fence_context = dma_fence_context_alloc(AMDGPU_MAX_RINGS);
3710 bitmap_zero(adev->gfx.pipe_reserve_bitmap, AMDGPU_MAX_COMPUTE_QUEUES);
3711
3712 amdgpu_reg_access_init(adev);
3713
3714 dev_info(
3715 adev->dev,
3716 "initializing kernel modesetting (%s 0x%04X:0x%04X 0x%04X:0x%04X 0x%02X).\n",
3717 amdgpu_asic_name[adev->asic_type], pdev->vendor, pdev->device,
3718 pdev->subsystem_vendor, pdev->subsystem_device, pdev->revision);
3719
3720 /* mutex initialization are all done here so we
3721 * can recall function without having locking issues
3722 */
3723 mutex_init(&adev->firmware.mutex);
3724 mutex_init(&adev->pm.mutex);
3725 mutex_init(&adev->gfx.gpu_clock_mutex);
3726 mutex_init(&adev->srbm_mutex);
3727 mutex_init(&adev->gfx.pipe_reserve_mutex);
3728 mutex_init(&adev->gfx.gfx_off_mutex);
3729 mutex_init(&adev->gfx.partition_mutex);
3730 mutex_init(&adev->grbm_idx_mutex);
3731 mutex_init(&adev->mn_lock);
3732 mutex_init(&adev->virt.vf_errors.lock);
3733 hash_init(adev->mn_hash);
3734 mutex_init(&adev->psp.mutex);
3735 mutex_init(&adev->notifier_lock);
3736 mutex_init(&adev->pm.stable_pstate_ctx_lock);
3737 mutex_init(&adev->benchmark_mutex);
3738 mutex_init(&adev->gfx.reset_sem_mutex);
3739 /* Initialize the mutex for cleaner shader isolation between GFX and compute processes */
3740 mutex_init(&adev->enforce_isolation_mutex);
3741 for (i = 0; i < MAX_XCP; ++i) {
3742 adev->isolation[i].spearhead = dma_fence_get_stub();
3743 amdgpu_sync_create(&adev->isolation[i].active);
3744 amdgpu_sync_create(&adev->isolation[i].prev);
3745 }
3746 mutex_init(&adev->gfx.userq_sch_mutex);
3747 mutex_init(&adev->gfx.workload_profile_mutex);
3748 mutex_init(&adev->vcn.workload_profile_mutex);
3749
3750 amdgpu_device_init_apu_flags(adev);
3751
3752 r = amdgpu_device_check_arguments(adev);
3753 if (r)
3754 return r;
3755
3756 spin_lock_init(&adev->mmio_idx_lock);
3757 spin_lock_init(&adev->mm_stats.lock);
3758 spin_lock_init(&adev->virt.rlcg_reg_lock);
3759 spin_lock_init(&adev->wb.lock);
3760
3761 INIT_LIST_HEAD(&adev->reset_list);
3762
3763 INIT_LIST_HEAD(&adev->ras_list);
3764
3765 INIT_LIST_HEAD(&adev->pm.od_kobj_list);
3766
3767 xa_init_flags(&adev->userq_doorbell_xa, XA_FLAGS_LOCK_IRQ);
3768
3769 INIT_DELAYED_WORK(&adev->delayed_init_work,
3770 amdgpu_device_delayed_init_work_handler);
3771 INIT_DELAYED_WORK(&adev->gfx.gfx_off_delay_work,
3772 amdgpu_device_delay_enable_gfx_off);
3773 /*
3774 * Initialize the enforce_isolation work structures for each XCP
3775 * partition. This work handler is responsible for enforcing shader
3776 * isolation on AMD GPUs. It counts the number of emitted fences for
3777 * each GFX and compute ring. If there are any fences, it schedules
3778 * the `enforce_isolation_work` to be run after a delay. If there are
3779 * no fences, it signals the Kernel Fusion Driver (KFD) to resume the
3780 * runqueue.
3781 */
3782 for (i = 0; i < MAX_XCP; i++) {
3783 INIT_DELAYED_WORK(&adev->gfx.enforce_isolation[i].work,
3784 amdgpu_gfx_enforce_isolation_handler);
3785 adev->gfx.enforce_isolation[i].adev = adev;
3786 adev->gfx.enforce_isolation[i].xcp_id = i;
3787 }
3788
3789 INIT_WORK(&adev->xgmi_reset_work, amdgpu_device_xgmi_reset_func);
3790
3791 amdgpu_coredump_init(adev);
3792
3793 adev->gfx.gfx_off_req_count = 1;
3794 adev->gfx.gfx_off_residency = 0;
3795 adev->gfx.gfx_off_entrycount = 0;
3796 adev->pm.ac_power = power_supply_is_system_supplied() > 0;
3797
3798 atomic_set(&adev->throttling_logging_enabled, 1);
3799 /*
3800 * If throttling continues, logging will be performed every minute
3801 * to avoid log flooding. "-1" is subtracted since the thermal
3802 * throttling interrupt comes every second. Thus, the total logging
3803 * interval is 59 seconds(retelimited printk interval) + 1(waiting
3804 * for throttling interrupt) = 60 seconds.
3805 */
3806 ratelimit_state_init(&adev->throttling_logging_rs, (60 - 1) * HZ, 1);
3807
3808 ratelimit_set_flags(&adev->throttling_logging_rs, RATELIMIT_MSG_ON_RELEASE);
3809
3810 /* Registers mapping */
3811 /* TODO: block userspace mapping of io register */
3812 if (adev->asic_type >= CHIP_BONAIRE) {
3813 adev->rmmio_base = pci_resource_start(adev->pdev, 5);
3814 adev->rmmio_size = pci_resource_len(adev->pdev, 5);
3815 } else {
3816 adev->rmmio_base = pci_resource_start(adev->pdev, 2);
3817 adev->rmmio_size = pci_resource_len(adev->pdev, 2);
3818 }
3819
3820 for (i = 0; i < AMD_IP_BLOCK_TYPE_NUM; i++)
3821 atomic_set(&adev->pm.pwr_state[i], POWER_STATE_UNKNOWN);
3822
3823 adev->rmmio = ioremap(adev->rmmio_base, adev->rmmio_size);
3824 if (!adev->rmmio)
3825 return -ENOMEM;
3826
3827 dev_info(adev->dev, "register mmio base: 0x%08X\n",
3828 (uint32_t)adev->rmmio_base);
3829 dev_info(adev->dev, "register mmio size: %u\n",
3830 (unsigned int)adev->rmmio_size);
3831
3832 /*
3833 * Reset domain needs to be present early, before XGMI hive discovered
3834 * (if any) and initialized to use reset sem and in_gpu reset flag
3835 * early on during init and before calling to RREG32.
3836 */
3837 adev->reset_domain = amdgpu_reset_create_reset_domain(SINGLE_DEVICE, "amdgpu-reset-dev");
3838 if (!adev->reset_domain)
3839 return -ENOMEM;
3840
3841 /* detect hw virtualization here */
3842 amdgpu_virt_init(adev);
3843
3844 amdgpu_device_get_pcie_info(adev);
3845
3846 r = amdgpu_device_get_job_timeout_settings(adev);
3847 if (r) {
3848 dev_err(adev->dev, "invalid lockup_timeout parameter syntax\n");
3849 return r;
3850 }
3851
3852 amdgpu_device_set_mcbp(adev);
3853
3854 /*
3855 * By default, use default mode where all blocks are expected to be
3856 * initialized. At present a 'swinit' of blocks is required to be
3857 * completed before the need for a different level is detected.
3858 */
3859 amdgpu_set_init_level(adev, AMDGPU_INIT_LEVEL_DEFAULT);
3860 /* early init functions */
3861 r = amdgpu_device_ip_early_init(adev);
3862 if (r)
3863 return r;
3864
3865 /*
3866 * No need to remove conflicting FBs for non-display class devices.
3867 * This prevents the sysfb from being freed accidently.
3868 */
3869 if ((pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA ||
3870 (pdev->class >> 8) == PCI_CLASS_DISPLAY_OTHER) {
3871 /* Get rid of things like offb */
3872 r = aperture_remove_conflicting_pci_devices(adev->pdev, amdgpu_kms_driver.name);
3873 if (r)
3874 return r;
3875 }
3876
3877 /* Enable TMZ based on IP_VERSION */
3878 amdgpu_gmc_tmz_set(adev);
3879
3880 if (amdgpu_sriov_vf(adev) &&
3881 amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(10, 3, 0))
3882 /* VF MMIO access (except mailbox range) from CPU
3883 * will be blocked during sriov runtime
3884 */
3885 adev->virt.caps |= AMDGPU_VF_MMIO_ACCESS_PROTECT;
3886
3887 amdgpu_gmc_noretry_set(adev);
3888 /* Need to get xgmi info early to decide the reset behavior*/
3889 if (adev->gmc.xgmi.supported) {
3890 if (adev->gfxhub.funcs &&
3891 adev->gfxhub.funcs->get_xgmi_info) {
3892 r = adev->gfxhub.funcs->get_xgmi_info(adev);
3893 if (r)
3894 return r;
3895 }
3896 }
3897
3898 if (adev->gmc.xgmi.connected_to_cpu) {
3899 if (adev->mmhub.funcs &&
3900 adev->mmhub.funcs->get_xgmi_info) {
3901 r = adev->mmhub.funcs->get_xgmi_info(adev);
3902 if (r)
3903 return r;
3904 }
3905 }
3906
3907 /* enable PCIE atomic ops */
3908 if (amdgpu_sriov_vf(adev)) {
3909 if (adev->virt.fw_reserve.p_pf2vf)
3910 adev->have_atomics_support = ((struct amd_sriov_msg_pf2vf_info *)
3911 adev->virt.fw_reserve.p_pf2vf)->pcie_atomic_ops_support_flags ==
3912 (PCI_EXP_DEVCAP2_ATOMIC_COMP32 | PCI_EXP_DEVCAP2_ATOMIC_COMP64);
3913 /* APUs w/ gfx9 onwards doesn't reply on PCIe atomics, rather it is a
3914 * internal path natively support atomics, set have_atomics_support to true.
3915 */
3916 } else if ((adev->flags & AMD_IS_APU &&
3917 amdgpu_ip_version(adev, GC_HWIP, 0) > IP_VERSION(9, 0, 0)) ||
3918 (adev->gmc.xgmi.connected_to_cpu &&
3919 amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(12, 1, 0))) {
3920 adev->have_atomics_support = true;
3921 } else {
3922 adev->have_atomics_support =
3923 !pci_enable_atomic_ops_to_root(adev->pdev,
3924 PCI_EXP_DEVCAP2_ATOMIC_COMP32 |
3925 PCI_EXP_DEVCAP2_ATOMIC_COMP64);
3926 }
3927
3928 if (!adev->have_atomics_support)
3929 dev_info(adev->dev, "PCIE atomic ops is not supported\n");
3930
3931 /* doorbell bar mapping and doorbell index init*/
3932 amdgpu_doorbell_init(adev);
3933
3934 if (amdgpu_emu_mode == 1) {
3935 /* post the asic on emulation mode */
3936 emu_soc_asic_init(adev);
3937 goto fence_driver_init;
3938 }
3939
3940 amdgpu_reset_init(adev);
3941
3942 /* detect if we are with an SRIOV vbios */
3943 if (adev->bios)
3944 amdgpu_device_detect_sriov_bios(adev);
3945
3946 /* check if we need to reset the asic
3947 * E.g., driver was not cleanly unloaded previously, etc.
3948 */
3949 if (!amdgpu_sriov_vf(adev) && amdgpu_asic_need_reset_on_init(adev)) {
3950 if (adev->gmc.xgmi.num_physical_nodes) {
3951 dev_info(adev->dev, "Pending hive reset.\n");
3952 amdgpu_set_init_level(adev,
3953 AMDGPU_INIT_LEVEL_MINIMAL_XGMI);
3954 } else {
3955 tmp = amdgpu_reset_method;
3956 /* It should do a default reset when loading or reloading the driver,
3957 * regardless of the module parameter reset_method.
3958 */
3959 amdgpu_reset_method = AMD_RESET_METHOD_NONE;
3960 r = amdgpu_asic_reset(adev);
3961 amdgpu_reset_method = tmp;
3962 }
3963
3964 if (r) {
3965 dev_err(adev->dev, "asic reset on init failed\n");
3966 goto failed;
3967 }
3968 }
3969
3970 /* Post card if necessary */
3971 if (amdgpu_device_need_post(adev)) {
3972 if (!adev->bios) {
3973 dev_err(adev->dev, "no vBIOS found\n");
3974 r = -EINVAL;
3975 goto failed;
3976 }
3977 dev_info(adev->dev, "GPU posting now...\n");
3978 r = amdgpu_device_asic_init(adev);
3979 if (r) {
3980 dev_err(adev->dev, "gpu post error!\n");
3981 goto failed;
3982 }
3983 }
3984
3985 if (adev->bios) {
3986 if (adev->is_atom_fw) {
3987 /* Initialize clocks */
3988 r = amdgpu_atomfirmware_get_clock_info(adev);
3989 if (r) {
3990 dev_err(adev->dev, "amdgpu_atomfirmware_get_clock_info failed\n");
3991 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0);
3992 goto failed;
3993 }
3994 } else {
3995 /* Initialize clocks */
3996 r = amdgpu_atombios_get_clock_info(adev);
3997 if (r) {
3998 dev_err(adev->dev, "amdgpu_atombios_get_clock_info failed\n");
3999 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_ATOMBIOS_GET_CLOCK_FAIL, 0, 0);
4000 goto failed;
4001 }
4002 /* init i2c buses */
4003 amdgpu_i2c_init(adev);
4004 }
4005 }
4006
4007 fence_driver_init:
4008 /* Fence driver */
4009 r = amdgpu_fence_driver_sw_init(adev);
4010 if (r) {
4011 dev_err(adev->dev, "amdgpu_fence_driver_sw_init failed\n");
4012 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_FENCE_INIT_FAIL, 0, 0);
4013 goto failed;
4014 }
4015
4016 /* init the mode config */
4017 drm_mode_config_init(adev_to_drm(adev));
4018
4019 r = amdgpu_device_ip_init(adev);
4020 if (r) {
4021 dev_err(adev->dev, "amdgpu_device_ip_init failed\n");
4022 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_INIT_FAIL, 0, 0);
4023 goto release_ras_con;
4024 }
4025
4026 amdgpu_fence_driver_hw_init(adev);
4027
4028 dev_info(adev->dev,
4029 "SE %d, SH per SE %d, CU per SH %d, active_cu_number %d\n",
4030 adev->gfx.config.max_shader_engines,
4031 adev->gfx.config.max_sh_per_se,
4032 adev->gfx.config.max_cu_per_sh,
4033 adev->gfx.cu_info.number);
4034
4035 adev->accel_working = true;
4036
4037 amdgpu_vm_check_compute_bug(adev);
4038
4039 /* Initialize the buffer migration limit. */
4040 if (amdgpu_moverate >= 0)
4041 max_MBps = amdgpu_moverate;
4042 else
4043 max_MBps = 8; /* Allow 8 MB/s. */
4044 /* Get a log2 for easy divisions. */
4045 adev->mm_stats.log2_max_MBps = ilog2(max(1u, max_MBps));
4046
4047 /*
4048 * Register gpu instance before amdgpu_device_enable_mgpu_fan_boost.
4049 * Otherwise the mgpu fan boost feature will be skipped due to the
4050 * gpu instance is counted less.
4051 */
4052 amdgpu_register_gpu_instance(adev);
4053
4054 /* enable clockgating, etc. after ib tests, etc. since some blocks require
4055 * explicit gating rather than handling it automatically.
4056 */
4057 if (adev->init_lvl->level != AMDGPU_INIT_LEVEL_MINIMAL_XGMI) {
4058 r = amdgpu_device_ip_late_init(adev);
4059 if (r) {
4060 dev_err(adev->dev, "amdgpu_device_ip_late_init failed\n");
4061 amdgpu_vf_error_put(adev, AMDGIM_ERROR_VF_AMDGPU_LATE_INIT_FAIL, 0, r);
4062 goto release_ras_con;
4063 }
4064 /* must succeed. */
4065 amdgpu_ras_resume(adev);
4066 queue_delayed_work(system_dfl_wq, &adev->delayed_init_work,
4067 msecs_to_jiffies(AMDGPU_RESUME_MS));
4068 }
4069
4070 if (amdgpu_sriov_vf(adev)) {
4071 amdgpu_virt_release_full_gpu(adev, true);
4072 flush_delayed_work(&adev->delayed_init_work);
4073 }
4074
4075 /* Don't init kfd if whole hive need to be reset during init */
4076 if (adev->init_lvl->level != AMDGPU_INIT_LEVEL_MINIMAL_XGMI) {
4077 kgd2kfd_init_zone_device(adev);
4078 kfd_update_svm_support_properties(adev);
4079 }
4080
4081 if (adev->init_lvl->level == AMDGPU_INIT_LEVEL_MINIMAL_XGMI)
4082 amdgpu_xgmi_reset_on_init(adev);
4083
4084 /*
4085 * Place those sysfs registering after `late_init`. As some of those
4086 * operations performed in `late_init` might affect the sysfs
4087 * interfaces creating.
4088 */
4089 r = amdgpu_device_sys_interface_init(adev);
4090
4091 if (IS_ENABLED(CONFIG_PERF_EVENTS))
4092 r = amdgpu_pmu_init(adev);
4093 if (r)
4094 dev_err(adev->dev, "amdgpu_pmu_init failed\n");
4095
4096 /* Have stored pci confspace at hand for restore in sudden PCI error */
4097 if (amdgpu_device_cache_pci_state(adev->pdev))
4098 pci_restore_state(pdev);
4099
4100 /* if we have > 1 VGA cards, then disable the amdgpu VGA resources */
4101 /* this will fail for cards that aren't VGA class devices, just
4102 * ignore it
4103 */
4104 if ((adev->pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA)
4105 vga_client_register(adev->pdev, amdgpu_device_vga_set_decode);
4106
4107 px = amdgpu_device_supports_px(adev);
4108
4109 if (px || (!dev_is_removable(&adev->pdev->dev) &&
4110 apple_gmux_detect(NULL, NULL)))
4111 vga_switcheroo_register_client(adev->pdev,
4112 &amdgpu_switcheroo_ops, px);
4113
4114 if (px)
4115 vga_switcheroo_init_domain_pm_ops(adev->dev, &adev->vga_pm_domain);
4116
4117 amdgpu_device_check_iommu_direct_map(adev);
4118
4119 adev->pm_nb.notifier_call = amdgpu_device_pm_notifier;
4120 r = register_pm_notifier(&adev->pm_nb);
4121 if (r)
4122 goto failed;
4123
4124 return 0;
4125
4126 release_ras_con:
4127 if (amdgpu_sriov_vf(adev))
4128 amdgpu_virt_release_full_gpu(adev, true);
4129
4130 /* failed in exclusive mode due to timeout */
4131 if (amdgpu_sriov_vf(adev) &&
4132 !amdgpu_sriov_runtime(adev) &&
4133 amdgpu_virt_mmio_blocked(adev) &&
4134 !amdgpu_virt_wait_reset(adev)) {
4135 dev_err(adev->dev, "VF exclusive mode timeout\n");
4136 /* Don't send request since VF is inactive. */
4137 adev->virt.caps &= ~AMDGPU_SRIOV_CAPS_RUNTIME;
4138 adev->virt.ops = NULL;
4139 r = -EAGAIN;
4140 }
4141 amdgpu_release_ras_context(adev);
4142
4143 failed:
4144 amdgpu_vf_error_trans_all(adev);
4145
4146 return r;
4147 }
4148
amdgpu_device_unmap_mmio(struct amdgpu_device * adev)4149 static void amdgpu_device_unmap_mmio(struct amdgpu_device *adev)
4150 {
4151
4152 /* Clear all CPU mappings pointing to this device */
4153 unmap_mapping_range(adev->ddev.anon_inode->i_mapping, 0, 0, 1);
4154
4155 /* Unmap all mapped bars - Doorbell, registers and VRAM */
4156 amdgpu_doorbell_fini(adev);
4157
4158 iounmap(adev->rmmio);
4159 adev->rmmio = NULL;
4160 if (adev->mman.aper_base_kaddr)
4161 iounmap(adev->mman.aper_base_kaddr);
4162 adev->mman.aper_base_kaddr = NULL;
4163
4164 /* Memory manager related */
4165 if (!adev->gmc.xgmi.connected_to_cpu && !adev->gmc.is_app_apu) {
4166 arch_phys_wc_del(adev->gmc.vram_mtrr);
4167 arch_io_free_memtype_wc(adev->gmc.aper_base, adev->gmc.aper_size);
4168 }
4169 }
4170
4171 /**
4172 * amdgpu_device_fini_hw - tear down the driver
4173 *
4174 * @adev: amdgpu_device pointer
4175 *
4176 * Tear down the driver info (all asics).
4177 * Called at driver shutdown.
4178 */
amdgpu_device_fini_hw(struct amdgpu_device * adev)4179 void amdgpu_device_fini_hw(struct amdgpu_device *adev)
4180 {
4181 dev_info(adev->dev, "finishing device.\n");
4182 flush_delayed_work(&adev->delayed_init_work);
4183
4184 if (adev->mman.initialized)
4185 drain_workqueue(adev->mman.bdev.wq);
4186 adev->shutdown = true;
4187
4188 unregister_pm_notifier(&adev->pm_nb);
4189
4190 /* make sure IB test finished before entering exclusive mode
4191 * to avoid preemption on IB test
4192 */
4193 if (amdgpu_sriov_vf(adev)) {
4194 amdgpu_virt_request_full_gpu(adev, false);
4195 amdgpu_virt_fini_data_exchange(adev);
4196 }
4197
4198 amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
4199 amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
4200
4201 /* disable all interrupts */
4202 amdgpu_irq_disable_all(adev);
4203 if (adev->mode_info.mode_config_initialized) {
4204 if (!drm_drv_uses_atomic_modeset(adev_to_drm(adev)))
4205 drm_helper_force_disable_all(adev_to_drm(adev));
4206 else
4207 drm_atomic_helper_shutdown(adev_to_drm(adev));
4208 }
4209 amdgpu_fence_driver_hw_fini(adev);
4210
4211 amdgpu_device_sys_interface_fini(adev);
4212
4213 /* disable ras feature must before hw fini */
4214 amdgpu_ras_pre_fini(adev);
4215
4216 amdgpu_ttm_set_buffer_funcs_status(adev, false);
4217
4218 /*
4219 * device went through surprise hotplug; we need to destroy topology
4220 * before ip_fini_early to prevent kfd locking refcount issues by calling
4221 * amdgpu_amdkfd_suspend()
4222 */
4223 if (pci_dev_is_disconnected(adev->pdev))
4224 amdgpu_amdkfd_device_fini_sw(adev);
4225
4226 amdgpu_coredump_fini(adev);
4227 amdgpu_device_ip_fini_early(adev);
4228
4229 amdgpu_irq_fini_hw(adev);
4230
4231 if (adev->mman.initialized)
4232 ttm_device_clear_dma_mappings(&adev->mman.bdev);
4233
4234 amdgpu_gart_dummy_page_fini(adev);
4235
4236 if (pci_dev_is_disconnected(adev->pdev))
4237 amdgpu_device_unmap_mmio(adev);
4238
4239 }
4240
amdgpu_device_fini_sw(struct amdgpu_device * adev)4241 void amdgpu_device_fini_sw(struct amdgpu_device *adev)
4242 {
4243 int i, idx;
4244 bool px;
4245
4246 amdgpu_device_ip_fini(adev);
4247 amdgpu_fence_driver_sw_fini(adev);
4248 amdgpu_ucode_release(&adev->firmware.gpu_info_fw);
4249 adev->accel_working = false;
4250 dma_fence_put(rcu_dereference_protected(adev->gang_submit, true));
4251 for (i = 0; i < MAX_XCP; ++i) {
4252 dma_fence_put(adev->isolation[i].spearhead);
4253 amdgpu_sync_free(&adev->isolation[i].active);
4254 amdgpu_sync_free(&adev->isolation[i].prev);
4255 }
4256
4257 amdgpu_reset_fini(adev);
4258
4259 /* free i2c buses */
4260 amdgpu_i2c_fini(adev);
4261
4262 if (adev->bios) {
4263 if (amdgpu_emu_mode != 1)
4264 amdgpu_atombios_fini(adev);
4265 amdgpu_bios_release(adev);
4266 }
4267
4268 kfree(adev->fru_info);
4269 adev->fru_info = NULL;
4270
4271 kfree(adev->xcp_mgr);
4272 adev->xcp_mgr = NULL;
4273
4274 px = amdgpu_device_supports_px(adev);
4275
4276 if (px || (!dev_is_removable(&adev->pdev->dev) &&
4277 apple_gmux_detect(NULL, NULL)))
4278 vga_switcheroo_unregister_client(adev->pdev);
4279
4280 if (px)
4281 vga_switcheroo_fini_domain_pm_ops(adev->dev);
4282
4283 if ((adev->pdev->class >> 8) == PCI_CLASS_DISPLAY_VGA)
4284 vga_client_unregister(adev->pdev);
4285
4286 if (drm_dev_enter(adev_to_drm(adev), &idx)) {
4287
4288 iounmap(adev->rmmio);
4289 adev->rmmio = NULL;
4290 drm_dev_exit(idx);
4291 }
4292
4293 if (IS_ENABLED(CONFIG_PERF_EVENTS))
4294 amdgpu_pmu_fini(adev);
4295 if (adev->discovery.bin)
4296 amdgpu_discovery_fini(adev);
4297
4298 amdgpu_reset_put_reset_domain(adev->reset_domain);
4299 adev->reset_domain = NULL;
4300
4301 kfree(adev->pci_state);
4302 kfree(adev->pcie_reset_ctx.swds_pcistate);
4303 kfree(adev->pcie_reset_ctx.swus_pcistate);
4304 }
4305
4306 /**
4307 * amdgpu_device_evict_resources - evict device resources
4308 * @adev: amdgpu device object
4309 *
4310 * Evicts all ttm device resources(vram BOs, gart table) from the lru list
4311 * of the vram memory type. Mainly used for evicting device resources
4312 * at suspend time.
4313 *
4314 */
amdgpu_device_evict_resources(struct amdgpu_device * adev)4315 static int amdgpu_device_evict_resources(struct amdgpu_device *adev)
4316 {
4317 int ret;
4318
4319 /* No need to evict vram on APUs unless going to S4 */
4320 if (!adev->in_s4 && (adev->flags & AMD_IS_APU))
4321 return 0;
4322
4323 /* No need to evict when going to S5 through S4 callbacks */
4324 if (system_state == SYSTEM_POWER_OFF)
4325 return 0;
4326
4327 ret = amdgpu_ttm_evict_resources(adev, TTM_PL_VRAM);
4328 if (ret) {
4329 dev_warn(adev->dev, "evicting device resources failed\n");
4330 return ret;
4331 }
4332
4333 if (adev->in_s4) {
4334 ret = ttm_device_prepare_hibernation(&adev->mman.bdev);
4335 if (ret)
4336 dev_err(adev->dev, "prepare hibernation failed, %d\n", ret);
4337 }
4338 return ret;
4339 }
4340
4341 /*
4342 * Suspend & resume.
4343 */
4344 /**
4345 * amdgpu_device_pm_notifier - Notification block for Suspend/Hibernate events
4346 * @nb: notifier block
4347 * @mode: suspend mode
4348 * @data: data
4349 *
4350 * This function is called when the system is about to suspend or hibernate.
4351 * It is used to set the appropriate flags so that eviction can be optimized
4352 * in the pm prepare callback.
4353 */
amdgpu_device_pm_notifier(struct notifier_block * nb,unsigned long mode,void * data)4354 static int amdgpu_device_pm_notifier(struct notifier_block *nb, unsigned long mode,
4355 void *data)
4356 {
4357 struct amdgpu_device *adev = container_of(nb, struct amdgpu_device, pm_nb);
4358
4359 switch (mode) {
4360 case PM_HIBERNATION_PREPARE:
4361 adev->in_s4 = true;
4362 break;
4363 case PM_POST_HIBERNATION:
4364 adev->in_s4 = false;
4365 break;
4366 }
4367
4368 return NOTIFY_DONE;
4369 }
4370
4371 /**
4372 * amdgpu_device_prepare - prepare for device suspend
4373 *
4374 * @dev: drm dev pointer
4375 *
4376 * Prepare to put the hw in the suspend state (all asics).
4377 * Returns 0 for success or an error on failure.
4378 * Called at driver suspend.
4379 */
amdgpu_device_prepare(struct drm_device * dev)4380 int amdgpu_device_prepare(struct drm_device *dev)
4381 {
4382 struct amdgpu_device *adev = drm_to_adev(dev);
4383 int i, r;
4384
4385 if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
4386 return 0;
4387
4388 /* Evict the majority of BOs before starting suspend sequence */
4389 r = amdgpu_device_evict_resources(adev);
4390 if (r)
4391 return r;
4392
4393 flush_delayed_work(&adev->gfx.gfx_off_delay_work);
4394
4395 for (i = 0; i < adev->num_ip_blocks; i++) {
4396 if (!adev->ip_blocks[i].status.valid)
4397 continue;
4398 if (!adev->ip_blocks[i].version->funcs->prepare_suspend)
4399 continue;
4400 r = adev->ip_blocks[i].version->funcs->prepare_suspend(&adev->ip_blocks[i]);
4401 if (r)
4402 return r;
4403 }
4404
4405 return 0;
4406 }
4407
4408 /**
4409 * amdgpu_device_complete - complete power state transition
4410 *
4411 * @dev: drm dev pointer
4412 *
4413 * Undo the changes from amdgpu_device_prepare. This will be
4414 * called on all resume transitions, including those that failed.
4415 */
amdgpu_device_complete(struct drm_device * dev)4416 void amdgpu_device_complete(struct drm_device *dev)
4417 {
4418 struct amdgpu_device *adev = drm_to_adev(dev);
4419 int i;
4420
4421 for (i = 0; i < adev->num_ip_blocks; i++) {
4422 if (!adev->ip_blocks[i].status.valid)
4423 continue;
4424 if (!adev->ip_blocks[i].version->funcs->complete)
4425 continue;
4426 adev->ip_blocks[i].version->funcs->complete(&adev->ip_blocks[i]);
4427 }
4428 }
4429
4430 /**
4431 * amdgpu_device_suspend - initiate device suspend
4432 *
4433 * @dev: drm dev pointer
4434 * @notify_clients: notify in-kernel DRM clients
4435 *
4436 * Puts the hw in the suspend state (all asics).
4437 * Returns 0 for success or an error on failure.
4438 * Called at driver suspend.
4439 */
amdgpu_device_suspend(struct drm_device * dev,bool notify_clients)4440 int amdgpu_device_suspend(struct drm_device *dev, bool notify_clients)
4441 {
4442 struct amdgpu_device *adev = drm_to_adev(dev);
4443 int r, rec;
4444
4445 if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
4446 return 0;
4447
4448 adev->in_suspend = true;
4449
4450 if (amdgpu_sriov_vf(adev)) {
4451 if (!adev->in_runpm)
4452 amdgpu_amdkfd_suspend_process(adev);
4453 amdgpu_virt_fini_data_exchange(adev);
4454 r = amdgpu_virt_request_full_gpu(adev, false);
4455 if (r)
4456 return r;
4457 }
4458
4459 r = amdgpu_acpi_smart_shift_update(adev, AMDGPU_SS_DEV_D3);
4460 if (r)
4461 goto unwind_sriov;
4462
4463 if (notify_clients)
4464 drm_client_dev_suspend(adev_to_drm(adev));
4465
4466 cancel_delayed_work_sync(&adev->delayed_init_work);
4467
4468 amdgpu_ras_suspend(adev);
4469
4470 r = amdgpu_device_ip_suspend_phase1(adev);
4471 if (r)
4472 goto unwind_smartshift;
4473
4474 amdgpu_amdkfd_suspend(adev, !amdgpu_sriov_vf(adev) && !adev->in_runpm);
4475 r = amdgpu_userq_suspend(adev);
4476 if (r)
4477 goto unwind_ip_phase1;
4478
4479 r = amdgpu_device_evict_resources(adev);
4480 if (r)
4481 goto unwind_userq;
4482
4483 amdgpu_ttm_set_buffer_funcs_status(adev, false);
4484
4485 amdgpu_fence_driver_hw_fini(adev);
4486
4487 r = amdgpu_device_ip_suspend_phase2(adev);
4488 if (r)
4489 goto unwind_evict;
4490
4491 if (amdgpu_sriov_vf(adev))
4492 amdgpu_virt_release_full_gpu(adev, false);
4493
4494 return 0;
4495
4496 unwind_evict:
4497 amdgpu_ttm_set_buffer_funcs_status(adev, true);
4498 amdgpu_fence_driver_hw_init(adev);
4499
4500 unwind_userq:
4501 rec = amdgpu_userq_resume(adev);
4502 if (rec) {
4503 dev_warn(adev->dev, "failed to re-initialize user queues: %d\n", rec);
4504 return r;
4505 }
4506 rec = amdgpu_amdkfd_resume(adev, !amdgpu_sriov_vf(adev) && !adev->in_runpm);
4507 if (rec) {
4508 dev_warn(adev->dev, "failed to re-initialize kfd: %d\n", rec);
4509 return r;
4510 }
4511
4512 unwind_ip_phase1:
4513 /* suspend phase 1 = resume phase 3 */
4514 rec = amdgpu_device_ip_resume_phase3(adev);
4515 if (rec) {
4516 dev_warn(adev->dev, "failed to re-initialize IPs phase1: %d\n", rec);
4517 return r;
4518 }
4519
4520 unwind_smartshift:
4521 rec = amdgpu_acpi_smart_shift_update(adev, AMDGPU_SS_DEV_D0);
4522 if (rec) {
4523 dev_warn(adev->dev, "failed to re-update smart shift: %d\n", rec);
4524 return r;
4525 }
4526
4527 if (notify_clients)
4528 drm_client_dev_resume(adev_to_drm(adev));
4529
4530 amdgpu_ras_resume(adev);
4531
4532 unwind_sriov:
4533 if (amdgpu_sriov_vf(adev)) {
4534 rec = amdgpu_virt_request_full_gpu(adev, true);
4535 if (rec) {
4536 dev_warn(adev->dev, "failed to reinitialize sriov: %d\n", rec);
4537 return r;
4538 }
4539 }
4540
4541 adev->in_suspend = adev->in_s0ix = adev->in_s3 = false;
4542
4543 return r;
4544 }
4545
amdgpu_virt_resume(struct amdgpu_device * adev)4546 static inline int amdgpu_virt_resume(struct amdgpu_device *adev)
4547 {
4548 int r;
4549 unsigned int prev_physical_node_id = adev->gmc.xgmi.physical_node_id;
4550
4551 /* During VM resume, QEMU programming of VF MSIX table (register GFXMSIX_VECT0_ADDR_LO)
4552 * may not work. The access could be blocked by nBIF protection as VF isn't in
4553 * exclusive access mode. Exclusive access is enabled now, disable/enable MSIX
4554 * so that QEMU reprograms MSIX table.
4555 */
4556 amdgpu_restore_msix(adev);
4557
4558 r = adev->gfxhub.funcs->get_xgmi_info(adev);
4559 if (r)
4560 return r;
4561
4562 dev_info(adev->dev, "xgmi node, old id %d, new id %d\n",
4563 prev_physical_node_id, adev->gmc.xgmi.physical_node_id);
4564
4565 adev->vm_manager.vram_base_offset = adev->gfxhub.funcs->get_mc_fb_offset(adev);
4566 adev->vm_manager.vram_base_offset +=
4567 adev->gmc.xgmi.physical_node_id * adev->gmc.xgmi.node_segment_size;
4568
4569 return 0;
4570 }
4571
4572 /**
4573 * amdgpu_device_resume - initiate device resume
4574 *
4575 * @dev: drm dev pointer
4576 * @notify_clients: notify in-kernel DRM clients
4577 *
4578 * Bring the hw back to operating state (all asics).
4579 * Returns 0 for success or an error on failure.
4580 * Called at driver resume.
4581 */
amdgpu_device_resume(struct drm_device * dev,bool notify_clients)4582 int amdgpu_device_resume(struct drm_device *dev, bool notify_clients)
4583 {
4584 struct amdgpu_device *adev = drm_to_adev(dev);
4585 int r = 0;
4586
4587 if (amdgpu_sriov_vf(adev)) {
4588 r = amdgpu_virt_request_full_gpu(adev, true);
4589 if (r)
4590 return r;
4591 }
4592
4593 if (amdgpu_virt_xgmi_migrate_enabled(adev)) {
4594 r = amdgpu_virt_resume(adev);
4595 if (r)
4596 goto exit;
4597 }
4598
4599 if (dev->switch_power_state == DRM_SWITCH_POWER_OFF)
4600 return 0;
4601
4602 if (adev->in_s0ix)
4603 amdgpu_dpm_gfx_state_change(adev, sGpuChangeState_D0Entry);
4604
4605 /* post card */
4606 if (amdgpu_device_need_post(adev)) {
4607 r = amdgpu_device_asic_init(adev);
4608 if (r)
4609 dev_err(adev->dev, "amdgpu asic init failed\n");
4610 }
4611
4612 r = amdgpu_device_ip_resume(adev);
4613
4614 if (r) {
4615 dev_err(adev->dev, "amdgpu_device_ip_resume failed (%d).\n", r);
4616 goto exit;
4617 }
4618
4619 r = amdgpu_amdkfd_resume(adev, !amdgpu_sriov_vf(adev) && !adev->in_runpm);
4620 if (r)
4621 goto exit;
4622
4623 r = amdgpu_userq_resume(adev);
4624 if (r)
4625 goto exit;
4626
4627 r = amdgpu_device_ip_late_init(adev);
4628 if (r)
4629 goto exit;
4630
4631 queue_delayed_work(system_dfl_wq, &adev->delayed_init_work,
4632 msecs_to_jiffies(AMDGPU_RESUME_MS));
4633 exit:
4634 if (amdgpu_sriov_vf(adev)) {
4635 amdgpu_virt_init_data_exchange(adev);
4636 amdgpu_virt_release_full_gpu(adev, true);
4637
4638 if (!r && !adev->in_runpm)
4639 r = amdgpu_amdkfd_resume_process(adev);
4640 }
4641
4642 if (r)
4643 return r;
4644
4645 /* Make sure IB tests flushed */
4646 flush_delayed_work(&adev->delayed_init_work);
4647
4648 if (notify_clients)
4649 drm_client_dev_resume(adev_to_drm(adev));
4650
4651 amdgpu_ras_resume(adev);
4652
4653 if (adev->mode_info.num_crtc) {
4654 /*
4655 * Most of the connector probing functions try to acquire runtime pm
4656 * refs to ensure that the GPU is powered on when connector polling is
4657 * performed. Since we're calling this from a runtime PM callback,
4658 * trying to acquire rpm refs will cause us to deadlock.
4659 *
4660 * Since we're guaranteed to be holding the rpm lock, it's safe to
4661 * temporarily disable the rpm helpers so this doesn't deadlock us.
4662 */
4663 #ifdef CONFIG_PM
4664 dev->dev->power.disable_depth++;
4665 #endif
4666 if (!adev->dc_enabled)
4667 drm_helper_hpd_irq_event(dev);
4668 else
4669 drm_kms_helper_hotplug_event(dev);
4670 #ifdef CONFIG_PM
4671 dev->dev->power.disable_depth--;
4672 #endif
4673 }
4674
4675 amdgpu_vram_mgr_clear_reset_blocks(adev);
4676 adev->in_suspend = false;
4677
4678 if (amdgpu_acpi_smart_shift_update(adev, AMDGPU_SS_DEV_D0))
4679 dev_warn(adev->dev, "smart shift update failed\n");
4680
4681 return 0;
4682 }
4683
4684 /**
4685 * amdgpu_device_ip_check_soft_reset - did soft reset succeed
4686 *
4687 * @adev: amdgpu_device pointer
4688 *
4689 * The list of all the hardware IPs that make up the asic is walked and
4690 * the check_soft_reset callbacks are run. check_soft_reset determines
4691 * if the asic is still hung or not.
4692 * Returns true if any of the IPs are still in a hung state, false if not.
4693 */
amdgpu_device_ip_check_soft_reset(struct amdgpu_device * adev)4694 static bool amdgpu_device_ip_check_soft_reset(struct amdgpu_device *adev)
4695 {
4696 int i;
4697 bool asic_hang = false;
4698
4699 if (amdgpu_sriov_vf(adev))
4700 return true;
4701
4702 if (amdgpu_asic_need_full_reset(adev))
4703 return true;
4704
4705 for (i = 0; i < adev->num_ip_blocks; i++) {
4706 if (!adev->ip_blocks[i].status.valid)
4707 continue;
4708 if (adev->ip_blocks[i].version->funcs->check_soft_reset)
4709 adev->ip_blocks[i].status.hang =
4710 adev->ip_blocks[i].version->funcs->check_soft_reset(
4711 &adev->ip_blocks[i]);
4712 if (adev->ip_blocks[i].status.hang) {
4713 dev_info(adev->dev, "IP block:%s is hung!\n", adev->ip_blocks[i].version->funcs->name);
4714 asic_hang = true;
4715 }
4716 }
4717 return asic_hang;
4718 }
4719
4720 /**
4721 * amdgpu_device_ip_pre_soft_reset - prepare for soft reset
4722 *
4723 * @adev: amdgpu_device pointer
4724 *
4725 * The list of all the hardware IPs that make up the asic is walked and the
4726 * pre_soft_reset callbacks are run if the block is hung. pre_soft_reset
4727 * handles any IP specific hardware or software state changes that are
4728 * necessary for a soft reset to succeed.
4729 * Returns 0 on success, negative error code on failure.
4730 */
amdgpu_device_ip_pre_soft_reset(struct amdgpu_device * adev)4731 static int amdgpu_device_ip_pre_soft_reset(struct amdgpu_device *adev)
4732 {
4733 int i, r = 0;
4734
4735 for (i = 0; i < adev->num_ip_blocks; i++) {
4736 if (!adev->ip_blocks[i].status.valid)
4737 continue;
4738 if (adev->ip_blocks[i].status.hang &&
4739 adev->ip_blocks[i].version->funcs->pre_soft_reset) {
4740 r = adev->ip_blocks[i].version->funcs->pre_soft_reset(&adev->ip_blocks[i]);
4741 if (r)
4742 return r;
4743 }
4744 }
4745
4746 return 0;
4747 }
4748
4749 /**
4750 * amdgpu_device_ip_need_full_reset - check if a full asic reset is needed
4751 *
4752 * @adev: amdgpu_device pointer
4753 *
4754 * Some hardware IPs cannot be soft reset. If they are hung, a full gpu
4755 * reset is necessary to recover.
4756 * Returns true if a full asic reset is required, false if not.
4757 */
amdgpu_device_ip_need_full_reset(struct amdgpu_device * adev)4758 static bool amdgpu_device_ip_need_full_reset(struct amdgpu_device *adev)
4759 {
4760 int i;
4761
4762 if (amdgpu_asic_need_full_reset(adev))
4763 return true;
4764
4765 for (i = 0; i < adev->num_ip_blocks; i++) {
4766 if (!adev->ip_blocks[i].status.valid)
4767 continue;
4768 if ((adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_GMC) ||
4769 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_SMC) ||
4770 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_ACP) ||
4771 (adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_DCE) ||
4772 adev->ip_blocks[i].version->type == AMD_IP_BLOCK_TYPE_PSP) {
4773 if (adev->ip_blocks[i].status.hang) {
4774 dev_info(adev->dev, "Some block need full reset!\n");
4775 return true;
4776 }
4777 }
4778 }
4779 return false;
4780 }
4781
4782 /**
4783 * amdgpu_device_ip_soft_reset - do a soft reset
4784 *
4785 * @adev: amdgpu_device pointer
4786 *
4787 * The list of all the hardware IPs that make up the asic is walked and the
4788 * soft_reset callbacks are run if the block is hung. soft_reset handles any
4789 * IP specific hardware or software state changes that are necessary to soft
4790 * reset the IP.
4791 * Returns 0 on success, negative error code on failure.
4792 */
amdgpu_device_ip_soft_reset(struct amdgpu_device * adev)4793 static int amdgpu_device_ip_soft_reset(struct amdgpu_device *adev)
4794 {
4795 int i, r = 0;
4796
4797 for (i = 0; i < adev->num_ip_blocks; i++) {
4798 if (!adev->ip_blocks[i].status.valid)
4799 continue;
4800 if (adev->ip_blocks[i].status.hang &&
4801 adev->ip_blocks[i].version->funcs->soft_reset) {
4802 r = adev->ip_blocks[i].version->funcs->soft_reset(&adev->ip_blocks[i]);
4803 if (r)
4804 return r;
4805 }
4806 }
4807
4808 return 0;
4809 }
4810
4811 /**
4812 * amdgpu_device_ip_post_soft_reset - clean up from soft reset
4813 *
4814 * @adev: amdgpu_device pointer
4815 *
4816 * The list of all the hardware IPs that make up the asic is walked and the
4817 * post_soft_reset callbacks are run if the asic was hung. post_soft_reset
4818 * handles any IP specific hardware or software state changes that are
4819 * necessary after the IP has been soft reset.
4820 * Returns 0 on success, negative error code on failure.
4821 */
amdgpu_device_ip_post_soft_reset(struct amdgpu_device * adev)4822 static int amdgpu_device_ip_post_soft_reset(struct amdgpu_device *adev)
4823 {
4824 int i, r = 0;
4825
4826 for (i = 0; i < adev->num_ip_blocks; i++) {
4827 if (!adev->ip_blocks[i].status.valid)
4828 continue;
4829 if (adev->ip_blocks[i].status.hang &&
4830 adev->ip_blocks[i].version->funcs->post_soft_reset)
4831 r = adev->ip_blocks[i].version->funcs->post_soft_reset(&adev->ip_blocks[i]);
4832 if (r)
4833 return r;
4834 }
4835
4836 return 0;
4837 }
4838
4839 /**
4840 * amdgpu_device_reset_sriov - reset ASIC for SR-IOV vf
4841 *
4842 * @adev: amdgpu_device pointer
4843 * @reset_context: amdgpu reset context pointer
4844 *
4845 * do VF FLR and reinitialize Asic
4846 * return 0 means succeeded otherwise failed
4847 */
amdgpu_device_reset_sriov(struct amdgpu_device * adev,struct amdgpu_reset_context * reset_context)4848 static int amdgpu_device_reset_sriov(struct amdgpu_device *adev,
4849 struct amdgpu_reset_context *reset_context)
4850 {
4851 int r;
4852 struct amdgpu_hive_info *hive = NULL;
4853
4854 if (test_bit(AMDGPU_HOST_FLR, &reset_context->flags)) {
4855 if (!amdgpu_ras_get_fed_status(adev))
4856 amdgpu_virt_ready_to_reset(adev);
4857 amdgpu_virt_wait_reset(adev);
4858 clear_bit(AMDGPU_HOST_FLR, &reset_context->flags);
4859 r = amdgpu_virt_request_full_gpu(adev, true);
4860 } else {
4861 r = amdgpu_virt_reset_gpu(adev);
4862 }
4863 if (r)
4864 return r;
4865
4866 amdgpu_ras_clear_err_state(adev);
4867 amdgpu_irq_gpu_reset_resume_helper(adev);
4868
4869 /* some sw clean up VF needs to do before recover */
4870 amdgpu_virt_post_reset(adev);
4871
4872 /* Resume IP prior to SMC */
4873 r = amdgpu_device_ip_reinit_early_sriov(adev);
4874 if (r)
4875 return r;
4876
4877 amdgpu_virt_init_data_exchange(adev);
4878
4879 r = amdgpu_device_fw_loading(adev);
4880 if (r)
4881 return r;
4882
4883 /* now we are okay to resume SMC/CP/SDMA */
4884 r = amdgpu_device_ip_reinit_late_sriov(adev);
4885 if (r)
4886 return r;
4887
4888 hive = amdgpu_get_xgmi_hive(adev);
4889 /* Update PSP FW topology after reset */
4890 if (hive && adev->gmc.xgmi.num_physical_nodes > 1)
4891 r = amdgpu_xgmi_update_topology(hive, adev);
4892 if (hive)
4893 amdgpu_put_xgmi_hive(hive);
4894 if (r)
4895 return r;
4896
4897 r = amdgpu_ib_ring_tests(adev);
4898 if (r)
4899 return r;
4900
4901 if (adev->virt.gim_feature & AMDGIM_FEATURE_GIM_FLR_VRAMLOST)
4902 amdgpu_inc_vram_lost(adev);
4903
4904 /* need to be called during full access so we can't do it later like
4905 * bare-metal does.
4906 */
4907 amdgpu_amdkfd_post_reset(adev);
4908 amdgpu_virt_release_full_gpu(adev, true);
4909
4910 /* Aldebaran and gfx_11_0_3 support ras in SRIOV, so need resume ras during reset */
4911 if (amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 2) ||
4912 amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 3) ||
4913 amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 4, 4) ||
4914 amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(9, 5, 0) ||
4915 amdgpu_ip_version(adev, GC_HWIP, 0) == IP_VERSION(11, 0, 3))
4916 amdgpu_ras_resume(adev);
4917
4918 amdgpu_virt_ras_telemetry_post_reset(adev);
4919
4920 return 0;
4921 }
4922
4923 /**
4924 * amdgpu_device_has_job_running - check if there is any unfinished job
4925 *
4926 * @adev: amdgpu_device pointer
4927 *
4928 * check if there is any job running on the device when guest driver receives
4929 * FLR notification from host driver. If there are still jobs running, then
4930 * the guest driver will not respond the FLR reset. Instead, let the job hit
4931 * the timeout and guest driver then issue the reset request.
4932 */
amdgpu_device_has_job_running(struct amdgpu_device * adev)4933 bool amdgpu_device_has_job_running(struct amdgpu_device *adev)
4934 {
4935 int i;
4936
4937 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
4938 struct amdgpu_ring *ring = adev->rings[i];
4939
4940 if (!amdgpu_ring_sched_ready(ring))
4941 continue;
4942
4943 if (amdgpu_fence_count_emitted(ring))
4944 return true;
4945 }
4946 return false;
4947 }
4948
4949 /**
4950 * amdgpu_device_should_recover_gpu - check if we should try GPU recovery
4951 *
4952 * @adev: amdgpu_device pointer
4953 *
4954 * Check amdgpu_gpu_recovery and SRIOV status to see if we should try to recover
4955 * a hung GPU.
4956 */
amdgpu_device_should_recover_gpu(struct amdgpu_device * adev)4957 bool amdgpu_device_should_recover_gpu(struct amdgpu_device *adev)
4958 {
4959
4960 if (amdgpu_gpu_recovery == 0)
4961 goto disabled;
4962
4963 /* Skip soft reset check in fatal error mode */
4964 if (!amdgpu_ras_is_poison_mode_supported(adev))
4965 return true;
4966
4967 if (amdgpu_sriov_vf(adev))
4968 return true;
4969
4970 if (amdgpu_gpu_recovery == -1) {
4971 switch (adev->asic_type) {
4972 #ifdef CONFIG_DRM_AMDGPU_SI
4973 case CHIP_VERDE:
4974 case CHIP_TAHITI:
4975 case CHIP_PITCAIRN:
4976 case CHIP_OLAND:
4977 case CHIP_HAINAN:
4978 #endif
4979 #ifdef CONFIG_DRM_AMDGPU_CIK
4980 case CHIP_KAVERI:
4981 case CHIP_KABINI:
4982 case CHIP_MULLINS:
4983 #endif
4984 case CHIP_CARRIZO:
4985 case CHIP_STONEY:
4986 case CHIP_CYAN_SKILLFISH:
4987 goto disabled;
4988 default:
4989 break;
4990 }
4991 }
4992
4993 return true;
4994
4995 disabled:
4996 dev_info(adev->dev, "GPU recovery disabled.\n");
4997 return false;
4998 }
4999
amdgpu_device_mode1_reset(struct amdgpu_device * adev)5000 int amdgpu_device_mode1_reset(struct amdgpu_device *adev)
5001 {
5002 u32 i;
5003 int ret = 0;
5004
5005 if (adev->bios)
5006 amdgpu_atombios_scratch_regs_engine_hung(adev, true);
5007
5008 dev_info(adev->dev, "GPU mode1 reset\n");
5009
5010 /* Cache the state before bus master disable. The saved config space
5011 * values are used in other cases like restore after mode-2 reset.
5012 */
5013 amdgpu_device_cache_pci_state(adev->pdev);
5014
5015 /* disable BM */
5016 pci_clear_master(adev->pdev);
5017
5018 if (amdgpu_dpm_is_mode1_reset_supported(adev)) {
5019 dev_info(adev->dev, "GPU smu mode1 reset\n");
5020 ret = amdgpu_dpm_mode1_reset(adev);
5021 } else {
5022 dev_info(adev->dev, "GPU psp mode1 reset\n");
5023 ret = psp_gpu_reset(adev);
5024 }
5025
5026 if (ret)
5027 goto mode1_reset_failed;
5028
5029 /* enable mmio access after mode 1 reset completed */
5030 adev->no_hw_access = false;
5031
5032 /* ensure no_hw_access is updated before we access hw */
5033 smp_mb();
5034
5035 amdgpu_device_load_pci_state(adev->pdev);
5036 ret = amdgpu_psp_wait_for_bootloader(adev);
5037 if (ret)
5038 goto mode1_reset_failed;
5039
5040 /* wait for asic to come out of reset */
5041 for (i = 0; i < adev->usec_timeout; i++) {
5042 u32 memsize = adev->nbio.funcs->get_memsize(adev);
5043
5044 if (memsize != 0xffffffff)
5045 break;
5046 udelay(1);
5047 }
5048
5049 if (i >= adev->usec_timeout) {
5050 ret = -ETIMEDOUT;
5051 goto mode1_reset_failed;
5052 }
5053
5054 if (adev->bios)
5055 amdgpu_atombios_scratch_regs_engine_hung(adev, false);
5056
5057 return 0;
5058
5059 mode1_reset_failed:
5060 dev_err(adev->dev, "GPU mode1 reset failed\n");
5061 return ret;
5062 }
5063
amdgpu_device_link_reset(struct amdgpu_device * adev)5064 int amdgpu_device_link_reset(struct amdgpu_device *adev)
5065 {
5066 int ret = 0;
5067
5068 dev_info(adev->dev, "GPU link reset\n");
5069
5070 if (!amdgpu_reset_in_dpc(adev))
5071 ret = amdgpu_dpm_link_reset(adev);
5072
5073 if (ret)
5074 goto link_reset_failed;
5075
5076 ret = amdgpu_psp_wait_for_bootloader(adev);
5077 if (ret)
5078 goto link_reset_failed;
5079
5080 return 0;
5081
5082 link_reset_failed:
5083 dev_err(adev->dev, "GPU link reset failed\n");
5084 return ret;
5085 }
5086
amdgpu_device_pre_asic_reset(struct amdgpu_device * adev,struct amdgpu_reset_context * reset_context)5087 int amdgpu_device_pre_asic_reset(struct amdgpu_device *adev,
5088 struct amdgpu_reset_context *reset_context)
5089 {
5090 int i, r = 0;
5091 struct amdgpu_job *job = NULL;
5092 struct amdgpu_device *tmp_adev = reset_context->reset_req_dev;
5093 bool need_full_reset =
5094 test_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5095
5096 if (reset_context->reset_req_dev == adev)
5097 job = reset_context->job;
5098
5099 if (amdgpu_sriov_vf(adev))
5100 amdgpu_virt_pre_reset(adev);
5101
5102 amdgpu_fence_driver_isr_toggle(adev, true);
5103
5104 /* block all schedulers and reset given job's ring */
5105 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5106 struct amdgpu_ring *ring = adev->rings[i];
5107
5108 if (!amdgpu_ring_sched_ready(ring))
5109 continue;
5110
5111 /* after all hw jobs are reset, hw fence is meaningless, so force_completion */
5112 amdgpu_fence_driver_force_completion(ring);
5113 }
5114
5115 amdgpu_fence_driver_isr_toggle(adev, false);
5116
5117 if (job && job->vm)
5118 drm_sched_increase_karma(&job->base);
5119
5120 r = amdgpu_reset_prepare_hwcontext(adev, reset_context);
5121 /* If reset handler not implemented, continue; otherwise return */
5122 if (r == -EOPNOTSUPP)
5123 r = 0;
5124 else
5125 return r;
5126
5127 /* Don't suspend on bare metal if we are not going to HW reset the ASIC */
5128 if (!amdgpu_sriov_vf(adev)) {
5129
5130 if (!need_full_reset)
5131 need_full_reset = amdgpu_device_ip_need_full_reset(adev);
5132
5133 if (!need_full_reset && amdgpu_gpu_recovery &&
5134 amdgpu_device_ip_check_soft_reset(adev)) {
5135 amdgpu_device_ip_pre_soft_reset(adev);
5136 r = amdgpu_device_ip_soft_reset(adev);
5137 amdgpu_device_ip_post_soft_reset(adev);
5138 if (r || amdgpu_device_ip_check_soft_reset(adev)) {
5139 dev_info(adev->dev, "soft reset failed, will fallback to full reset!\n");
5140 need_full_reset = true;
5141 }
5142 }
5143
5144 if (!test_bit(AMDGPU_SKIP_COREDUMP, &reset_context->flags)) {
5145 dev_info(tmp_adev->dev, "Dumping IP State\n");
5146 /* Trigger ip dump before we reset the asic */
5147 for (i = 0; i < tmp_adev->num_ip_blocks; i++)
5148 if (tmp_adev->ip_blocks[i].version->funcs->dump_ip_state)
5149 tmp_adev->ip_blocks[i].version->funcs
5150 ->dump_ip_state((void *)&tmp_adev->ip_blocks[i]);
5151 dev_info(tmp_adev->dev, "Dumping IP State Completed\n");
5152 }
5153
5154 if (need_full_reset)
5155 r = amdgpu_device_ip_suspend(adev);
5156 if (need_full_reset)
5157 set_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5158 else
5159 clear_bit(AMDGPU_NEED_FULL_RESET,
5160 &reset_context->flags);
5161 }
5162
5163 return r;
5164 }
5165
amdgpu_device_reinit_after_reset(struct amdgpu_reset_context * reset_context)5166 int amdgpu_device_reinit_after_reset(struct amdgpu_reset_context *reset_context)
5167 {
5168 struct list_head *device_list_handle;
5169 bool full_reset, vram_lost = false;
5170 struct amdgpu_device *tmp_adev;
5171 int r, init_level;
5172
5173 device_list_handle = reset_context->reset_device_list;
5174
5175 if (!device_list_handle)
5176 return -EINVAL;
5177
5178 full_reset = test_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5179
5180 /**
5181 * If it's reset on init, it's default init level, otherwise keep level
5182 * as recovery level.
5183 */
5184 if (reset_context->method == AMD_RESET_METHOD_ON_INIT)
5185 init_level = AMDGPU_INIT_LEVEL_DEFAULT;
5186 else
5187 init_level = AMDGPU_INIT_LEVEL_RESET_RECOVERY;
5188
5189 r = 0;
5190 list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5191 amdgpu_set_init_level(tmp_adev, init_level);
5192 if (full_reset) {
5193 /* post card */
5194 amdgpu_reset_set_dpc_status(tmp_adev, false);
5195 amdgpu_ras_clear_err_state(tmp_adev);
5196 r = amdgpu_device_asic_init(tmp_adev);
5197 if (r) {
5198 dev_warn(tmp_adev->dev, "asic atom init failed!");
5199 } else {
5200 dev_info(tmp_adev->dev, "GPU reset succeeded, trying to resume\n");
5201
5202 r = amdgpu_device_ip_resume_phase1(tmp_adev);
5203 if (r)
5204 goto out;
5205
5206 vram_lost = amdgpu_device_check_vram_lost(tmp_adev);
5207
5208 if (!test_bit(AMDGPU_SKIP_COREDUMP, &reset_context->flags))
5209 amdgpu_coredump(tmp_adev, false, vram_lost, reset_context->job);
5210
5211 if (vram_lost) {
5212 dev_info(
5213 tmp_adev->dev,
5214 "VRAM is lost due to GPU reset!\n");
5215 amdgpu_inc_vram_lost(tmp_adev);
5216 }
5217
5218 r = amdgpu_device_fw_loading(tmp_adev);
5219 if (r)
5220 return r;
5221
5222 r = amdgpu_xcp_restore_partition_mode(
5223 tmp_adev->xcp_mgr);
5224 if (r)
5225 goto out;
5226
5227 r = amdgpu_device_ip_resume_phase2(tmp_adev);
5228 if (r)
5229 goto out;
5230
5231 amdgpu_ttm_set_buffer_funcs_status(tmp_adev, true);
5232
5233 r = amdgpu_device_ip_resume_phase3(tmp_adev);
5234 if (r)
5235 goto out;
5236
5237 if (vram_lost)
5238 amdgpu_device_fill_reset_magic(tmp_adev);
5239
5240 /*
5241 * Add this ASIC as tracked as reset was already
5242 * complete successfully.
5243 */
5244 amdgpu_register_gpu_instance(tmp_adev);
5245
5246 if (!reset_context->hive &&
5247 tmp_adev->gmc.xgmi.num_physical_nodes > 1)
5248 amdgpu_xgmi_add_device(tmp_adev);
5249
5250 r = amdgpu_device_ip_late_init(tmp_adev);
5251 if (r)
5252 goto out;
5253
5254 r = amdgpu_userq_post_reset(tmp_adev, vram_lost);
5255 if (r)
5256 goto out;
5257
5258 drm_client_dev_resume(adev_to_drm(tmp_adev));
5259
5260 /*
5261 * The GPU enters bad state once faulty pages
5262 * by ECC has reached the threshold, and ras
5263 * recovery is scheduled next. So add one check
5264 * here to break recovery if it indeed exceeds
5265 * bad page threshold, and remind user to
5266 * retire this GPU or setting one bigger
5267 * bad_page_threshold value to fix this once
5268 * probing driver again.
5269 */
5270 if (!amdgpu_ras_is_rma(tmp_adev)) {
5271 /* must succeed. */
5272 amdgpu_ras_resume(tmp_adev);
5273 } else {
5274 r = -EINVAL;
5275 goto out;
5276 }
5277
5278 /* Update PSP FW topology after reset */
5279 if (reset_context->hive &&
5280 tmp_adev->gmc.xgmi.num_physical_nodes > 1)
5281 r = amdgpu_xgmi_update_topology(
5282 reset_context->hive, tmp_adev);
5283 }
5284 }
5285
5286 out:
5287 if (!r) {
5288 /* IP init is complete now, set level as default */
5289 amdgpu_set_init_level(tmp_adev,
5290 AMDGPU_INIT_LEVEL_DEFAULT);
5291 amdgpu_irq_gpu_reset_resume_helper(tmp_adev);
5292 r = amdgpu_ib_ring_tests(tmp_adev);
5293 if (r) {
5294 dev_err(tmp_adev->dev, "ib ring test failed (%d).\n", r);
5295 r = -EAGAIN;
5296 goto end;
5297 }
5298 }
5299
5300 if (r)
5301 tmp_adev->asic_reset_res = r;
5302 }
5303
5304 end:
5305 return r;
5306 }
5307
amdgpu_do_asic_reset(struct list_head * device_list_handle,struct amdgpu_reset_context * reset_context)5308 int amdgpu_do_asic_reset(struct list_head *device_list_handle,
5309 struct amdgpu_reset_context *reset_context)
5310 {
5311 struct amdgpu_device *tmp_adev = NULL;
5312 bool need_full_reset, skip_hw_reset;
5313 int r = 0;
5314
5315 /* Try reset handler method first */
5316 tmp_adev = list_first_entry(device_list_handle, struct amdgpu_device,
5317 reset_list);
5318
5319 reset_context->reset_device_list = device_list_handle;
5320 r = amdgpu_reset_perform_reset(tmp_adev, reset_context);
5321 /* If reset handler not implemented, continue; otherwise return */
5322 if (r == -EOPNOTSUPP)
5323 r = 0;
5324 else
5325 return r;
5326
5327 /* Reset handler not implemented, use the default method */
5328 need_full_reset =
5329 test_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5330 skip_hw_reset = test_bit(AMDGPU_SKIP_HW_RESET, &reset_context->flags);
5331
5332 /*
5333 * ASIC reset has to be done on all XGMI hive nodes ASAP
5334 * to allow proper links negotiation in FW (within 1 sec)
5335 */
5336 if (!skip_hw_reset && need_full_reset) {
5337 list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5338 /* For XGMI run all resets in parallel to speed up the process */
5339 if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
5340 if (!queue_work(system_dfl_wq,
5341 &tmp_adev->xgmi_reset_work))
5342 r = -EALREADY;
5343 } else
5344 r = amdgpu_asic_reset(tmp_adev);
5345
5346 if (r) {
5347 dev_err(tmp_adev->dev,
5348 "ASIC reset failed with error, %d for drm dev, %s",
5349 r, adev_to_drm(tmp_adev)->unique);
5350 goto out;
5351 }
5352 }
5353
5354 /* For XGMI wait for all resets to complete before proceed */
5355 if (!r) {
5356 list_for_each_entry(tmp_adev, device_list_handle,
5357 reset_list) {
5358 if (tmp_adev->gmc.xgmi.num_physical_nodes > 1) {
5359 flush_work(&tmp_adev->xgmi_reset_work);
5360 r = tmp_adev->asic_reset_res;
5361 if (r)
5362 break;
5363 }
5364 }
5365 }
5366 }
5367
5368 if (!r && amdgpu_ras_intr_triggered()) {
5369 list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5370 amdgpu_ras_reset_error_count(tmp_adev,
5371 AMDGPU_RAS_BLOCK__MMHUB);
5372 }
5373
5374 amdgpu_ras_intr_cleared();
5375 }
5376
5377 r = amdgpu_device_reinit_after_reset(reset_context);
5378 if (r == -EAGAIN)
5379 set_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5380 else
5381 clear_bit(AMDGPU_NEED_FULL_RESET, &reset_context->flags);
5382
5383 out:
5384 return r;
5385 }
5386
amdgpu_device_set_mp1_state(struct amdgpu_device * adev)5387 static void amdgpu_device_set_mp1_state(struct amdgpu_device *adev)
5388 {
5389
5390 switch (amdgpu_asic_reset_method(adev)) {
5391 case AMD_RESET_METHOD_MODE1:
5392 case AMD_RESET_METHOD_LINK:
5393 adev->mp1_state = PP_MP1_STATE_SHUTDOWN;
5394 break;
5395 case AMD_RESET_METHOD_MODE2:
5396 adev->mp1_state = PP_MP1_STATE_RESET;
5397 break;
5398 default:
5399 adev->mp1_state = PP_MP1_STATE_NONE;
5400 break;
5401 }
5402 }
5403
amdgpu_device_unset_mp1_state(struct amdgpu_device * adev)5404 static void amdgpu_device_unset_mp1_state(struct amdgpu_device *adev)
5405 {
5406 amdgpu_vf_error_trans_all(adev);
5407 adev->mp1_state = PP_MP1_STATE_NONE;
5408 }
5409
amdgpu_device_resume_display_audio(struct amdgpu_device * adev)5410 static void amdgpu_device_resume_display_audio(struct amdgpu_device *adev)
5411 {
5412 struct pci_dev *p = NULL;
5413
5414 p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
5415 adev->pdev->bus->number, 1);
5416 if (p) {
5417 pm_runtime_enable(&(p->dev));
5418 pm_runtime_resume(&(p->dev));
5419 }
5420
5421 pci_dev_put(p);
5422 }
5423
amdgpu_device_suspend_display_audio(struct amdgpu_device * adev)5424 static int amdgpu_device_suspend_display_audio(struct amdgpu_device *adev)
5425 {
5426 enum amd_reset_method reset_method;
5427 struct pci_dev *p = NULL;
5428 u64 expires;
5429
5430 /*
5431 * For now, only BACO and mode1 reset are confirmed
5432 * to suffer the audio issue without proper suspended.
5433 */
5434 reset_method = amdgpu_asic_reset_method(adev);
5435 if ((reset_method != AMD_RESET_METHOD_BACO) &&
5436 (reset_method != AMD_RESET_METHOD_MODE1))
5437 return -EINVAL;
5438
5439 p = pci_get_domain_bus_and_slot(pci_domain_nr(adev->pdev->bus),
5440 adev->pdev->bus->number, 1);
5441 if (!p)
5442 return -ENODEV;
5443
5444 expires = pm_runtime_autosuspend_expiration(&(p->dev));
5445 if (!expires)
5446 /*
5447 * If we cannot get the audio device autosuspend delay,
5448 * a fixed 4S interval will be used. Considering 3S is
5449 * the audio controller default autosuspend delay setting.
5450 * 4S used here is guaranteed to cover that.
5451 */
5452 expires = ktime_get_mono_fast_ns() + NSEC_PER_SEC * 4ULL;
5453
5454 while (!pm_runtime_status_suspended(&(p->dev))) {
5455 if (!pm_runtime_suspend(&(p->dev)))
5456 break;
5457
5458 if (expires < ktime_get_mono_fast_ns()) {
5459 dev_warn(adev->dev, "failed to suspend display audio\n");
5460 pci_dev_put(p);
5461 /* TODO: abort the succeeding gpu reset? */
5462 return -ETIMEDOUT;
5463 }
5464 }
5465
5466 pm_runtime_disable(&(p->dev));
5467
5468 pci_dev_put(p);
5469 return 0;
5470 }
5471
amdgpu_device_stop_pending_resets(struct amdgpu_device * adev)5472 static inline void amdgpu_device_stop_pending_resets(struct amdgpu_device *adev)
5473 {
5474 struct amdgpu_ras *con = amdgpu_ras_get_context(adev);
5475
5476 #if defined(CONFIG_DEBUG_FS)
5477 if (!amdgpu_sriov_vf(adev))
5478 cancel_work(&adev->reset_work);
5479 #endif
5480 amdgpu_userq_mgr_cancel_reset_work(adev);
5481
5482 if (adev->kfd.dev)
5483 cancel_work(&adev->kfd.reset_work);
5484
5485 if (amdgpu_sriov_vf(adev))
5486 cancel_work(&adev->virt.flr_work);
5487
5488 if (con && adev->ras_enabled)
5489 cancel_work(&con->recovery_work);
5490
5491 }
5492
amdgpu_device_health_check(struct list_head * device_list_handle)5493 static int amdgpu_device_health_check(struct list_head *device_list_handle)
5494 {
5495 struct amdgpu_device *tmp_adev;
5496 int ret = 0;
5497
5498 list_for_each_entry(tmp_adev, device_list_handle, reset_list) {
5499 ret |= amdgpu_device_bus_status_check(tmp_adev);
5500 }
5501
5502 return ret;
5503 }
5504
amdgpu_device_recovery_prepare(struct amdgpu_device * adev,struct list_head * device_list,struct amdgpu_hive_info * hive)5505 static void amdgpu_device_recovery_prepare(struct amdgpu_device *adev,
5506 struct list_head *device_list,
5507 struct amdgpu_hive_info *hive)
5508 {
5509 struct amdgpu_device *tmp_adev = NULL;
5510
5511 /*
5512 * Build list of devices to reset.
5513 * In case we are in XGMI hive mode, resort the device list
5514 * to put adev in the 1st position.
5515 */
5516 if (!amdgpu_sriov_vf(adev) && (adev->gmc.xgmi.num_physical_nodes > 1) && hive) {
5517 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
5518 list_add_tail(&tmp_adev->reset_list, device_list);
5519 if (adev->shutdown)
5520 tmp_adev->shutdown = true;
5521 }
5522 if (!list_is_first(&adev->reset_list, device_list))
5523 list_rotate_to_front(&adev->reset_list, device_list);
5524 } else {
5525 list_add_tail(&adev->reset_list, device_list);
5526 }
5527 }
5528
amdgpu_device_recovery_get_reset_lock(struct amdgpu_device * adev,struct list_head * device_list)5529 static void amdgpu_device_recovery_get_reset_lock(struct amdgpu_device *adev,
5530 struct list_head *device_list)
5531 {
5532 struct amdgpu_device *tmp_adev = NULL;
5533
5534 if (list_empty(device_list))
5535 return;
5536 tmp_adev =
5537 list_first_entry(device_list, struct amdgpu_device, reset_list);
5538 amdgpu_device_lock_reset_domain(tmp_adev->reset_domain);
5539 }
5540
amdgpu_device_recovery_put_reset_lock(struct amdgpu_device * adev,struct list_head * device_list)5541 static void amdgpu_device_recovery_put_reset_lock(struct amdgpu_device *adev,
5542 struct list_head *device_list)
5543 {
5544 struct amdgpu_device *tmp_adev = NULL;
5545
5546 if (list_empty(device_list))
5547 return;
5548 tmp_adev =
5549 list_first_entry(device_list, struct amdgpu_device, reset_list);
5550 amdgpu_device_unlock_reset_domain(tmp_adev->reset_domain);
5551 }
5552
amdgpu_device_halt_activities(struct amdgpu_device * adev,struct amdgpu_job * job,struct amdgpu_reset_context * reset_context,struct list_head * device_list,struct amdgpu_hive_info * hive,bool need_emergency_restart)5553 static void amdgpu_device_halt_activities(struct amdgpu_device *adev,
5554 struct amdgpu_job *job,
5555 struct amdgpu_reset_context *reset_context,
5556 struct list_head *device_list,
5557 struct amdgpu_hive_info *hive,
5558 bool need_emergency_restart)
5559 {
5560 struct amdgpu_device *tmp_adev = NULL;
5561 int i;
5562
5563 /* block all schedulers and reset given job's ring */
5564 list_for_each_entry(tmp_adev, device_list, reset_list) {
5565 amdgpu_device_set_mp1_state(tmp_adev);
5566
5567 /*
5568 * Try to put the audio codec into suspend state
5569 * before gpu reset started.
5570 *
5571 * Due to the power domain of the graphics device
5572 * is shared with AZ power domain. Without this,
5573 * we may change the audio hardware from behind
5574 * the audio driver's back. That will trigger
5575 * some audio codec errors.
5576 */
5577 if (!amdgpu_device_suspend_display_audio(tmp_adev))
5578 tmp_adev->pcie_reset_ctx.audio_suspended = true;
5579
5580 amdgpu_ras_set_error_query_ready(tmp_adev, false);
5581
5582 cancel_delayed_work_sync(&tmp_adev->delayed_init_work);
5583
5584 amdgpu_amdkfd_pre_reset(tmp_adev, reset_context);
5585
5586 /*
5587 * Mark these ASICs to be reset as untracked first
5588 * And add them back after reset completed
5589 */
5590 amdgpu_unregister_gpu_instance(tmp_adev);
5591
5592 drm_client_dev_suspend(adev_to_drm(tmp_adev));
5593
5594 /* disable ras on ALL IPs */
5595 if (!need_emergency_restart && !amdgpu_reset_in_dpc(adev) &&
5596 amdgpu_device_ip_need_full_reset(tmp_adev))
5597 amdgpu_ras_suspend(tmp_adev);
5598
5599 amdgpu_userq_pre_reset(tmp_adev);
5600
5601 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5602 struct amdgpu_ring *ring = tmp_adev->rings[i];
5603
5604 if (!amdgpu_ring_sched_ready(ring))
5605 continue;
5606
5607 drm_sched_wqueue_stop(&ring->sched);
5608
5609 if (need_emergency_restart)
5610 amdgpu_job_stop_all_jobs_on_sched(&ring->sched);
5611 }
5612 atomic_inc(&tmp_adev->gpu_reset_counter);
5613 }
5614 }
5615
amdgpu_device_asic_reset(struct amdgpu_device * adev,struct list_head * device_list,struct amdgpu_reset_context * reset_context)5616 static int amdgpu_device_asic_reset(struct amdgpu_device *adev,
5617 struct list_head *device_list,
5618 struct amdgpu_reset_context *reset_context)
5619 {
5620 struct amdgpu_device *tmp_adev = NULL;
5621 int retry_limit = AMDGPU_MAX_RETRY_LIMIT;
5622 int r = 0;
5623
5624 retry: /* Rest of adevs pre asic reset from XGMI hive. */
5625 list_for_each_entry(tmp_adev, device_list, reset_list) {
5626 r = amdgpu_device_pre_asic_reset(tmp_adev, reset_context);
5627 /*TODO Should we stop ?*/
5628 if (r) {
5629 dev_err(tmp_adev->dev, "GPU pre asic reset failed with err, %d for drm dev, %s ",
5630 r, adev_to_drm(tmp_adev)->unique);
5631 tmp_adev->asic_reset_res = r;
5632 }
5633 }
5634
5635 /* Actual ASIC resets if needed.*/
5636 /* Host driver will handle XGMI hive reset for SRIOV */
5637 if (amdgpu_sriov_vf(adev)) {
5638
5639 /* Bail out of reset early */
5640 if (amdgpu_ras_is_rma(adev))
5641 return -ENODEV;
5642
5643 if (amdgpu_ras_get_fed_status(adev) || amdgpu_virt_rcvd_ras_interrupt(adev)) {
5644 dev_dbg(adev->dev, "Detected RAS error, wait for FLR completion\n");
5645 amdgpu_ras_set_fed(adev, true);
5646 set_bit(AMDGPU_HOST_FLR, &reset_context->flags);
5647 }
5648
5649 r = amdgpu_device_reset_sriov(adev, reset_context);
5650 if (AMDGPU_RETRY_SRIOV_RESET(r) && (retry_limit--) > 0) {
5651 amdgpu_virt_release_full_gpu(adev, true);
5652 goto retry;
5653 }
5654 if (r)
5655 adev->asic_reset_res = r;
5656 } else {
5657 r = amdgpu_do_asic_reset(device_list, reset_context);
5658 if (r && r == -EAGAIN)
5659 goto retry;
5660 }
5661
5662 list_for_each_entry(tmp_adev, device_list, reset_list) {
5663 /*
5664 * Drop any pending non scheduler resets queued before reset is done.
5665 * Any reset scheduled after this point would be valid. Scheduler resets
5666 * were already dropped during drm_sched_stop and no new ones can come
5667 * in before drm_sched_start.
5668 */
5669 amdgpu_device_stop_pending_resets(tmp_adev);
5670 }
5671
5672 return r;
5673 }
5674
amdgpu_device_sched_resume(struct list_head * device_list,struct amdgpu_reset_context * reset_context,bool job_signaled)5675 static int amdgpu_device_sched_resume(struct list_head *device_list,
5676 struct amdgpu_reset_context *reset_context,
5677 bool job_signaled)
5678 {
5679 struct amdgpu_device *tmp_adev = NULL;
5680 int i, r = 0;
5681
5682 /* Post ASIC reset for all devs .*/
5683 list_for_each_entry(tmp_adev, device_list, reset_list) {
5684
5685 for (i = 0; i < AMDGPU_MAX_RINGS; ++i) {
5686 struct amdgpu_ring *ring = tmp_adev->rings[i];
5687
5688 if (!amdgpu_ring_sched_ready(ring))
5689 continue;
5690
5691 drm_sched_wqueue_start(&ring->sched);
5692 }
5693
5694 if (!drm_drv_uses_atomic_modeset(adev_to_drm(tmp_adev)) && !job_signaled)
5695 drm_helper_resume_force_mode(adev_to_drm(tmp_adev));
5696
5697 if (tmp_adev->asic_reset_res) {
5698 /* bad news, how to tell it to userspace ?
5699 * for ras error, we should report GPU bad status instead of
5700 * reset failure
5701 */
5702 if (reset_context->src != AMDGPU_RESET_SRC_RAS ||
5703 !amdgpu_ras_eeprom_check_err_threshold(tmp_adev))
5704 dev_info(
5705 tmp_adev->dev,
5706 "GPU reset(%d) failed with error %d\n",
5707 atomic_read(
5708 &tmp_adev->gpu_reset_counter),
5709 tmp_adev->asic_reset_res);
5710 amdgpu_vf_error_put(tmp_adev,
5711 AMDGIM_ERROR_VF_GPU_RESET_FAIL, 0,
5712 tmp_adev->asic_reset_res);
5713 if (!r)
5714 r = tmp_adev->asic_reset_res;
5715 tmp_adev->asic_reset_res = 0;
5716 } else {
5717 dev_info(tmp_adev->dev, "GPU reset(%d) succeeded!\n",
5718 atomic_read(&tmp_adev->gpu_reset_counter));
5719 if (amdgpu_acpi_smart_shift_update(tmp_adev,
5720 AMDGPU_SS_DEV_D0))
5721 dev_warn(tmp_adev->dev,
5722 "smart shift update failed\n");
5723 }
5724 }
5725
5726 return r;
5727 }
5728
amdgpu_device_gpu_resume(struct amdgpu_device * adev,struct list_head * device_list,bool need_emergency_restart)5729 static void amdgpu_device_gpu_resume(struct amdgpu_device *adev,
5730 struct list_head *device_list,
5731 bool need_emergency_restart)
5732 {
5733 struct amdgpu_device *tmp_adev = NULL;
5734
5735 list_for_each_entry(tmp_adev, device_list, reset_list) {
5736 /* unlock kfd: SRIOV would do it separately */
5737 if (!need_emergency_restart && !amdgpu_sriov_vf(tmp_adev))
5738 amdgpu_amdkfd_post_reset(tmp_adev);
5739
5740 /* kfd_post_reset will do nothing if kfd device is not initialized,
5741 * need to bring up kfd here if it's not be initialized before
5742 */
5743 if (!adev->kfd.init_complete)
5744 amdgpu_amdkfd_device_init(adev);
5745
5746 if (tmp_adev->pcie_reset_ctx.audio_suspended)
5747 amdgpu_device_resume_display_audio(tmp_adev);
5748
5749 amdgpu_device_unset_mp1_state(tmp_adev);
5750
5751 amdgpu_ras_set_error_query_ready(tmp_adev, true);
5752
5753 }
5754 }
5755
5756
5757 /**
5758 * amdgpu_device_gpu_recover - reset the asic and recover scheduler
5759 *
5760 * @adev: amdgpu_device pointer
5761 * @job: which job trigger hang
5762 * @reset_context: amdgpu reset context pointer
5763 *
5764 * Attempt to reset the GPU if it has hung (all asics).
5765 * Attempt to do soft-reset or full-reset and reinitialize Asic
5766 * Returns 0 for success or an error on failure.
5767 */
5768
amdgpu_device_gpu_recover(struct amdgpu_device * adev,struct amdgpu_job * job,struct amdgpu_reset_context * reset_context)5769 int amdgpu_device_gpu_recover(struct amdgpu_device *adev,
5770 struct amdgpu_job *job,
5771 struct amdgpu_reset_context *reset_context)
5772 {
5773 struct list_head device_list;
5774 bool job_signaled = false;
5775 struct amdgpu_hive_info *hive = NULL;
5776 int r = 0;
5777 bool need_emergency_restart = false;
5778 /* save the pasid here as the job may be freed before the end of the reset */
5779 int pasid = job ? job->pasid : -EINVAL;
5780
5781 /*
5782 * If it reaches here because of hang/timeout and a RAS error is
5783 * detected at the same time, let RAS recovery take care of it.
5784 */
5785 if (amdgpu_ras_is_err_state(adev, AMDGPU_RAS_BLOCK__ANY) &&
5786 !amdgpu_sriov_vf(adev) &&
5787 reset_context->src != AMDGPU_RESET_SRC_RAS) {
5788 dev_dbg(adev->dev,
5789 "Gpu recovery from source: %d yielding to RAS error recovery handling",
5790 reset_context->src);
5791 return 0;
5792 }
5793
5794 /*
5795 * Special case: RAS triggered and full reset isn't supported
5796 */
5797 need_emergency_restart = amdgpu_ras_need_emergency_restart(adev);
5798
5799 /*
5800 * Flush RAM to disk so that after reboot
5801 * the user can read log and see why the system rebooted.
5802 */
5803 if (need_emergency_restart && amdgpu_ras_get_context(adev) &&
5804 amdgpu_ras_get_context(adev)->reboot) {
5805 dev_warn(adev->dev, "Emergency reboot.");
5806
5807 ksys_sync_helper();
5808 emergency_restart();
5809 }
5810
5811 dev_info(adev->dev, "GPU %s begin!. Source: %d\n",
5812 need_emergency_restart ? "jobs stop" : "reset",
5813 reset_context->src);
5814
5815 if (!amdgpu_sriov_vf(adev))
5816 hive = amdgpu_get_xgmi_hive(adev);
5817 if (hive)
5818 mutex_lock(&hive->hive_lock);
5819
5820 reset_context->job = job;
5821 reset_context->hive = hive;
5822 INIT_LIST_HEAD(&device_list);
5823
5824 amdgpu_device_recovery_prepare(adev, &device_list, hive);
5825
5826 if (!amdgpu_sriov_vf(adev)) {
5827 r = amdgpu_device_health_check(&device_list);
5828 if (r)
5829 goto end_reset;
5830 }
5831
5832 /* Cannot be called after locking reset domain */
5833 amdgpu_ras_pre_reset(adev, &device_list);
5834
5835 /* We need to lock reset domain only once both for XGMI and single device */
5836 amdgpu_device_recovery_get_reset_lock(adev, &device_list);
5837
5838 /* unmap all the mappings of doorbell and framebuffer to prevent user space from
5839 * accessing them
5840 */
5841 unmap_mapping_range(adev->ddev.anon_inode->i_mapping, 0, 0, 1);
5842 amdgpu_amdkfd_clear_kfd_mapping(adev);
5843
5844 amdgpu_device_halt_activities(adev, job, reset_context, &device_list,
5845 hive, need_emergency_restart);
5846 if (need_emergency_restart)
5847 goto skip_sched_resume;
5848 /*
5849 * Must check guilty signal here since after this point all old
5850 * HW fences are force signaled.
5851 *
5852 * job->base holds a reference to parent fence
5853 */
5854 if (job && (dma_fence_get_status(&job->hw_fence->base) > 0)) {
5855 job_signaled = true;
5856 dev_info(adev->dev, "Guilty job already signaled, skipping HW reset");
5857 goto skip_hw_reset;
5858 }
5859
5860 r = amdgpu_device_asic_reset(adev, &device_list, reset_context);
5861 if (r)
5862 goto reset_unlock;
5863 skip_hw_reset:
5864 r = amdgpu_device_sched_resume(&device_list, reset_context, job_signaled);
5865 if (r)
5866 goto reset_unlock;
5867 skip_sched_resume:
5868 amdgpu_device_gpu_resume(adev, &device_list, need_emergency_restart);
5869 reset_unlock:
5870 amdgpu_device_recovery_put_reset_lock(adev, &device_list);
5871 amdgpu_ras_post_reset(adev, &device_list);
5872 end_reset:
5873 if (hive) {
5874 mutex_unlock(&hive->hive_lock);
5875 amdgpu_put_xgmi_hive(hive);
5876 }
5877
5878 if (r)
5879 dev_info(adev->dev, "GPU reset end with ret = %d\n", r);
5880
5881 atomic_set(&adev->reset_domain->reset_res, r);
5882
5883 if (!r) {
5884 struct amdgpu_task_info *ti = NULL;
5885
5886 /*
5887 * The job may already be freed at this point via the sched tdr workqueue so
5888 * use the cached pasid.
5889 */
5890 if (pasid >= 0)
5891 ti = amdgpu_vm_get_task_info_pasid(adev, pasid);
5892
5893 drm_dev_wedged_event(adev_to_drm(adev), DRM_WEDGE_RECOVERY_NONE,
5894 ti ? &ti->task : NULL);
5895
5896 amdgpu_vm_put_task_info(ti);
5897 }
5898
5899 return r;
5900 }
5901
5902 /**
5903 * amdgpu_device_partner_bandwidth - find the bandwidth of appropriate partner
5904 *
5905 * @adev: amdgpu_device pointer
5906 * @speed: pointer to the speed of the link
5907 * @width: pointer to the width of the link
5908 *
5909 * Evaluate the hierarchy to find the speed and bandwidth capabilities of the
5910 * first physical partner to an AMD dGPU.
5911 * This will exclude any virtual switches and links.
5912 */
amdgpu_device_partner_bandwidth(struct amdgpu_device * adev,enum pci_bus_speed * speed,enum pcie_link_width * width)5913 static void amdgpu_device_partner_bandwidth(struct amdgpu_device *adev,
5914 enum pci_bus_speed *speed,
5915 enum pcie_link_width *width)
5916 {
5917 struct pci_dev *parent = adev->pdev;
5918
5919 if (!speed || !width)
5920 return;
5921
5922 *speed = PCI_SPEED_UNKNOWN;
5923 *width = PCIE_LNK_WIDTH_UNKNOWN;
5924
5925 if (amdgpu_device_pcie_dynamic_switching_supported(adev)) {
5926 while ((parent = pci_upstream_bridge(parent))) {
5927 /* skip upstream/downstream switches internal to dGPU*/
5928 if (parent->vendor == PCI_VENDOR_ID_ATI)
5929 continue;
5930 *speed = pcie_get_speed_cap(parent);
5931 *width = pcie_get_width_cap(parent);
5932 break;
5933 }
5934 } else {
5935 /* use the current speeds rather than max if switching is not supported */
5936 pcie_bandwidth_available(adev->pdev, NULL, speed, width);
5937 }
5938 }
5939
5940 /**
5941 * amdgpu_device_gpu_bandwidth - find the bandwidth of the GPU
5942 *
5943 * @adev: amdgpu_device pointer
5944 * @speed: pointer to the speed of the link
5945 * @width: pointer to the width of the link
5946 *
5947 * Evaluate the hierarchy to find the speed and bandwidth capabilities of the
5948 * AMD dGPU which may be a virtual upstream bridge.
5949 */
amdgpu_device_gpu_bandwidth(struct amdgpu_device * adev,enum pci_bus_speed * speed,enum pcie_link_width * width)5950 static void amdgpu_device_gpu_bandwidth(struct amdgpu_device *adev,
5951 enum pci_bus_speed *speed,
5952 enum pcie_link_width *width)
5953 {
5954 struct pci_dev *parent = adev->pdev;
5955
5956 if (!speed || !width)
5957 return;
5958
5959 parent = pci_upstream_bridge(parent);
5960 if (parent && parent->vendor == PCI_VENDOR_ID_ATI) {
5961 /* use the upstream/downstream switches internal to dGPU */
5962 *speed = pcie_get_speed_cap(parent);
5963 *width = pcie_get_width_cap(parent);
5964 while ((parent = pci_upstream_bridge(parent))) {
5965 if (parent->vendor == PCI_VENDOR_ID_ATI) {
5966 /* use the upstream/downstream switches internal to dGPU */
5967 *speed = pcie_get_speed_cap(parent);
5968 *width = pcie_get_width_cap(parent);
5969 }
5970 }
5971 } else {
5972 /* use the device itself */
5973 *speed = pcie_get_speed_cap(adev->pdev);
5974 *width = pcie_get_width_cap(adev->pdev);
5975 }
5976 }
5977
5978 /**
5979 * amdgpu_device_get_pcie_info - fence pcie info about the PCIE slot
5980 *
5981 * @adev: amdgpu_device pointer
5982 *
5983 * Fetches and stores in the driver the PCIE capabilities (gen speed
5984 * and lanes) of the slot the device is in. Handles APUs and
5985 * virtualized environments where PCIE config space may not be available.
5986 */
amdgpu_device_get_pcie_info(struct amdgpu_device * adev)5987 static void amdgpu_device_get_pcie_info(struct amdgpu_device *adev)
5988 {
5989 enum pci_bus_speed speed_cap, platform_speed_cap;
5990 enum pcie_link_width platform_link_width, link_width;
5991
5992 if (amdgpu_pcie_gen_cap)
5993 adev->pm.pcie_gen_mask = amdgpu_pcie_gen_cap;
5994
5995 if (amdgpu_pcie_lane_cap)
5996 adev->pm.pcie_mlw_mask = amdgpu_pcie_lane_cap;
5997
5998 /* covers APUs as well */
5999 if (pci_is_root_bus(adev->pdev->bus) && !amdgpu_passthrough(adev)) {
6000 if (adev->pm.pcie_gen_mask == 0)
6001 adev->pm.pcie_gen_mask = AMDGPU_DEFAULT_PCIE_GEN_MASK;
6002 if (adev->pm.pcie_mlw_mask == 0)
6003 adev->pm.pcie_mlw_mask = AMDGPU_DEFAULT_PCIE_MLW_MASK;
6004 return;
6005 }
6006
6007 if (adev->pm.pcie_gen_mask && adev->pm.pcie_mlw_mask)
6008 return;
6009
6010 amdgpu_device_partner_bandwidth(adev, &platform_speed_cap,
6011 &platform_link_width);
6012 amdgpu_device_gpu_bandwidth(adev, &speed_cap, &link_width);
6013
6014 if (adev->pm.pcie_gen_mask == 0) {
6015 /* asic caps */
6016 if (speed_cap == PCI_SPEED_UNKNOWN) {
6017 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6018 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6019 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
6020 } else {
6021 if (speed_cap == PCIE_SPEED_32_0GT)
6022 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6023 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6024 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 |
6025 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4 |
6026 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN5);
6027 else if (speed_cap == PCIE_SPEED_16_0GT)
6028 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6029 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6030 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3 |
6031 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN4);
6032 else if (speed_cap == PCIE_SPEED_8_0GT)
6033 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6034 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6035 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN3);
6036 else if (speed_cap == PCIE_SPEED_5_0GT)
6037 adev->pm.pcie_gen_mask |= (CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6038 CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN2);
6039 else
6040 adev->pm.pcie_gen_mask |= CAIL_ASIC_PCIE_LINK_SPEED_SUPPORT_GEN1;
6041 }
6042 /* platform caps */
6043 if (platform_speed_cap == PCI_SPEED_UNKNOWN) {
6044 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6045 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
6046 } else {
6047 if (platform_speed_cap == PCIE_SPEED_32_0GT)
6048 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6049 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6050 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 |
6051 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4 |
6052 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN5);
6053 else if (platform_speed_cap == PCIE_SPEED_16_0GT)
6054 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6055 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6056 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3 |
6057 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN4);
6058 else if (platform_speed_cap == PCIE_SPEED_8_0GT)
6059 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6060 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2 |
6061 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN3);
6062 else if (platform_speed_cap == PCIE_SPEED_5_0GT)
6063 adev->pm.pcie_gen_mask |= (CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1 |
6064 CAIL_PCIE_LINK_SPEED_SUPPORT_GEN2);
6065 else
6066 adev->pm.pcie_gen_mask |= CAIL_PCIE_LINK_SPEED_SUPPORT_GEN1;
6067
6068 }
6069 }
6070 if (adev->pm.pcie_mlw_mask == 0) {
6071 /* asic caps */
6072 if (link_width == PCIE_LNK_WIDTH_UNKNOWN) {
6073 adev->pm.pcie_mlw_mask |= AMDGPU_DEFAULT_ASIC_PCIE_MLW_MASK;
6074 } else {
6075 switch (link_width) {
6076 case PCIE_LNK_X32:
6077 adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X32 |
6078 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X16 |
6079 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X12 |
6080 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X8 |
6081 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6082 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6083 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6084 break;
6085 case PCIE_LNK_X16:
6086 adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X16 |
6087 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X12 |
6088 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X8 |
6089 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6090 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6091 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6092 break;
6093 case PCIE_LNK_X12:
6094 adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X12 |
6095 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X8 |
6096 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6097 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6098 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6099 break;
6100 case PCIE_LNK_X8:
6101 adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X8 |
6102 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6103 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6104 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6105 break;
6106 case PCIE_LNK_X4:
6107 adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X4 |
6108 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6109 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6110 break;
6111 case PCIE_LNK_X2:
6112 adev->pm.pcie_mlw_mask |= (CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X2 |
6113 CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1);
6114 break;
6115 case PCIE_LNK_X1:
6116 adev->pm.pcie_mlw_mask |= CAIL_ASIC_PCIE_LINK_WIDTH_SUPPORT_X1;
6117 break;
6118 default:
6119 break;
6120 }
6121 }
6122 /* platform caps */
6123 if (platform_link_width == PCIE_LNK_WIDTH_UNKNOWN) {
6124 adev->pm.pcie_mlw_mask |= AMDGPU_DEFAULT_PCIE_MLW_MASK;
6125 } else {
6126 switch (platform_link_width) {
6127 case PCIE_LNK_X32:
6128 adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X32 |
6129 CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
6130 CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
6131 CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
6132 CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6133 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6134 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6135 break;
6136 case PCIE_LNK_X16:
6137 adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X16 |
6138 CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
6139 CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
6140 CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6141 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6142 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6143 break;
6144 case PCIE_LNK_X12:
6145 adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X12 |
6146 CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
6147 CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6148 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6149 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6150 break;
6151 case PCIE_LNK_X8:
6152 adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X8 |
6153 CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6154 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6155 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6156 break;
6157 case PCIE_LNK_X4:
6158 adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X4 |
6159 CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6160 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6161 break;
6162 case PCIE_LNK_X2:
6163 adev->pm.pcie_mlw_mask |= (CAIL_PCIE_LINK_WIDTH_SUPPORT_X2 |
6164 CAIL_PCIE_LINK_WIDTH_SUPPORT_X1);
6165 break;
6166 case PCIE_LNK_X1:
6167 adev->pm.pcie_mlw_mask |= CAIL_PCIE_LINK_WIDTH_SUPPORT_X1;
6168 break;
6169 default:
6170 break;
6171 }
6172 }
6173 }
6174 }
6175
6176 /**
6177 * amdgpu_device_is_peer_accessible - Check peer access through PCIe BAR
6178 *
6179 * @adev: amdgpu_device pointer
6180 * @peer_adev: amdgpu_device pointer for peer device trying to access @adev
6181 *
6182 * Return true if @peer_adev can access (DMA) @adev through the PCIe
6183 * BAR, i.e. @adev is "large BAR" and the BAR matches the DMA mask of
6184 * @peer_adev.
6185 */
amdgpu_device_is_peer_accessible(struct amdgpu_device * adev,struct amdgpu_device * peer_adev)6186 bool amdgpu_device_is_peer_accessible(struct amdgpu_device *adev,
6187 struct amdgpu_device *peer_adev)
6188 {
6189 #ifdef CONFIG_HSA_AMD_P2P
6190 bool p2p_access =
6191 !adev->gmc.xgmi.connected_to_cpu &&
6192 !(pci_p2pdma_distance(adev->pdev, peer_adev->dev, false) < 0);
6193 if (!p2p_access)
6194 dev_info(adev->dev, "PCIe P2P access from peer device %s is not supported by the chipset\n",
6195 pci_name(peer_adev->pdev));
6196
6197 bool is_large_bar = adev->gmc.visible_vram_size &&
6198 adev->gmc.real_vram_size == adev->gmc.visible_vram_size;
6199 bool p2p_addressable = amdgpu_device_check_iommu_remap(peer_adev);
6200
6201 if (!p2p_addressable) {
6202 uint64_t address_mask = peer_adev->dev->dma_mask ?
6203 ~*peer_adev->dev->dma_mask : ~((1ULL << 32) - 1);
6204 resource_size_t aper_limit =
6205 adev->gmc.aper_base + adev->gmc.aper_size - 1;
6206
6207 p2p_addressable = !(adev->gmc.aper_base & address_mask ||
6208 aper_limit & address_mask);
6209 }
6210 return pcie_p2p && is_large_bar && p2p_access && p2p_addressable;
6211 #else
6212 return false;
6213 #endif
6214 }
6215
amdgpu_device_baco_enter(struct amdgpu_device * adev)6216 int amdgpu_device_baco_enter(struct amdgpu_device *adev)
6217 {
6218 struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
6219
6220 if (!amdgpu_device_supports_baco(adev))
6221 return -ENOTSUPP;
6222
6223 if (ras && adev->ras_enabled &&
6224 adev->nbio.funcs->enable_doorbell_interrupt)
6225 adev->nbio.funcs->enable_doorbell_interrupt(adev, false);
6226
6227 return amdgpu_dpm_baco_enter(adev);
6228 }
6229
amdgpu_device_baco_exit(struct amdgpu_device * adev)6230 int amdgpu_device_baco_exit(struct amdgpu_device *adev)
6231 {
6232 struct amdgpu_ras *ras = amdgpu_ras_get_context(adev);
6233 int ret = 0;
6234
6235 if (!amdgpu_device_supports_baco(adev))
6236 return -ENOTSUPP;
6237
6238 ret = amdgpu_dpm_baco_exit(adev);
6239 if (ret)
6240 return ret;
6241
6242 if (ras && adev->ras_enabled &&
6243 adev->nbio.funcs->enable_doorbell_interrupt)
6244 adev->nbio.funcs->enable_doorbell_interrupt(adev, true);
6245
6246 if (amdgpu_passthrough(adev) && adev->nbio.funcs &&
6247 adev->nbio.funcs->clear_doorbell_interrupt)
6248 adev->nbio.funcs->clear_doorbell_interrupt(adev);
6249
6250 return 0;
6251 }
6252
6253 /**
6254 * amdgpu_pci_error_detected - Called when a PCI error is detected.
6255 * @pdev: PCI device struct
6256 * @state: PCI channel state
6257 *
6258 * Description: Called when a PCI error is detected.
6259 *
6260 * Return: PCI_ERS_RESULT_NEED_RESET or PCI_ERS_RESULT_DISCONNECT.
6261 */
amdgpu_pci_error_detected(struct pci_dev * pdev,pci_channel_state_t state)6262 pci_ers_result_t amdgpu_pci_error_detected(struct pci_dev *pdev, pci_channel_state_t state)
6263 {
6264 struct drm_device *dev = pci_get_drvdata(pdev);
6265 struct amdgpu_device *adev = drm_to_adev(dev);
6266 struct amdgpu_hive_info *hive __free(xgmi_put_hive) =
6267 amdgpu_get_xgmi_hive(adev);
6268 struct amdgpu_reset_context reset_context;
6269 struct list_head device_list;
6270
6271 dev_info(adev->dev, "PCI error: detected callback!!\n");
6272
6273 adev->pci_channel_state = state;
6274
6275 switch (state) {
6276 case pci_channel_io_normal:
6277 dev_info(adev->dev, "pci_channel_io_normal: state(%d)!!\n", state);
6278 return PCI_ERS_RESULT_CAN_RECOVER;
6279 case pci_channel_io_frozen:
6280 /* Fatal error, prepare for slot reset */
6281 dev_info(adev->dev, "pci_channel_io_frozen: state(%d)!!\n", state);
6282 if (hive) {
6283 /* Hive devices should be able to support FW based
6284 * link reset on other devices, if not return.
6285 */
6286 if (!amdgpu_dpm_is_link_reset_supported(adev)) {
6287 dev_warn(adev->dev,
6288 "No support for XGMI hive yet...\n");
6289 return PCI_ERS_RESULT_DISCONNECT;
6290 }
6291 /* Set dpc status only if device is part of hive
6292 * Non-hive devices should be able to recover after
6293 * link reset.
6294 */
6295 amdgpu_reset_set_dpc_status(adev, true);
6296
6297 mutex_lock(&hive->hive_lock);
6298 } else {
6299 if (amdgpu_device_bus_status_check(adev))
6300 amdgpu_reset_set_dpc_status(adev, true);
6301 }
6302 memset(&reset_context, 0, sizeof(reset_context));
6303 INIT_LIST_HEAD(&device_list);
6304
6305 amdgpu_device_recovery_prepare(adev, &device_list, hive);
6306 amdgpu_device_recovery_get_reset_lock(adev, &device_list);
6307 amdgpu_device_halt_activities(adev, NULL, &reset_context, &device_list,
6308 hive, false);
6309 if (hive)
6310 mutex_unlock(&hive->hive_lock);
6311 return PCI_ERS_RESULT_NEED_RESET;
6312 case pci_channel_io_perm_failure:
6313 /* Permanent error, prepare for device removal */
6314 dev_info(adev->dev, "pci_channel_io_perm_failure: state(%d)!!\n", state);
6315 return PCI_ERS_RESULT_DISCONNECT;
6316 }
6317
6318 return PCI_ERS_RESULT_NEED_RESET;
6319 }
6320
6321 /**
6322 * amdgpu_pci_mmio_enabled - Enable MMIO and dump debug registers
6323 * @pdev: pointer to PCI device
6324 */
amdgpu_pci_mmio_enabled(struct pci_dev * pdev)6325 pci_ers_result_t amdgpu_pci_mmio_enabled(struct pci_dev *pdev)
6326 {
6327 struct drm_device *dev = pci_get_drvdata(pdev);
6328 struct amdgpu_device *adev = drm_to_adev(dev);
6329
6330 dev_info(adev->dev, "PCI error: mmio enabled callback!!\n");
6331
6332 /* TODO - dump whatever for debugging purposes */
6333
6334 /* This called only if amdgpu_pci_error_detected returns
6335 * PCI_ERS_RESULT_CAN_RECOVER. Read/write to the device still
6336 * works, no need to reset slot.
6337 */
6338
6339 return PCI_ERS_RESULT_RECOVERED;
6340 }
6341
6342 /**
6343 * amdgpu_pci_slot_reset - Called when PCI slot has been reset.
6344 * @pdev: PCI device struct
6345 *
6346 * Description: This routine is called by the pci error recovery
6347 * code after the PCI slot has been reset, just before we
6348 * should resume normal operations.
6349 */
amdgpu_pci_slot_reset(struct pci_dev * pdev)6350 pci_ers_result_t amdgpu_pci_slot_reset(struct pci_dev *pdev)
6351 {
6352 struct drm_device *dev = pci_get_drvdata(pdev);
6353 struct amdgpu_device *adev = drm_to_adev(dev);
6354 struct amdgpu_reset_context reset_context;
6355 struct amdgpu_device *tmp_adev;
6356 struct amdgpu_hive_info *hive;
6357 struct list_head device_list;
6358 struct pci_dev *link_dev;
6359 int r = 0, i, timeout;
6360 u32 memsize;
6361 u16 status;
6362
6363 dev_info(adev->dev, "PCI error: slot reset callback!!\n");
6364
6365 memset(&reset_context, 0, sizeof(reset_context));
6366 INIT_LIST_HEAD(&device_list);
6367 hive = amdgpu_get_xgmi_hive(adev);
6368 if (hive) {
6369 mutex_lock(&hive->hive_lock);
6370 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head)
6371 list_add_tail(&tmp_adev->reset_list, &device_list);
6372 } else {
6373 list_add_tail(&adev->reset_list, &device_list);
6374 }
6375
6376 if (adev->pcie_reset_ctx.swus)
6377 link_dev = adev->pcie_reset_ctx.swus;
6378 else
6379 link_dev = adev->pdev;
6380 /* wait for asic to come out of reset, timeout = 10s */
6381 timeout = 10000;
6382 do {
6383 usleep_range(10000, 10500);
6384 r = pci_read_config_word(link_dev, PCI_VENDOR_ID, &status);
6385 timeout -= 10;
6386 } while (timeout > 0 && (status != PCI_VENDOR_ID_ATI) &&
6387 (status != PCI_VENDOR_ID_AMD));
6388
6389 if ((status != PCI_VENDOR_ID_ATI) && (status != PCI_VENDOR_ID_AMD)) {
6390 r = -ETIME;
6391 goto out;
6392 }
6393
6394 amdgpu_device_load_switch_state(adev);
6395 /* Restore PCI confspace */
6396 amdgpu_device_load_pci_state(pdev);
6397
6398 /* confirm ASIC came out of reset */
6399 for (i = 0; i < adev->usec_timeout; i++) {
6400 memsize = amdgpu_asic_get_config_memsize(adev);
6401
6402 if (memsize != 0xffffffff)
6403 break;
6404 udelay(1);
6405 }
6406 if (memsize == 0xffffffff) {
6407 r = -ETIME;
6408 goto out;
6409 }
6410
6411 reset_context.method = AMD_RESET_METHOD_NONE;
6412 reset_context.reset_req_dev = adev;
6413 set_bit(AMDGPU_NEED_FULL_RESET, &reset_context.flags);
6414 set_bit(AMDGPU_SKIP_COREDUMP, &reset_context.flags);
6415
6416 if (hive) {
6417 reset_context.hive = hive;
6418 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head)
6419 tmp_adev->pcie_reset_ctx.in_link_reset = true;
6420 } else {
6421 adev->pcie_reset_ctx.in_link_reset = true;
6422 set_bit(AMDGPU_SKIP_HW_RESET, &reset_context.flags);
6423 }
6424
6425 r = amdgpu_device_asic_reset(adev, &device_list, &reset_context);
6426 out:
6427 if (!r) {
6428 if (amdgpu_device_cache_pci_state(adev->pdev))
6429 pci_restore_state(adev->pdev);
6430 dev_info(adev->dev, "PCIe error recovery succeeded\n");
6431 } else {
6432 dev_err(adev->dev, "PCIe error recovery failed, err:%d\n", r);
6433 if (hive) {
6434 list_for_each_entry(tmp_adev, &device_list, reset_list)
6435 amdgpu_device_unset_mp1_state(tmp_adev);
6436 }
6437 amdgpu_device_recovery_put_reset_lock(adev, &device_list);
6438 }
6439
6440 if (hive) {
6441 mutex_unlock(&hive->hive_lock);
6442 amdgpu_put_xgmi_hive(hive);
6443 }
6444
6445 return r ? PCI_ERS_RESULT_DISCONNECT : PCI_ERS_RESULT_RECOVERED;
6446 }
6447
6448 /**
6449 * amdgpu_pci_resume() - resume normal ops after PCI reset
6450 * @pdev: pointer to PCI device
6451 *
6452 * Called when the error recovery driver tells us that its
6453 * OK to resume normal operation.
6454 */
amdgpu_pci_resume(struct pci_dev * pdev)6455 void amdgpu_pci_resume(struct pci_dev *pdev)
6456 {
6457 struct drm_device *dev = pci_get_drvdata(pdev);
6458 struct amdgpu_device *adev = drm_to_adev(dev);
6459 struct list_head device_list;
6460 struct amdgpu_hive_info *hive = NULL;
6461 struct amdgpu_device *tmp_adev = NULL;
6462
6463 dev_info(adev->dev, "PCI error: resume callback!!\n");
6464
6465 /* Only continue execution for the case of pci_channel_io_frozen */
6466 if (adev->pci_channel_state != pci_channel_io_frozen)
6467 return;
6468
6469 INIT_LIST_HEAD(&device_list);
6470
6471 hive = amdgpu_get_xgmi_hive(adev);
6472 if (hive) {
6473 mutex_lock(&hive->hive_lock);
6474 list_for_each_entry(tmp_adev, &hive->device_list, gmc.xgmi.head) {
6475 tmp_adev->pcie_reset_ctx.in_link_reset = false;
6476 list_add_tail(&tmp_adev->reset_list, &device_list);
6477 }
6478 } else {
6479 adev->pcie_reset_ctx.in_link_reset = false;
6480 list_add_tail(&adev->reset_list, &device_list);
6481 }
6482 amdgpu_device_sched_resume(&device_list, NULL, NULL);
6483 amdgpu_device_gpu_resume(adev, &device_list, false);
6484 amdgpu_device_recovery_put_reset_lock(adev, &device_list);
6485
6486 if (hive) {
6487 mutex_unlock(&hive->hive_lock);
6488 amdgpu_put_xgmi_hive(hive);
6489 }
6490 }
6491
amdgpu_device_cache_switch_state(struct amdgpu_device * adev)6492 static void amdgpu_device_cache_switch_state(struct amdgpu_device *adev)
6493 {
6494 struct pci_dev *swus, *swds;
6495 int r;
6496
6497 swds = pci_upstream_bridge(adev->pdev);
6498 if (!swds || swds->vendor != PCI_VENDOR_ID_ATI ||
6499 pci_pcie_type(swds) != PCI_EXP_TYPE_DOWNSTREAM)
6500 return;
6501 swus = pci_upstream_bridge(swds);
6502 if (!swus ||
6503 (swus->vendor != PCI_VENDOR_ID_ATI &&
6504 swus->vendor != PCI_VENDOR_ID_AMD) ||
6505 pci_pcie_type(swus) != PCI_EXP_TYPE_UPSTREAM)
6506 return;
6507
6508 /* If already saved, return */
6509 if (adev->pcie_reset_ctx.swus)
6510 return;
6511 /* Upstream bridge is ATI, assume it's SWUS/DS architecture */
6512 r = pci_save_state(swds);
6513 if (r)
6514 return;
6515 adev->pcie_reset_ctx.swds_pcistate = pci_store_saved_state(swds);
6516
6517 r = pci_save_state(swus);
6518 if (r)
6519 return;
6520 adev->pcie_reset_ctx.swus_pcistate = pci_store_saved_state(swus);
6521
6522 adev->pcie_reset_ctx.swus = swus;
6523 }
6524
amdgpu_device_load_switch_state(struct amdgpu_device * adev)6525 static void amdgpu_device_load_switch_state(struct amdgpu_device *adev)
6526 {
6527 struct pci_dev *pdev;
6528 int r;
6529
6530 if (!adev->pcie_reset_ctx.swds_pcistate ||
6531 !adev->pcie_reset_ctx.swus_pcistate)
6532 return;
6533
6534 pdev = adev->pcie_reset_ctx.swus;
6535 r = pci_load_saved_state(pdev, adev->pcie_reset_ctx.swus_pcistate);
6536 if (!r) {
6537 pci_restore_state(pdev);
6538 } else {
6539 dev_warn(adev->dev, "Failed to load SWUS state, err:%d\n", r);
6540 return;
6541 }
6542
6543 pdev = pci_upstream_bridge(adev->pdev);
6544 r = pci_load_saved_state(pdev, adev->pcie_reset_ctx.swds_pcistate);
6545 if (!r)
6546 pci_restore_state(pdev);
6547 else
6548 dev_warn(adev->dev, "Failed to load SWDS state, err:%d\n", r);
6549 }
6550
amdgpu_device_cache_pci_state(struct pci_dev * pdev)6551 bool amdgpu_device_cache_pci_state(struct pci_dev *pdev)
6552 {
6553 struct drm_device *dev = pci_get_drvdata(pdev);
6554 struct amdgpu_device *adev = drm_to_adev(dev);
6555 int r;
6556
6557 if (amdgpu_sriov_vf(adev))
6558 return false;
6559
6560 r = pci_save_state(pdev);
6561 if (!r) {
6562 kfree(adev->pci_state);
6563
6564 adev->pci_state = pci_store_saved_state(pdev);
6565
6566 if (!adev->pci_state) {
6567 dev_err(adev->dev, "Failed to store PCI saved state");
6568 return false;
6569 }
6570 } else {
6571 dev_warn(adev->dev, "Failed to save PCI state, err:%d\n", r);
6572 return false;
6573 }
6574
6575 amdgpu_device_cache_switch_state(adev);
6576
6577 return true;
6578 }
6579
amdgpu_device_load_pci_state(struct pci_dev * pdev)6580 bool amdgpu_device_load_pci_state(struct pci_dev *pdev)
6581 {
6582 struct drm_device *dev = pci_get_drvdata(pdev);
6583 struct amdgpu_device *adev = drm_to_adev(dev);
6584 int r;
6585
6586 if (!adev->pci_state)
6587 return false;
6588
6589 r = pci_load_saved_state(pdev, adev->pci_state);
6590
6591 if (!r) {
6592 pci_restore_state(pdev);
6593 } else {
6594 dev_warn(adev->dev, "Failed to load PCI state, err:%d\n", r);
6595 return false;
6596 }
6597
6598 return true;
6599 }
6600
amdgpu_device_flush_hdp(struct amdgpu_device * adev,struct amdgpu_ring * ring)6601 void amdgpu_device_flush_hdp(struct amdgpu_device *adev,
6602 struct amdgpu_ring *ring)
6603 {
6604 #ifdef CONFIG_X86_64
6605 if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev))
6606 return;
6607 #endif
6608 if (adev->gmc.xgmi.connected_to_cpu)
6609 return;
6610
6611 if (ring && ring->funcs->emit_hdp_flush) {
6612 amdgpu_ring_emit_hdp_flush(ring);
6613 return;
6614 }
6615
6616 if (!ring && amdgpu_sriov_runtime(adev)) {
6617 if (!amdgpu_kiq_hdp_flush(adev))
6618 return;
6619 }
6620
6621 amdgpu_hdp_flush(adev, ring);
6622 }
6623
amdgpu_device_invalidate_hdp(struct amdgpu_device * adev,struct amdgpu_ring * ring)6624 void amdgpu_device_invalidate_hdp(struct amdgpu_device *adev,
6625 struct amdgpu_ring *ring)
6626 {
6627 #ifdef CONFIG_X86_64
6628 if ((adev->flags & AMD_IS_APU) && !amdgpu_passthrough(adev))
6629 return;
6630 #endif
6631 if (adev->gmc.xgmi.connected_to_cpu)
6632 return;
6633
6634 amdgpu_hdp_invalidate(adev, ring);
6635 }
6636
amdgpu_in_reset(struct amdgpu_device * adev)6637 int amdgpu_in_reset(struct amdgpu_device *adev)
6638 {
6639 return atomic_read(&adev->reset_domain->in_gpu_reset);
6640 }
6641
6642 /**
6643 * amdgpu_device_halt() - bring hardware to some kind of halt state
6644 *
6645 * @adev: amdgpu_device pointer
6646 *
6647 * Bring hardware to some kind of halt state so that no one can touch it
6648 * any more. It will help to maintain error context when error occurred.
6649 * Compare to a simple hang, the system will keep stable at least for SSH
6650 * access. Then it should be trivial to inspect the hardware state and
6651 * see what's going on. Implemented as following:
6652 *
6653 * 1. drm_dev_unplug() makes device inaccessible to user space(IOCTLs, etc),
6654 * clears all CPU mappings to device, disallows remappings through page faults
6655 * 2. amdgpu_irq_disable_all() disables all interrupts
6656 * 3. amdgpu_fence_driver_hw_fini() signals all HW fences
6657 * 4. set adev->no_hw_access to avoid potential crashes after setp 5
6658 * 5. amdgpu_device_unmap_mmio() clears all MMIO mappings
6659 * 6. pci_disable_device() and pci_wait_for_pending_transaction()
6660 * flush any in flight DMA operations
6661 */
amdgpu_device_halt(struct amdgpu_device * adev)6662 void amdgpu_device_halt(struct amdgpu_device *adev)
6663 {
6664 struct pci_dev *pdev = adev->pdev;
6665 struct drm_device *ddev = adev_to_drm(adev);
6666
6667 amdgpu_xcp_dev_unplug(adev);
6668 drm_dev_unplug(ddev);
6669
6670 amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
6671 amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
6672
6673 amdgpu_irq_disable_all(adev);
6674
6675 amdgpu_fence_driver_hw_fini(adev);
6676
6677 adev->no_hw_access = true;
6678
6679 amdgpu_device_unmap_mmio(adev);
6680
6681 pci_disable_device(pdev);
6682 pci_wait_for_pending_transaction(pdev);
6683 }
6684
6685 /**
6686 * amdgpu_device_get_gang - return a reference to the current gang
6687 * @adev: amdgpu_device pointer
6688 *
6689 * Returns: A new reference to the current gang leader.
6690 */
amdgpu_device_get_gang(struct amdgpu_device * adev)6691 struct dma_fence *amdgpu_device_get_gang(struct amdgpu_device *adev)
6692 {
6693 struct dma_fence *fence;
6694
6695 rcu_read_lock();
6696 fence = dma_fence_get_rcu_safe(&adev->gang_submit);
6697 rcu_read_unlock();
6698 return fence;
6699 }
6700
6701 /**
6702 * amdgpu_device_switch_gang - switch to a new gang
6703 * @adev: amdgpu_device pointer
6704 * @gang: the gang to switch to
6705 *
6706 * Try to switch to a new gang.
6707 * Returns: NULL if we switched to the new gang or a reference to the current
6708 * gang leader.
6709 */
amdgpu_device_switch_gang(struct amdgpu_device * adev,struct dma_fence * gang)6710 struct dma_fence *amdgpu_device_switch_gang(struct amdgpu_device *adev,
6711 struct dma_fence *gang)
6712 {
6713 struct dma_fence *old = NULL;
6714
6715 dma_fence_get(gang);
6716 do {
6717 dma_fence_put(old);
6718 old = amdgpu_device_get_gang(adev);
6719 if (old == gang)
6720 break;
6721
6722 if (!dma_fence_is_signaled(old)) {
6723 dma_fence_put(gang);
6724 return old;
6725 }
6726
6727 } while (cmpxchg((struct dma_fence __force **)&adev->gang_submit,
6728 old, gang) != old);
6729
6730 /*
6731 * Drop it once for the exchanged reference in adev and once for the
6732 * thread local reference acquired in amdgpu_device_get_gang().
6733 */
6734 dma_fence_put(old);
6735 dma_fence_put(old);
6736 return NULL;
6737 }
6738
6739 /**
6740 * amdgpu_device_enforce_isolation - enforce HW isolation
6741 * @adev: the amdgpu device pointer
6742 * @ring: the HW ring the job is supposed to run on
6743 * @job: the job which is about to be pushed to the HW ring
6744 *
6745 * Makes sure that only one client at a time can use the GFX block.
6746 * Returns: The dependency to wait on before the job can be pushed to the HW.
6747 * The function is called multiple times until NULL is returned.
6748 */
amdgpu_device_enforce_isolation(struct amdgpu_device * adev,struct amdgpu_ring * ring,struct amdgpu_job * job)6749 struct dma_fence *amdgpu_device_enforce_isolation(struct amdgpu_device *adev,
6750 struct amdgpu_ring *ring,
6751 struct amdgpu_job *job)
6752 {
6753 struct amdgpu_isolation *isolation = &adev->isolation[ring->xcp_id];
6754 struct drm_sched_fence *f = job->base.s_fence;
6755 struct dma_fence *dep;
6756 void *owner;
6757 int r;
6758
6759 /*
6760 * For now enforce isolation only for the GFX block since we only need
6761 * the cleaner shader on those rings.
6762 */
6763 if (ring->funcs->type != AMDGPU_RING_TYPE_GFX &&
6764 ring->funcs->type != AMDGPU_RING_TYPE_COMPUTE)
6765 return NULL;
6766
6767 /*
6768 * All submissions where enforce isolation is false are handled as if
6769 * they come from a single client. Use ~0l as the owner to distinct it
6770 * from kernel submissions where the owner is NULL.
6771 */
6772 owner = job->enforce_isolation ? f->owner : (void *)~0l;
6773
6774 mutex_lock(&adev->enforce_isolation_mutex);
6775
6776 /*
6777 * The "spearhead" submission is the first one which changes the
6778 * ownership to its client. We always need to wait for it to be
6779 * pushed to the HW before proceeding with anything.
6780 */
6781 if (&f->scheduled != isolation->spearhead &&
6782 !dma_fence_is_signaled(isolation->spearhead)) {
6783 dep = isolation->spearhead;
6784 goto out_grab_ref;
6785 }
6786
6787 if (isolation->owner != owner) {
6788
6789 /*
6790 * Wait for any gang to be assembled before switching to a
6791 * different owner or otherwise we could deadlock the
6792 * submissions.
6793 */
6794 if (!job->gang_submit) {
6795 dep = amdgpu_device_get_gang(adev);
6796 if (!dma_fence_is_signaled(dep))
6797 goto out_return_dep;
6798 dma_fence_put(dep);
6799 }
6800
6801 dma_fence_put(isolation->spearhead);
6802 isolation->spearhead = dma_fence_get(&f->scheduled);
6803 amdgpu_sync_move(&isolation->active, &isolation->prev);
6804 trace_amdgpu_isolation(isolation->owner, owner);
6805 isolation->owner = owner;
6806 }
6807
6808 /*
6809 * Specifying the ring here helps to pipeline submissions even when
6810 * isolation is enabled. If that is not desired for testing NULL can be
6811 * used instead of the ring to enforce a CPU round trip while switching
6812 * between clients.
6813 */
6814 dep = amdgpu_sync_peek_fence(&isolation->prev, ring);
6815 r = amdgpu_sync_fence(&isolation->active, &f->finished, GFP_NOWAIT);
6816 if (r)
6817 dev_warn(adev->dev, "OOM tracking isolation\n");
6818
6819 out_grab_ref:
6820 dma_fence_get(dep);
6821 out_return_dep:
6822 mutex_unlock(&adev->enforce_isolation_mutex);
6823 return dep;
6824 }
6825
amdgpu_device_has_display_hardware(struct amdgpu_device * adev)6826 bool amdgpu_device_has_display_hardware(struct amdgpu_device *adev)
6827 {
6828 switch (adev->asic_type) {
6829 #ifdef CONFIG_DRM_AMDGPU_SI
6830 case CHIP_HAINAN:
6831 #endif
6832 case CHIP_TOPAZ:
6833 /* chips with no display hardware */
6834 return false;
6835 #ifdef CONFIG_DRM_AMDGPU_SI
6836 case CHIP_TAHITI:
6837 case CHIP_PITCAIRN:
6838 case CHIP_VERDE:
6839 case CHIP_OLAND:
6840 #endif
6841 #ifdef CONFIG_DRM_AMDGPU_CIK
6842 case CHIP_BONAIRE:
6843 case CHIP_HAWAII:
6844 case CHIP_KAVERI:
6845 case CHIP_KABINI:
6846 case CHIP_MULLINS:
6847 #endif
6848 case CHIP_TONGA:
6849 case CHIP_FIJI:
6850 case CHIP_POLARIS10:
6851 case CHIP_POLARIS11:
6852 case CHIP_POLARIS12:
6853 case CHIP_VEGAM:
6854 case CHIP_CARRIZO:
6855 case CHIP_STONEY:
6856 /* chips with display hardware */
6857 return true;
6858 default:
6859 /* IP discovery */
6860 if (!amdgpu_ip_version(adev, DCE_HWIP, 0) ||
6861 (adev->harvest_ip_mask & AMD_HARVEST_IP_DMU_MASK))
6862 return false;
6863 return true;
6864 }
6865 }
6866
amdgpu_get_soft_full_reset_mask(struct amdgpu_ring * ring)6867 ssize_t amdgpu_get_soft_full_reset_mask(struct amdgpu_ring *ring)
6868 {
6869 ssize_t size = 0;
6870
6871 if (!ring || !ring->adev)
6872 return size;
6873
6874 if (amdgpu_device_should_recover_gpu(ring->adev))
6875 size |= AMDGPU_RESET_TYPE_FULL;
6876
6877 if (unlikely(!ring->adev->debug_disable_soft_recovery) &&
6878 !amdgpu_sriov_vf(ring->adev) && ring->funcs->soft_recovery)
6879 size |= AMDGPU_RESET_TYPE_SOFT_RESET;
6880
6881 return size;
6882 }
6883
amdgpu_show_reset_mask(char * buf,uint32_t supported_reset)6884 ssize_t amdgpu_show_reset_mask(char *buf, uint32_t supported_reset)
6885 {
6886 ssize_t size = 0;
6887
6888 if (supported_reset == 0) {
6889 size += sysfs_emit_at(buf, size, "unsupported");
6890 size += sysfs_emit_at(buf, size, "\n");
6891 return size;
6892
6893 }
6894
6895 if (supported_reset & AMDGPU_RESET_TYPE_SOFT_RESET)
6896 size += sysfs_emit_at(buf, size, "soft ");
6897
6898 if (supported_reset & AMDGPU_RESET_TYPE_PER_QUEUE)
6899 size += sysfs_emit_at(buf, size, "queue ");
6900
6901 if (supported_reset & AMDGPU_RESET_TYPE_PER_PIPE)
6902 size += sysfs_emit_at(buf, size, "pipe ");
6903
6904 if (supported_reset & AMDGPU_RESET_TYPE_FULL)
6905 size += sysfs_emit_at(buf, size, "full ");
6906
6907 size += sysfs_emit_at(buf, size, "\n");
6908 return size;
6909 }
6910
amdgpu_device_set_uid(struct amdgpu_uid * uid_info,enum amdgpu_uid_type type,uint8_t inst,uint64_t uid)6911 void amdgpu_device_set_uid(struct amdgpu_uid *uid_info,
6912 enum amdgpu_uid_type type, uint8_t inst,
6913 uint64_t uid)
6914 {
6915 if (!uid_info)
6916 return;
6917
6918 if (type >= AMDGPU_UID_TYPE_MAX) {
6919 dev_err_once(uid_info->adev->dev, "Invalid UID type %d\n",
6920 type);
6921 return;
6922 }
6923
6924 if (inst >= AMDGPU_UID_INST_MAX) {
6925 dev_err_once(uid_info->adev->dev, "Invalid UID instance %d\n",
6926 inst);
6927 return;
6928 }
6929
6930 if (uid_info->uid[type][inst] != 0) {
6931 dev_warn_once(
6932 uid_info->adev->dev,
6933 "Overwriting existing UID %llu for type %d instance %d\n",
6934 uid_info->uid[type][inst], type, inst);
6935 }
6936
6937 uid_info->uid[type][inst] = uid;
6938 }
6939
amdgpu_device_get_uid(struct amdgpu_uid * uid_info,enum amdgpu_uid_type type,uint8_t inst)6940 u64 amdgpu_device_get_uid(struct amdgpu_uid *uid_info,
6941 enum amdgpu_uid_type type, uint8_t inst)
6942 {
6943 if (!uid_info)
6944 return 0;
6945
6946 if (type >= AMDGPU_UID_TYPE_MAX) {
6947 dev_err_once(uid_info->adev->dev, "Invalid UID type %d\n",
6948 type);
6949 return 0;
6950 }
6951
6952 if (inst >= AMDGPU_UID_INST_MAX) {
6953 dev_err_once(uid_info->adev->dev, "Invalid UID instance %d\n",
6954 inst);
6955 return 0;
6956 }
6957
6958 return uid_info->uid[type][inst];
6959 }
6960