Commit 0692602d authored by Dave Airlie's avatar Dave Airlie
Browse files

Merge tag 'amd-drm-next-6.19-2025-12-02' of...

Merge tag 'amd-drm-next-6.19-2025-12-02' of https://gitlab.freedesktop.org/agd5f/linux

 into drm-next

amd-drm-next-6.19-2025-12-02:

amdgpu:
- Unified MES fix
- SMU 11 unbalanced irq fix
- Fix for driver reloading on APUs
- pp_table sysfs fix
- Fix memory leak in fence handling
- HDMI fix
- DC cursor fixes
- eDP panel parsing fix
- Brightness fix
- DC analog fixes
- EDID retry fixes
- UserQ fixes
- RAS fixes
- IP discovery fix
- Add missing locking in amdgpu_ttm_access_memory_sdma()
- Smart Power OLED fix
- PRT and page fault fixes for GC 6-8
- VMID reservation fix
- ACP platform device fix
- Add missing vm fault handling for GC 11-12
- VPE fix

amdkfd:
- Partitioning fix

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

From: Alex Deucher <alexander.deucher@amd.com>
Link: https://patch.msgid.link/20251202220101.2039347-1-alexander.deucher@amd.com
parents b3239df3 39256835
Loading
Loading
Loading
Loading
+8 −2
Original line number Diff line number Diff line
@@ -302,17 +302,19 @@ static int acp_hw_init(struct amdgpu_ip_block *ip_block)
		adev->acp.acp_res[2].end = adev->acp.acp_res[2].start;

		adev->acp.acp_cell[0].name = "acp_audio_dma";
		adev->acp.acp_cell[0].id = 0;
		adev->acp.acp_cell[0].num_resources = 3;
		adev->acp.acp_cell[0].resources = &adev->acp.acp_res[0];
		adev->acp.acp_cell[0].platform_data = &adev->asic_type;
		adev->acp.acp_cell[0].pdata_size = sizeof(adev->asic_type);

		adev->acp.acp_cell[1].name = "designware-i2s";
		adev->acp.acp_cell[1].id = 1;
		adev->acp.acp_cell[1].num_resources = 1;
		adev->acp.acp_cell[1].resources = &adev->acp.acp_res[1];
		adev->acp.acp_cell[1].platform_data = &i2s_pdata[0];
		adev->acp.acp_cell[1].pdata_size = sizeof(struct i2s_platform_data);
		r = mfd_add_hotplug_devices(adev->acp.parent, adev->acp.acp_cell, 2);
		r = mfd_add_devices(adev->acp.parent, 0, adev->acp.acp_cell, 2, NULL, 0, NULL);
		if (r)
			goto failure;
		r = device_for_each_child(adev->acp.parent, &adev->acp.acp_genpd->gpd,
@@ -410,30 +412,34 @@ static int acp_hw_init(struct amdgpu_ip_block *ip_block)
		adev->acp.acp_res[4].end = adev->acp.acp_res[4].start;

		adev->acp.acp_cell[0].name = "acp_audio_dma";
		adev->acp.acp_cell[0].id = 0;
		adev->acp.acp_cell[0].num_resources = 5;
		adev->acp.acp_cell[0].resources = &adev->acp.acp_res[0];
		adev->acp.acp_cell[0].platform_data = &adev->asic_type;
		adev->acp.acp_cell[0].pdata_size = sizeof(adev->asic_type);

		adev->acp.acp_cell[1].name = "designware-i2s";
		adev->acp.acp_cell[1].id = 1;
		adev->acp.acp_cell[1].num_resources = 1;
		adev->acp.acp_cell[1].resources = &adev->acp.acp_res[1];
		adev->acp.acp_cell[1].platform_data = &i2s_pdata[0];
		adev->acp.acp_cell[1].pdata_size = sizeof(struct i2s_platform_data);

		adev->acp.acp_cell[2].name = "designware-i2s";
		adev->acp.acp_cell[2].id = 2;
		adev->acp.acp_cell[2].num_resources = 1;
		adev->acp.acp_cell[2].resources = &adev->acp.acp_res[2];
		adev->acp.acp_cell[2].platform_data = &i2s_pdata[1];
		adev->acp.acp_cell[2].pdata_size = sizeof(struct i2s_platform_data);

		adev->acp.acp_cell[3].name = "designware-i2s";
		adev->acp.acp_cell[3].id = 3;
		adev->acp.acp_cell[3].num_resources = 1;
		adev->acp.acp_cell[3].resources = &adev->acp.acp_res[3];
		adev->acp.acp_cell[3].platform_data = &i2s_pdata[2];
		adev->acp.acp_cell[3].pdata_size = sizeof(struct i2s_platform_data);

		r = mfd_add_hotplug_devices(adev->acp.parent, adev->acp.acp_cell, ACP_DEVS);
		r = mfd_add_devices(adev->acp.parent, 0, adev->acp.acp_cell, ACP_DEVS, NULL, 0, NULL);
		if (r)
			goto failure;

+16 −0
Original line number Diff line number Diff line
@@ -2665,6 +2665,8 @@ static int amdgpu_device_parse_gpu_info_fw(struct amdgpu_device *adev)
		chip_name = "navi12";
		break;
	case CHIP_CYAN_SKILLFISH:
		if (adev->discovery.bin)
			return 0;
		chip_name = "cyan_skillfish";
		break;
	}
@@ -3680,6 +3682,20 @@ static int amdgpu_device_ip_fini_early(struct amdgpu_device *adev)
				"failed to release exclusive mode on fini\n");
	}

	/*
	 * Driver reload on the APU can fail due to firmware validation because
	 * the PSP is always running, as it is shared across the whole SoC.
	 * This same issue does not occur on dGPU because it has a mechanism
	 * that checks whether the PSP is running. A solution for those issues
	 * in the APU is to trigger a GPU reset, but this should be done during
	 * the unload phase to avoid adding boot latency and screen flicker.
	 */
	if ((adev->flags & AMD_IS_APU) && !adev->gmc.is_app_apu) {
		r = amdgpu_asic_reset(adev);
		if (r)
			dev_err(adev->dev, "asic reset on %s failed\n", __func__);
	}

	return 0;
}

+3 −0
Original line number Diff line number Diff line
@@ -597,6 +597,9 @@ int amdgpu_gmc_allocate_vm_inv_eng(struct amdgpu_device *adev)
		/* reserve engine 5 for firmware */
		if (adev->enable_mes)
			vm_inv_engs[i] &= ~(1 << 5);
		/* reserve engine 6 for uni mes */
		if (adev->enable_uni_mes)
			vm_inv_engs[i] &= ~(1 << 6);
		/* reserve mmhub engine 3 for firmware */
		if (adev->enable_umsch_mm)
			vm_inv_engs[i] &= ~(1 << 3);
+5 −0
Original line number Diff line number Diff line
@@ -86,6 +86,11 @@ enum amdgpu_memory_partition {

#define AMDGPU_MAX_MEM_RANGES 8

#define AMDGPU_GMC9_FAULT_SOURCE_DATA_RETRY 0x80
#define AMDGPU_GMC9_FAULT_SOURCE_DATA_READ  0x40
#define AMDGPU_GMC9_FAULT_SOURCE_DATA_WRITE 0x20
#define AMDGPU_GMC9_FAULT_SOURCE_DATA_EXE   0x10

/*
 * GMC page fault information
 */
+4 −0
Original line number Diff line number Diff line
@@ -224,6 +224,7 @@ int amdgpu_job_alloc(struct amdgpu_device *adev, struct amdgpu_vm *vm,
	kfree((*job)->hw_fence);
err_job:
	kfree(*job);
	*job = NULL;

	return r;
}
@@ -245,7 +246,10 @@ int amdgpu_job_alloc_with_ib(struct amdgpu_device *adev,
	if (r) {
		if (entity)
			drm_sched_job_cleanup(&(*job)->base);
		kfree((*job)->hw_vm_fence);
		kfree((*job)->hw_fence);
		kfree(*job);
		*job = NULL;
	}

	return r;
Loading