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

Merge tag 'drm-xe-fixes-2025-05-23' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes



Driver Changes:
- Make sure to check all forcewakes when dumping mocs
- Fix wrong use of read64 on 32b register
- Synchronize Panther Lake PCI IDs

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

From: Lucas De Marchi <lucas.demarchi@intel.com>
Link: https://lore.kernel.org/r/uixp5cq7emz32lmwwvq4vbujppugfozhyj3cm2aqzx4lcg7ivn@m2khvf4kvz5p
parents 4731d5e8 027a362f
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -75,7 +75,7 @@ static void mmio_multi_tile_setup(struct xe_device *xe, size_t tile_mmio_size)
		 * is fine as it's going to the root tile's mmio, that's
		 * guaranteed to be initialized earlier in xe_mmio_probe_early()
		 */
		mtcfg = xe_mmio_read64_2x32(mmio, XEHP_MTCFG_ADDR);
		mtcfg = xe_mmio_read32(mmio, XEHP_MTCFG_ADDR);
		tile_count = REG_FIELD_GET(TILE_COUNT, mtcfg) + 1;

		if (tile_count < xe->info.tile_count) {
@@ -128,7 +128,7 @@ int xe_mmio_probe_early(struct xe_device *xe)
	 */
	xe->mmio.size = pci_resource_len(pdev, GTTMMADR_BAR);
	xe->mmio.regs = pci_iomap(pdev, GTTMMADR_BAR, 0);
	if (xe->mmio.regs == NULL) {
	if (!xe->mmio.regs) {
		drm_err(&xe->drm, "failed to map registers\n");
		return -EIO;
	}
@@ -309,8 +309,8 @@ u64 xe_mmio_read64_2x32(struct xe_mmio *mmio, struct xe_reg reg)
	return (u64)udw << 32 | ldw;
}

static int __xe_mmio_wait32(struct xe_mmio *mmio, struct xe_reg reg, u32 mask, u32 val, u32 timeout_us,
			    u32 *out_val, bool atomic, bool expect_match)
static int __xe_mmio_wait32(struct xe_mmio *mmio, struct xe_reg reg, u32 mask, u32 val,
			    u32 timeout_us, u32 *out_val, bool atomic, bool expect_match)
{
	ktime_t cur = ktime_get_raw();
	const ktime_t end = ktime_add_us(cur, timeout_us);
+6 −5
Original line number Diff line number Diff line
@@ -775,22 +775,23 @@ void xe_mocs_init(struct xe_gt *gt)
void xe_mocs_dump(struct xe_gt *gt, struct drm_printer *p)
{
	struct xe_device *xe = gt_to_xe(gt);
	enum xe_force_wake_domains domain;
	struct xe_mocs_info table;
	unsigned int fw_ref, flags;

	flags = get_mocs_settings(xe, &table);

	domain = flags & HAS_LNCF_MOCS ? XE_FORCEWAKE_ALL : XE_FW_GT;
	xe_pm_runtime_get_noresume(xe);
	fw_ref = xe_force_wake_get(gt_to_fw(gt),
				   flags & HAS_LNCF_MOCS ?
				   XE_FORCEWAKE_ALL : XE_FW_GT);
	if (!fw_ref)
	fw_ref = xe_force_wake_get(gt_to_fw(gt), domain);

	if (!xe_force_wake_ref_has_domain(fw_ref, domain))
		goto err_fw;

	table.ops->dump(&table, flags, gt, p);

	xe_force_wake_put(gt_to_fw(gt), fw_ref);
err_fw:
	xe_force_wake_put(gt_to_fw(gt), fw_ref);
	xe_pm_runtime_put(xe);
}

+4 −0
Original line number Diff line number Diff line
@@ -861,6 +861,10 @@
	MACRO__(0xB081, ## __VA_ARGS__), \
	MACRO__(0xB082, ## __VA_ARGS__), \
	MACRO__(0xB083, ## __VA_ARGS__), \
	MACRO__(0xB084, ## __VA_ARGS__), \
	MACRO__(0xB085, ## __VA_ARGS__), \
	MACRO__(0xB086, ## __VA_ARGS__), \
	MACRO__(0xB087, ## __VA_ARGS__), \
	MACRO__(0xB08F, ## __VA_ARGS__), \
	MACRO__(0xB090, ## __VA_ARGS__), \
	MACRO__(0xB0A0, ## __VA_ARGS__), \