Skip to content

Commit 7b5570d

Browse files
committed
Merge tag 'amd-drm-next-6.20-2026-02-19' of https://gitlab.freedesktop.org/agd5f/linux into drm-next
amd-drm-next-6.20-2026-02-19: amdgpu: - Fixes for DC analog support - DC FAMS fixes - DML 2.1 fixes - eDP fixes - Misc DC fixes - Fastboot fix - 3DLUT fixes - GPUVM fixes - 64bpp format fix - XGMI fix - Fix for MacBooks with switchable gfx amdkfd: - Fix piority inversion with MQDs - NULL check fix Signed-off-by: Dave Airlie <airlied@redhat.com> From: Alex Deucher <alexander.deucher@amd.com> Link: https://patch.msgid.link/20260219172807.2451298-1-alexander.deucher@amd.com
2 parents 3e21385 + 3ce2ad2 commit 7b5570d

79 files changed

Lines changed: 458 additions & 275 deletions

File tree

Some content is hidden

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

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -107,7 +107,7 @@ static const char *amdkfd_fence_get_timeline_name(struct dma_fence *f)
107107
{
108108
struct amdgpu_amdkfd_fence *fence = to_amdgpu_amdkfd_fence(f);
109109

110-
return fence->timeline_name;
110+
return fence ? fence->timeline_name : NULL;
111111
}
112112

113113
/**

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

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4615,9 +4615,10 @@ int amdgpu_device_init(struct amdgpu_device *adev,
46154615
/* APUs w/ gfx9 onwards doesn't reply on PCIe atomics, rather it is a
46164616
* internal path natively support atomics, set have_atomics_support to true.
46174617
*/
4618-
} else if ((adev->flags & AMD_IS_APU) &&
4619-
(amdgpu_ip_version(adev, GC_HWIP, 0) >
4620-
IP_VERSION(9, 0, 0))) {
4618+
} else if ((adev->flags & AMD_IS_APU &&
4619+
amdgpu_ip_version(adev, GC_HWIP, 0) > IP_VERSION(9, 0, 0)) ||
4620+
(adev->gmc.xgmi.connected_to_cpu &&
4621+
amdgpu_ip_version(adev, GC_HWIP, 0) >= IP_VERSION(12, 1, 0))) {
46214622
adev->have_atomics_support = true;
46224623
} else {
46234624
adev->have_atomics_support =

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

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1068,6 +1068,16 @@ void amdgpu_gmc_get_vbios_allocations(struct amdgpu_device *adev)
10681068
case CHIP_RENOIR:
10691069
adev->mman.keep_stolen_vga_memory = true;
10701070
break;
1071+
case CHIP_POLARIS10:
1072+
case CHIP_POLARIS11:
1073+
case CHIP_POLARIS12:
1074+
/* MacBookPros with switchable graphics put VRAM at 0 when
1075+
* the iGPU is enabled which results in cursor issues if
1076+
* the cursor ends up at 0. Reserve vram at 0 in that case.
1077+
*/
1078+
if (adev->gmc.vram_start == 0)
1079+
adev->mman.keep_stolen_vga_memory = true;
1080+
break;
10711081
default:
10721082
adev->mman.keep_stolen_vga_memory = false;
10731083
break;

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -33,9 +33,9 @@
3333
#include "amdgpu_ras.h"
3434

3535
/* VA hole for 48bit and 57bit addresses */
36-
#define AMDGPU_GMC_HOLE_START (adev->vm_manager.root_level == AMDGPU_VM_PDB3 ?\
36+
#define AMDGPU_GMC_HOLE_START (adev->vm_manager.max_level == 4 ?\
3737
0x0100000000000000ULL : 0x0000800000000000ULL)
38-
#define AMDGPU_GMC_HOLE_END (adev->vm_manager.root_level == AMDGPU_VM_PDB3 ?\
38+
#define AMDGPU_GMC_HOLE_END (adev->vm_manager.max_level == 4 ?\
3939
0xff00000000000000ULL : 0xffff800000000000ULL)
4040

4141
/*
@@ -45,8 +45,8 @@
4545
* This mask is used to remove the upper 16bits of the VA and so come up with
4646
* the linear addr value.
4747
*/
48-
#define AMDGPU_GMC_HOLE_MASK (adev->vm_manager.root_level == AMDGPU_VM_PDB3 ?\
49-
0x00ffffffffffffffULL : 0x0000ffffffffffffULL)
48+
#define AMDGPU_GMC_HOLE_MASK (adev->vm_manager.max_level == 4 ?\
49+
0x01ffffffffffffffULL : 0x0000ffffffffffffULL)
5050

5151
/*
5252
* Ring size as power of two for the log of recent faults.

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2400,6 +2400,7 @@ void amdgpu_vm_adjust_size(struct amdgpu_device *adev, uint32_t min_vm_size,
24002400
}
24012401

24022402
adev->vm_manager.max_pfn = (uint64_t)vm_size << 18;
2403+
adev->vm_manager.max_level = max_level;
24032404

24042405
tmp = roundup_pow_of_two(adev->vm_manager.max_pfn);
24052406
if (amdgpu_vm_block_size != -1)

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -456,6 +456,7 @@ struct amdgpu_vm_manager {
456456
bool concurrent_flush;
457457

458458
uint64_t max_pfn;
459+
uint32_t max_level;
459460
uint32_t num_level;
460461
uint32_t block_size;
461462
uint32_t fragment_size;

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

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -395,7 +395,10 @@ static void mmhub_v4_2_0_mid_enable_system_domain(struct amdgpu_device *adev,
395395
tmp = REG_SET_FIELD(tmp, MMVM_CONTEXT0_CNTL,
396396
ENABLE_CONTEXT, 1);
397397
tmp = REG_SET_FIELD(tmp, MMVM_CONTEXT0_CNTL,
398-
PAGE_TABLE_DEPTH, 0);
398+
PAGE_TABLE_DEPTH, adev->gmc.vmid0_page_table_depth);
399+
tmp = REG_SET_FIELD(tmp, MMVM_CONTEXT0_CNTL,
400+
PAGE_TABLE_BLOCK_SIZE,
401+
adev->gmc.vmid0_page_table_block_size);
399402
tmp = REG_SET_FIELD(tmp, MMVM_CONTEXT0_CNTL,
400403
RETRY_PERMISSION_OR_INVALID_PAGE_FAULT, 0);
401404
WREG32_SOC15(MMHUB, GET_INST(MMHUB, i),

drivers/gpu/drm/amd/amdkfd/kfd_crat.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2359,7 +2359,7 @@ static int kfd_create_vcrat_image_gpu(void *pcrat_image,
23592359
if (kdev->kfd->hive_id) {
23602360
for (nid = 0; nid < proximity_domain; ++nid) {
23612361
peer_dev = kfd_topology_device_by_proximity_domain_no_lock(nid);
2362-
if (!peer_dev->gpu)
2362+
if (!peer_dev || !peer_dev->gpu)
23632363
continue;
23642364
if (peer_dev->gpu->kfd->hive_id != kdev->kfd->hive_id)
23652365
continue;

drivers/gpu/drm/amd/amdkfd/kfd_debug.c

Lines changed: 12 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -523,10 +523,15 @@ int kfd_dbg_trap_set_flags(struct kfd_process *target, uint32_t *flags)
523523
int i, r = 0, rewind_count = 0;
524524

525525
for (i = 0; i < target->n_pdds; i++) {
526+
uint32_t caps;
527+
uint32_t caps2;
526528
struct kfd_topology_device *topo_dev =
527-
kfd_topology_device_by_id(target->pdds[i]->dev->id);
528-
uint32_t caps = topo_dev->node_props.capability;
529-
uint32_t caps2 = topo_dev->node_props.capability2;
529+
kfd_topology_device_by_id(target->pdds[i]->dev->id);
530+
if (!topo_dev)
531+
return -EINVAL;
532+
533+
caps = topo_dev->node_props.capability;
534+
caps2 = topo_dev->node_props.capability2;
530535

531536
if (!(caps & HSA_CAP_TRAP_DEBUG_PRECISE_MEMORY_OPERATIONS_SUPPORTED) &&
532537
(*flags & KFD_DBG_TRAP_FLAG_SINGLE_MEM_OP)) {
@@ -1086,6 +1091,10 @@ int kfd_dbg_trap_device_snapshot(struct kfd_process *target,
10861091
for (i = 0; i < tmp_num_devices; i++) {
10871092
struct kfd_process_device *pdd = target->pdds[i];
10881093
struct kfd_topology_device *topo_dev = kfd_topology_device_by_id(pdd->dev->id);
1094+
if (!topo_dev) {
1095+
r = -EINVAL;
1096+
break;
1097+
}
10891098

10901099
device_info.gpu_id = pdd->dev->id;
10911100
device_info.exception_status = pdd->exception_status;

drivers/gpu/drm/amd/amdkfd/kfd_mqd_manager_cik.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ static void update_cu_mask(struct mqd_manager *mm, void *mqd,
7070
static void set_priority(struct cik_mqd *m, struct queue_properties *q)
7171
{
7272
m->cp_hqd_pipe_priority = pipe_priority_map[q->priority];
73-
m->cp_hqd_queue_priority = q->priority;
73+
/* m->cp_hqd_queue_priority = q->priority; */
7474
}
7575

7676
static struct kfd_mem_obj *allocate_mqd(struct mqd_manager *mm,

0 commit comments

Comments
 (0)