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