mirror of
https://github.com/torvalds/linux.git
synced 2025-01-01 15:51:46 +00:00
Driver Changes:
- Make an ops struct static - Fix an implicit 0 to NULL conversion - A couple of 32-bit fixes - A migration coherency fix for Lunar Lake. - An error path vm id leak fix - Remove PVC references in kunit tests -----BEGIN PGP SIGNATURE----- iHUEABYKAB0WIQRskUM7w1oG5rx2IZO4FpNVCsYGvwUCZbIZgQAKCRC4FpNVCsYG v280AP90WBOaNCF5f07YQQZzdO9s442BKnMs0gYrNY8Ca/Z/GwD9FiMcyvXtGf9x ovhdreJvXaK2zv9nUtcK5qJ4MVr+awI= =bAQt -----END PGP SIGNATURE----- Merge tag 'drm-xe-fixes-2024-01-25' of https://gitlab.freedesktop.org/drm/xe/kernel into drm-fixes Driver Changes: - Make an ops struct static - Fix an implicit 0 to NULL conversion - A couple of 32-bit fixes - A migration coherency fix for Lunar Lake. - An error path vm id leak fix - Remove PVC references in kunit tests Signed-off-by: Dave Airlie <airlied@redhat.com> From: Thomas Hellstrom <thomas.hellstrom@linux.intel.com> Link: https://patchwork.freedesktop.org/patch/msgid/ZbIb7l0EhpVp5cXE@fedora
This commit is contained in:
commit
83cd3be864
@ -35,12 +35,10 @@ static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
|
||||
u32 ofs, u64 *ptr, u32 size)
|
||||
{
|
||||
struct ttm_bo_kmap_obj map;
|
||||
void *virtual;
|
||||
void *src;
|
||||
bool is_iomem;
|
||||
int ret;
|
||||
|
||||
XE_WARN_ON(size != 8);
|
||||
|
||||
ret = xe_bo_lock(bo, true);
|
||||
if (ret)
|
||||
return ret;
|
||||
@ -50,11 +48,12 @@ static inline int i915_gem_object_read_from_page(struct xe_bo *bo,
|
||||
goto out_unlock;
|
||||
|
||||
ofs &= ~PAGE_MASK;
|
||||
virtual = ttm_kmap_obj_virtual(&map, &is_iomem);
|
||||
src = ttm_kmap_obj_virtual(&map, &is_iomem);
|
||||
src += ofs;
|
||||
if (is_iomem)
|
||||
*ptr = readq((void __iomem *)(virtual + ofs));
|
||||
memcpy_fromio(ptr, (void __iomem *)src, size);
|
||||
else
|
||||
*ptr = *(u64 *)(virtual + ofs);
|
||||
memcpy(ptr, src, size);
|
||||
|
||||
ttm_bo_kunmap(&map);
|
||||
out_unlock:
|
||||
|
@ -74,9 +74,6 @@ static const struct platform_test_case cases[] = {
|
||||
SUBPLATFORM_CASE(DG2, G11, B1),
|
||||
SUBPLATFORM_CASE(DG2, G12, A0),
|
||||
SUBPLATFORM_CASE(DG2, G12, A1),
|
||||
PLATFORM_CASE(PVC, B0),
|
||||
PLATFORM_CASE(PVC, B1),
|
||||
PLATFORM_CASE(PVC, C0),
|
||||
GMDID_CASE(METEORLAKE, 1270, A0, 1300, A0),
|
||||
GMDID_CASE(METEORLAKE, 1271, A0, 1300, A0),
|
||||
GMDID_CASE(LUNARLAKE, 2004, A0, 2000, A0),
|
||||
|
@ -613,7 +613,7 @@ void xe_device_wmb(struct xe_device *xe)
|
||||
u32 xe_device_ccs_bytes(struct xe_device *xe, u64 size)
|
||||
{
|
||||
return xe_device_has_flat_ccs(xe) ?
|
||||
DIV_ROUND_UP(size, NUM_BYTES_PER_CCS_BYTE(xe)) : 0;
|
||||
DIV_ROUND_UP_ULL(size, NUM_BYTES_PER_CCS_BYTE(xe)) : 0;
|
||||
}
|
||||
|
||||
bool xe_device_mem_access_ongoing(struct xe_device *xe)
|
||||
|
@ -175,7 +175,7 @@ static int xe_dma_buf_begin_cpu_access(struct dma_buf *dma_buf,
|
||||
return 0;
|
||||
}
|
||||
|
||||
const struct dma_buf_ops xe_dmabuf_ops = {
|
||||
static const struct dma_buf_ops xe_dmabuf_ops = {
|
||||
.attach = xe_dma_buf_attach,
|
||||
.detach = xe_dma_buf_detach,
|
||||
.pin = xe_dma_buf_pin,
|
||||
|
@ -419,7 +419,7 @@ static int xe_hwmon_pcode_read_i1(struct xe_gt *gt, u32 *uval)
|
||||
|
||||
return xe_pcode_read(gt, PCODE_MBOX(PCODE_POWER_SETUP,
|
||||
POWER_SETUP_SUBCOMMAND_READ_I1, 0),
|
||||
uval, 0);
|
||||
uval, NULL);
|
||||
}
|
||||
|
||||
static int xe_hwmon_pcode_write_i1(struct xe_gt *gt, u32 uval)
|
||||
|
@ -472,7 +472,7 @@ static void emit_pte(struct xe_migrate *m,
|
||||
/* Indirect access needs compression enabled uncached PAT index */
|
||||
if (GRAPHICS_VERx100(xe) >= 2000)
|
||||
pat_index = is_comp_pte ? xe->pat.idx[XE_CACHE_NONE_COMPRESSION] :
|
||||
xe->pat.idx[XE_CACHE_NONE];
|
||||
xe->pat.idx[XE_CACHE_WB];
|
||||
else
|
||||
pat_index = xe->pat.idx[XE_CACHE_WB];
|
||||
|
||||
@ -760,14 +760,14 @@ struct dma_fence *xe_migrate_copy(struct xe_migrate *m,
|
||||
if (src_is_vram && xe_migrate_allow_identity(src_L0, &src_it))
|
||||
xe_res_next(&src_it, src_L0);
|
||||
else
|
||||
emit_pte(m, bb, src_L0_pt, src_is_vram, true, &src_it, src_L0,
|
||||
src);
|
||||
emit_pte(m, bb, src_L0_pt, src_is_vram, copy_system_ccs,
|
||||
&src_it, src_L0, src);
|
||||
|
||||
if (dst_is_vram && xe_migrate_allow_identity(src_L0, &dst_it))
|
||||
xe_res_next(&dst_it, src_L0);
|
||||
else
|
||||
emit_pte(m, bb, dst_L0_pt, dst_is_vram, true, &dst_it, src_L0,
|
||||
dst);
|
||||
emit_pte(m, bb, dst_L0_pt, dst_is_vram, copy_system_ccs,
|
||||
&dst_it, src_L0, dst);
|
||||
|
||||
if (copy_system_ccs)
|
||||
emit_pte(m, bb, ccs_pt, false, false, &ccs_it, ccs_size, src);
|
||||
@ -1009,8 +1009,8 @@ struct dma_fence *xe_migrate_clear(struct xe_migrate *m,
|
||||
if (clear_vram && xe_migrate_allow_identity(clear_L0, &src_it))
|
||||
xe_res_next(&src_it, clear_L0);
|
||||
else
|
||||
emit_pte(m, bb, clear_L0_pt, clear_vram, true, &src_it, clear_L0,
|
||||
dst);
|
||||
emit_pte(m, bb, clear_L0_pt, clear_vram, clear_system_ccs,
|
||||
&src_it, clear_L0, dst);
|
||||
|
||||
bb->cs[bb->len++] = MI_BATCH_BUFFER_END;
|
||||
update_idx = bb->len;
|
||||
|
@ -272,8 +272,8 @@ int xe_mmio_probe_vram(struct xe_device *xe)
|
||||
drm_info(&xe->drm, "VRAM[%u, %u]: Actual physical size %pa, usable size exclude stolen %pa, CPU accessible size %pa\n", id,
|
||||
tile->id, &tile->mem.vram.actual_physical_size, &tile->mem.vram.usable_size, &tile->mem.vram.io_size);
|
||||
drm_info(&xe->drm, "VRAM[%u, %u]: DPA range: [%pa-%llx], io range: [%pa-%llx]\n", id, tile->id,
|
||||
&tile->mem.vram.dpa_base, tile->mem.vram.dpa_base + tile->mem.vram.actual_physical_size,
|
||||
&tile->mem.vram.io_start, tile->mem.vram.io_start + tile->mem.vram.io_size);
|
||||
&tile->mem.vram.dpa_base, tile->mem.vram.dpa_base + (u64)tile->mem.vram.actual_physical_size,
|
||||
&tile->mem.vram.io_start, tile->mem.vram.io_start + (u64)tile->mem.vram.io_size);
|
||||
|
||||
/* calculate total size using tile size to get the correct HW sizing */
|
||||
total_size += tile_size;
|
||||
|
@ -1855,10 +1855,8 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
|
||||
mutex_lock(&xef->vm.lock);
|
||||
err = xa_alloc(&xef->vm.xa, &id, vm, xa_limit_32b, GFP_KERNEL);
|
||||
mutex_unlock(&xef->vm.lock);
|
||||
if (err) {
|
||||
xe_vm_close_and_put(vm);
|
||||
return err;
|
||||
}
|
||||
if (err)
|
||||
goto err_close_and_put;
|
||||
|
||||
if (xe->info.has_asid) {
|
||||
mutex_lock(&xe->usm.lock);
|
||||
@ -1866,11 +1864,9 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
|
||||
XA_LIMIT(1, XE_MAX_ASID - 1),
|
||||
&xe->usm.next_asid, GFP_KERNEL);
|
||||
mutex_unlock(&xe->usm.lock);
|
||||
if (err < 0) {
|
||||
xe_vm_close_and_put(vm);
|
||||
return err;
|
||||
}
|
||||
err = 0;
|
||||
if (err < 0)
|
||||
goto err_free_id;
|
||||
|
||||
vm->usm.asid = asid;
|
||||
}
|
||||
|
||||
@ -1888,6 +1884,15 @@ int xe_vm_create_ioctl(struct drm_device *dev, void *data,
|
||||
#endif
|
||||
|
||||
return 0;
|
||||
|
||||
err_free_id:
|
||||
mutex_lock(&xef->vm.lock);
|
||||
xa_erase(&xef->vm.xa, id);
|
||||
mutex_unlock(&xef->vm.lock);
|
||||
err_close_and_put:
|
||||
xe_vm_close_and_put(vm);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
int xe_vm_destroy_ioctl(struct drm_device *dev, void *data,
|
||||
|
Loading…
Reference in New Issue
Block a user