Commit 965c995c authored by Linus Torvalds's avatar Linus Torvalds
Browse files

Merge tag 'drm-fixes-2025-09-12' of https://gitlab.freedesktop.org/drm/kernel

Pull drm fixes from Dave Airlie:
 "Weekly pull fixes for drm, mostly amdgpu and xe, with a revert for
  nouveau and some maintainers updates, and misc bits, doesn't seem too
  out of the normal.

  MAINTAINERS:
   - add rust tree to MAINTAINERS
   - fix X entries for nova/nouveau

  nova:
   - depend on 64-bit

  i915:
   - Fix size for for_each_set_bit() in abox iteration

  xe:
   - Don't touch survivability_mode on fini
   - Fixes around eviction and suspend
   - Extend Wa_13011645652 to PTL-H, WCL

  amdgpu:
   - PSP 11.x fix
   - DPCD quirk handing fix
   - DCN 3.5 PG fix
   - Audio suspend fix
   - OEM i2c clean up fix
   - Module unload memory leak fix
   - DC delay fix
   - ISP firmware fix
   - VCN fixes

  amdkfd:
   - P2P topology fix
   - APU mem limit calculation fix

  mediatek:
   - fix potential OF node use-after-free

  panthor:
   - out-of-bounds check

  nouveau:
   - revert waitqueue removal for sched teardown

* tag 'drm-fixes-2025-09-12' of https://gitlab.freedesktop.org/drm/kernel: (25 commits)
  MAINTAINERS: drm-misc: fix X: entries for nova/nouveau
  drm/mediatek: clean up driver data initialisation
  drm/mediatek: fix potential OF node use-after-free
  drm/amdgpu/vcn: Allow limiting ctx to instance 0 for AV1 at any time
  drm/amdgpu/vcn4: Fix IB parsing with multiple engine info packages
  drm/amd/amdgpu: Declare isp firmware binary file
  drm/amd/display: use udelay rather than fsleep
  drm/amdgpu: fix a memory leak in fence cleanup when unloading
  drm/xe: Extend Wa_13011645652 to PTL-H, WCL
  drm/xe: Block exec and rebind worker while evicting for suspend / hibernate
  drm/xe: Allow the pm notifier to continue on failure
  drm/xe: Attempt to bring bos back to VRAM after eviction
  drm/xe/configfs: Don't touch survivability_mode on fini
  amd/amdkfd: correct mem limit calculation for small APUs
  drm/amdkfd: fix p2p links bug in topology
  drm/amd/display: remove oem i2c adapter on finish
  drm/amd/display: Drop dm_prepare_suspend() and dm_complete()
  drm/amd/display: Correct sequences and delays for DCN35 PG & RCG
  drm/amd/display: Disable DPCD Probe Quirk
  drm/i915/power: fix size for for_each_set_bit() in abox iteration
  ...
parents cb780b79 9a3f2107
Loading
Loading
Loading
Loading
+11 −2
Original line number Diff line number Diff line
@@ -8078,7 +8078,6 @@ F: Documentation/devicetree/bindings/gpu/
F:	Documentation/gpu/
F:	drivers/gpu/drm/
F:	drivers/gpu/vga/
F:	rust/kernel/drm/
F:	include/drm/drm
F:	include/linux/vga*
F:	include/uapi/drm/
@@ -8090,11 +8089,21 @@ X: drivers/gpu/drm/i915/
X:	drivers/gpu/drm/kmb/
X:	drivers/gpu/drm/mediatek/
X:	drivers/gpu/drm/msm/
X:	drivers/gpu/drm/nouveau/
X:	drivers/gpu/drm/nova/
X:	drivers/gpu/drm/radeon/
X:	drivers/gpu/drm/tegra/
X:	drivers/gpu/drm/xe/
DRM DRIVERS AND COMMON INFRASTRUCTURE [RUST]
M:	Danilo Krummrich <dakr@kernel.org>
M:	Alice Ryhl <aliceryhl@google.com>
S:	Supported
W:	https://drm.pages.freedesktop.org/maintainer-tools/drm-rust.html
T:	git https://gitlab.freedesktop.org/drm/rust/kernel.git
F:	drivers/gpu/drm/nova/
F:	drivers/gpu/nova-core/
F:	rust/kernel/drm/
DRM DRIVERS FOR ALLWINNER A10
M:	Maxime Ripard <mripard@kernel.org>
M:	Chen-Yu Tsai <wens@csie.org>
+32 −12
Original line number Diff line number Diff line
@@ -213,19 +213,35 @@ int amdgpu_amdkfd_reserve_mem_limit(struct amdgpu_device *adev,
	spin_lock(&kfd_mem_limit.mem_limit_lock);

	if (kfd_mem_limit.system_mem_used + system_mem_needed >
	    kfd_mem_limit.max_system_mem_limit)
	    kfd_mem_limit.max_system_mem_limit) {
		pr_debug("Set no_system_mem_limit=1 if using shared memory\n");
		if (!no_system_mem_limit) {
			ret = -ENOMEM;
			goto release;
		}
	}

	if ((kfd_mem_limit.system_mem_used + system_mem_needed >
	     kfd_mem_limit.max_system_mem_limit && !no_system_mem_limit) ||
	    (kfd_mem_limit.ttm_mem_used + ttm_mem_needed >
	     kfd_mem_limit.max_ttm_mem_limit) ||
	    (adev && xcp_id >= 0 && adev->kfd.vram_used[xcp_id] + vram_needed >
	     vram_size - reserved_for_pt - reserved_for_ras - atomic64_read(&adev->vram_pin_size))) {
	if (kfd_mem_limit.ttm_mem_used + ttm_mem_needed >
		kfd_mem_limit.max_ttm_mem_limit) {
		ret = -ENOMEM;
		goto release;
	}

	/*if is_app_apu is false and apu_prefer_gtt is true, it is an APU with
	 * carve out < gtt. In that case, VRAM allocation will go to gtt domain, skip
	 * VRAM check since ttm_mem_limit check already cover this allocation
	 */

	if (adev && xcp_id >= 0 && (!adev->apu_prefer_gtt || adev->gmc.is_app_apu)) {
		uint64_t vram_available =
			vram_size - reserved_for_pt - reserved_for_ras -
			atomic64_read(&adev->vram_pin_size);
		if (adev->kfd.vram_used[xcp_id] + vram_needed > vram_available) {
			ret = -ENOMEM;
			goto release;
		}
	}

	/* Update memory accounting by decreasing available system
	 * memory, TTM memory and GPU memory as computed above
	 */
@@ -1626,6 +1642,10 @@ size_t amdgpu_amdkfd_get_available_memory(struct amdgpu_device *adev,
	uint64_t vram_available, system_mem_available, ttm_mem_available;

	spin_lock(&kfd_mem_limit.mem_limit_lock);
	if (adev->apu_prefer_gtt && !adev->gmc.is_app_apu)
		vram_available = KFD_XCP_MEMORY_SIZE(adev, xcp_id)
			- adev->kfd.vram_used_aligned[xcp_id];
	else
		vram_available = KFD_XCP_MEMORY_SIZE(adev, xcp_id)
			- adev->kfd.vram_used_aligned[xcp_id]
			- atomic64_read(&adev->vram_pin_size)
+0 −2
Original line number Diff line number Diff line
@@ -421,8 +421,6 @@ void amdgpu_ring_fini(struct amdgpu_ring *ring)
	dma_fence_put(ring->vmid_wait);
	ring->vmid_wait = NULL;
	ring->me = 0;

	ring->adev->rings[ring->idx] = NULL;
}

/**
+2 −0
Original line number Diff line number Diff line
@@ -29,6 +29,8 @@
#include "amdgpu.h"
#include "isp_v4_1_1.h"

MODULE_FIRMWARE("amdgpu/isp_4_1_1.bin");

#define ISP_PERFORMANCE_STATE_LOW 0
#define ISP_PERFORMANCE_STATE_HIGH 1

+4 −15
Original line number Diff line number Diff line
@@ -149,12 +149,12 @@ static int psp_v11_0_wait_for_bootloader(struct psp_context *psp)
	int ret;
	int retry_loop;

	for (retry_loop = 0; retry_loop < 10; retry_loop++) {
	for (retry_loop = 0; retry_loop < 20; retry_loop++) {
		/* Wait for bootloader to signify that is
		    ready having bit 31 of C2PMSG_35 set to 1 */
		ret = psp_wait_for(
			psp, SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_35),
			0x80000000, 0x80000000, PSP_WAITREG_NOVERBOSE);
			0x80000000, 0x8000FFFF, PSP_WAITREG_NOVERBOSE);

		if (ret == 0)
			return 0;
@@ -397,18 +397,6 @@ static int psp_v11_0_mode1_reset(struct psp_context *psp)

	msleep(500);

	offset = SOC15_REG_OFFSET(MP0, 0, mmMP0_SMN_C2PMSG_33);

	ret = psp_wait_for(psp, offset, MBOX_TOS_RESP_FLAG, MBOX_TOS_RESP_MASK,
			   0);

	if (ret) {
		DRM_INFO("psp mode 1 reset failed!\n");
		return -EINVAL;
	}

	DRM_INFO("psp mode1 reset succeed \n");

	return 0;
}

@@ -665,7 +653,8 @@ static const struct psp_funcs psp_v11_0_funcs = {
	.ring_get_wptr = psp_v11_0_ring_get_wptr,
	.ring_set_wptr = psp_v11_0_ring_set_wptr,
	.load_usbc_pd_fw = psp_v11_0_load_usbc_pd_fw,
	.read_usbc_pd_fw = psp_v11_0_read_usbc_pd_fw
	.read_usbc_pd_fw = psp_v11_0_read_usbc_pd_fw,
	.wait_for_bootloader = psp_v11_0_wait_for_bootloader
};

void psp_v11_0_set_psp_funcs(struct psp_context *psp)
Loading