diff options
-rw-r--r-- | drivers/gpu/drm/xe/regs/xe_gpu_commands.h | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/xe/xe_migrate.c | 9 |
2 files changed, 10 insertions, 1 deletions
diff --git a/drivers/gpu/drm/xe/regs/xe_gpu_commands.h b/drivers/gpu/drm/xe/regs/xe_gpu_commands.h index 1fdf2e4f1c9f..cc7b56763f10 100644 --- a/drivers/gpu/drm/xe/regs/xe_gpu_commands.h +++ b/drivers/gpu/drm/xe/regs/xe_gpu_commands.h @@ -57,6 +57,8 @@ #define XY_FAST_COPY_BLT_CMD (2 << 29 | 0x42 << 22) #define XY_FAST_COPY_BLT_DEPTH_32 (3<<24) +#define XY_FAST_COPY_BLT_D1_SRC_TILE4 REG_BIT(31) +#define XY_FAST_COPY_BLT_D1_DST_TILE4 REG_BIT(30) #define PVC_MEM_SET_CMD (2 << 29 | 0x5b << 22) #define PVC_MEM_SET_CMD_LEN_DW 7 diff --git a/drivers/gpu/drm/xe/xe_migrate.c b/drivers/gpu/drm/xe/xe_migrate.c index 313e3c0a6e90..69488a0fada4 100644 --- a/drivers/gpu/drm/xe/xe_migrate.c +++ b/drivers/gpu/drm/xe/xe_migrate.c @@ -543,12 +543,19 @@ static void emit_copy(struct xe_gt *gt, struct xe_bb *bb, u64 src_ofs, u64 dst_ofs, unsigned int size, unsigned int pitch) { + struct xe_device *xe = gt_to_xe(gt); + xe_gt_assert(gt, size / pitch <= S16_MAX); xe_gt_assert(gt, pitch / 4 <= S16_MAX); xe_gt_assert(gt, pitch <= U16_MAX); bb->cs[bb->len++] = XY_FAST_COPY_BLT_CMD | (10 - 2); - bb->cs[bb->len++] = XY_FAST_COPY_BLT_DEPTH_32 | pitch; + if (GRAPHICS_VERx100(xe) >= 1250) + bb->cs[bb->len++] = XY_FAST_COPY_BLT_DEPTH_32 | pitch | + XY_FAST_COPY_BLT_D1_SRC_TILE4 | + XY_FAST_COPY_BLT_D1_DST_TILE4; + else + bb->cs[bb->len++] = XY_FAST_COPY_BLT_DEPTH_32 | pitch; bb->cs[bb->len++] = 0; bb->cs[bb->len++] = (size / pitch) << 16 | pitch / 4; bb->cs[bb->len++] = lower_32_bits(dst_ofs); |