/* Size with u32 units. */
 #define CABAC_INIT_BUFFER_SIZE         (460 * 2)
 #define POC_BUFFER_SIZE                        34
-#define SCALING_LIST_SIZE              (6 * 16 + 6 * 64)
+#define SCALING_LIST_SIZE              (6 * 16 + 2 * 64)
 
 #define HANTRO_CMP(a, b) ((a) < (b) ? -1 : 1)
 
        0x1f0c2517, 0x1f261440
 };
 
-/*
- * NOTE: The scaling lists are in zig-zag order, apply inverse scanning process
- * to get the values in matrix order. In addition, the hardware requires bytes
- * swapped within each subsequent 4 bytes. Both arrays below include both
- * transformations.
- */
-static const u32 zig_zag_4x4[] = {
-       3, 2, 7, 11, 6, 1, 0, 5, 10, 15, 14, 9, 4, 8, 13, 12
-};
-
-static const u32 zig_zag_8x8[] = {
-       3, 2, 11, 19, 10, 1, 0, 9, 18, 27, 35, 26, 17, 8, 7, 6,
-       15, 16, 25, 34, 43, 51, 42, 33, 24, 23, 14, 5, 4, 13, 22, 31,
-       32, 41, 50, 59, 58, 49, 40, 39, 30, 21, 12, 20, 29, 38, 47, 48,
-       57, 56, 55, 46, 37, 28, 36, 45, 54, 63, 62, 53, 44, 52, 61, 60
-};
-
 static void
 reorder_scaling_list(struct hantro_ctx *ctx)
 {
        const struct v4l2_ctrl_h264_scaling_matrix *scaling = ctrls->scaling;
        const size_t num_list_4x4 = ARRAY_SIZE(scaling->scaling_list_4x4);
        const size_t list_len_4x4 = ARRAY_SIZE(scaling->scaling_list_4x4[0]);
-       const size_t num_list_8x8 = ARRAY_SIZE(scaling->scaling_list_8x8);
        const size_t list_len_8x8 = ARRAY_SIZE(scaling->scaling_list_8x8[0]);
        struct hantro_h264_dec_priv_tbl *tbl = ctx->h264_dec.priv.cpu;
-       u8 *dst = tbl->scaling_list;
-       const u8 *src;
+       u32 *dst = (u32 *)tbl->scaling_list;
+       const u32 *src;
        int i, j;
 
-       BUILD_BUG_ON(ARRAY_SIZE(zig_zag_4x4) != list_len_4x4);
-       BUILD_BUG_ON(ARRAY_SIZE(zig_zag_8x8) != list_len_8x8);
-       BUILD_BUG_ON(ARRAY_SIZE(tbl->scaling_list) !=
-                    num_list_4x4 * list_len_4x4 +
-                    num_list_8x8 * list_len_8x8);
-
-       src = &scaling->scaling_list_4x4[0][0];
-       for (i = 0; i < num_list_4x4; ++i) {
-               for (j = 0; j < list_len_4x4; ++j)
-                       dst[zig_zag_4x4[j]] = src[j];
-               src += list_len_4x4;
-               dst += list_len_4x4;
+       for (i = 0; i < num_list_4x4; i++) {
+               src = (u32 *)&scaling->scaling_list_4x4[i];
+               for (j = 0; j < list_len_4x4 / 4; j++)
+                       *dst++ = swab32(src[j]);
        }
 
-       src = &scaling->scaling_list_8x8[0][0];
-       for (i = 0; i < num_list_8x8; ++i) {
-               for (j = 0; j < list_len_8x8; ++j)
-                       dst[zig_zag_8x8[j]] = src[j];
-               src += list_len_8x8;
-               dst += list_len_8x8;
+       /* Only Intra/Inter Y lists */
+       for (i = 0; i < 2; i++) {
+               src = (u32 *)&scaling->scaling_list_8x8[i];
+               for (j = 0; j < list_len_8x8 / 4; j++)
+                       *dst++ = swab32(src[j]);
        }
 }