[igt-dev] [PATCH i-g-t v3 07/13] lib/intel_mocs: Stop encoding mocs
Matt Roper
matthew.d.roper at intel.com
Mon Oct 9 18:54:37 UTC 2023
On Wed, Oct 04, 2023 at 08:49:16AM -0700, Lucas De Marchi wrote:
> From gen9 until xe2, the various gpu commands use a mocs object that is
> defined as
>
> [0] pxp
> [6:1] mocs index
>
> However this is not true for xe2 anymore. Also the way it is coded right
> now it's very easy to double shift the mocs value and end up with the
> wrong setting. Avoid this by separating where the index should be used
> (intel_mocs.[ch]) and the encoding on the various commands. To help with
> clarity the following renames were done:
>
> intel_get_wb_mocs() -> intel_get_wb_mocs_index()
> intel_get_uc_mocs() -> intel_get_uc_mocs_index()
> gen9_surface_state.*.memory_object_control
> -> gen9_surface_state.*.mocs_index
> mocs -> mocs_index in lib/intel_blt.*
>
> v2:
> - Use I915_MOCS_PTE instead of the hardcoded 1 in the gen11 media
> function (Matt Roper)
> - Fix a wrong shift by XY_FAST_COLOR_BLT_MOCS_INDEX_SHIFT, result of a
> copy and paste mistake from lib/igt_draw.c to lib/igt_fb.c
> (Matt Roper)
> - In addition to the conversions in intel_blt, also add a _index
> suffix to avoid confusion
>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
> lib/gen9_media.h | 3 +-
> lib/gen9_render.h | 3 +-
> lib/gpu_cmds.c | 14 ++++-----
> lib/igt_draw.c | 4 ++-
> lib/igt_fb.c | 2 +-
> lib/intel_blt.c | 52 ++++++++++++++++++---------------
> lib/intel_blt.h | 10 +++----
> lib/intel_mocs.c | 14 ++++-----
> lib/intel_mocs.h | 4 +--
> lib/intel_reg.h | 3 +-
> lib/rendercopy_gen9.c | 12 ++++----
> lib/xehp_media.h | 3 +-
> tests/intel/gem_ccs.c | 8 ++---
> tests/intel/gem_lmem_swapping.c | 4 +--
> tests/intel/xe_ccs.c | 8 ++---
> 15 files changed, 76 insertions(+), 68 deletions(-)
>
> diff --git a/lib/gen9_media.h b/lib/gen9_media.h
> index 414001dfd..a422cf7fe 100644
> --- a/lib/gen9_media.h
> +++ b/lib/gen9_media.h
> @@ -45,7 +45,8 @@ struct gen9_surface_state
> uint32_t qpitch:15;
> uint32_t pad1:4;
> uint32_t base_mip_level:5;
> - uint32_t memory_object_control:7;
> + uint32_t pxp:1;
> + uint32_t mocs_index:6;
> uint32_t pad0:1;
> } ss1;
>
> diff --git a/lib/gen9_render.h b/lib/gen9_render.h
> index af3a2b3af..8ed60a2a5 100644
> --- a/lib/gen9_render.h
> +++ b/lib/gen9_render.h
> @@ -42,7 +42,8 @@ struct gen9_surface_state {
> uint32_t qpitch:15;
> uint32_t pad1:4;
> uint32_t base_mip_level:5;
> - uint32_t memory_object_control:7;
> + uint32_t pxp:1;
> + uint32_t mocs_index:6;
> uint32_t pad0:1;
> } ss1;
>
> diff --git a/lib/gpu_cmds.c b/lib/gpu_cmds.c
> index 61b18d20d..f19f93b28 100644
> --- a/lib/gpu_cmds.c
> +++ b/lib/gpu_cmds.c
> @@ -215,9 +215,9 @@ gen9_fill_surface_state(struct intel_bb *ibb,
> ss->ss0.horizontal_alignment = 1; /* align 4 */
>
> if (mocs == INTEL_BUF_MOCS_UC)
> - ss->ss1.memory_object_control = intel_get_uc_mocs(ibb->fd);
> + ss->ss1.mocs_index = intel_get_uc_mocs_index(ibb->fd);
> else if (mocs == INTEL_BUF_MOCS_WB)
> - ss->ss1.memory_object_control = intel_get_wb_mocs(ibb->fd);
> + ss->ss1.mocs_index = intel_get_wb_mocs_index(ibb->fd);
>
> if (buf->tiling == I915_TILING_X)
> ss->ss0.tiled_mode = 2;
> @@ -276,9 +276,9 @@ gen11_fill_surface_state(struct intel_bb *ibb,
> ss->ss0.horizontal_alignment = horizontal_alignment; /* align 4 */
>
> if (mocs == INTEL_BUF_MOCS_UC)
> - ss->ss1.memory_object_control = intel_get_uc_mocs(ibb->fd);
> + ss->ss1.mocs_index = intel_get_uc_mocs_index(ibb->fd);
> else if (mocs == INTEL_BUF_MOCS_WB)
> - ss->ss1.memory_object_control = intel_get_wb_mocs(ibb->fd);
> + ss->ss1.mocs_index = intel_get_wb_mocs_index(ibb->fd);
>
> if (buf->tiling == I915_TILING_X)
> ss->ss0.tiled_mode = 2;
> @@ -295,7 +295,7 @@ gen11_fill_surface_state(struct intel_bb *ibb,
> ss->ss9.base_addr_hi = address >> 32;
>
> if (is_dst) {
> - ss->ss1.memory_object_control = 2;
> + ss->ss1.mocs_index = I915_MOCS_PTE;
> ss->ss2.height = 1;
> ss->ss2.width = 95;
> ss->ss3.pitch = 0;
> @@ -909,9 +909,9 @@ xehp_fill_surface_state(struct intel_bb *ibb,
> ss->ss0.horizontal_alignment = 1; /* align 4 */
>
> if (mocs == INTEL_BUF_MOCS_UC)
> - ss->ss1.memory_object_control = intel_get_uc_mocs(ibb->fd);
> + ss->ss1.mocs_index = intel_get_uc_mocs_index(ibb->fd);
> else if (mocs == INTEL_BUF_MOCS_WB)
> - ss->ss1.memory_object_control = intel_get_wb_mocs(ibb->fd);
> + ss->ss1.mocs_index = intel_get_wb_mocs_index(ibb->fd);
>
> if (buf->tiling == I915_TILING_X)
> ss->ss0.tiled_mode = 2;
> diff --git a/lib/igt_draw.c b/lib/igt_draw.c
> index 476778a13..d7c3ac64c 100644
> --- a/lib/igt_draw.c
> +++ b/lib/igt_draw.c
> @@ -676,6 +676,7 @@ static void draw_rect_blt(int fd, struct cmd_data *cmd_data,
> uint32_t devid = intel_get_drm_devid(fd);
> int ver = intel_display_ver(devid);
> int pitch;
> + uint32_t mocs;
>
> dst = create_buf(fd, cmd_data->bops, buf, tiling);
> ibb = intel_bb_create(fd, PAGE_SIZE);
> @@ -715,9 +716,10 @@ static void draw_rect_blt(int fd, struct cmd_data *cmd_data,
> }
>
> pitch = tiling ? buf->stride / 4 : buf->stride;
> + mocs = intel_get_uc_mocs_index(fd) << XY_FAST_COLOR_BLT_MOCS_INDEX_SHIFT;
>
> intel_bb_out(ibb, XY_FAST_COLOR_BLT | blt_cmd_depth);
> - intel_bb_out(ibb, blt_cmd_tiling | intel_get_uc_mocs(fd) << 21 | (pitch-1));
> + intel_bb_out(ibb, blt_cmd_tiling | mocs | (pitch-1));
> intel_bb_out(ibb, (rect->y << 16) | rect->x);
> intel_bb_out(ibb, ((rect->y + rect->h) << 16) | (rect->x + rect->w));
> intel_bb_emit_reloc_fenced(ibb, dst->handle, 0,
> diff --git a/lib/igt_fb.c b/lib/igt_fb.c
> index f0c0681ab..dc8994902 100644
> --- a/lib/igt_fb.c
> +++ b/lib/igt_fb.c
> @@ -2766,7 +2766,7 @@ static struct blt_copy_object *blt_fb_init(const struct igt_fb *fb,
> stride = blt_tile == T_LINEAR ? fb->strides[plane] : fb->strides[plane] / 4;
>
> blt_set_object(blt, handle, fb->size, memregion,
> - intel_get_uc_mocs(fb->fd),
> + intel_get_uc_mocs_index(fb->fd),
> blt_tile,
> is_ccs_modifier(fb->modifier) ? COMPRESSION_ENABLED : COMPRESSION_DISABLED,
> is_gen12_mc_ccs_modifier(fb->modifier) ? COMPRESSION_TYPE_MEDIA : COMPRESSION_TYPE_3D);
> diff --git a/lib/intel_blt.c b/lib/intel_blt.c
> index b55fa9b52..d1aa0872c 100644
> --- a/lib/intel_blt.c
> +++ b/lib/intel_blt.c
> @@ -58,7 +58,8 @@ struct gen12_block_copy_data {
> struct {
> uint32_t dst_pitch: BITRANGE(0, 17);
> uint32_t dst_aux_mode: BITRANGE(18, 20);
> - uint32_t dst_mocs: BITRANGE(21, 27);
> + uint32_t pxp: BITRANGE(21, 21);
> + uint32_t dst_mocs_index: BITRANGE(22, 27);
> uint32_t dst_ctrl_surface_type: BITRANGE(28, 28);
> uint32_t dst_compression: BITRANGE(29, 29);
> uint32_t dst_tiling: BITRANGE(30, 31);
> @@ -98,7 +99,8 @@ struct gen12_block_copy_data {
> struct {
> uint32_t src_pitch: BITRANGE(0, 17);
> uint32_t src_aux_mode: BITRANGE(18, 20);
> - uint32_t src_mocs: BITRANGE(21, 27);
> + uint32_t pxp: BITRANGE(21, 21);
> + uint32_t src_mocs_index: BITRANGE(22, 27);
> uint32_t src_ctrl_surface_type: BITRANGE(28, 28);
> uint32_t src_compression: BITRANGE(29, 29);
> uint32_t src_tiling: BITRANGE(30, 31);
> @@ -565,7 +567,7 @@ static void fill_data(struct gen12_block_copy_data *data,
> data->dw01.dst_aux_mode = __aux_mode(blt->fd, blt->driver, &blt->dst);
> data->dw01.dst_pitch = blt->dst.pitch - 1;
>
> - data->dw01.dst_mocs = blt->dst.mocs;
> + data->dw01.dst_mocs_index = blt->dst.mocs_index;
> data->dw01.dst_compression = blt->dst.compression;
> data->dw01.dst_tiling = __block_tiling(blt->dst.tiling);
>
> @@ -590,7 +592,7 @@ static void fill_data(struct gen12_block_copy_data *data,
>
> data->dw08.src_pitch = blt->src.pitch - 1;
> data->dw08.src_aux_mode = __aux_mode(blt->fd, blt->driver, &blt->src);
> - data->dw08.src_mocs = blt->src.mocs;
> + data->dw08.src_mocs_index = blt->src.mocs_index;
> data->dw08.src_compression = blt->src.compression;
> data->dw08.src_tiling = __block_tiling(blt->src.tiling);
>
> @@ -660,10 +662,10 @@ static void dump_bb_cmd(struct gen12_block_copy_data *data)
> cmd[0],
> data->dw00.client, data->dw00.opcode, data->dw00.color_depth,
> data->dw00.special_mode, data->dw00.length);
> - igt_info(" dw01: [%08x] dst <pitch: %d, aux: %d, mocs: %d, compr: %d, "
> + igt_info(" dw01: [%08x] dst <pitch: %d, aux: %d, mocs_idx: %d, compr: %d, "
> "tiling: %d, ctrl surf type: %d>\n",
> cmd[1], data->dw01.dst_pitch, data->dw01.dst_aux_mode,
> - data->dw01.dst_mocs, data->dw01.dst_compression,
> + data->dw01.dst_mocs_index, data->dw01.dst_compression,
> data->dw01.dst_tiling, data->dw01.dst_ctrl_surface_type);
> igt_info(" dw02: [%08x] dst geom <x1: %d, y1: %d>\n",
> cmd[2], data->dw02.dst_x1, data->dw02.dst_y1);
> @@ -678,10 +680,10 @@ static void dump_bb_cmd(struct gen12_block_copy_data *data)
> data->dw06.dst_target_memory);
> igt_info(" dw07: [%08x] src geom <x1: %d, y1: %d>\n",
> cmd[7], data->dw07.src_x1, data->dw07.src_y1);
> - igt_info(" dw08: [%08x] src <pitch: %d, aux: %d, mocs: %d, compr: %d, "
> + igt_info(" dw08: [%08x] src <pitch: %d, aux: %d, mocs_idx: %d, compr: %d, "
> "tiling: %d, ctrl surf type: %d>\n",
> cmd[8], data->dw08.src_pitch, data->dw08.src_aux_mode,
> - data->dw08.src_mocs, data->dw08.src_compression,
> + data->dw08.src_mocs_index, data->dw08.src_compression,
> data->dw08.src_tiling, data->dw08.src_ctrl_surface_type);
> igt_info(" dw09: [%08x] src offset lo (0x%x)\n",
> cmd[9], data->dw09.src_address_lo);
> @@ -946,7 +948,8 @@ struct gen12_ctrl_surf_copy_data {
>
> struct {
> uint32_t src_address_hi: BITRANGE(0, 24);
> - uint32_t src_mocs: BITRANGE(25, 31);
> + uint32_t pxp: BITRANGE(25, 25);
> + uint32_t src_mocs_index: BITRANGE(26, 31);
> } dw02;
>
> struct {
> @@ -955,7 +958,8 @@ struct gen12_ctrl_surf_copy_data {
>
> struct {
> uint32_t dst_address_hi: BITRANGE(0, 24);
> - uint32_t dst_mocs: BITRANGE(25, 31);
> + uint32_t pxp: BITRANGE(25, 25);
> + uint32_t dst_mocs_index: BITRANGE(26, 31);
> } dw04;
> };
>
> @@ -972,12 +976,12 @@ static void dump_bb_surf_ctrl_cmd(const struct gen12_ctrl_surf_copy_data *data)
> data->dw00.size_of_ctrl_copy, data->dw00.length);
> igt_info(" dw01: [%08x] src offset lo (0x%x)\n",
> cmd[1], data->dw01.src_address_lo);
> - igt_info(" dw02: [%08x] src offset hi (0x%x), src mocs: %u\n",
> - cmd[2], data->dw02.src_address_hi, data->dw02.src_mocs);
> + igt_info(" dw02: [%08x] src offset hi (0x%x), src mocs idx: %u\n",
> + cmd[2], data->dw02.src_address_hi, data->dw02.src_mocs_index);
> igt_info(" dw03: [%08x] dst offset lo (0x%x)\n",
> cmd[3], data->dw03.dst_address_lo);
> - igt_info(" dw04: [%08x] dst offset hi (0x%x), src mocs: %u\n",
> - cmd[4], data->dw04.dst_address_hi, data->dw04.dst_mocs);
> + igt_info(" dw04: [%08x] dst offset hi (0x%x), dst mocs idx: %u\n",
> + cmd[4], data->dw04.dst_address_hi, data->dw04.dst_mocs_index);
> }
>
> /**
> @@ -1042,11 +1046,11 @@ uint64_t emit_blt_ctrl_surf_copy(int fd,
>
> data.dw01.src_address_lo = src_offset;
> data.dw02.src_address_hi = src_offset >> 32;
> - data.dw02.src_mocs = surf->src.mocs;
> + data.dw02.src_mocs_index = surf->src.mocs_index;
>
> data.dw03.dst_address_lo = dst_offset;
> data.dw04.dst_address_hi = dst_offset >> 32;
> - data.dw04.dst_mocs = surf->dst.mocs;
> + data.dw04.dst_mocs_index = surf->dst.mocs_index;
>
> bb = bo_map(fd, surf->bb.handle, surf->bb.size, surf->driver);
>
> @@ -1435,7 +1439,7 @@ void blt_set_batch(struct blt_copy_batch *batch,
>
> struct blt_copy_object *
> blt_create_object(const struct blt_copy_data *blt, uint32_t region,
> - uint32_t width, uint32_t height, uint32_t bpp, uint8_t mocs,
> + uint32_t width, uint32_t height, uint32_t bpp, uint8_t mocs_index,
> enum blt_tiling_type tiling,
> enum blt_compression compression,
> enum blt_compression_type compression_type,
> @@ -1460,7 +1464,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
> &size, region) == 0);
> }
>
> - blt_set_object(obj, handle, size, region, mocs, tiling,
> + blt_set_object(obj, handle, size, region, mocs_index, tiling,
> compression, compression_type);
> blt_set_geom(obj, stride, 0, 0, width, height, 0, 0);
>
> @@ -1481,14 +1485,14 @@ void blt_destroy_object(int fd, struct blt_copy_object *obj)
>
> void blt_set_object(struct blt_copy_object *obj,
> uint32_t handle, uint64_t size, uint32_t region,
> - uint8_t mocs, enum blt_tiling_type tiling,
> + uint8_t mocs_index, enum blt_tiling_type tiling,
> enum blt_compression compression,
> enum blt_compression_type compression_type)
> {
> obj->handle = handle;
> obj->size = size;
> obj->region = region;
> - obj->mocs = mocs;
> + obj->mocs_index = mocs_index;
> obj->tiling = tiling;
> obj->compression = compression;
> obj->compression_type = compression_type;
> @@ -1516,12 +1520,12 @@ void blt_set_copy_object(struct blt_copy_object *obj,
>
> void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
> uint32_t handle, uint32_t region, uint64_t size,
> - uint8_t mocs, enum blt_access_type access_type)
> + uint8_t mocs_index, enum blt_access_type access_type)
> {
> obj->handle = handle;
> obj->region = region;
> obj->size = size;
> - obj->mocs = mocs;
> + obj->mocs_index = mocs_index;
> obj->access_type = access_type;
> }
>
> @@ -1589,8 +1593,8 @@ void blt_surface_fill_rect(int fd, const struct blt_copy_object *obj,
> void blt_surface_info(const char *info, const struct blt_copy_object *obj)
> {
> igt_info("[%s]\n", info);
> - igt_info("surface <handle: %u, size: %llx, region: %x, mocs: %x>\n",
> - obj->handle, (long long) obj->size, obj->region, obj->mocs);
> + igt_info("surface <handle: %u, size: %llx, region: %x, mocs_idx: %x>\n",
> + obj->handle, (long long) obj->size, obj->region, obj->mocs_index);
> igt_info(" <tiling: %s, compression: %u, compression type: %d>\n",
> blt_tiling_name(obj->tiling), obj->compression, obj->compression_type);
> igt_info(" <pitch: %u, offset [x: %u, y: %u] geom [<%d,%d> <%d,%d>]>\n",
> diff --git a/lib/intel_blt.h b/lib/intel_blt.h
> index d9c8883c7..7b4271620 100644
> --- a/lib/intel_blt.h
> +++ b/lib/intel_blt.h
> @@ -78,7 +78,7 @@ struct blt_copy_object {
> uint32_t handle;
> uint32_t region;
> uint64_t size;
> - uint8_t mocs;
> + uint8_t mocs_index;
> enum blt_tiling_type tiling;
> enum blt_compression compression; /* BC only */
> enum blt_compression_type compression_type; /* BC only */
> @@ -150,7 +150,7 @@ struct blt_ctrl_surf_copy_object {
> uint32_t handle;
> uint32_t region;
> uint64_t size;
> - uint8_t mocs;
> + uint8_t mocs_index;
> enum blt_access_type access_type;
> };
>
> @@ -239,7 +239,7 @@ void blt_set_batch(struct blt_copy_batch *batch,
>
> struct blt_copy_object *
> blt_create_object(const struct blt_copy_data *blt, uint32_t region,
> - uint32_t width, uint32_t height, uint32_t bpp, uint8_t mocs,
> + uint32_t width, uint32_t height, uint32_t bpp, uint8_t mocs_index,
> enum blt_tiling_type tiling,
> enum blt_compression compression,
> enum blt_compression_type compression_type,
> @@ -247,7 +247,7 @@ blt_create_object(const struct blt_copy_data *blt, uint32_t region,
> void blt_destroy_object(int fd, struct blt_copy_object *obj);
> void blt_set_object(struct blt_copy_object *obj,
> uint32_t handle, uint64_t size, uint32_t region,
> - uint8_t mocs, enum blt_tiling_type tiling,
> + uint8_t mocs_index, enum blt_tiling_type tiling,
> enum blt_compression compression,
> enum blt_compression_type compression_type);
> void blt_set_object_ext(struct blt_block_copy_object_ext *obj,
> @@ -258,7 +258,7 @@ void blt_set_copy_object(struct blt_copy_object *obj,
> const struct blt_copy_object *orig);
> void blt_set_ctrl_surf_object(struct blt_ctrl_surf_copy_object *obj,
> uint32_t handle, uint32_t region, uint64_t size,
> - uint8_t mocs, enum blt_access_type access_type);
> + uint8_t mocs_index, enum blt_access_type access_type);
>
> void blt_surface_info(const char *info,
> const struct blt_copy_object *obj);
> diff --git a/lib/intel_mocs.c b/lib/intel_mocs.c
> index cf3b8e4fe..6a4ec25e4 100644
> --- a/lib/intel_mocs.c
> +++ b/lib/intel_mocs.c
> @@ -51,22 +51,20 @@ static void get_mocs_index(int fd, struct drm_intel_mocs_index *mocs)
> }
> }
>
> -/* BitField [6:1] represents index to MOCS Tables
> - * BitField [0] represents Encryption/Decryption
> - */
> -
> -uint8_t intel_get_wb_mocs(int fd)
> +uint8_t intel_get_wb_mocs_index(int fd)
> {
> struct drm_intel_mocs_index mocs;
>
> get_mocs_index(fd, &mocs);
> - return mocs.wb_index << 1;
> +
> + return mocs.wb_index;
> }
>
> -uint8_t intel_get_uc_mocs(int fd)
> +uint8_t intel_get_uc_mocs_index(int fd)
> {
> struct drm_intel_mocs_index mocs;
>
> get_mocs_index(fd, &mocs);
> - return mocs.uc_index << 1;
> +
> + return mocs.uc_index;
> }
> diff --git a/lib/intel_mocs.h b/lib/intel_mocs.h
> index 255eac0ff..278f143ec 100644
> --- a/lib/intel_mocs.h
> +++ b/lib/intel_mocs.h
> @@ -6,7 +6,7 @@
> #ifndef _INTEL_MOCS_H
> #define _INTEL_MOCS_H
>
> -uint8_t intel_get_wb_mocs(int fd);
> -uint8_t intel_get_uc_mocs(int fd);
> +uint8_t intel_get_wb_mocs_index(int fd);
> +uint8_t intel_get_uc_mocs_index(int fd);
>
> #endif /* _INTEL_MOCS_H */
> diff --git a/lib/intel_reg.h b/lib/intel_reg.h
> index 3bf3676dc..f97154d2b 100644
> --- a/lib/intel_reg.h
> +++ b/lib/intel_reg.h
> @@ -2562,7 +2562,8 @@ SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
> #define XY_MONO_SRC_BLT_WRITE_ALPHA (1<<21)
> #define XY_MONO_SRC_BLT_WRITE_RGB (1<<20)
>
> -#define XY_FAST_COLOR_BLT ((0x2<<29)|(0x44<<22)|0xe)
> +#define XY_FAST_COLOR_BLT ((0x2<<29)|(0x44<<22)|0xe)
> +#define XY_FAST_COLOR_BLT_MOCS_INDEX_SHIFT 22
>
> #define XY_FAST_COPY_BLT ((2<<29)|(0x42<<22)|0x8)
> /* dword 0 */
> diff --git a/lib/rendercopy_gen9.c b/lib/rendercopy_gen9.c
> index b8959d073..6c410e8a8 100644
> --- a/lib/rendercopy_gen9.c
> +++ b/lib/rendercopy_gen9.c
> @@ -138,7 +138,7 @@ static const uint32_t gen12p71_render_copy[][4] = {
>
> /* Mostly copy+paste from gen6, except height, width, pitch moved */
> static uint32_t
> -gen8_bind_buf(struct intel_bb *ibb, const struct intel_buf *buf, int is_dst,
> +gen9_bind_buf(struct intel_bb *ibb, const struct intel_buf *buf, int is_dst,
> bool fast_clear) {
> struct gen9_surface_state *ss;
> uint32_t write_domain, read_domain;
> @@ -173,11 +173,11 @@ gen8_bind_buf(struct intel_bb *ibb, const struct intel_buf *buf, int is_dst,
> /*
> * mocs table version 1 index 3 groub wb use l3
> */
> - ss->ss1.memory_object_control = 3 << 1;
> + ss->ss1.mocs_index= 3;
Nitpick: missing a space here.
Otherwise,
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
> ss->ss5.mip_tail_start_lod = 0;
> } else {
> ss->ss0.render_cache_read_write = 1;
> - ss->ss1.memory_object_control = intel_get_uc_mocs(i915);
> + ss->ss1.mocs_index = intel_get_uc_mocs_index(i915);
> ss->ss5.mip_tail_start_lod = 1; /* needed with trmode */
> }
>
> @@ -187,7 +187,7 @@ gen8_bind_buf(struct intel_bb *ibb, const struct intel_buf *buf, int is_dst,
> ss->ss0.tiled_mode = 3;
>
> if (intel_buf_pxp(buf))
> - ss->ss1.memory_object_control |= 1;
> + ss->ss1.pxp = 1;
>
> if (buf->tiling == I915_TILING_Yf)
> ss->ss5.trmode = 1;
> @@ -282,10 +282,10 @@ gen8_bind_surfaces(struct intel_bb *ibb,
> binding_table = intel_bb_ptr_align(ibb, 32);
> binding_table_offset = intel_bb_ptr_add_return_prev_offset(ibb, 32);
>
> - binding_table[0] = gen8_bind_buf(ibb, dst, 1, fast_clear);
> + binding_table[0] = gen9_bind_buf(ibb, dst, 1, fast_clear);
>
> if (src != NULL)
> - binding_table[1] = gen8_bind_buf(ibb, src, 0, false);
> + binding_table[1] = gen9_bind_buf(ibb, src, 0, false);
>
> return binding_table_offset;
> }
> diff --git a/lib/xehp_media.h b/lib/xehp_media.h
> index 65a72d950..c08288b46 100644
> --- a/lib/xehp_media.h
> +++ b/lib/xehp_media.h
> @@ -109,7 +109,8 @@ struct xehp_surface_state {
> uint32_t double_fetch_disable: BITRANGE(17, 17);
> uint32_t corner_texel_mode: BITRANGE(18, 18);
> uint32_t base_mip_level: BITRANGE(19, 23);
> - uint32_t memory_object_control: BITRANGE(24, 30);
> + uint32_t pxp: BITRANGE(24, 24);
> + uint32_t mocs_index: BITRANGE(25, 30);
> uint32_t unorm_path_in_color_pipe: BITRANGE(31, 31);
> } ss1;
>
> diff --git a/tests/intel/gem_ccs.c b/tests/intel/gem_ccs.c
> index f5d4ab359..ed149ef9e 100644
> --- a/tests/intel/gem_ccs.c
> +++ b/tests/intel/gem_ccs.c
> @@ -100,7 +100,7 @@ static void surf_copy(int i915,
> uint32_t bb1, bb2, ccs, ccs2, *ccsmap, *ccsmap2;
> uint64_t bb_size, ccssize = mid->size / CCS_RATIO;
> uint32_t *ccscopy;
> - uint8_t uc_mocs = intel_get_uc_mocs(i915);
> + uint8_t uc_mocs = intel_get_uc_mocs_index(i915);
> int result;
>
> igt_assert(mid->compression);
> @@ -323,7 +323,7 @@ static void block_copy(int i915,
> enum blt_compression mid_compression = config->compression;
> int mid_compression_format = param.compression_format;
> enum blt_compression_type comp_type = COMPRESSION_TYPE_3D;
> - uint8_t uc_mocs = intel_get_uc_mocs(i915);
> + uint8_t uc_mocs = intel_get_uc_mocs_index(i915);
> int result;
>
> igt_assert(__gem_create_in_memory_regions(i915, &bb, &bb_size, region1) == 0);
> @@ -439,7 +439,7 @@ static void block_multicopy(int i915,
> enum blt_compression mid_compression = config->compression;
> int mid_compression_format = param.compression_format;
> enum blt_compression_type comp_type = COMPRESSION_TYPE_3D;
> - uint8_t uc_mocs = intel_get_uc_mocs(i915);
> + uint8_t uc_mocs = intel_get_uc_mocs_index(i915);
> int result;
>
> igt_assert(__gem_create_in_memory_regions(i915, &bb, &bb_size, region1) == 0);
> @@ -475,7 +475,7 @@ static void block_multicopy(int i915,
>
> if (config->inplace) {
> blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
> - mid->mocs, mid_tiling, COMPRESSION_DISABLED,
> + mid->mocs_index, mid_tiling, COMPRESSION_DISABLED,
> comp_type);
> blt3.dst.ptr = mid->ptr;
> }
> diff --git a/tests/intel/gem_lmem_swapping.c b/tests/intel/gem_lmem_swapping.c
> index ede545c92..2e0ba0793 100644
> --- a/tests/intel/gem_lmem_swapping.c
> +++ b/tests/intel/gem_lmem_swapping.c
> @@ -486,7 +486,7 @@ static void __do_evict(int i915,
> INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0));
> blt_set_object(tmp, tmp->handle, params->size.max,
> INTEL_MEMORY_REGION_ID(I915_SYSTEM_MEMORY, 0),
> - intel_get_uc_mocs(i915), T_LINEAR,
> + intel_get_uc_mocs_index(i915), T_LINEAR,
> COMPRESSION_DISABLED, COMPRESSION_TYPE_3D);
> blt_set_geom(tmp, stride, 0, 0, width, height, 0, 0);
> }
> @@ -516,7 +516,7 @@ static void __do_evict(int i915,
> obj->blt_obj = calloc(1, sizeof(*obj->blt_obj));
> igt_assert(obj->blt_obj);
> blt_set_object(obj->blt_obj, obj->handle, obj->size, region_id,
> - intel_get_uc_mocs(i915), T_LINEAR,
> + intel_get_uc_mocs_index(i915), T_LINEAR,
> COMPRESSION_ENABLED, COMPRESSION_TYPE_3D);
> blt_set_geom(obj->blt_obj, stride, 0, 0, width, height, 0, 0);
> init_object_ccs(i915, obj, tmp, rand(), blt_ctx,
> diff --git a/tests/intel/xe_ccs.c b/tests/intel/xe_ccs.c
> index 20bbc4448..c3382bfde 100644
> --- a/tests/intel/xe_ccs.c
> +++ b/tests/intel/xe_ccs.c
> @@ -96,7 +96,7 @@ static void surf_copy(int xe,
> uint32_t bb1, bb2, ccs, ccs2, *ccsmap, *ccsmap2;
> uint64_t bb_size, ccssize = mid->size / CCS_RATIO;
> uint32_t *ccscopy;
> - uint8_t uc_mocs = intel_get_uc_mocs(xe);
> + uint8_t uc_mocs = intel_get_uc_mocs_index(xe);
> uint32_t sysmem = system_memory(xe);
> int result;
>
> @@ -294,7 +294,7 @@ static void block_copy(int xe,
> enum blt_compression mid_compression = config->compression;
> int mid_compression_format = param.compression_format;
> enum blt_compression_type comp_type = COMPRESSION_TYPE_3D;
> - uint8_t uc_mocs = intel_get_uc_mocs(xe);
> + uint8_t uc_mocs = intel_get_uc_mocs_index(xe);
> int result;
>
> bb = xe_bo_create_flags(xe, 0, bb_size, region1);
> @@ -415,7 +415,7 @@ static void block_multicopy(int xe,
> enum blt_compression mid_compression = config->compression;
> int mid_compression_format = param.compression_format;
> enum blt_compression_type comp_type = COMPRESSION_TYPE_3D;
> - uint8_t uc_mocs = intel_get_uc_mocs(xe);
> + uint8_t uc_mocs = intel_get_uc_mocs_index(xe);
> int result;
>
> bb = xe_bo_create_flags(xe, 0, bb_size, region1);
> @@ -450,7 +450,7 @@ static void block_multicopy(int xe,
>
> if (config->inplace) {
> blt_set_object(&blt3.dst, mid->handle, dst->size, mid->region,
> - mid->mocs, mid_tiling, COMPRESSION_DISABLED,
> + mid->mocs_index, mid_tiling, COMPRESSION_DISABLED,
> comp_type);
> blt3.dst.ptr = mid->ptr;
> }
> --
> 2.40.1
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the igt-dev
mailing list