Skip to content

Commit 7e28183

Browse files
committed
Merge tag 'amd-drm-next-6.17-2025-07-01' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-6.17-2025-07-01: amdgpu: - FAMS2 fixes - OLED fixes - Misc cleanups - AUX fixes - DMCUB updates - SR-IOV hibernation support - RAS updates - DP tunneling fixes - DML2 fixes - Backlight improvements - Suspend improvements - Use scaling for non-native modes on eDP - SDMA 4.4.x fixes - PCIe DPM fixes - SDMA 5.x fixes - Cleaner shader updates for GC 9.x - Remove fence slab - ISP genpd support - Parition handling rework - SDMA FW checks for userq support - Add missing firmware declaration - Fix leak in amdgpu_ctx_mgr_entity_fini() - Freesync fix - Ring reset refactoring - Legacy dpm verbosity changes amdkfd: - GWS fix - mtype fix for ext coherent system memory - MMU notifier fix - gfx7/8 fix radeon: - CS validation support for additional GL extensions - Bump driver version for new CS validation checks From: Alex Deucher <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Dave Airlie <[email protected]>
2 parents f41830c + 2ecdb61 commit 7e28183

File tree

276 files changed

+6045
-3928
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

276 files changed

+6045
-3928
lines changed

Documentation/gpu/amdgpu/debugging.rst

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -85,3 +85,21 @@ UMR
8585
GPU debugging and diagnostics tool. Please see the umr
8686
`documentation <https://umr.readthedocs.io/en/main/>`_ for more information
8787
about its capabilities.
88+
89+
Debugging backlight brightness
90+
==============================
91+
Default backlight brightness is intended to be set via the policy advertised
92+
by the firmware. Firmware will often provide different defaults for AC or DC.
93+
Furthermore, some userspace software will save backlight brightness during
94+
the previous boot and attempt to restore it.
95+
96+
Some firmware also has support for a feature called "Custom Backlight Curves"
97+
where an input value for brightness is mapped along a linearly interpolated
98+
curve of brightness values that better match display characteristics.
99+
100+
In the event of problems happening with backlight, there is a trace event
101+
that can be enabled at bootup to log every brightness change request.
102+
This can help isolate where the problem is. To enable the trace event add
103+
the following to the kernel command line:
104+
105+
tp_printk trace_event=amdgpu_dm:amdgpu_dm_brightness:mod:amdgpu trace_buf_size=1M

drivers/gpu/drm/amd/amdgpu/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ amdgpu-y += amdgpu_device.o amdgpu_doorbell_mgr.o amdgpu_kms.o \
6666
amdgpu_fw_attestation.o amdgpu_securedisplay.o \
6767
amdgpu_eeprom.o amdgpu_mca.o amdgpu_psp_ta.o amdgpu_lsdma.o \
6868
amdgpu_ring_mux.o amdgpu_xcp.o amdgpu_seq64.o amdgpu_aca.o amdgpu_dev_coredump.o \
69-
amdgpu_cper.o amdgpu_userq_fence.o amdgpu_eviction_fence.o
69+
amdgpu_cper.o amdgpu_userq_fence.o amdgpu_eviction_fence.o amdgpu_ip.o
7070

7171
amdgpu-$(CONFIG_PROC_FS) += amdgpu_fdinfo.o
7272

drivers/gpu/drm/amd/amdgpu/aldebaran.c

Lines changed: 29 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -71,18 +71,29 @@ aldebaran_get_reset_handler(struct amdgpu_reset_control *reset_ctl,
7171
return NULL;
7272
}
7373

74+
static inline uint32_t aldebaran_get_ip_block_mask(struct amdgpu_device *adev)
75+
{
76+
uint32_t ip_block_mask = BIT(AMD_IP_BLOCK_TYPE_GFX) |
77+
BIT(AMD_IP_BLOCK_TYPE_SDMA);
78+
79+
if (adev->aid_mask)
80+
ip_block_mask |= BIT(AMD_IP_BLOCK_TYPE_IH);
81+
82+
return ip_block_mask;
83+
}
84+
7485
static int aldebaran_mode2_suspend_ip(struct amdgpu_device *adev)
7586
{
87+
uint32_t ip_block_mask = aldebaran_get_ip_block_mask(adev);
88+
uint32_t ip_block;
7689
int r, i;
7790

7891
amdgpu_device_set_pg_state(adev, AMD_PG_STATE_UNGATE);
7992
amdgpu_device_set_cg_state(adev, AMD_CG_STATE_UNGATE);
8093

8194
for (i = adev->num_ip_blocks - 1; i >= 0; i--) {
82-
if (!(adev->ip_blocks[i].version->type ==
83-
AMD_IP_BLOCK_TYPE_GFX ||
84-
adev->ip_blocks[i].version->type ==
85-
AMD_IP_BLOCK_TYPE_SDMA))
95+
ip_block = BIT(adev->ip_blocks[i].version->type);
96+
if (!(ip_block_mask & ip_block))
8697
continue;
8798

8899
r = amdgpu_ip_block_suspend(&adev->ip_blocks[i]);
@@ -200,8 +211,10 @@ aldebaran_mode2_perform_reset(struct amdgpu_reset_control *reset_ctl,
200211
static int aldebaran_mode2_restore_ip(struct amdgpu_device *adev)
201212
{
202213
struct amdgpu_firmware_info *ucode_list[AMDGPU_UCODE_ID_MAXIMUM];
214+
uint32_t ip_block_mask = aldebaran_get_ip_block_mask(adev);
203215
struct amdgpu_firmware_info *ucode;
204216
struct amdgpu_ip_block *cmn_block;
217+
struct amdgpu_ip_block *ih_block;
205218
int ucode_count = 0;
206219
int i, r;
207220

@@ -243,6 +256,18 @@ static int aldebaran_mode2_restore_ip(struct amdgpu_device *adev)
243256
if (r)
244257
return r;
245258

259+
if (ip_block_mask & BIT(AMD_IP_BLOCK_TYPE_IH)) {
260+
ih_block = amdgpu_device_ip_get_ip_block(adev,
261+
AMD_IP_BLOCK_TYPE_IH);
262+
if (unlikely(!ih_block)) {
263+
dev_err(adev->dev, "Failed to get IH handle\n");
264+
return -EINVAL;
265+
}
266+
r = amdgpu_ip_block_resume(ih_block);
267+
if (r)
268+
return r;
269+
}
270+
246271
/* Reinit GFXHUB */
247272
adev->gfxhub.funcs->init(adev);
248273
r = adev->gfxhub.funcs->gart_enable(adev);

drivers/gpu/drm/amd/amdgpu/amdgpu.h

Lines changed: 24 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -470,9 +470,6 @@ struct amdgpu_sa_manager {
470470
void *cpu_ptr;
471471
};
472472

473-
int amdgpu_fence_slab_init(void);
474-
void amdgpu_fence_slab_fini(void);
475-
476473
/*
477474
* IRQS.
478475
*/
@@ -1282,6 +1279,7 @@ struct amdgpu_device {
12821279
bool debug_exp_resets;
12831280
bool debug_disable_gpu_ring_reset;
12841281
bool debug_vm_userptr;
1282+
bool debug_disable_ce_logs;
12851283

12861284
/* Protection for the following isolation structure */
12871285
struct mutex enforce_isolation_mutex;
@@ -1336,6 +1334,11 @@ static inline struct amdgpu_device *amdgpu_ttm_adev(struct ttm_device *bdev)
13361334
return container_of(bdev, struct amdgpu_device, mman.bdev);
13371335
}
13381336

1337+
static inline bool amdgpu_is_multi_aid(struct amdgpu_device *adev)
1338+
{
1339+
return !!adev->aid_mask;
1340+
}
1341+
13391342
int amdgpu_device_init(struct amdgpu_device *adev,
13401343
uint32_t flags);
13411344
void amdgpu_device_fini_hw(struct amdgpu_device *adev);
@@ -1387,7 +1390,8 @@ void amdgpu_device_indirect_wreg64(struct amdgpu_device *adev,
13871390
void amdgpu_device_indirect_wreg64_ext(struct amdgpu_device *adev,
13881391
u64 reg_addr, u64 reg_data);
13891392
u32 amdgpu_device_get_rev_id(struct amdgpu_device *adev);
1390-
bool amdgpu_device_asic_has_dc_support(enum amd_asic_type asic_type);
1393+
bool amdgpu_device_asic_has_dc_support(struct pci_dev *pdev,
1394+
enum amd_asic_type asic_type);
13911395
bool amdgpu_device_has_dc_support(struct amdgpu_device *adev);
13921396

13931397
void amdgpu_device_set_sriov_virtual_display(struct amdgpu_device *adev);
@@ -1619,6 +1623,7 @@ void amdgpu_driver_release_kms(struct drm_device *dev);
16191623

16201624
int amdgpu_device_ip_suspend(struct amdgpu_device *adev);
16211625
int amdgpu_device_prepare(struct drm_device *dev);
1626+
void amdgpu_device_complete(struct drm_device *dev);
16221627
int amdgpu_device_suspend(struct drm_device *dev, bool fbcon);
16231628
int amdgpu_device_resume(struct drm_device *dev, bool fbcon);
16241629
u32 amdgpu_get_vblank_counter_kms(struct drm_crtc *crtc);
@@ -1760,4 +1765,19 @@ extern const struct attribute_group amdgpu_flash_attr_group;
17601765

17611766
void amdgpu_set_init_level(struct amdgpu_device *adev,
17621767
enum amdgpu_init_lvl_id lvl);
1768+
1769+
static inline int amdgpu_device_bus_status_check(struct amdgpu_device *adev)
1770+
{
1771+
u32 status;
1772+
int r;
1773+
1774+
r = pci_read_config_dword(adev->pdev, PCI_COMMAND, &status);
1775+
if (r || PCI_POSSIBLE_ERROR(status)) {
1776+
dev_err(adev->dev, "device lost from bus!");
1777+
return -ENODEV;
1778+
}
1779+
1780+
return 0;
1781+
}
1782+
17631783
#endif

drivers/gpu/drm/amd/amdgpu/amdgpu_aca.c

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,11 @@ static void aca_smu_bank_dump(struct amdgpu_device *adev, int idx, int total, st
115115
u64 event_id = qctx ? qctx->evid.event_id : RAS_EVENT_INVALID_ID;
116116
int i;
117117

118+
if (adev->debug_disable_ce_logs &&
119+
bank->smu_err_type == ACA_SMU_TYPE_CE &&
120+
!ACA_BANK_ERR_IS_DEFFERED(bank))
121+
return;
122+
118123
RAS_EVENT_LOG(adev, event_id, HW_ERR "Accelerator Check Architecture events logged\n");
119124
/* plus 1 for output format, e.g: ACA[08/08]: xxxx */
120125
for (i = 0; i < ARRAY_SIZE(aca_regs); i++)

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.c

Lines changed: 22 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -248,18 +248,34 @@ void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
248248
kgd2kfd_interrupt(adev->kfd.dev, ih_ring_entry);
249249
}
250250

251-
void amdgpu_amdkfd_suspend(struct amdgpu_device *adev, bool run_pm)
251+
void amdgpu_amdkfd_suspend(struct amdgpu_device *adev, bool suspend_proc)
252252
{
253253
if (adev->kfd.dev)
254-
kgd2kfd_suspend(adev->kfd.dev, run_pm);
254+
kgd2kfd_suspend(adev->kfd.dev, suspend_proc);
255255
}
256256

257-
int amdgpu_amdkfd_resume(struct amdgpu_device *adev, bool run_pm)
257+
int amdgpu_amdkfd_resume(struct amdgpu_device *adev, bool resume_proc)
258258
{
259259
int r = 0;
260260

261261
if (adev->kfd.dev)
262-
r = kgd2kfd_resume(adev->kfd.dev, run_pm);
262+
r = kgd2kfd_resume(adev->kfd.dev, resume_proc);
263+
264+
return r;
265+
}
266+
267+
void amdgpu_amdkfd_suspend_process(struct amdgpu_device *adev)
268+
{
269+
if (adev->kfd.dev)
270+
kgd2kfd_suspend_process(adev->kfd.dev);
271+
}
272+
273+
int amdgpu_amdkfd_resume_process(struct amdgpu_device *adev)
274+
{
275+
int r = 0;
276+
277+
if (adev->kfd.dev)
278+
r = kgd2kfd_resume_process(adev->kfd.dev);
263279

264280
return r;
265281
}
@@ -749,12 +765,12 @@ int amdgpu_amdkfd_send_close_event_drain_irq(struct amdgpu_device *adev,
749765

750766
int amdgpu_amdkfd_check_and_lock_kfd(struct amdgpu_device *adev)
751767
{
752-
return kgd2kfd_check_and_lock_kfd();
768+
return kgd2kfd_check_and_lock_kfd(adev->kfd.dev);
753769
}
754770

755771
void amdgpu_amdkfd_unlock_kfd(struct amdgpu_device *adev)
756772
{
757-
kgd2kfd_unlock_kfd();
773+
kgd2kfd_unlock_kfd(adev->kfd.dev);
758774
}
759775

760776

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd.h

Lines changed: 23 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -154,8 +154,10 @@ struct amdkfd_process_info {
154154
int amdgpu_amdkfd_init(void);
155155
void amdgpu_amdkfd_fini(void);
156156

157-
void amdgpu_amdkfd_suspend(struct amdgpu_device *adev, bool run_pm);
158-
int amdgpu_amdkfd_resume(struct amdgpu_device *adev, bool run_pm);
157+
void amdgpu_amdkfd_suspend(struct amdgpu_device *adev, bool suspend_proc);
158+
int amdgpu_amdkfd_resume(struct amdgpu_device *adev, bool resume_proc);
159+
void amdgpu_amdkfd_suspend_process(struct amdgpu_device *adev);
160+
int amdgpu_amdkfd_resume_process(struct amdgpu_device *adev);
159161
void amdgpu_amdkfd_interrupt(struct amdgpu_device *adev,
160162
const void *ih_ring_entry);
161163
void amdgpu_amdkfd_device_probe(struct amdgpu_device *adev);
@@ -411,16 +413,18 @@ struct kfd_dev *kgd2kfd_probe(struct amdgpu_device *adev, bool vf);
411413
bool kgd2kfd_device_init(struct kfd_dev *kfd,
412414
const struct kgd2kfd_shared_resources *gpu_resources);
413415
void kgd2kfd_device_exit(struct kfd_dev *kfd);
414-
void kgd2kfd_suspend(struct kfd_dev *kfd, bool run_pm);
415-
int kgd2kfd_resume(struct kfd_dev *kfd, bool run_pm);
416+
void kgd2kfd_suspend(struct kfd_dev *kfd, bool suspend_proc);
417+
int kgd2kfd_resume(struct kfd_dev *kfd, bool resume_proc);
418+
void kgd2kfd_suspend_process(struct kfd_dev *kfd);
419+
int kgd2kfd_resume_process(struct kfd_dev *kfd);
416420
int kgd2kfd_pre_reset(struct kfd_dev *kfd,
417421
struct amdgpu_reset_context *reset_context);
418422
int kgd2kfd_post_reset(struct kfd_dev *kfd);
419423
void kgd2kfd_interrupt(struct kfd_dev *kfd, const void *ih_ring_entry);
420424
void kgd2kfd_set_sram_ecc_flag(struct kfd_dev *kfd);
421425
void kgd2kfd_smi_event_throttle(struct kfd_dev *kfd, uint64_t throttle_bitmask);
422-
int kgd2kfd_check_and_lock_kfd(void);
423-
void kgd2kfd_unlock_kfd(void);
426+
int kgd2kfd_check_and_lock_kfd(struct kfd_dev *kfd);
427+
void kgd2kfd_unlock_kfd(struct kfd_dev *kfd);
424428
int kgd2kfd_start_sched(struct kfd_dev *kfd, uint32_t node_id);
425429
int kgd2kfd_stop_sched(struct kfd_dev *kfd, uint32_t node_id);
426430
bool kgd2kfd_compute_active(struct kfd_dev *kfd, uint32_t node_id);
@@ -454,11 +458,20 @@ static inline void kgd2kfd_device_exit(struct kfd_dev *kfd)
454458
{
455459
}
456460

457-
static inline void kgd2kfd_suspend(struct kfd_dev *kfd, bool run_pm)
461+
static inline void kgd2kfd_suspend(struct kfd_dev *kfd, bool suspend_proc)
458462
{
459463
}
460464

461-
static inline int kgd2kfd_resume(struct kfd_dev *kfd, bool run_pm)
465+
static inline int kgd2kfd_resume(struct kfd_dev *kfd, bool resume_proc)
466+
{
467+
return 0;
468+
}
469+
470+
static inline void kgd2kfd_suspend_process(struct kfd_dev *kfd)
471+
{
472+
}
473+
474+
static inline int kgd2kfd_resume_process(struct kfd_dev *kfd)
462475
{
463476
return 0;
464477
}
@@ -489,12 +502,12 @@ void kgd2kfd_smi_event_throttle(struct kfd_dev *kfd, uint64_t throttle_bitmask)
489502
{
490503
}
491504

492-
static inline int kgd2kfd_check_and_lock_kfd(void)
505+
static inline int kgd2kfd_check_and_lock_kfd(struct kfd_dev *kfd)
493506
{
494507
return 0;
495508
}
496509

497-
static inline void kgd2kfd_unlock_kfd(void)
510+
static inline void kgd2kfd_unlock_kfd(struct kfd_dev *kfd)
498511
{
499512
}
500513

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_arcturus.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -320,7 +320,7 @@ static void set_barrier_auto_waitcnt(struct amdgpu_device *adev, bool enable_wai
320320
if (!down_read_trylock(&adev->reset_domain->sem))
321321
return;
322322

323-
amdgpu_amdkfd_suspend(adev, false);
323+
amdgpu_amdkfd_suspend(adev, true);
324324

325325
if (suspend_resume_compute_scheduler(adev, true))
326326
goto out;
@@ -333,7 +333,7 @@ static void set_barrier_auto_waitcnt(struct amdgpu_device *adev, bool enable_wai
333333
out:
334334
suspend_resume_compute_scheduler(adev, false);
335335

336-
amdgpu_amdkfd_resume(adev, false);
336+
amdgpu_amdkfd_resume(adev, true);
337337

338338
up_read(&adev->reset_domain->sem);
339339
}

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v7.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -561,6 +561,13 @@ static uint32_t read_vmid_from_vmfault_reg(struct amdgpu_device *adev)
561561
return REG_GET_FIELD(status, VM_CONTEXT1_PROTECTION_FAULT_STATUS, VMID);
562562
}
563563

564+
static uint32_t kgd_hqd_sdma_get_doorbell(struct amdgpu_device *adev,
565+
int engine, int queue)
566+
567+
{
568+
return 0;
569+
}
570+
564571
const struct kfd2kgd_calls gfx_v7_kfd2kgd = {
565572
.program_sh_mem_settings = kgd_program_sh_mem_settings,
566573
.set_pasid_vmid_mapping = kgd_set_pasid_vmid_mapping,
@@ -578,4 +585,5 @@ const struct kfd2kgd_calls gfx_v7_kfd2kgd = {
578585
.set_scratch_backing_va = set_scratch_backing_va,
579586
.set_vm_context_page_table_base = set_vm_context_page_table_base,
580587
.read_vmid_from_vmfault_reg = read_vmid_from_vmfault_reg,
588+
.hqd_sdma_get_doorbell = kgd_hqd_sdma_get_doorbell,
581589
};

drivers/gpu/drm/amd/amdgpu/amdgpu_amdkfd_gfx_v8.c

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -582,6 +582,13 @@ static void set_vm_context_page_table_base(struct amdgpu_device *adev,
582582
lower_32_bits(page_table_base));
583583
}
584584

585+
static uint32_t kgd_hqd_sdma_get_doorbell(struct amdgpu_device *adev,
586+
int engine, int queue)
587+
588+
{
589+
return 0;
590+
}
591+
585592
const struct kfd2kgd_calls gfx_v8_kfd2kgd = {
586593
.program_sh_mem_settings = kgd_program_sh_mem_settings,
587594
.set_pasid_vmid_mapping = kgd_set_pasid_vmid_mapping,
@@ -599,4 +606,5 @@ const struct kfd2kgd_calls gfx_v8_kfd2kgd = {
599606
get_atc_vmid_pasid_mapping_info,
600607
.set_scratch_backing_va = set_scratch_backing_va,
601608
.set_vm_context_page_table_base = set_vm_context_page_table_base,
609+
.hqd_sdma_get_doorbell = kgd_hqd_sdma_get_doorbell,
602610
};

0 commit comments

Comments
 (0)