Commit 504f3cea authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'amd-drm-next-6.20-2026-01-23' of...

Merge tag 'amd-drm-next-6.20-2026-01-23' of https://gitlab.freedesktop.org/agd5f/linux

 into drm-next

amd-drm-next-6.20-2026-01-23:

amdgpu:
- GC 12 fix
- UserQ fixes
- Misc error path fixes
- IP discovery fixes
- Misc cleanups
- HDMI fixes
- Documentation update
- Panel replay fixes
- Panel type handling fixes
- DCN 3.1.x fixes
- DC analog display fix
- SMU 6 fixes
- VCN 4.0.3 queue reset fix
- VCN 5.0.1 queue reset fix
- GPUVM TLB flush fix
- RAS fixes
- DC idle optimization fix

amdkfd:
- MQD fix for GC 9.4.3 and 9.5
- GC 11 cooperative launch fix
- GC 12.1 trap handler fixes
- Misc cleanups

radeon:
- Use drm_* logging helpers for VCE

Signed-off-by: default avatarDave Airlie <airlied@redhat.com>

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patch.msgid.link/20260123173537.17221-1-alexander.deucher@amd.com
parents b2c6627e 1412482b
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -16,3 +16,6 @@ Ryzen AI 300 series, Strix Point, 3.5.0, 11.5.0, 4.0.5, 6.1.0, 14.0.0, 14.0.0
Ryzen AI 330 series, Krackan Point, 3.6.0, 11.5.3, 4.0.5, 6.1.3, 14.0.5, 14.0.5
Ryzen AI 350 series, Krackan Point, 3.5.0, 11.5.2, 4.0.5, 6.1.2, 14.0.4, 14.0.4
Ryzen AI Max 300 series, Strix Halo, 3.5.1, 11.5.1, 4.0.6, 6.1.1, 14.0.1, 14.0.1
Ryzen AI 9 475 / 470 / 465, Gorgon Point, 3.5.0, 11.5.0, 4.0.5, 6.1.0, 14.0.0, 14.0.0
Ryzen AI 7 450, Gorgon Point, 3.5.0, 11.5.2, 4.0.5, 6.1.2, 14.0.4, 14.0.4
Ryzen AI 5 440 / 435, Gorgon Point, 3.6.0, 11.5.3, 4.0.5, 6.1.3, 14.0.5, 14.0.5
+2 −1
Original line number Diff line number Diff line
@@ -334,7 +334,8 @@ int amdgpu_amdkfd_alloc_kernel_mem(struct amdgpu_device *adev, size_t size,
	bp.size = size;
	bp.byte_align = PAGE_SIZE;
	bp.domain = domain;
	bp.flags = AMDGPU_GEM_CREATE_CPU_GTT_USWC;
	bp.flags = AMDGPU_GEM_CREATE_VRAM_CONTIGUOUS |
		   AMDGPU_GEM_CREATE_CPU_GTT_USWC;
	bp.type = ttm_bo_type_kernel;
	bp.resv = NULL;
	bp.bo_ptr_size = sizeof(struct amdgpu_bo);
+21 −10
Original line number Diff line number Diff line
@@ -380,10 +380,21 @@ static uint16_t amdgpu_discovery_calculate_checksum(uint8_t *data, uint32_t size
	return checksum;
}

static inline bool amdgpu_discovery_verify_checksum(uint8_t *data, uint32_t size,
static inline bool amdgpu_discovery_verify_checksum(struct amdgpu_device *adev,
							uint8_t *data, uint32_t size,
						    uint16_t expected)
{
	return !!(amdgpu_discovery_calculate_checksum(data, size) == expected);
	uint16_t calculated;

	calculated = amdgpu_discovery_calculate_checksum(data, size);

	if (calculated != expected) {
		dev_err(adev->dev, "Discovery checksum failed: calc 0x%04x != exp 0x%04x, size %u.\n",
				calculated, expected, size);
		return false;
	}

	return true;
}

static inline bool amdgpu_discovery_verify_binary_signature(uint8_t *binary)
@@ -439,7 +450,7 @@ static int amdgpu_discovery_verify_npsinfo(struct amdgpu_device *adev,
		return -EINVAL;
	}

	if (!amdgpu_discovery_verify_checksum(discovery_bin + offset,
	if (!amdgpu_discovery_verify_checksum(adev, discovery_bin + offset,
					      le32_to_cpu(nhdr->size_bytes),
					      checksum)) {
		dev_dbg(adev->dev, "invalid nps info data table checksum\n");
@@ -529,7 +540,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
	size = le16_to_cpu(bhdr->binary_size) - offset;
	checksum = le16_to_cpu(bhdr->binary_checksum);

	if (!amdgpu_discovery_verify_checksum(discovery_bin + offset, size,
	if (!amdgpu_discovery_verify_checksum(adev, discovery_bin + offset, size,
					      checksum)) {
		dev_err(adev->dev, "invalid ip discovery binary checksum\n");
		r = -EINVAL;
@@ -549,7 +560,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
			goto out;
		}

		if (!amdgpu_discovery_verify_checksum(discovery_bin + offset,
		if (!amdgpu_discovery_verify_checksum(adev, discovery_bin + offset,
						      le16_to_cpu(ihdr->size),
						      checksum)) {
			dev_err(adev->dev, "invalid ip discovery data table checksum\n");
@@ -572,7 +583,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
			goto out;
		}

		if (!amdgpu_discovery_verify_checksum(discovery_bin + offset,
		if (!amdgpu_discovery_verify_checksum(adev, discovery_bin + offset,
						      le32_to_cpu(ghdr->size),
						      checksum)) {
			dev_err(adev->dev, "invalid gc data table checksum\n");
@@ -595,7 +606,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
			goto out;
		}

		if (!amdgpu_discovery_verify_checksum(
		if (!amdgpu_discovery_verify_checksum(adev,
			    discovery_bin + offset,
			    sizeof(struct harvest_table), checksum)) {
			dev_err(adev->dev, "invalid harvest data table checksum\n");
@@ -618,7 +629,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
			goto out;
		}

		if (!amdgpu_discovery_verify_checksum(
		if (!amdgpu_discovery_verify_checksum(adev,
			    discovery_bin + offset,
			    le32_to_cpu(vhdr->size_bytes), checksum)) {
			dev_err(adev->dev, "invalid vcn data table checksum\n");
@@ -641,7 +652,7 @@ static int amdgpu_discovery_init(struct amdgpu_device *adev)
			goto out;
		}

		if (!amdgpu_discovery_verify_checksum(
		if (!amdgpu_discovery_verify_checksum(adev,
			    discovery_bin + offset,
			    le32_to_cpu(mhdr->size_bytes), checksum)) {
			dev_err(adev->dev, "invalid mall data table checksum\n");
@@ -1867,7 +1878,7 @@ static int amdgpu_discovery_refresh_nps_info(struct amdgpu_device *adev,
				  sizeof(*nps_data), false);

	nhdr = (struct nps_info_header *)(nps_data);
	if (!amdgpu_discovery_verify_checksum((uint8_t *)nps_data,
	if (!amdgpu_discovery_verify_checksum(adev, (uint8_t *)nps_data,
					      le32_to_cpu(nhdr->size_bytes),
					      checksum)) {
		dev_err(adev->dev, "nps data refresh, checksum mismatch\n");
+4 −4
Original line number Diff line number Diff line
@@ -708,12 +708,12 @@ void amdgpu_fence_driver_force_completion(struct amdgpu_ring *ring)
 */

/**
 * amdgpu_fence_driver_guilty_force_completion - force signal of specified sequence
 * amdgpu_fence_driver_update_timedout_fence_state - Update fence state and set errors
 *
 * @af: fence of the ring to signal
 * @af: fence of the ring to update
 *
 */
void amdgpu_fence_driver_guilty_force_completion(struct amdgpu_fence *af)
void amdgpu_fence_driver_update_timedout_fence_state(struct amdgpu_fence *af)
{
	struct dma_fence *unprocessed;
	struct dma_fence __rcu **ptr;
@@ -763,7 +763,7 @@ void amdgpu_fence_save_wptr(struct amdgpu_fence *af)
}

static void amdgpu_ring_backup_unprocessed_command(struct amdgpu_ring *ring,
						   u64 start_wptr, u32 end_wptr)
						   u64 start_wptr, u64 end_wptr)
{
	unsigned int first_idx = start_wptr & ring->buf_mask;
	unsigned int last_idx = end_wptr & ring->buf_mask;
+2 −1
Original line number Diff line number Diff line
@@ -1298,6 +1298,7 @@ int amdgpu_kiq_hdp_flush(struct amdgpu_device *adev)
failed_unlock:
	spin_unlock_irqrestore(&kiq->ring_lock, flags);
failed_kiq_hdp_flush:
	if (!amdgpu_in_reset(adev))
		dev_err(adev->dev, "failed to flush HDP via KIQ\n");
	return r < 0 ? r : -EIO;
}
Loading