Commit c3d590f8 authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'amd-drm-next-6.14-2025-01-10' of...

Merge tag 'amd-drm-next-6.14-2025-01-10' of https://gitlab.freedesktop.org/agd5f/linux

 into drm-next

amd-drm-next-6.14-2025-01-10:

amdgpu:
- Fix max surface handling in DC
- clang fixes
- DCN 3.5 fixes
- DCN 4.0.1 fixes
- DC CRC fixes
- DML updates
- DSC fixes
- PSR fixes
- DC add some divide by 0 checks
- SMU13 updates
- SR-IOV fixes
- RAS fixes
- Cleaner shader support for gfx10.3 dGPUs
- fix drm buddy trim handling
- SDMA engine reset updates
_ Fix RB bitmap setup
- Fix doorbell ttm cleanup
- Add CEC notifier support
- DPIA updates
- MST fixes

amdkfd:
- Shader debugger fixes
- Trap handler cleanup
- Cleanup includes
- Eviction fence wq fix

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

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20250110172731.2960668-1-alexander.deucher@amd.com
parents 0dc85386 812a33a6
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -1131,6 +1131,9 @@ uint64_t kgd_gfx_v9_hqd_get_pq_addr(struct amdgpu_device *adev,
	uint32_t low, high;
	uint64_t queue_addr = 0;

	if (!amdgpu_gpu_recovery)
		return 0;

	kgd_gfx_v9_acquire_queue(adev, pipe_id, queue_id, inst);
	amdgpu_gfx_rlc_enter_safe_mode(adev, inst);

@@ -1179,6 +1182,9 @@ uint64_t kgd_gfx_v9_hqd_reset(struct amdgpu_device *adev,
	uint32_t low, high, pipe_reset_data = 0;
	uint64_t queue_addr = 0;

	if (!amdgpu_gpu_recovery)
		return 0;

	kgd_gfx_v9_acquire_queue(adev, pipe_id, queue_id, inst);
	amdgpu_gfx_rlc_enter_safe_mode(adev, inst);

+2 −4
Original line number Diff line number Diff line
@@ -88,11 +88,9 @@ static void amdgpu_gem_object_free(struct drm_gem_object *gobj)
{
	struct amdgpu_bo *aobj = gem_to_amdgpu_bo(gobj);

	if (aobj) {
	amdgpu_hmm_unregister(aobj);
	ttm_bo_put(&aobj->tbo);
}
}

int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
			     int alignment, u32 initial_domain,
+11 −6
Original line number Diff line number Diff line
@@ -3020,10 +3020,7 @@ static int psp_hw_init(struct amdgpu_ip_block *ip_block)
	struct amdgpu_device *adev = ip_block->adev;

	mutex_lock(&adev->firmware.mutex);
	/*
	 * This sequence is just used on hw_init only once, no need on
	 * resume.
	 */

	ret = amdgpu_ucode_init_bo(adev);
	if (ret)
		goto failed;
@@ -3148,6 +3145,10 @@ static int psp_resume(struct amdgpu_ip_block *ip_block)

	mutex_lock(&adev->firmware.mutex);

	ret = amdgpu_ucode_init_bo(adev);
	if (ret)
		goto failed;

	ret = psp_hw_start(psp);
	if (ret)
		goto failed;
@@ -3891,10 +3892,12 @@ static ssize_t psp_usbc_pd_fw_sysfs_read(struct device *dev,
{
	struct drm_device *ddev = dev_get_drvdata(dev);
	struct amdgpu_device *adev = drm_to_adev(ddev);
	struct amdgpu_ip_block *ip_block;
	uint32_t fw_ver;
	int ret;

	if (!adev->ip_blocks[AMD_IP_BLOCK_TYPE_PSP].status.late_initialized) {
	ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_PSP);
	if (!ip_block || !ip_block->status.late_initialized) {
		dev_info(adev->dev, "PSP block is not ready yet\n.");
		return -EBUSY;
	}
@@ -3923,8 +3926,10 @@ static ssize_t psp_usbc_pd_fw_sysfs_write(struct device *dev,
	struct amdgpu_bo *fw_buf_bo = NULL;
	uint64_t fw_pri_mc_addr;
	void *fw_pri_cpu_addr;
	struct amdgpu_ip_block *ip_block;

	if (!adev->ip_blocks[AMD_IP_BLOCK_TYPE_PSP].status.late_initialized) {
	ip_block = amdgpu_device_ip_get_ip_block(adev, AMD_IP_BLOCK_TYPE_PSP);
	if (!ip_block || !ip_block->status.late_initialized) {
		dev_err(adev->dev, "PSP block is not ready yet.");
		return -EBUSY;
	}
+16 −5
Original line number Diff line number Diff line
@@ -2832,8 +2832,10 @@ int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,

	mutex_lock(&con->recovery_lock);
	data = con->eh_data;
	if (!data)
	if (!data) {
		/* Returning 0 as the absence of eh_data is acceptable */
		goto free;
	}

	for (i = 0; i < pages; i++) {
		if (from_rom &&
@@ -2845,26 +2847,34 @@ int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,
						 * one row
						 */
						if (amdgpu_umc_pages_in_a_row(adev, &err_data,
								bps[i].retired_page << AMDGPU_GPU_PAGE_SHIFT))
									      bps[i].retired_page <<
									      AMDGPU_GPU_PAGE_SHIFT)) {
							ret = -EINVAL;
							goto free;
						else
						} else {
							find_pages_per_pa = true;
						}
					} else {
						/* unsupported cases */
						ret = -EOPNOTSUPP;
						goto free;
					}
				}
			} else {
				if (amdgpu_umc_pages_in_a_row(adev, &err_data,
						bps[i].retired_page << AMDGPU_GPU_PAGE_SHIFT))
						bps[i].retired_page << AMDGPU_GPU_PAGE_SHIFT)) {
					ret = -EINVAL;
					goto free;
				}
			}
		} else {
			if (from_rom && !find_pages_per_pa) {
				if (bps[i].retired_page & UMC_CHANNEL_IDX_V2) {
					/* bad page in any NPS mode in eeprom */
					if (amdgpu_ras_mca2pa_by_idx(adev, &bps[i], &err_data))
					if (amdgpu_ras_mca2pa_by_idx(adev, &bps[i], &err_data)) {
						ret = -EINVAL;
						goto free;
					}
				} else {
					/* legacy bad page in eeprom, generated only in
					 * NPS1 mode
@@ -2881,6 +2891,7 @@ int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,
							/* non-nps1 mode, old RAS TA
							 * can't support it
							 */
							ret = -EOPNOTSUPP;
							goto free;
						}
					}
+2 −2
Original line number Diff line number Diff line
@@ -362,13 +362,13 @@ static int amdgpu_debugfs_sdma_sched_mask_set(void *data, u64 val)
	if (!adev)
		return -ENODEV;

	mask = (1 << adev->sdma.num_instances) - 1;
	mask = BIT_ULL(adev->sdma.num_instances) - 1;
	if ((val & mask) == 0)
		return -EINVAL;

	for (i = 0; i < adev->sdma.num_instances; ++i) {
		ring = &adev->sdma.instance[i].ring;
		if (val & (1 << i))
		if (val & BIT_ULL(i))
			ring->sched.ready = true;
		else
			ring->sched.ready = false;
Loading