Implement AV1 stateless decoder for rockchip VPU981.
It decode 8 and 10 bits AV1 bitstreams.
AV1 scaling feature is done by the postprocessor.
Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com>
---
v3:
- Fix arrays loops limites.
- Remove unused field.
drivers/media/platform/verisilicon/Makefile | 1 +
.../media/platform/verisilicon/hantro_hw.h | 64 +-
.../verisilicon/rockchip_vpu981_hw_av1_dec.c | 2065 +++++++++++++++++
.../verisilicon/rockchip_vpu981_regs.h | 477 ++++
4 files changed, 2605 insertions(+), 2 deletions(-)
create mode 100644 drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c
create mode 100644 drivers/media/platform/verisilicon/rockchip_vpu981_regs.h
diff --git a/drivers/media/platform/verisilicon/Makefile b/drivers/media/platform/verisilicon/Makefile
index d2b2679c00eb..c9a9806ab8c5 100644
--- a/drivers/media/platform/verisilicon/Makefile
+++ b/drivers/media/platform/verisilicon/Makefile
@@ -18,6 +18,7 @@ hantro-vpu-y += \
rockchip_vpu2_hw_h264_dec.o \
rockchip_vpu2_hw_mpeg2_dec.o \
rockchip_vpu2_hw_vp8_dec.o \
+ rockchip_vpu981_hw_av1_dec.o \
rockchip_av1_entropymode.o \
hantro_jpeg.o \
hantro_h264.o \
diff --git a/drivers/media/platform/verisilicon/hantro_hw.h b/drivers/media/platform/verisilicon/hantro_hw.h
index c7438e197d85..1741ef939bf8 100644
--- a/drivers/media/platform/verisilicon/hantro_hw.h
+++ b/drivers/media/platform/verisilicon/hantro_hw.h
@@ -37,6 +37,8 @@
#define NUM_REF_PICTURES (V4L2_HEVC_DPB_ENTRIES_NUM_MAX + 1)
+#define AV1_MAX_FRAME_BUF_COUNT (V4L2_AV1_TOTAL_REFS_PER_FRAME + 1)
+
struct hantro_dev;
struct hantro_ctx;
struct hantro_buf;
@@ -250,23 +252,81 @@ struct hantro_vp9_dec_hw_ctx {
};
/**
- * hantro_av1_dec_hw_ctx
+ * struct hantro_av1_dec_ctrls
+ * @sequence: AV1 Sequence
+ * @tile_group_entry: AV1 Tile Group entry
+ * @frame: AV1 Frame Header OBU
+ * @film_grain: AV1 Film Grain
+ */
+struct hantro_av1_dec_ctrls {
+ const struct v4l2_ctrl_av1_sequence *sequence;
+ const struct v4l2_ctrl_av1_tile_group_entry *tile_group_entry;
+ const struct v4l2_ctrl_av1_frame *frame;
+ const struct v4l2_ctrl_av1_film_grain *film_grain;
+};
+
+struct hantro_av1_frame_ref {
+ int width;
+ int height;
+ int mi_cols;
+ int mi_rows;
+ u64 timestamp;
+ enum v4l2_av1_frame_type frame_type;
+ bool used;
+ u32 order_hint;
+ u32 order_hints[V4L2_AV1_TOTAL_REFS_PER_FRAME];
+ struct vb2_v4l2_buffer *vb2_ref;
+};
+
+/**
+ * struct hantro_av1_dec_hw_ctx
+ * @db_data_col: db tile col data buffer
+ * @db_ctrl_col: db tile col ctrl buffer
+ * @cdef_col: cdef tile col buffer
+ * @sr_col: sr tile col buffer
+ * @lr_col: lr tile col buffer
+ * @global_model: global model buffer
+ * @tile_info: tile info buffer
+ * @segment: segmentation info buffer
+ * @prob_tbl: probability table
+ * @prob_tbl_out: probability table output
+ * @tile_buf: tile buffer
+ * @ctrls: V4L2 controls attached to a run
+ * @frame_refs: reference frames info slots
+ * @ref_frame_sign_bias: array of sign bias
+ * @num_tile_cols_allocated: number of allocated tiles
* @cdfs: current probabilities structure
* @cdfs_ndvc: current mv probabilities structure
* @default_cdfs: default probabilities structure
* @default_cdfs_ndvc: default mv probabilties structure
* @cdfs_last: stored probabilities structures
* @cdfs_last_ndvc: stored mv probabilities structures
+ * @current_frame_index: index of the current in frame_refs array
*/
struct hantro_av1_dec_hw_ctx {
+ struct hantro_aux_buf db_data_col;
+ struct hantro_aux_buf db_ctrl_col;
+ struct hantro_aux_buf cdef_col;
+ struct hantro_aux_buf sr_col;
+ struct hantro_aux_buf lr_col;
+ struct hantro_aux_buf global_model;
+ struct hantro_aux_buf tile_info;
+ struct hantro_aux_buf segment;
+ struct hantro_aux_buf prob_tbl;
+ struct hantro_aux_buf prob_tbl_out;
+ struct hantro_aux_buf tile_buf;
+ struct hantro_av1_dec_ctrls ctrls;
+ struct hantro_av1_frame_ref frame_refs[AV1_MAX_FRAME_BUF_COUNT];
+ uint32_t ref_frame_sign_bias[V4L2_AV1_TOTAL_REFS_PER_FRAME];
+ unsigned int num_tile_cols_allocated;
struct av1cdfs *cdfs;
struct mvcdfs *cdfs_ndvc;
struct av1cdfs default_cdfs;
struct mvcdfs default_cdfs_ndvc;
struct av1cdfs cdfs_last[NUM_REF_FRAMES];
struct mvcdfs cdfs_last_ndvc[NUM_REF_FRAMES];
+ int current_frame_index;
};
-
/**
* struct hantro_postproc_ctx
*
diff --git a/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c b/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c
new file mode 100644
index 000000000000..81aeb1d6b93f
--- /dev/null
+++ b/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c
@@ -0,0 +1,2065 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (c) 2021, Collabora
+ *
+ * Author: Benjamin Gaignard <benjamin.gaignard@collabora.com>
+ */
+
+#include <media/v4l2-mem2mem.h>
+#include "hantro.h"
+#include "hantro_v4l2.h"
+#include "rockchip_vpu981_regs.h"
+
+#define AV1_DEC_MODE 17
+#define GM_GLOBAL_MODELS_PER_FRAME 7
+#define GLOBAL_MODEL_TOTAL_SIZE (6 * 4 + 4 * 2)
+#define GLOBAL_MODEL_SIZE ALIGN(GM_GLOBAL_MODELS_PER_FRAME * GLOBAL_MODEL_TOTAL_SIZE, 2048)
+#define AV1_MAX_TILES 128
+#define AV1_TILE_INFO_SIZE (AV1_MAX_TILES * 16)
+#define AV1DEC_MAX_PIC_BUFFERS 24
+#define AV1_REF_SCALE_SHIFT 14
+#define AV1_INVALID_IDX -1
+#define MAX_FRAME_DISTANCE 31
+#define AV1_PRIMARY_REF_NONE 7
+#define AV1_TILE_SIZE ALIGN(32 * 128, 4096)
+/*
+ * These 3 values aren't defined enum v4l2_av1_segment_feature because
+ * they are not part of the specification
+ */
+#define V4L2_AV1_SEG_LVL_ALT_LF_Y_H 2
+#define V4L2_AV1_SEG_LVL_ALT_LF_U 3
+#define V4L2_AV1_SEG_LVL_ALT_LF_V 4
+
+#define SUPERRES_SCALE_BITS 3
+#define SCALE_NUMERATOR 8
+#define SUPERRES_SCALE_DENOMINATOR_MIN (SCALE_NUMERATOR + 1)
+
+#define RS_SUBPEL_BITS 6
+#define RS_SUBPEL_MASK ((1 << RS_SUBPEL_BITS) - 1)
+#define RS_SCALE_SUBPEL_BITS 14
+#define RS_SCALE_SUBPEL_MASK ((1 << RS_SCALE_SUBPEL_BITS) - 1)
+#define RS_SCALE_EXTRA_BITS (RS_SCALE_SUBPEL_BITS - RS_SUBPEL_BITS)
+#define RS_SCALE_EXTRA_OFF (1 << (RS_SCALE_EXTRA_BITS - 1))
+
+#define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME))
+
+#define LST_BUF_IDX (V4L2_AV1_REF_LAST_FRAME - V4L2_AV1_REF_LAST_FRAME)
+#define LST2_BUF_IDX (V4L2_AV1_REF_LAST2_FRAME - V4L2_AV1_REF_LAST_FRAME)
+#define LST3_BUF_IDX (V4L2_AV1_REF_LAST3_FRAME - V4L2_AV1_REF_LAST_FRAME)
+#define GLD_BUF_IDX (V4L2_AV1_REF_GOLDEN_FRAME - V4L2_AV1_REF_LAST_FRAME)
+#define BWD_BUF_IDX (V4L2_AV1_REF_BWDREF_FRAME - V4L2_AV1_REF_LAST_FRAME)
+#define ALT2_BUF_IDX (V4L2_AV1_REF_ALTREF2_FRAME - V4L2_AV1_REF_LAST_FRAME)
+#define ALT_BUF_IDX (V4L2_AV1_REF_ALTREF_FRAME - V4L2_AV1_REF_LAST_FRAME)
+
+#define DIV_LUT_PREC_BITS 14
+#define DIV_LUT_BITS 8
+#define DIV_LUT_NUM BIT(DIV_LUT_BITS)
+#define WARP_PARAM_REDUCE_BITS 6
+#define WARPEDMODEL_PREC_BITS 16
+
+#define AV1_DIV_ROUND_UP_POW2(value, n) \
+({ \
+ typeof(n) _n = n; \
+ typeof(value) _value = value; \
+ (_value + (BIT(_n) >> 1)) >> _n; \
+})
+
+#define AV1_DIV_ROUND_UP_POW2_SIGNED(value, n) \
+({ \
+ typeof(n) _n_ = n; \
+ typeof(value) _value_ = value; \
+ (((_value_) < 0) ? -AV1_DIV_ROUND_UP_POW2(-(_value_), (_n_)) \
+ : AV1_DIV_ROUND_UP_POW2((_value_), (_n_))); \
+})
+
+struct rockchip_av1_film_grain {
+ uint8_t scaling_lut_y[256];
+ uint8_t scaling_lut_cb[256];
+ uint8_t scaling_lut_cr[256];
+ int16_t cropped_luma_grain_block[4096];
+ int16_t cropped_chroma_grain_block[1024 * 2];
+};
+
+static const short div_lut[DIV_LUT_NUM + 1] = {
+ 16384, 16320, 16257, 16194, 16132, 16070, 16009, 15948, 15888, 15828, 15768,
+ 15709, 15650, 15592, 15534, 15477, 15420, 15364, 15308, 15252, 15197, 15142,
+ 15087, 15033, 14980, 14926, 14873, 14821, 14769, 14717, 14665, 14614, 14564,
+ 14513, 14463, 14413, 14364, 14315, 14266, 14218, 14170, 14122, 14075, 14028,
+ 13981, 13935, 13888, 13843, 13797, 13752, 13707, 13662, 13618, 13574, 13530,
+ 13487, 13443, 13400, 13358, 13315, 13273, 13231, 13190, 13148, 13107, 13066,
+ 13026, 12985, 12945, 12906, 12866, 12827, 12788, 12749, 12710, 12672, 12633,
+ 12596, 12558, 12520, 12483, 12446, 12409, 12373, 12336, 12300, 12264, 12228,
+ 12193, 12157, 12122, 12087, 12053, 12018, 11984, 11950, 11916, 11882, 11848,
+ 11815, 11782, 11749, 11716, 11683, 11651, 11619, 11586, 11555, 11523, 11491,
+ 11460, 11429, 11398, 11367, 11336, 11305, 11275, 11245, 11215, 11185, 11155,
+ 11125, 11096, 11067, 11038, 11009, 10980, 10951, 10923, 10894, 10866, 10838,
+ 10810, 10782, 10755, 10727, 10700, 10673, 10645, 10618, 10592, 10565, 10538,
+ 10512, 10486, 10460, 10434, 10408, 10382, 10356, 10331, 10305, 10280, 10255,
+ 10230, 10205, 10180, 10156, 10131, 10107, 10082, 10058, 10034, 10010, 9986,
+ 9963, 9939, 9916, 9892, 9869, 9846, 9823, 9800, 9777, 9754, 9732,
+ 9709, 9687, 9664, 9642, 9620, 9598, 9576, 9554, 9533, 9511, 9489,
+ 9468, 9447, 9425, 9404, 9383, 9362, 9341, 9321, 9300, 9279, 9259,
+ 9239, 9218, 9198, 9178, 9158, 9138, 9118, 9098, 9079, 9059, 9039,
+ 9020, 9001, 8981, 8962, 8943, 8924, 8905, 8886, 8867, 8849, 8830,
+ 8812, 8793, 8775, 8756, 8738, 8720, 8702, 8684, 8666, 8648, 8630,
+ 8613, 8595, 8577, 8560, 8542, 8525, 8508, 8490, 8473, 8456, 8439,
+ 8422, 8405, 8389, 8372, 8355, 8339, 8322, 8306, 8289, 8273, 8257,
+ 8240, 8224, 8208, 8192,
+};
+
+static int rockchip_vpu981_get_frame_index(struct hantro_ctx *ctx, int ref)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ u64 timestamp;
+ int i, idx = frame->ref_frame_idx[ref];
+
+ if (idx >= V4L2_AV1_TOTAL_REFS_PER_FRAME || idx < 0)
+ return AV1_INVALID_IDX;
+
+ timestamp = frame->reference_frame_ts[idx];
+ for (i = 0; i < AV1_MAX_FRAME_BUF_COUNT; i++) {
+ if (!av1_dec->frame_refs[i].used)
+ continue;
+ if (av1_dec->frame_refs[i].timestamp == timestamp)
+ return i;
+ }
+
+ return AV1_INVALID_IDX;
+}
+
+static int rockchip_vpu981_get_order_hint(struct hantro_ctx *ctx, int ref)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ int idx = rockchip_vpu981_get_frame_index(ctx, ref);
+
+ if (idx != AV1_INVALID_IDX)
+ return av1_dec->frame_refs[idx].order_hint;
+
+ return 0;
+}
+
+static int rockchip_vpu981_av1_dec_frame_ref(struct hantro_ctx *ctx,
+ u64 timestamp)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ int i;
+
+ for (i = 0; i < AV1_MAX_FRAME_BUF_COUNT; i++) {
+ if (!av1_dec->frame_refs[i].used) {
+ int j;
+
+ av1_dec->frame_refs[i].width =
+ frame->frame_width_minus_1 + 1;
+ av1_dec->frame_refs[i].height =
+ frame->frame_height_minus_1 + 1;
+ av1_dec->frame_refs[i].mi_cols =
+ DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8);
+ av1_dec->frame_refs[i].mi_rows =
+ DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8);
+ av1_dec->frame_refs[i].timestamp = timestamp;
+ av1_dec->frame_refs[i].frame_type = frame->frame_type;
+ av1_dec->frame_refs[i].order_hint = frame->order_hint;
+ if (!av1_dec->frame_refs[i].vb2_ref)
+ av1_dec->frame_refs[i].vb2_ref = hantro_get_dst_buf(ctx);
+
+ for (j = 0; j < V4L2_AV1_TOTAL_REFS_PER_FRAME; j++)
+ av1_dec->frame_refs[i].order_hints[j] = frame->order_hints[j];
+
+ av1_dec->frame_refs[i].used = true;
+ av1_dec->current_frame_index = i;
+ return i;
+ }
+ }
+
+ return AV1_INVALID_IDX;
+}
+
+static void rockchip_vpu981_av1_dec_frame_unref(struct hantro_ctx *ctx, int idx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+
+ if (idx < 0)
+ return;
+
+ av1_dec->frame_refs[idx].used = false;
+}
+
+static void rockchip_vpu981_av1_dec_clean_refs(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+
+ int ref, idx;
+
+ for (idx = 0; idx < AV1_MAX_FRAME_BUF_COUNT; idx++) {
+ u64 timestamp = av1_dec->frame_refs[idx].timestamp;
+ bool used = false;
+
+ if (!av1_dec->frame_refs[idx].used)
+ continue;
+
+ for (ref = 0; ref < V4L2_AV1_TOTAL_REFS_PER_FRAME; ref++) {
+ if (ctrls->frame->reference_frame_ts[ref] == timestamp)
+ used = true;
+ }
+
+ if (!used)
+ rockchip_vpu981_av1_dec_frame_unref(ctx, idx);
+ }
+}
+
+static size_t rockchip_vpu981_av1_dec_luma_size(struct hantro_ctx *ctx)
+{
+ return ctx->dst_fmt.width * ctx->dst_fmt.height * ctx->bit_depth / 8;
+}
+
+static size_t rockchip_vpu981_av1_dec_chroma_size(struct hantro_ctx *ctx)
+{
+ size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx);
+
+ return ALIGN((cr_offset * 3) / 2, 64);
+}
+
+void rockchip_vpu981_av1_dec_tiles_free(struct hantro_ctx *ctx)
+{
+ struct hantro_dev *vpu = ctx->dev;
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+
+ if (av1_dec->db_data_col.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->db_data_col.size,
+ av1_dec->db_data_col.cpu,
+ av1_dec->db_data_col.dma);
+ av1_dec->db_data_col.cpu = NULL;
+
+ if (av1_dec->db_ctrl_col.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->db_ctrl_col.size,
+ av1_dec->db_ctrl_col.cpu,
+ av1_dec->db_ctrl_col.dma);
+ av1_dec->db_ctrl_col.cpu = NULL;
+
+ if (av1_dec->cdef_col.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->cdef_col.size,
+ av1_dec->cdef_col.cpu, av1_dec->cdef_col.dma);
+ av1_dec->cdef_col.cpu = NULL;
+
+ if (av1_dec->sr_col.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->sr_col.size,
+ av1_dec->sr_col.cpu, av1_dec->sr_col.dma);
+ av1_dec->sr_col.cpu = NULL;
+
+ if (av1_dec->lr_col.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->lr_col.size,
+ av1_dec->lr_col.cpu, av1_dec->lr_col.dma);
+ av1_dec->lr_col.cpu = NULL;
+}
+
+static int rockchip_vpu981_av1_dec_tiles_reallocate(struct hantro_ctx *ctx)
+{
+ struct hantro_dev *vpu = ctx->dev;
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ unsigned int num_tile_cols = 1 << ctrls->tile_group_entry->tile_col;
+ unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64);
+ unsigned int height_in_sb = height / 64;
+ unsigned int stripe_num = ((height + 8) + 63) / 64;
+ size_t size;
+
+ if (av1_dec->db_data_col.size >=
+ ALIGN(height * 12 * ctx->bit_depth / 8, 128) * num_tile_cols)
+ return 0;
+
+ rockchip_vpu981_av1_dec_tiles_free(ctx);
+
+ size = ALIGN(height * 12 * ctx->bit_depth / 8, 128) * num_tile_cols;
+ av1_dec->db_data_col.cpu = dma_alloc_coherent(vpu->dev, size,
+ &av1_dec->db_data_col.dma,
+ GFP_KERNEL);
+ if (!av1_dec->db_data_col.cpu)
+ goto buffer_allocation_error;
+ av1_dec->db_data_col.size = size;
+
+ size = ALIGN(height * 2 * 16 / 4, 128) * num_tile_cols;
+ av1_dec->db_ctrl_col.cpu = dma_alloc_coherent(vpu->dev, size,
+ &av1_dec->db_ctrl_col.dma,
+ GFP_KERNEL);
+ if (!av1_dec->db_ctrl_col.cpu)
+ goto buffer_allocation_error;
+ av1_dec->db_ctrl_col.size = size;
+
+ size = ALIGN(height_in_sb * 44 * ctx->bit_depth * 16 / 8, 128) * num_tile_cols;
+ av1_dec->cdef_col.cpu = dma_alloc_coherent(vpu->dev, size,
+ &av1_dec->cdef_col.dma,
+ GFP_KERNEL);
+ if (!av1_dec->cdef_col.cpu)
+ goto buffer_allocation_error;
+ av1_dec->cdef_col.size = size;
+
+ size = ALIGN(height_in_sb * (3040 + 1280), 128) * num_tile_cols;
+ av1_dec->sr_col.cpu = dma_alloc_coherent(vpu->dev, size,
+ &av1_dec->sr_col.dma,
+ GFP_KERNEL);
+ if (!av1_dec->sr_col.cpu)
+ goto buffer_allocation_error;
+ av1_dec->sr_col.size = size;
+
+ size = ALIGN(stripe_num * 1536 * ctx->bit_depth / 8, 128) * num_tile_cols;
+ av1_dec->lr_col.cpu = dma_alloc_coherent(vpu->dev, size,
+ &av1_dec->lr_col.dma,
+ GFP_KERNEL);
+ if (!av1_dec->lr_col.cpu)
+ goto buffer_allocation_error;
+ av1_dec->lr_col.size = size;
+
+ av1_dec->num_tile_cols_allocated = num_tile_cols;
+ return 0;
+
+buffer_allocation_error:
+ rockchip_vpu981_av1_dec_tiles_free(ctx);
+ return -ENOMEM;
+}
+
+void rockchip_vpu981_av1_dec_exit(struct hantro_ctx *ctx)
+{
+ struct hantro_dev *vpu = ctx->dev;
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+
+ if (av1_dec->global_model.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->global_model.size,
+ av1_dec->global_model.cpu,
+ av1_dec->global_model.dma);
+ av1_dec->global_model.cpu = NULL;
+
+ if (av1_dec->tile_info.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->tile_info.size,
+ av1_dec->tile_info.cpu,
+ av1_dec->tile_info.dma);
+ av1_dec->tile_info.cpu = NULL;
+
+ if (av1_dec->prob_tbl.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->prob_tbl.size,
+ av1_dec->prob_tbl.cpu, av1_dec->prob_tbl.dma);
+ av1_dec->prob_tbl.cpu = NULL;
+
+ if (av1_dec->prob_tbl_out.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->prob_tbl_out.size,
+ av1_dec->prob_tbl_out.cpu,
+ av1_dec->prob_tbl_out.dma);
+ av1_dec->prob_tbl_out.cpu = NULL;
+
+ if (av1_dec->tile_buf.cpu)
+ dma_free_coherent(vpu->dev, av1_dec->tile_buf.size,
+ av1_dec->tile_buf.cpu, av1_dec->tile_buf.dma);
+ av1_dec->tile_buf.cpu = NULL;
+
+ rockchip_vpu981_av1_dec_tiles_free(ctx);
+}
+
+int rockchip_vpu981_av1_dec_init(struct hantro_ctx *ctx)
+{
+ struct hantro_dev *vpu = ctx->dev;
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+
+ memset(av1_dec, 0, sizeof(*av1_dec));
+
+ av1_dec->global_model.cpu = dma_alloc_coherent(vpu->dev, GLOBAL_MODEL_SIZE,
+ &av1_dec->global_model.dma,
+ GFP_KERNEL);
+ if (!av1_dec->global_model.cpu)
+ return -ENOMEM;
+ av1_dec->global_model.size = GLOBAL_MODEL_SIZE;
+
+ av1_dec->tile_info.cpu = dma_alloc_coherent(vpu->dev, AV1_MAX_TILES,
+ &av1_dec->tile_info.dma,
+ GFP_KERNEL);
+ if (!av1_dec->tile_info.cpu)
+ return -ENOMEM;
+ av1_dec->tile_info.size = AV1_MAX_TILES;
+
+ av1_dec->prob_tbl.cpu = dma_alloc_coherent(vpu->dev,
+ ALIGN(sizeof(struct av1cdfs), 2048),
+ &av1_dec->prob_tbl.dma,
+ GFP_KERNEL);
+ if (!av1_dec->prob_tbl.cpu)
+ return -ENOMEM;
+ av1_dec->prob_tbl.size = ALIGN(sizeof(struct av1cdfs), 2048);
+
+ av1_dec->prob_tbl_out.cpu = dma_alloc_coherent(vpu->dev,
+ ALIGN(sizeof(struct av1cdfs), 2048),
+ &av1_dec->prob_tbl_out.dma,
+ GFP_KERNEL);
+ if (!av1_dec->prob_tbl_out.cpu)
+ return -ENOMEM;
+ av1_dec->prob_tbl_out.size = ALIGN(sizeof(struct av1cdfs), 2048);
+ av1_dec->cdfs = &av1_dec->default_cdfs;
+ av1_dec->cdfs_ndvc = &av1_dec->default_cdfs_ndvc;
+
+ rockchip_av1_set_default_cdfs(av1_dec->cdfs, av1_dec->cdfs_ndvc);
+
+ av1_dec->tile_buf.cpu = dma_alloc_coherent(vpu->dev,
+ AV1_TILE_SIZE,
+ &av1_dec->tile_buf.dma,
+ GFP_KERNEL);
+ if (!av1_dec->tile_buf.cpu)
+ return -ENOMEM;
+ av1_dec->tile_buf.size = AV1_TILE_SIZE;
+
+ return 0;
+}
+
+static int rockchip_vpu981_av1_dec_prepare_run(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+
+ ctrls->sequence = hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_SEQUENCE);
+ if (WARN_ON(!ctrls->sequence))
+ return -EINVAL;
+
+ ctrls->tile_group_entry =
+ hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_TILE_GROUP_ENTRY);
+ if (WARN_ON(!ctrls->tile_group_entry))
+ return -EINVAL;
+
+ ctrls->frame = hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_FRAME);
+ if (WARN_ON(!ctrls->frame))
+ return -EINVAL;
+
+ ctrls->film_grain =
+ hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_FILM_GRAIN);
+
+ return rockchip_vpu981_av1_dec_tiles_reallocate(ctx);
+}
+
+static inline int rockchip_vpu981_av1_dec_get_msb(u32 n)
+{
+ if (n == 0)
+ return 0;
+ return 31 ^ __builtin_clz(n);
+}
+
+static short rockchip_vpu981_av1_dec_resolve_divisor_32(u32 d, short *shift)
+{
+ int f;
+ uint64_t e;
+
+ *shift = rockchip_vpu981_av1_dec_get_msb(d);
+ /* e is obtained from D after resetting the most significant 1 bit. */
+ e = d - ((u32)1 << *shift);
+ /* Get the most significant DIV_LUT_BITS (8) bits of e into f */
+ if (*shift > DIV_LUT_BITS)
+ f = AV1_DIV_ROUND_UP_POW2(e, *shift - DIV_LUT_BITS);
+ else
+ f = e << (DIV_LUT_BITS - *shift);
+ if (f > DIV_LUT_NUM)
+ return -1;
+ *shift += DIV_LUT_PREC_BITS;
+ /* Use f as lookup into the precomputed table of multipliers */
+ return div_lut[f];
+}
+
+static void rockchip_vpu981_av1_dec_get_shear_params(const uint32_t *params,
+ int64_t *alpha, int64_t *beta, int64_t *gamma, int64_t *delta)
+{
+ const int *mat = params;
+ short shift;
+ short y;
+ long long gv, dv;
+
+ if (mat[2] <= 0)
+ return;
+
+ *alpha = clamp_val(mat[2] - (1 << WARPEDMODEL_PREC_BITS), S16_MIN, S16_MAX);
+ *beta = clamp_val(mat[3], S16_MIN, S16_MAX);
+
+ y = rockchip_vpu981_av1_dec_resolve_divisor_32(abs(mat[2]), &shift) * (mat[2] < 0 ? -1 : 1);
+
+ gv = ((long long)mat[4] * (1 << WARPEDMODEL_PREC_BITS)) * y;
+
+ *gamma = clamp_val((int)AV1_DIV_ROUND_UP_POW2_SIGNED(gv, shift), S16_MIN, S16_MAX);
+
+ dv = ((long long)mat[3] * mat[4]) * y;
+ *delta = clamp_val(
+ mat[5] -
+ (int)AV1_DIV_ROUND_UP_POW2_SIGNED(dv, shift) - (1 << WARPEDMODEL_PREC_BITS),
+ S16_MIN, S16_MAX);
+
+ *alpha = AV1_DIV_ROUND_UP_POW2_SIGNED(*alpha, WARP_PARAM_REDUCE_BITS)
+ * (1 << WARP_PARAM_REDUCE_BITS);
+ *beta = AV1_DIV_ROUND_UP_POW2_SIGNED(*beta, WARP_PARAM_REDUCE_BITS)
+ * (1 << WARP_PARAM_REDUCE_BITS);
+ *gamma = AV1_DIV_ROUND_UP_POW2_SIGNED(*gamma, WARP_PARAM_REDUCE_BITS)
+ * (1 << WARP_PARAM_REDUCE_BITS);
+ *delta = AV1_DIV_ROUND_UP_POW2_SIGNED(*delta, WARP_PARAM_REDUCE_BITS)
+ * (1 << WARP_PARAM_REDUCE_BITS);
+}
+
+static void rockchip_vpu981_av1_dec_set_global_model(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ const struct v4l2_av1_global_motion *gm = &frame->global_motion;
+ uint8_t *dst = av1_dec->global_model.cpu;
+ struct hantro_dev *vpu = ctx->dev;
+ int ref_frame, i;
+
+ memset(dst, 0, GLOBAL_MODEL_SIZE);
+ for (ref_frame = 0; ref_frame < V4L2_AV1_REFS_PER_FRAME; ++ref_frame) {
+ int64_t alpha = 0, beta = 0, gamma = 0, delta = 0;
+
+ for (i = 0; i < 6; ++i) {
+ if (i == 2)
+ *(int32_t *)dst =
+ gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][3];
+ else if (i == 3)
+ *(int32_t *)dst =
+ gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][2];
+ else
+ *(int32_t *)dst =
+ gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][i];
+ dst += 4;
+ }
+
+ if (gm->type[V4L2_AV1_REF_LAST_FRAME + ref_frame] <= V4L2_AV1_WARP_MODEL_AFFINE)
+ rockchip_vpu981_av1_dec_get_shear_params(
+ &gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][0],
+ &alpha, &beta, &gamma, &delta);
+
+ *(int16_t *)dst = alpha;
+ dst += 2;
+ *(int16_t *)dst = beta;
+ dst += 2;
+ *(int16_t *)dst = gamma;
+ dst += 2;
+ *(int16_t *)dst = delta;
+ dst += 2;
+ }
+
+ hantro_write_addr(vpu, AV1_GLOBAL_MODEL, av1_dec->global_model.dma);
+}
+
+static void rockchip_vpu981_av1_dec_set_tile_info(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ struct v4l2_av1_tile_info tile_info = ctrls->frame->tile_info;
+ const struct v4l2_ctrl_av1_tile_group_entry *group_entry =
+ ctrls->tile_group_entry;
+ int context_update_y =
+ tile_info.context_update_tile_id / tile_info.tile_cols;
+ int context_update_x =
+ tile_info.context_update_tile_id % tile_info.tile_cols;
+ int context_update_tile_id =
+ context_update_x * tile_info.tile_rows + context_update_y;
+ uint8_t *dst = av1_dec->tile_info.cpu;
+ struct hantro_dev *vpu = ctx->dev;
+ int tile0, tile1;
+
+ memset(dst, 0, av1_dec->tile_info.size);
+
+ for (tile0 = 0; tile0 < tile_info.tile_cols; tile0++) {
+ for (tile1 = 0; tile1 < tile_info.tile_rows; tile1++) {
+ int tile_id = tile1 * tile_info.tile_cols + tile0;
+ uint32_t start, end;
+ uint32_t y0 =
+ tile_info.height_in_sbs_minus_1[tile1] + 1;
+ uint32_t x0 = tile_info.width_in_sbs_minus_1[tile0] + 1;
+
+ // tile size in SB units (width,height)
+ *dst++ = x0;
+ *dst++ = 0;
+ *dst++ = 0;
+ *dst++ = 0;
+ *dst++ = y0;
+ *dst++ = 0;
+ *dst++ = 0;
+ *dst++ = 0;
+
+ // tile start position
+ start = group_entry[tile_id].tile_offset - group_entry[0].tile_offset;
+ *dst++ = start & 255;
+ *dst++ = (start >> 8) & 255;
+ *dst++ = (start >> 16) & 255;
+ *dst++ = (start >> 24) & 255;
+
+ // # of bytes in tile data
+ end = start + group_entry[tile_id].tile_size;
+ *dst++ = end & 255;
+ *dst++ = (end >> 8) & 255;
+ *dst++ = (end >> 16) & 255;
+ *dst++ = (end >> 24) & 255;
+ }
+ }
+
+ hantro_reg_write(vpu, &av1_multicore_expect_context_update,
+ !!(context_update_x == 0));
+ hantro_reg_write(vpu, &av1_tile_enable, !!((tile_info.tile_cols > 1)
+ || (tile_info.tile_rows > 1)));
+ hantro_reg_write(vpu, &av1_num_tile_cols_8k, tile_info.tile_cols);
+ hantro_reg_write(vpu, &av1_num_tile_rows_8k, tile_info.tile_rows);
+ hantro_reg_write(vpu, &av1_context_update_tile_id,
+ context_update_tile_id);
+ hantro_reg_write(vpu, &av1_tile_transpose, 1);
+ if (context_update_tile_id) {
+ hantro_reg_write(vpu, &av1_dec_tile_size_mag,
+ tile_info.tile_size_bytes);
+ } else
+ hantro_reg_write(vpu, &av1_dec_tile_size_mag, 3);
+
+ hantro_write_addr(vpu, AV1_TILE_BASE, av1_dec->tile_info.dma);
+}
+
+static int rockchip_vpu981_av1_dec_get_relative_dist(struct hantro_ctx *ctx,
+ int a, int b)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ int bits = ctrls->sequence->order_hint_bits - 1;
+ int diff, m;
+
+ if (!ctrls->sequence->order_hint_bits)
+ return 0;
+
+ diff = a - b;
+ m = 1 << bits;
+ diff = (diff & (m - 1)) - (diff & m);
+
+ return diff;
+}
+
+static void rockchip_vpu981_av1_dec_set_frame_sign_bias(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ const struct v4l2_ctrl_av1_sequence *sequence = ctrls->sequence;
+ int i;
+
+ if (!sequence->order_hint_bits || IS_INTRA(frame->frame_type)) {
+ for (i = 0; i < V4L2_AV1_TOTAL_REFS_PER_FRAME; i++)
+ av1_dec->ref_frame_sign_bias[i] = 0;
+
+ return;
+ }
+ // Identify the nearest forward and backward references.
+ for (i = 0; i < V4L2_AV1_TOTAL_REFS_PER_FRAME - 1; i++) {
+ if (rockchip_vpu981_get_frame_index(ctx, i) >= 0) {
+ int rel_off =
+ rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rockchip_vpu981_get_order_hint
+ (ctx, i),
+ frame->order_hint);
+ av1_dec->ref_frame_sign_bias[i + 1] = (rel_off <= 0) ? 0 : 1;
+ }
+ }
+}
+
+static bool
+rockchip_vpu981_av1_dec_set_ref(struct hantro_ctx *ctx, int ref, int idx,
+ int width, int height)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ struct hantro_dev *vpu = ctx->dev;
+ struct hantro_decoded_buffer *dst;
+ dma_addr_t luma_addr, chroma_addr, mv_addr = 0;
+ size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx);
+ size_t mv_offset = rockchip_vpu981_av1_dec_chroma_size(ctx);
+ int cur_width = frame->frame_width_minus_1 + 1;
+ int cur_height = frame->frame_height_minus_1 + 1;
+ int scale_width =
+ ((width << AV1_REF_SCALE_SHIFT) + cur_width / 2) / cur_width;
+ int scale_height =
+ ((height << AV1_REF_SCALE_SHIFT) + cur_height / 2) / cur_height;
+
+ switch (ref) {
+ case 0:
+ hantro_reg_write(vpu, &av1_ref0_height, height);
+ hantro_reg_write(vpu, &av1_ref0_width, width);
+ hantro_reg_write(vpu, &av1_ref0_ver_scale, scale_width);
+ hantro_reg_write(vpu, &av1_ref0_hor_scale, scale_height);
+ break;
+ case 1:
+ hantro_reg_write(vpu, &av1_ref1_height, height);
+ hantro_reg_write(vpu, &av1_ref1_width, width);
+ hantro_reg_write(vpu, &av1_ref1_ver_scale, scale_width);
+ hantro_reg_write(vpu, &av1_ref1_hor_scale, scale_height);
+ break;
+ case 2:
+ hantro_reg_write(vpu, &av1_ref2_height, height);
+ hantro_reg_write(vpu, &av1_ref2_width, width);
+ hantro_reg_write(vpu, &av1_ref2_ver_scale, scale_width);
+ hantro_reg_write(vpu, &av1_ref2_hor_scale, scale_height);
+ break;
+ case 3:
+ hantro_reg_write(vpu, &av1_ref3_height, height);
+ hantro_reg_write(vpu, &av1_ref3_width, width);
+ hantro_reg_write(vpu, &av1_ref3_ver_scale, scale_width);
+ hantro_reg_write(vpu, &av1_ref3_hor_scale, scale_height);
+ break;
+ case 4:
+ hantro_reg_write(vpu, &av1_ref4_height, height);
+ hantro_reg_write(vpu, &av1_ref4_width, width);
+ hantro_reg_write(vpu, &av1_ref4_ver_scale, scale_width);
+ hantro_reg_write(vpu, &av1_ref4_hor_scale, scale_height);
+ break;
+ case 5:
+ hantro_reg_write(vpu, &av1_ref5_height, height);
+ hantro_reg_write(vpu, &av1_ref5_width, width);
+ hantro_reg_write(vpu, &av1_ref5_ver_scale, scale_width);
+ hantro_reg_write(vpu, &av1_ref5_hor_scale, scale_height);
+ break;
+ case 6:
+ hantro_reg_write(vpu, &av1_ref6_height, height);
+ hantro_reg_write(vpu, &av1_ref6_width, width);
+ hantro_reg_write(vpu, &av1_ref6_ver_scale, scale_width);
+ hantro_reg_write(vpu, &av1_ref6_hor_scale, scale_height);
+ break;
+ default:
+ pr_warn("AV1 invalid reference frame index\n");
+ }
+
+ dst = vb2_to_hantro_decoded_buf(&av1_dec->frame_refs[idx].vb2_ref->vb2_buf);
+ luma_addr = hantro_get_dec_buf_addr(ctx, &dst->base.vb.vb2_buf);
+ chroma_addr = luma_addr + cr_offset;
+ mv_addr = luma_addr + mv_offset;
+
+ hantro_write_addr(vpu, AV1_REFERENCE_Y(ref), luma_addr);
+ hantro_write_addr(vpu, AV1_REFERENCE_CB(ref), chroma_addr);
+ hantro_write_addr(vpu, AV1_REFERENCE_MV(ref), mv_addr);
+
+ return (scale_width != (1 << AV1_REF_SCALE_SHIFT))
+ || (scale_height != (1 << AV1_REF_SCALE_SHIFT));
+}
+
+static void rockchip_vpu981_av1_dec_set_sign_bias(struct hantro_ctx *ctx,
+ int ref, int val)
+{
+ struct hantro_dev *vpu = ctx->dev;
+
+ switch (ref) {
+ case 0:
+ hantro_reg_write(vpu, &av1_ref0_sign_bias, val);
+ break;
+ case 1:
+ hantro_reg_write(vpu, &av1_ref1_sign_bias, val);
+ break;
+ case 2:
+ hantro_reg_write(vpu, &av1_ref2_sign_bias, val);
+ break;
+ case 3:
+ hantro_reg_write(vpu, &av1_ref3_sign_bias, val);
+ break;
+ case 4:
+ hantro_reg_write(vpu, &av1_ref4_sign_bias, val);
+ break;
+ case 5:
+ hantro_reg_write(vpu, &av1_ref5_sign_bias, val);
+ break;
+ case 6:
+ hantro_reg_write(vpu, &av1_ref6_sign_bias, val);
+ break;
+ default:
+ pr_warn("AV1 invalid sign bias index\n");
+ break;
+ }
+}
+
+static void rockchip_vpu981_av1_dec_set_segmentation(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ const struct v4l2_av1_segmentation *seg = &frame->segmentation;
+ uint32_t segval[V4L2_AV1_MAX_SEGMENTS][V4L2_AV1_SEG_LVL_MAX] = { 0 };
+ struct hantro_dev *vpu = ctx->dev;
+ uint8_t segsign = 0, preskip_segid = 0, last_active_seg = 0, i, j;
+
+ if (!!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED)
+ && (frame->primary_ref_frame < V4L2_AV1_REFS_PER_FRAME)) {
+ int idx = rockchip_vpu981_get_frame_index(ctx, frame->primary_ref_frame);
+
+ if (idx >= 0) {
+ dma_addr_t luma_addr, chroma_addr, mv_addr = 0;
+ size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx);
+ size_t mv_offset = rockchip_vpu981_av1_dec_chroma_size(ctx);
+
+ luma_addr =
+ hantro_get_dec_buf_addr(ctx,
+ &av1_dec->frame_refs[idx].vb2_ref->vb2_buf);
+ chroma_addr = luma_addr + cr_offset;
+ mv_addr = luma_addr + mv_offset;
+
+ hantro_write_addr(vpu, AV1_SEGMENTATION, mv_addr);
+ hantro_reg_write(vpu, &av1_use_temporal3_mvs, 1);
+ }
+ }
+
+ hantro_reg_write(vpu, &av1_segment_temp_upd_e,
+ !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_TEMPORAL_UPDATE));
+ hantro_reg_write(vpu, &av1_segment_upd_e,
+ !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_UPDATE_MAP));
+ hantro_reg_write(vpu, &av1_segment_e,
+ !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED));
+
+ hantro_reg_write(vpu, &av1_error_resilient,
+ !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE));
+
+ if (IS_INTRA(frame->frame_type)
+ || !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE)) {
+ hantro_reg_write(vpu, &av1_use_temporal3_mvs, 0);
+ }
+
+ if (!!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED)) {
+ int s;
+
+ for (s = 0; s < V4L2_AV1_MAX_SEGMENTS; s++) {
+ if (seg->feature_enabled[s] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_Q)) {
+ segval[s][V4L2_AV1_SEG_LVL_ALT_Q] =
+ clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_Q]),
+ 0, 255);
+ segsign |=
+ (seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_Q] < 0) << s;
+ }
+
+ if (seg->feature_enabled[s] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_LF_Y_V))
+ segval[s][V4L2_AV1_SEG_LVL_ALT_LF_Y_V] =
+ clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]),
+ -63, 63);
+
+ if (seg->feature_enabled[s] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_LF_Y_H))
+ segval[s][V4L2_AV1_SEG_LVL_ALT_LF_Y_H] =
+ clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]),
+ -63, 63);
+
+ if (seg->feature_enabled[s] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_LF_U))
+ segval[s][V4L2_AV1_SEG_LVL_ALT_LF_U] =
+ clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_LF_U]),
+ -63, 63);
+
+ if (seg->feature_enabled[s] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_LF_V))
+ segval[s][V4L2_AV1_SEG_LVL_ALT_LF_V] =
+ clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_LF_V]),
+ -63, 63);
+
+ if (frame->frame_type && seg->feature_enabled[s] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_REF_FRAME))
+ segval[s][V4L2_AV1_SEG_LVL_REF_FRAME]++;
+
+ if (seg->feature_enabled[s] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_REF_SKIP))
+ segval[s][V4L2_AV1_SEG_LVL_REF_SKIP] = 1;
+
+ if (seg->feature_enabled[s] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_REF_GLOBALMV))
+ segval[s][V4L2_AV1_SEG_LVL_REF_GLOBALMV] = 1;
+ }
+ }
+
+ for (i = 0; i < V4L2_AV1_MAX_SEGMENTS; i++) {
+ for (j = 0; j < V4L2_AV1_SEG_LVL_MAX; j++) {
+ if (seg->feature_enabled[i]
+ & V4L2_AV1_SEGMENT_FEATURE_ENABLED(j)) {
+ preskip_segid |= (j >= V4L2_AV1_SEG_LVL_REF_FRAME);
+ last_active_seg = max(i, last_active_seg);
+ }
+ }
+ }
+
+ hantro_reg_write(vpu, &av1_last_active_seg, last_active_seg);
+ hantro_reg_write(vpu, &av1_preskip_segid, preskip_segid);
+
+ hantro_reg_write(vpu, &av1_seg_quant_sign, segsign);
+
+ /* Write QP, filter level, ref frame and skip for every segment */
+ hantro_reg_write(vpu, &av1_quant_seg0,
+ segval[0][V4L2_AV1_SEG_LVL_ALT_Q]);
+ hantro_reg_write(vpu, &av1_filt_level_delta0_seg0,
+ segval[0][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]);
+ hantro_reg_write(vpu, &av1_filt_level_delta1_seg0,
+ segval[0][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]);
+ hantro_reg_write(vpu, &av1_filt_level_delta2_seg0,
+ segval[0][V4L2_AV1_SEG_LVL_ALT_LF_U]);
+ hantro_reg_write(vpu, &av1_filt_level_delta3_seg0,
+ segval[0][V4L2_AV1_SEG_LVL_ALT_LF_V]);
+ hantro_reg_write(vpu, &av1_refpic_seg0,
+ segval[0][V4L2_AV1_SEG_LVL_REF_FRAME]);
+ hantro_reg_write(vpu, &av1_skip_seg0,
+ segval[0][V4L2_AV1_SEG_LVL_REF_SKIP]);
+ hantro_reg_write(vpu, &av1_global_mv_seg0,
+ segval[0][V4L2_AV1_SEG_LVL_REF_GLOBALMV]);
+
+ hantro_reg_write(vpu, &av1_quant_seg1,
+ segval[1][V4L2_AV1_SEG_LVL_ALT_Q]);
+ hantro_reg_write(vpu, &av1_filt_level_delta0_seg1,
+ segval[1][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]);
+ hantro_reg_write(vpu, &av1_filt_level_delta1_seg1,
+ segval[1][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]);
+ hantro_reg_write(vpu, &av1_filt_level_delta2_seg1,
+ segval[1][V4L2_AV1_SEG_LVL_ALT_LF_U]);
+ hantro_reg_write(vpu, &av1_filt_level_delta3_seg1,
+ segval[1][V4L2_AV1_SEG_LVL_ALT_LF_V]);
+ hantro_reg_write(vpu, &av1_refpic_seg1,
+ segval[1][V4L2_AV1_SEG_LVL_REF_FRAME]);
+ hantro_reg_write(vpu, &av1_skip_seg1,
+ segval[1][V4L2_AV1_SEG_LVL_REF_SKIP]);
+ hantro_reg_write(vpu, &av1_global_mv_seg1,
+ segval[1][V4L2_AV1_SEG_LVL_REF_GLOBALMV]);
+
+ hantro_reg_write(vpu, &av1_quant_seg2,
+ segval[2][V4L2_AV1_SEG_LVL_ALT_Q]);
+ hantro_reg_write(vpu, &av1_filt_level_delta0_seg2,
+ segval[2][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]);
+ hantro_reg_write(vpu, &av1_filt_level_delta1_seg2,
+ segval[2][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]);
+ hantro_reg_write(vpu, &av1_filt_level_delta2_seg2,
+ segval[2][V4L2_AV1_SEG_LVL_ALT_LF_U]);
+ hantro_reg_write(vpu, &av1_filt_level_delta3_seg2,
+ segval[2][V4L2_AV1_SEG_LVL_ALT_LF_V]);
+ hantro_reg_write(vpu, &av1_refpic_seg2,
+ segval[2][V4L2_AV1_SEG_LVL_REF_FRAME]);
+ hantro_reg_write(vpu, &av1_skip_seg2,
+ segval[2][V4L2_AV1_SEG_LVL_REF_SKIP]);
+ hantro_reg_write(vpu, &av1_global_mv_seg2,
+ segval[2][V4L2_AV1_SEG_LVL_REF_GLOBALMV]);
+
+ hantro_reg_write(vpu, &av1_quant_seg3,
+ segval[3][V4L2_AV1_SEG_LVL_ALT_Q]);
+ hantro_reg_write(vpu, &av1_filt_level_delta0_seg3,
+ segval[3][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]);
+ hantro_reg_write(vpu, &av1_filt_level_delta1_seg3,
+ segval[3][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]);
+ hantro_reg_write(vpu, &av1_filt_level_delta2_seg3,
+ segval[3][V4L2_AV1_SEG_LVL_ALT_LF_U]);
+ hantro_reg_write(vpu, &av1_filt_level_delta3_seg3,
+ segval[3][V4L2_AV1_SEG_LVL_ALT_LF_V]);
+ hantro_reg_write(vpu, &av1_refpic_seg3,
+ segval[3][V4L2_AV1_SEG_LVL_REF_FRAME]);
+ hantro_reg_write(vpu, &av1_skip_seg3,
+ segval[3][V4L2_AV1_SEG_LVL_REF_SKIP]);
+ hantro_reg_write(vpu, &av1_global_mv_seg3,
+ segval[3][V4L2_AV1_SEG_LVL_REF_GLOBALMV]);
+
+ hantro_reg_write(vpu, &av1_quant_seg4,
+ segval[4][V4L2_AV1_SEG_LVL_ALT_Q]);
+ hantro_reg_write(vpu, &av1_filt_level_delta0_seg4,
+ segval[4][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]);
+ hantro_reg_write(vpu, &av1_filt_level_delta1_seg4,
+ segval[4][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]);
+ hantro_reg_write(vpu, &av1_filt_level_delta2_seg4,
+ segval[4][V4L2_AV1_SEG_LVL_ALT_LF_U]);
+ hantro_reg_write(vpu, &av1_filt_level_delta3_seg4,
+ segval[4][V4L2_AV1_SEG_LVL_ALT_LF_V]);
+ hantro_reg_write(vpu, &av1_refpic_seg4,
+ segval[4][V4L2_AV1_SEG_LVL_REF_FRAME]);
+ hantro_reg_write(vpu, &av1_skip_seg4,
+ segval[4][V4L2_AV1_SEG_LVL_REF_SKIP]);
+ hantro_reg_write(vpu, &av1_global_mv_seg4,
+ segval[4][V4L2_AV1_SEG_LVL_REF_GLOBALMV]);
+
+ hantro_reg_write(vpu, &av1_quant_seg5,
+ segval[5][V4L2_AV1_SEG_LVL_ALT_Q]);
+ hantro_reg_write(vpu, &av1_filt_level_delta0_seg5,
+ segval[5][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]);
+ hantro_reg_write(vpu, &av1_filt_level_delta1_seg5,
+ segval[5][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]);
+ hantro_reg_write(vpu, &av1_filt_level_delta2_seg5,
+ segval[5][V4L2_AV1_SEG_LVL_ALT_LF_U]);
+ hantro_reg_write(vpu, &av1_filt_level_delta3_seg5,
+ segval[5][V4L2_AV1_SEG_LVL_ALT_LF_V]);
+ hantro_reg_write(vpu, &av1_refpic_seg5,
+ segval[5][V4L2_AV1_SEG_LVL_REF_FRAME]);
+ hantro_reg_write(vpu, &av1_skip_seg5,
+ segval[5][V4L2_AV1_SEG_LVL_REF_SKIP]);
+ hantro_reg_write(vpu, &av1_global_mv_seg5,
+ segval[5][V4L2_AV1_SEG_LVL_REF_GLOBALMV]);
+
+ hantro_reg_write(vpu, &av1_quant_seg6,
+ segval[6][V4L2_AV1_SEG_LVL_ALT_Q]);
+ hantro_reg_write(vpu, &av1_filt_level_delta0_seg6,
+ segval[6][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]);
+ hantro_reg_write(vpu, &av1_filt_level_delta1_seg6,
+ segval[6][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]);
+ hantro_reg_write(vpu, &av1_filt_level_delta2_seg6,
+ segval[6][V4L2_AV1_SEG_LVL_ALT_LF_U]);
+ hantro_reg_write(vpu, &av1_filt_level_delta3_seg6,
+ segval[6][V4L2_AV1_SEG_LVL_ALT_LF_V]);
+ hantro_reg_write(vpu, &av1_refpic_seg6,
+ segval[6][V4L2_AV1_SEG_LVL_REF_FRAME]);
+ hantro_reg_write(vpu, &av1_skip_seg6,
+ segval[6][V4L2_AV1_SEG_LVL_REF_SKIP]);
+ hantro_reg_write(vpu, &av1_global_mv_seg6,
+ segval[6][V4L2_AV1_SEG_LVL_REF_GLOBALMV]);
+
+ hantro_reg_write(vpu, &av1_quant_seg7,
+ segval[7][V4L2_AV1_SEG_LVL_ALT_Q]);
+ hantro_reg_write(vpu, &av1_filt_level_delta0_seg7,
+ segval[7][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]);
+ hantro_reg_write(vpu, &av1_filt_level_delta1_seg7,
+ segval[7][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]);
+ hantro_reg_write(vpu, &av1_filt_level_delta2_seg7,
+ segval[7][V4L2_AV1_SEG_LVL_ALT_LF_U]);
+ hantro_reg_write(vpu, &av1_filt_level_delta3_seg7,
+ segval[7][V4L2_AV1_SEG_LVL_ALT_LF_V]);
+ hantro_reg_write(vpu, &av1_refpic_seg7,
+ segval[7][V4L2_AV1_SEG_LVL_REF_FRAME]);
+ hantro_reg_write(vpu, &av1_skip_seg7,
+ segval[7][V4L2_AV1_SEG_LVL_REF_SKIP]);
+ hantro_reg_write(vpu, &av1_global_mv_seg7,
+ segval[7][V4L2_AV1_SEG_LVL_REF_GLOBALMV]);
+}
+
+static bool rockchip_vpu981_av1_dec_is_lossless(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ const struct v4l2_av1_segmentation *segmentation = &frame->segmentation;
+ const struct v4l2_av1_quantization *quantization = &frame->quantization;
+ int i;
+
+ for (i = 0; i < V4L2_AV1_MAX_SEGMENTS; i++) {
+ int qindex = quantization->base_q_idx;
+
+ if (segmentation->feature_enabled[i] &
+ V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_Q)) {
+ qindex += segmentation->feature_data[i][V4L2_AV1_SEG_LVL_ALT_Q];
+ }
+ qindex = clamp(qindex, 0, 255);
+
+ if (qindex
+ || quantization->delta_q_y_dc
+ || quantization->delta_q_u_dc
+ || quantization->delta_q_u_ac
+ || quantization->delta_q_v_dc || quantization->delta_q_v_ac)
+ return false;
+ }
+ return true;
+}
+
+static void rockchip_vpu981_av1_dec_set_loopfilter(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ const struct v4l2_av1_loop_filter *loop_filter = &frame->loop_filter;
+ bool filtering_dis = (loop_filter->level[0] == 0)
+ && (loop_filter->level[1] == 0);
+ struct hantro_dev *vpu = ctx->dev;
+
+ hantro_reg_write(vpu, &av1_filtering_dis, filtering_dis);
+ hantro_reg_write(vpu, &av1_filt_level_base_gt32, loop_filter->level[0] > 32);
+ hantro_reg_write(vpu, &av1_filt_sharpness, loop_filter->sharpness);
+
+ hantro_reg_write(vpu, &av1_filt_level0, loop_filter->level[0]);
+ hantro_reg_write(vpu, &av1_filt_level1, loop_filter->level[1]);
+ hantro_reg_write(vpu, &av1_filt_level2, loop_filter->level[2]);
+ hantro_reg_write(vpu, &av1_filt_level3, loop_filter->level[3]);
+
+ if (loop_filter->flags & V4L2_AV1_LOOP_FILTER_FLAG_DELTA_ENABLED
+ && !rockchip_vpu981_av1_dec_is_lossless(ctx)
+ && !(frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC)) {
+ hantro_reg_write(vpu, &av1_filt_ref_adj_0,
+ loop_filter->ref_deltas[0]);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_1,
+ loop_filter->ref_deltas[1]);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_2,
+ loop_filter->ref_deltas[2]);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_3,
+ loop_filter->ref_deltas[3]);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_4,
+ loop_filter->ref_deltas[4]);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_5,
+ loop_filter->ref_deltas[5]);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_6,
+ loop_filter->ref_deltas[6]);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_7,
+ loop_filter->ref_deltas[7]);
+ hantro_reg_write(vpu, &av1_filt_mb_adj_0,
+ loop_filter->mode_deltas[0]);
+ hantro_reg_write(vpu, &av1_filt_mb_adj_1,
+ loop_filter->mode_deltas[1]);
+ } else {
+ hantro_reg_write(vpu, &av1_filt_ref_adj_0, 0);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_1, 0);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_2, 0);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_3, 0);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_4, 0);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_5, 0);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_6, 0);
+ hantro_reg_write(vpu, &av1_filt_ref_adj_7, 0);
+ hantro_reg_write(vpu, &av1_filt_mb_adj_0, 0);
+ hantro_reg_write(vpu, &av1_filt_mb_adj_1, 0);
+ }
+
+ hantro_write_addr(vpu, AV1_DB_DATA_COL, av1_dec->db_data_col.dma);
+ hantro_write_addr(vpu, AV1_DB_CTRL_COL, av1_dec->db_ctrl_col.dma);
+}
+
+static void rockchip_vpu981_av1_dec_update_prob(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ bool frame_is_intra = IS_INTRA(frame->frame_type);
+ struct av1cdfs *out_cdfs = (struct av1cdfs *)av1_dec->prob_tbl_out.cpu;
+ int i;
+
+ if (frame->flags & V4L2_AV1_FRAME_FLAG_DISABLE_FRAME_END_UPDATE_CDF)
+ return;
+
+ for (i = 0; i < NUM_REF_FRAMES; i++) {
+ if (frame->refresh_frame_flags & (1 << i)) {
+ struct mvcdfs stored_mv_cdf;
+
+ rockchip_av1_get_cdfs(ctx, i);
+ stored_mv_cdf = av1_dec->cdfs->mv_cdf;
+ *av1_dec->cdfs = *out_cdfs;
+ if (frame_is_intra) {
+ av1_dec->cdfs->mv_cdf = stored_mv_cdf;
+ *av1_dec->cdfs_ndvc = out_cdfs->mv_cdf;
+ }
+ rockchip_av1_store_cdfs(ctx,
+ frame->refresh_frame_flags);
+ break;
+ }
+ }
+}
+
+void rockchip_vpu981_av1_dec_done(struct hantro_ctx *ctx)
+{
+ rockchip_vpu981_av1_dec_update_prob(ctx);
+}
+
+static void rockchip_vpu981_av1_dec_set_prob(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ const struct v4l2_av1_quantization *quantization = &frame->quantization;
+ struct hantro_dev *vpu = ctx->dev;
+ bool error_resilient_mode =
+ !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE);
+ bool frame_is_intra = IS_INTRA(frame->frame_type);
+
+ if (error_resilient_mode || frame_is_intra
+ || frame->primary_ref_frame == AV1_PRIMARY_REF_NONE) {
+ av1_dec->cdfs = &av1_dec->default_cdfs;
+ av1_dec->cdfs_ndvc = &av1_dec->default_cdfs_ndvc;
+ rockchip_av1_default_coeff_probs(quantization->base_q_idx,
+ av1_dec->cdfs);
+ } else {
+ rockchip_av1_get_cdfs(ctx, frame->ref_frame_idx[frame->primary_ref_frame]);
+ }
+ rockchip_av1_store_cdfs(ctx, frame->refresh_frame_flags);
+
+ memcpy(av1_dec->prob_tbl.cpu, av1_dec->cdfs, sizeof(struct av1cdfs));
+
+ if (frame_is_intra) {
+ int mv_offset = offsetof(struct av1cdfs, mv_cdf);
+ /* Overwrite MV context area with intrabc MV context */
+ memcpy(av1_dec->prob_tbl.cpu + mv_offset, av1_dec->cdfs_ndvc,
+ sizeof(struct mvcdfs));
+ }
+
+ hantro_write_addr(vpu, AV1_PROP_TABLE_OUT, av1_dec->prob_tbl_out.dma);
+ hantro_write_addr(vpu, AV1_PROP_TABLE, av1_dec->prob_tbl.dma);
+}
+
+static void rockchip_vpu981_av1_dec_set_cdef(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ const struct v4l2_av1_cdef *cdef = &frame->cdef;
+ struct hantro_dev *vpu = ctx->dev;
+ uint32_t luma_pri_strength = 0;
+ uint16_t luma_sec_strength = 0;
+ uint32_t chroma_pri_strength = 0;
+ uint16_t chroma_sec_strength = 0;
+ int i;
+
+ hantro_reg_write(vpu, &av1_cdef_bits, cdef->bits);
+ hantro_reg_write(vpu, &av1_cdef_damping, cdef->damping_minus_3);
+
+ for (i = 0; i < (1 << cdef->bits); i++) {
+ luma_pri_strength |= cdef->y_pri_strength[i] << (i * 4);
+ if (cdef->y_sec_strength[i] == 4)
+ luma_sec_strength |= 3 << (i * 2);
+ else
+ luma_sec_strength |= cdef->y_sec_strength[i] << (i * 2);
+
+ chroma_pri_strength |= cdef->uv_pri_strength[i] << (i * 4);
+ if (cdef->uv_sec_strength[i] == 4)
+ chroma_sec_strength |= 3 << (i * 2);
+ else
+ chroma_sec_strength |= cdef->uv_sec_strength[i] << (i * 2);
+ }
+
+ hantro_reg_write(vpu, &av1_cdef_luma_primary_strength,
+ luma_pri_strength);
+ hantro_reg_write(vpu, &av1_cdef_luma_secondary_strength,
+ luma_sec_strength);
+ hantro_reg_write(vpu, &av1_cdef_chroma_primary_strength,
+ chroma_pri_strength);
+ hantro_reg_write(vpu, &av1_cdef_chroma_secondary_strength,
+ chroma_sec_strength);
+
+ hantro_write_addr(vpu, AV1_CDEF_COL, av1_dec->cdef_col.dma);
+}
+
+static void rockchip_vpu981_av1_dec_set_lr(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ const struct v4l2_av1_loop_restoration *loop_restoration =
+ &frame->loop_restoration;
+ struct hantro_dev *vpu = ctx->dev;
+ uint16_t lr_type = 0, lr_unit_size = 0;
+ uint8_t restoration_unit_size[V4L2_AV1_NUM_PLANES_MAX] = { 3, 3, 3 };
+ int i;
+
+ if (loop_restoration->flags & V4L2_AV1_LOOP_RESTORATION_FLAG_USES_LR) {
+ restoration_unit_size[0] = 1 + loop_restoration->lr_unit_shift;
+ restoration_unit_size[1] =
+ 1 + loop_restoration->lr_unit_shift - loop_restoration->lr_uv_shift;
+ restoration_unit_size[2] =
+ 1 + loop_restoration->lr_unit_shift - loop_restoration->lr_uv_shift;
+ }
+
+ for (i = 0; i < V4L2_AV1_NUM_PLANES_MAX; i++) {
+ lr_type |=
+ loop_restoration->frame_restoration_type[i] << (i * 2);
+ lr_unit_size |= restoration_unit_size[i] << (i * 2);
+ }
+
+ hantro_reg_write(vpu, &av1_lr_type, lr_type);
+ hantro_reg_write(vpu, &av1_lr_unit_size, lr_unit_size);
+ hantro_write_addr(vpu, AV1_LR_COL, av1_dec->lr_col.dma);
+}
+
+static void rockchip_vpu981_av1_dec_set_superres_params(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ struct hantro_dev *vpu = ctx->dev;
+ uint8_t superres_scale_denominator = SCALE_NUMERATOR;
+ int superres_luma_step = RS_SCALE_SUBPEL_BITS;
+ int superres_chroma_step = RS_SCALE_SUBPEL_BITS;
+ int superres_luma_step_invra = RS_SCALE_SUBPEL_BITS;
+ int superres_chroma_step_invra = RS_SCALE_SUBPEL_BITS;
+ int superres_init_luma_subpel_x = 0;
+ int superres_init_chroma_subpel_x = 0;
+ int superres_is_scaled = 0;
+ int min_w = min_t(uint32_t, 16, frame->upscaled_width);
+ int upscaled_luma, downscaled_luma;
+ int downscaled_chroma, upscaled_chroma;
+ int step_luma, step_chroma;
+ int err_luma, err_chroma;
+ int initial_luma, initial_chroma;
+ int width = 0;
+
+ if (frame->flags & V4L2_AV1_FRAME_FLAG_USE_SUPERRES)
+ superres_scale_denominator = frame->superres_denom;
+
+ if (superres_scale_denominator <= SCALE_NUMERATOR)
+ goto set_regs;
+
+ width = (frame->upscaled_width * SCALE_NUMERATOR +
+ (superres_scale_denominator / 2)) / superres_scale_denominator;
+
+ if (width < min_w)
+ width = min_w;
+
+ if (width == frame->upscaled_width)
+ goto set_regs;
+
+ superres_is_scaled = 1;
+ upscaled_luma = frame->upscaled_width;
+ downscaled_luma = width;
+ downscaled_chroma = (downscaled_luma + 1) >> 1;
+ upscaled_chroma = (upscaled_luma + 1) >> 1;
+ step_luma =
+ ((downscaled_luma << RS_SCALE_SUBPEL_BITS) +
+ (upscaled_luma / 2)) / upscaled_luma;
+ step_chroma =
+ ((downscaled_chroma << RS_SCALE_SUBPEL_BITS) +
+ (upscaled_chroma / 2)) / upscaled_chroma;
+ err_luma =
+ (upscaled_luma * step_luma)
+ - (downscaled_luma << RS_SCALE_SUBPEL_BITS);
+ err_chroma =
+ (upscaled_chroma * step_chroma)
+ - (downscaled_chroma << RS_SCALE_SUBPEL_BITS);
+ initial_luma =
+ ((-((upscaled_luma - downscaled_luma) << (RS_SCALE_SUBPEL_BITS - 1))
+ + upscaled_luma / 2)
+ / upscaled_luma + (1 << (RS_SCALE_EXTRA_BITS - 1)) - err_luma / 2)
+ & RS_SCALE_SUBPEL_MASK;
+ initial_chroma =
+ ((-((upscaled_chroma - downscaled_chroma) << (RS_SCALE_SUBPEL_BITS - 1))
+ + upscaled_chroma / 2)
+ / upscaled_chroma + (1 << (RS_SCALE_EXTRA_BITS - 1)) - err_chroma / 2)
+ & RS_SCALE_SUBPEL_MASK;
+ superres_luma_step = step_luma;
+ superres_chroma_step = step_chroma;
+ superres_luma_step_invra =
+ ((upscaled_luma << RS_SCALE_SUBPEL_BITS) + (downscaled_luma / 2))
+ / downscaled_luma;
+ superres_chroma_step_invra =
+ ((upscaled_chroma << RS_SCALE_SUBPEL_BITS) + (downscaled_chroma / 2))
+ / downscaled_chroma;
+ superres_init_luma_subpel_x = initial_luma;
+ superres_init_chroma_subpel_x = initial_chroma;
+
+set_regs:
+ hantro_reg_write(vpu, &av1_superres_pic_width, frame->upscaled_width);
+
+ if (frame->flags & V4L2_AV1_FRAME_FLAG_USE_SUPERRES)
+ hantro_reg_write(vpu, &av1_scale_denom_minus9,
+ frame->superres_denom - SUPERRES_SCALE_DENOMINATOR_MIN);
+ else
+ hantro_reg_write(vpu, &av1_scale_denom_minus9, frame->superres_denom);
+
+ hantro_reg_write(vpu, &av1_superres_luma_step, superres_luma_step);
+ hantro_reg_write(vpu, &av1_superres_chroma_step, superres_chroma_step);
+ hantro_reg_write(vpu, &av1_superres_luma_step_invra,
+ superres_luma_step_invra);
+ hantro_reg_write(vpu, &av1_superres_chroma_step_invra,
+ superres_chroma_step_invra);
+ hantro_reg_write(vpu, &av1_superres_init_luma_subpel_x,
+ superres_init_luma_subpel_x);
+ hantro_reg_write(vpu, &av1_superres_init_chroma_subpel_x,
+ superres_init_chroma_subpel_x);
+ hantro_reg_write(vpu, &av1_superres_is_scaled, superres_is_scaled);
+
+ hantro_write_addr(vpu, AV1_SR_COL, av1_dec->sr_col.dma);
+}
+
+static void rockchip_vpu981_av1_dec_set_picture_dimensions(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ struct hantro_dev *vpu = ctx->dev;
+ int pic_width_in_cbs = DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8);
+ int pic_height_in_cbs = DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8);
+ int pic_width_pad = ALIGN(frame->frame_width_minus_1 + 1, 8)
+ - (frame->frame_width_minus_1 + 1);
+ int pic_height_pad = ALIGN(frame->frame_height_minus_1 + 1, 8)
+ - (frame->frame_height_minus_1 + 1);
+
+ hantro_reg_write(vpu, &av1_pic_width_in_cbs, pic_width_in_cbs);
+ hantro_reg_write(vpu, &av1_pic_height_in_cbs, pic_height_in_cbs);
+ hantro_reg_write(vpu, &av1_pic_width_pad, pic_width_pad);
+ hantro_reg_write(vpu, &av1_pic_height_pad, pic_height_pad);
+
+ rockchip_vpu981_av1_dec_set_superres_params(ctx);
+}
+
+static void rockchip_vpu981_av1_dec_set_other_frames(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ struct hantro_dev *vpu = ctx->dev;
+ bool use_ref_frame_mvs =
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_USE_REF_FRAME_MVS);
+ int cur_frame_offset = frame->order_hint;
+ int alt_frame_offset = 0;
+ int gld_frame_offset = 0;
+ int bwd_frame_offset = 0;
+ int alt2_frame_offset = 0;
+ int refs_selected[3] = { 0, 0, 0 };
+ int cur_mi_cols = DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8);
+ int cur_mi_rows = DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8);
+ int cur_offset[V4L2_AV1_TOTAL_REFS_PER_FRAME - 1];
+ int cur_roffset[V4L2_AV1_TOTAL_REFS_PER_FRAME - 1];
+ int mf_types[3] = { 0, 0, 0 };
+ int ref_stamp = 2;
+ int ref_ind = 0;
+ int rf, idx;
+
+ alt_frame_offset = rockchip_vpu981_get_order_hint(ctx, ALT_BUF_IDX);
+ gld_frame_offset = rockchip_vpu981_get_order_hint(ctx, GLD_BUF_IDX);
+ bwd_frame_offset = rockchip_vpu981_get_order_hint(ctx, BWD_BUF_IDX);
+ alt2_frame_offset = rockchip_vpu981_get_order_hint(ctx, ALT2_BUF_IDX);
+
+ idx = rockchip_vpu981_get_frame_index(ctx, LST_BUF_IDX);
+ if (idx >= 0) {
+ int alt_frame_offset_in_lst =
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF_FRAME];
+ bool is_lst_overlay =
+ (alt_frame_offset_in_lst == gld_frame_offset);
+
+ if (!is_lst_overlay) {
+ int lst_mi_cols = av1_dec->frame_refs[idx].mi_cols;
+ int lst_mi_rows = av1_dec->frame_refs[idx].mi_rows;
+ bool lst_intra_only =
+ IS_INTRA(av1_dec->frame_refs[idx].frame_type);
+
+ if (lst_mi_cols == cur_mi_cols
+ && lst_mi_rows == cur_mi_rows && !lst_intra_only) {
+ mf_types[ref_ind] = V4L2_AV1_REF_LAST_FRAME;
+ refs_selected[ref_ind++] = LST_BUF_IDX;
+ }
+ }
+ ref_stamp--;
+ }
+
+ idx = rockchip_vpu981_get_frame_index(ctx, BWD_BUF_IDX);
+ if (rockchip_vpu981_av1_dec_get_relative_dist
+ (ctx, bwd_frame_offset, cur_frame_offset) > 0) {
+ int bwd_mi_cols = av1_dec->frame_refs[idx].mi_cols;
+ int bwd_mi_rows = av1_dec->frame_refs[idx].mi_rows;
+ bool bwd_intra_only =
+ IS_INTRA(av1_dec->frame_refs[idx].frame_type);
+
+ if (bwd_mi_cols == cur_mi_cols && bwd_mi_rows == cur_mi_rows &&
+ !bwd_intra_only) {
+ mf_types[ref_ind] = V4L2_AV1_REF_BWDREF_FRAME;
+ refs_selected[ref_ind++] = BWD_BUF_IDX;
+ ref_stamp--;
+ }
+ }
+
+ idx = rockchip_vpu981_get_frame_index(ctx, ALT2_BUF_IDX);
+ if (rockchip_vpu981_av1_dec_get_relative_dist
+ (ctx, alt2_frame_offset, cur_frame_offset) > 0) {
+ int alt2_mi_cols = av1_dec->frame_refs[idx].mi_cols;
+ int alt2_mi_rows = av1_dec->frame_refs[idx].mi_rows;
+ bool alt2_intra_only =
+ IS_INTRA(av1_dec->frame_refs[idx].frame_type);
+
+ if (alt2_mi_cols == cur_mi_cols && alt2_mi_rows == cur_mi_rows
+ && !alt2_intra_only) {
+ mf_types[ref_ind] = V4L2_AV1_REF_ALTREF2_FRAME;
+ refs_selected[ref_ind++] = ALT2_BUF_IDX;
+ ref_stamp--;
+ }
+ }
+
+ idx = rockchip_vpu981_get_frame_index(ctx, ALT_BUF_IDX);
+ if (rockchip_vpu981_av1_dec_get_relative_dist
+ (ctx, alt_frame_offset, cur_frame_offset) > 0 && ref_stamp >= 0) {
+ int alt_mi_cols = av1_dec->frame_refs[idx].mi_cols;
+ int alt_mi_rows = av1_dec->frame_refs[idx].mi_rows;
+ bool alt_intra_only =
+ IS_INTRA(av1_dec->frame_refs[idx].frame_type);
+
+ if (alt_mi_cols == cur_mi_cols && alt_mi_rows == cur_mi_rows &&
+ !alt_intra_only) {
+ mf_types[ref_ind] = V4L2_AV1_REF_ALTREF_FRAME;
+ refs_selected[ref_ind++] = ALT_BUF_IDX;
+ ref_stamp--;
+ }
+ }
+
+ idx = rockchip_vpu981_get_frame_index(ctx, LST2_BUF_IDX);
+ if (idx >= 0 && ref_stamp >= 0) {
+ int lst2_mi_cols = av1_dec->frame_refs[idx].mi_cols;
+ int lst2_mi_rows = av1_dec->frame_refs[idx].mi_rows;
+ bool lst2_intra_only =
+ IS_INTRA(av1_dec->frame_refs[idx].frame_type);
+
+ if (lst2_mi_cols == cur_mi_cols && lst2_mi_rows == cur_mi_rows
+ && !lst2_intra_only) {
+ mf_types[ref_ind] = V4L2_AV1_REF_LAST2_FRAME;
+ refs_selected[ref_ind++] = LST2_BUF_IDX;
+ ref_stamp--;
+ }
+ }
+
+ for (rf = 0; rf < V4L2_AV1_TOTAL_REFS_PER_FRAME - 1; ++rf) {
+ idx = rockchip_vpu981_get_frame_index(ctx, rf);
+ if (idx >= 0) {
+ int rf_order_hint = rockchip_vpu981_get_order_hint(ctx, rf);
+
+ cur_offset[rf] =
+ rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ cur_frame_offset,
+ rf_order_hint);
+ cur_roffset[rf] =
+ rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ cur_frame_offset);
+ } else {
+ cur_offset[rf] = 0;
+ cur_roffset[rf] = 0;
+ }
+ }
+
+ hantro_reg_write(vpu, &av1_use_temporal0_mvs, 0);
+ hantro_reg_write(vpu, &av1_use_temporal1_mvs, 0);
+ hantro_reg_write(vpu, &av1_use_temporal2_mvs, 0);
+ hantro_reg_write(vpu, &av1_use_temporal3_mvs, 0);
+
+ hantro_reg_write(vpu, &av1_mf1_last_offset, 0);
+ hantro_reg_write(vpu, &av1_mf1_last2_offset, 0);
+ hantro_reg_write(vpu, &av1_mf1_last3_offset, 0);
+ hantro_reg_write(vpu, &av1_mf1_golden_offset, 0);
+ hantro_reg_write(vpu, &av1_mf1_bwdref_offset, 0);
+ hantro_reg_write(vpu, &av1_mf1_altref2_offset, 0);
+ hantro_reg_write(vpu, &av1_mf1_altref_offset, 0);
+
+ if (use_ref_frame_mvs && ref_ind > 0 &&
+ cur_offset[mf_types[0] - V4L2_AV1_REF_LAST_FRAME] <= MAX_FRAME_DISTANCE
+ && cur_offset[mf_types[0] - V4L2_AV1_REF_LAST_FRAME] >= -MAX_FRAME_DISTANCE) {
+ int rf_order_hint = rockchip_vpu981_get_order_hint(ctx, refs_selected[0]);
+ int idx = rockchip_vpu981_get_frame_index(ctx, refs_selected[0]);
+ int val;
+
+ hantro_reg_write(vpu, &av1_use_temporal0_mvs, 1);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST_FRAME]);
+ hantro_reg_write(vpu, &av1_mf1_last_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST2_FRAME]);
+ hantro_reg_write(vpu, &av1_mf1_last2_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST3_FRAME]);
+ hantro_reg_write(vpu, &av1_mf1_last3_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_GOLDEN_FRAME]);
+ hantro_reg_write(vpu, &av1_mf1_golden_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_BWDREF_FRAME]);
+ hantro_reg_write(vpu, &av1_mf1_bwdref_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF2_FRAME]);
+ hantro_reg_write(vpu, &av1_mf1_altref2_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF_FRAME]);
+ hantro_reg_write(vpu, &av1_mf1_altref_offset, val);
+ }
+
+ hantro_reg_write(vpu, &av1_mf2_last_offset, 0);
+ hantro_reg_write(vpu, &av1_mf2_last2_offset, 0);
+ hantro_reg_write(vpu, &av1_mf2_last3_offset, 0);
+ hantro_reg_write(vpu, &av1_mf2_golden_offset, 0);
+ hantro_reg_write(vpu, &av1_mf2_bwdref_offset, 0);
+ hantro_reg_write(vpu, &av1_mf2_altref2_offset, 0);
+ hantro_reg_write(vpu, &av1_mf2_altref_offset, 0);
+
+ if (use_ref_frame_mvs && ref_ind > 1 &&
+ cur_offset[mf_types[1] - V4L2_AV1_REF_LAST_FRAME] <= MAX_FRAME_DISTANCE
+ && cur_offset[mf_types[1] - V4L2_AV1_REF_LAST_FRAME] >= -MAX_FRAME_DISTANCE) {
+ int rf_order_hint = rockchip_vpu981_get_order_hint(ctx, refs_selected[1]);
+ int idx = rockchip_vpu981_get_frame_index(ctx, refs_selected[1]);
+ int val;
+
+ hantro_reg_write(vpu, &av1_use_temporal1_mvs, 1);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST_FRAME]);
+ hantro_reg_write(vpu, &av1_mf2_last_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST2_FRAME]);
+ hantro_reg_write(vpu, &av1_mf2_last2_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST3_FRAME]);
+ hantro_reg_write(vpu, &av1_mf2_last3_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_GOLDEN_FRAME]);
+ hantro_reg_write(vpu, &av1_mf2_golden_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_BWDREF_FRAME]);
+ hantro_reg_write(vpu, &av1_mf2_bwdref_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF2_FRAME]);
+ hantro_reg_write(vpu, &av1_mf2_altref2_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF_FRAME]);
+ hantro_reg_write(vpu, &av1_mf2_altref_offset, val);
+ }
+
+ hantro_reg_write(vpu, &av1_mf3_last_offset, 0);
+ hantro_reg_write(vpu, &av1_mf3_last2_offset, 0);
+ hantro_reg_write(vpu, &av1_mf3_last3_offset, 0);
+ hantro_reg_write(vpu, &av1_mf3_golden_offset, 0);
+ hantro_reg_write(vpu, &av1_mf3_bwdref_offset, 0);
+ hantro_reg_write(vpu, &av1_mf3_altref2_offset, 0);
+ hantro_reg_write(vpu, &av1_mf3_altref_offset, 0);
+
+ if (use_ref_frame_mvs && ref_ind > 2 &&
+ cur_offset[mf_types[2] - V4L2_AV1_REF_LAST_FRAME] <= MAX_FRAME_DISTANCE
+ && cur_offset[mf_types[2] - V4L2_AV1_REF_LAST_FRAME] >= -MAX_FRAME_DISTANCE) {
+ int rf_order_hint = rockchip_vpu981_get_order_hint(ctx, refs_selected[2]);
+ int idx = rockchip_vpu981_get_frame_index(ctx, refs_selected[2]);
+ int val;
+
+ hantro_reg_write(vpu, &av1_use_temporal2_mvs, 1);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST_FRAME]);
+ hantro_reg_write(vpu, &av1_mf3_last_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST2_FRAME]);
+ hantro_reg_write(vpu, &av1_mf3_last2_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST3_FRAME]);
+ hantro_reg_write(vpu, &av1_mf3_last3_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_GOLDEN_FRAME]);
+ hantro_reg_write(vpu, &av1_mf3_golden_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_BWDREF_FRAME]);
+ hantro_reg_write(vpu, &av1_mf3_bwdref_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF2_FRAME]);
+ hantro_reg_write(vpu, &av1_mf3_altref2_offset, val);
+
+ val = rockchip_vpu981_av1_dec_get_relative_dist(ctx,
+ rf_order_hint,
+ av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF_FRAME]);
+ hantro_reg_write(vpu, &av1_mf3_altref_offset, val);
+ }
+
+ hantro_reg_write(vpu, &av1_cur_last_offset, cur_offset[0]);
+ hantro_reg_write(vpu, &av1_cur_last2_offset, cur_offset[1]);
+ hantro_reg_write(vpu, &av1_cur_last3_offset, cur_offset[2]);
+ hantro_reg_write(vpu, &av1_cur_golden_offset, cur_offset[3]);
+ hantro_reg_write(vpu, &av1_cur_bwdref_offset, cur_offset[4]);
+ hantro_reg_write(vpu, &av1_cur_altref2_offset, cur_offset[5]);
+ hantro_reg_write(vpu, &av1_cur_altref_offset, cur_offset[6]);
+
+ hantro_reg_write(vpu, &av1_cur_last_roffset, cur_roffset[0]);
+ hantro_reg_write(vpu, &av1_cur_last2_roffset, cur_roffset[1]);
+ hantro_reg_write(vpu, &av1_cur_last3_roffset, cur_roffset[2]);
+ hantro_reg_write(vpu, &av1_cur_golden_roffset, cur_roffset[3]);
+ hantro_reg_write(vpu, &av1_cur_bwdref_roffset, cur_roffset[4]);
+ hantro_reg_write(vpu, &av1_cur_altref2_roffset, cur_roffset[5]);
+ hantro_reg_write(vpu, &av1_cur_altref_roffset, cur_roffset[6]);
+
+ hantro_reg_write(vpu, &av1_mf1_type, mf_types[0] - V4L2_AV1_REF_LAST_FRAME);
+ hantro_reg_write(vpu, &av1_mf2_type, mf_types[1] - V4L2_AV1_REF_LAST_FRAME);
+ hantro_reg_write(vpu, &av1_mf3_type, mf_types[2] - V4L2_AV1_REF_LAST_FRAME);
+}
+
+static void rockchip_vpu981_av1_dec_set_reference_frames(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_frame *frame = ctrls->frame;
+ int frame_type = frame->frame_type;
+ bool allow_intrabc = !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC);
+ int ref_count[AV1DEC_MAX_PIC_BUFFERS] = { 0 };
+ struct hantro_dev *vpu = ctx->dev;
+ int i, ref_frames = 0;
+ bool scale_enable = false;
+
+ if (IS_INTRA(frame_type) && !allow_intrabc)
+ return;
+
+ if (!allow_intrabc) {
+ for (i = 0; i < V4L2_AV1_REFS_PER_FRAME; i++) {
+ int idx = rockchip_vpu981_get_frame_index(ctx, i);
+
+ if (idx >= 0)
+ ref_count[idx]++;
+ }
+
+ for (i = 0; i < AV1DEC_MAX_PIC_BUFFERS; i++) {
+ if (ref_count[i])
+ ref_frames++;
+ }
+ } else {
+ ref_frames = 1;
+ }
+ hantro_reg_write(vpu, &av1_ref_frames, ref_frames);
+
+ rockchip_vpu981_av1_dec_set_frame_sign_bias(ctx);
+
+ for (i = V4L2_AV1_REF_LAST_FRAME; i < V4L2_AV1_TOTAL_REFS_PER_FRAME; i++) {
+ uint32_t ref = i - 1;
+ int idx = 0;
+ int width, height;
+
+ if (allow_intrabc) {
+ idx = av1_dec->current_frame_index;
+ width = frame->frame_width_minus_1 + 1;
+ height = frame->frame_height_minus_1 + 1;
+ } else {
+ if (rockchip_vpu981_get_frame_index(ctx, ref) > 0)
+ idx = rockchip_vpu981_get_frame_index(ctx, ref);
+ width = av1_dec->frame_refs[idx].width;
+ height = av1_dec->frame_refs[idx].height;
+ }
+
+ scale_enable |=
+ rockchip_vpu981_av1_dec_set_ref(ctx, ref, idx, width,
+ height);
+
+ rockchip_vpu981_av1_dec_set_sign_bias(ctx, ref,
+ av1_dec->ref_frame_sign_bias[i]);
+ }
+ hantro_reg_write(vpu, &av1_ref_scaling_enable, scale_enable);
+
+ hantro_reg_write(vpu, &av1_ref0_gm_mode,
+ frame->global_motion.type[V4L2_AV1_REF_LAST_FRAME]);
+ hantro_reg_write(vpu, &av1_ref1_gm_mode,
+ frame->global_motion.type[V4L2_AV1_REF_LAST2_FRAME]);
+ hantro_reg_write(vpu, &av1_ref2_gm_mode,
+ frame->global_motion.type[V4L2_AV1_REF_LAST3_FRAME]);
+ hantro_reg_write(vpu, &av1_ref3_gm_mode,
+ frame->global_motion.type[V4L2_AV1_REF_GOLDEN_FRAME]);
+ hantro_reg_write(vpu, &av1_ref4_gm_mode,
+ frame->global_motion.type[V4L2_AV1_REF_BWDREF_FRAME]);
+ hantro_reg_write(vpu, &av1_ref5_gm_mode,
+ frame->global_motion.type[V4L2_AV1_REF_ALTREF2_FRAME]);
+ hantro_reg_write(vpu, &av1_ref6_gm_mode,
+ frame->global_motion.type[V4L2_AV1_REF_ALTREF_FRAME]);
+
+ rockchip_vpu981_av1_dec_set_other_frames(ctx);
+}
+
+static void rockchip_vpu981_av1_dec_set_parameters(struct hantro_ctx *ctx)
+{
+ struct hantro_dev *vpu = ctx->dev;
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+
+ hantro_reg_write(vpu, &av1_skip_mode,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_SKIP_MODE_PRESENT));
+ hantro_reg_write(vpu, &av1_tempor_mvp_e,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_USE_REF_FRAME_MVS));
+ hantro_reg_write(vpu, &av1_delta_lf_res_log,
+ ctrls->frame->loop_filter.delta_lf_res);
+ hantro_reg_write(vpu, &av1_delta_lf_multi,
+ !!(ctrls->frame->loop_filter.flags
+ & V4L2_AV1_LOOP_FILTER_FLAG_DELTA_LF_MULTI));
+ hantro_reg_write(vpu, &av1_delta_lf_present,
+ !!(ctrls->frame->loop_filter.flags
+ & V4L2_AV1_LOOP_FILTER_FLAG_DELTA_LF_PRESENT));
+ hantro_reg_write(vpu, &av1_disable_cdf_update,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_DISABLE_CDF_UPDATE));
+ hantro_reg_write(vpu, &av1_allow_warp,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_WARPED_MOTION));
+ hantro_reg_write(vpu, &av1_show_frame,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_SHOW_FRAME));
+ hantro_reg_write(vpu, &av1_switchable_motion_mode,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_IS_MOTION_MODE_SWITCHABLE));
+ hantro_reg_write(vpu, &av1_enable_cdef,
+ !!(ctrls->sequence->flags & V4L2_AV1_SEQUENCE_FLAG_ENABLE_CDEF));
+ hantro_reg_write(vpu, &av1_allow_masked_compound,
+ !!(ctrls->sequence->flags
+ & V4L2_AV1_SEQUENCE_FLAG_ENABLE_MASKED_COMPOUND));
+ hantro_reg_write(vpu, &av1_allow_interintra,
+ !!(ctrls->sequence->flags
+ & V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTERINTRA_COMPOUND));
+ hantro_reg_write(vpu, &av1_enable_intra_edge_filter,
+ !!(ctrls->sequence->flags
+ & V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTRA_EDGE_FILTER));
+ hantro_reg_write(vpu, &av1_allow_filter_intra,
+ !!(ctrls->sequence->flags & V4L2_AV1_SEQUENCE_FLAG_ENABLE_FILTER_INTRA));
+ hantro_reg_write(vpu, &av1_enable_jnt_comp,
+ !!(ctrls->sequence->flags & V4L2_AV1_SEQUENCE_FLAG_ENABLE_JNT_COMP));
+ hantro_reg_write(vpu, &av1_enable_dual_filter,
+ !!(ctrls->sequence->flags & V4L2_AV1_SEQUENCE_FLAG_ENABLE_DUAL_FILTER));
+ hantro_reg_write(vpu, &av1_reduced_tx_set_used,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_REDUCED_TX_SET));
+ hantro_reg_write(vpu, &av1_allow_screen_content_tools,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_SCREEN_CONTENT_TOOLS));
+ hantro_reg_write(vpu, &av1_allow_intrabc,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC));
+
+ if (!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_SCREEN_CONTENT_TOOLS))
+ hantro_reg_write(vpu, &av1_force_interger_mv, 0);
+ else
+ hantro_reg_write(vpu, &av1_force_interger_mv,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_FORCE_INTEGER_MV));
+
+ hantro_reg_write(vpu, &av1_blackwhite_e, 0);
+ hantro_reg_write(vpu, &av1_delta_q_res_log, ctrls->frame->quantization.delta_q_res);
+ hantro_reg_write(vpu, &av1_delta_q_present,
+ !!(ctrls->frame->quantization.flags
+ & V4L2_AV1_QUANTIZATION_FLAG_DELTA_Q_PRESENT));
+
+ hantro_reg_write(vpu, &av1_idr_pic_e, !ctrls->frame->frame_type);
+ hantro_reg_write(vpu, &av1_quant_base_qindex, ctrls->frame->quantization.base_q_idx);
+ hantro_reg_write(vpu, &av1_bit_depth_y_minus8, ctx->bit_depth - 8);
+ hantro_reg_write(vpu, &av1_bit_depth_c_minus8, ctx->bit_depth - 8);
+
+ hantro_reg_write(vpu, &av1_mcomp_filt_type, ctrls->frame->interpolation_filter);
+ hantro_reg_write(vpu, &av1_high_prec_mv_e,
+ !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_HIGH_PRECISION_MV));
+ hantro_reg_write(vpu, &av1_comp_pred_mode,
+ (ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_REFERENCE_SELECT) ? 2 : 0);
+ hantro_reg_write(vpu, &av1_transform_mode, (ctrls->frame->tx_mode == 1) ? 3 : 4);
+ hantro_reg_write(vpu, &av1_max_cb_size,
+ (ctrls->sequence->flags
+ & V4L2_AV1_SEQUENCE_FLAG_USE_128X128_SUPERBLOCK) ? 7 : 6);
+ hantro_reg_write(vpu, &av1_min_cb_size, 3);
+
+ hantro_reg_write(vpu, &av1_comp_pred_fixed_ref, 0);
+ hantro_reg_write(vpu, &av1_comp_pred_var_ref0_av1, 0);
+ hantro_reg_write(vpu, &av1_comp_pred_var_ref1_av1, 0);
+ hantro_reg_write(vpu, &av1_filt_level_seg0, 0);
+ hantro_reg_write(vpu, &av1_filt_level_seg1, 0);
+ hantro_reg_write(vpu, &av1_filt_level_seg2, 0);
+ hantro_reg_write(vpu, &av1_filt_level_seg3, 0);
+ hantro_reg_write(vpu, &av1_filt_level_seg4, 0);
+ hantro_reg_write(vpu, &av1_filt_level_seg5, 0);
+ hantro_reg_write(vpu, &av1_filt_level_seg6, 0);
+ hantro_reg_write(vpu, &av1_filt_level_seg7, 0);
+
+ hantro_reg_write(vpu, &av1_qp_delta_y_dc_av1, ctrls->frame->quantization.delta_q_y_dc);
+ hantro_reg_write(vpu, &av1_qp_delta_ch_dc_av1, ctrls->frame->quantization.delta_q_u_dc);
+ hantro_reg_write(vpu, &av1_qp_delta_ch_ac_av1, ctrls->frame->quantization.delta_q_u_ac);
+ if (ctrls->frame->quantization.flags & V4L2_AV1_QUANTIZATION_FLAG_USING_QMATRIX) {
+ hantro_reg_write(vpu, &av1_qmlevel_y, ctrls->frame->quantization.qm_y);
+ hantro_reg_write(vpu, &av1_qmlevel_u, ctrls->frame->quantization.qm_u);
+ hantro_reg_write(vpu, &av1_qmlevel_v, ctrls->frame->quantization.qm_v);
+ } else {
+ hantro_reg_write(vpu, &av1_qmlevel_y, 0xff);
+ hantro_reg_write(vpu, &av1_qmlevel_u, 0xff);
+ hantro_reg_write(vpu, &av1_qmlevel_v, 0xff);
+ }
+
+ hantro_reg_write(vpu, &av1_lossless_e, rockchip_vpu981_av1_dec_is_lossless(ctx));
+ hantro_reg_write(vpu, &av1_quant_delta_v_dc, ctrls->frame->quantization.delta_q_v_dc);
+ hantro_reg_write(vpu, &av1_quant_delta_v_ac, ctrls->frame->quantization.delta_q_v_ac);
+
+ hantro_reg_write(vpu, &av1_skip_ref0,
+ (ctrls->frame->skip_mode_frame[0]) ? ctrls->frame->skip_mode_frame[0] : 1);
+ hantro_reg_write(vpu, &av1_skip_ref1,
+ (ctrls->frame->skip_mode_frame[1]) ? ctrls->frame->skip_mode_frame[1] : 1);
+
+ hantro_write_addr(vpu, AV1_MC_SYNC_CURR, av1_dec->tile_buf.dma);
+ hantro_write_addr(vpu, AV1_MC_SYNC_LEFT, av1_dec->tile_buf.dma);
+}
+
+static void
+rockchip_vpu981_av1_dec_set_input_buffer(struct hantro_ctx *ctx,
+ struct vb2_v4l2_buffer *vb2_src)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls;
+ const struct v4l2_ctrl_av1_tile_group_entry *group_entry =
+ ctrls->tile_group_entry;
+ struct hantro_dev *vpu = ctx->dev;
+ dma_addr_t src_dma;
+ u32 src_len, src_buf_len;
+ int start_bit, offset;
+
+ src_dma = vb2_dma_contig_plane_dma_addr(&vb2_src->vb2_buf, 0);
+ src_len = vb2_get_plane_payload(&vb2_src->vb2_buf, 0);
+ src_buf_len = vb2_plane_size(&vb2_src->vb2_buf, 0);
+
+ start_bit = (group_entry[0].tile_offset & 0xf) * 8;
+ offset = group_entry[0].tile_offset & ~0xf;
+
+ hantro_reg_write(vpu, &av1_strm_buffer_len, src_buf_len);
+ hantro_reg_write(vpu, &av1_strm_start_bit, start_bit);
+ hantro_reg_write(vpu, &av1_stream_len, src_len);
+ hantro_reg_write(vpu, &av1_strm_start_offset, 0);
+ hantro_write_addr(vpu, AV1_INPUT_STREAM, src_dma + offset);
+}
+
+static void
+rockchip_vpu981_av1_dec_set_output_buffer(struct hantro_ctx *ctx)
+{
+ struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec;
+ struct hantro_dev *vpu = ctx->dev;
+ struct hantro_decoded_buffer *dst;
+ struct vb2_v4l2_buffer *vb2_dst;
+ dma_addr_t luma_addr, chroma_addr, mv_addr = 0;
+ size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx);
+ size_t mv_offset = rockchip_vpu981_av1_dec_chroma_size(ctx);
+
+ vb2_dst = av1_dec->frame_refs[av1_dec->current_frame_index].vb2_ref;
+ dst = vb2_to_hantro_decoded_buf(&vb2_dst->vb2_buf);
+ luma_addr = hantro_get_dec_buf_addr(ctx, &dst->base.vb.vb2_buf);
+ chroma_addr = luma_addr + cr_offset;
+ mv_addr = luma_addr + mv_offset;
+
+ hantro_write_addr(vpu, AV1_TILE_OUT_LU, luma_addr);
+ hantro_write_addr(vpu, AV1_TILE_OUT_CH, chroma_addr);
+ hantro_write_addr(vpu, AV1_TILE_OUT_MV, mv_addr);
+}
+
+int rockchip_vpu981_av1_dec_run(struct hantro_ctx *ctx)
+{
+ struct hantro_dev *vpu = ctx->dev;
+ struct vb2_v4l2_buffer *vb2_src;
+ int ret;
+
+ hantro_start_prepare_run(ctx);
+
+ ret = rockchip_vpu981_av1_dec_prepare_run(ctx);
+ if (ret)
+ goto prepare_error;
+
+ vb2_src = hantro_get_src_buf(ctx);
+ if (!vb2_src) {
+ ret = -EINVAL;
+ goto prepare_error;
+ }
+
+ rockchip_vpu981_av1_dec_clean_refs(ctx);
+ rockchip_vpu981_av1_dec_frame_ref(ctx, vb2_src->vb2_buf.timestamp);
+
+ rockchip_vpu981_av1_dec_set_parameters(ctx);
+ rockchip_vpu981_av1_dec_set_global_model(ctx);
+ rockchip_vpu981_av1_dec_set_tile_info(ctx);
+ rockchip_vpu981_av1_dec_set_reference_frames(ctx);
+ rockchip_vpu981_av1_dec_set_segmentation(ctx);
+ rockchip_vpu981_av1_dec_set_loopfilter(ctx);
+ rockchip_vpu981_av1_dec_set_picture_dimensions(ctx);
+ rockchip_vpu981_av1_dec_set_cdef(ctx);
+ rockchip_vpu981_av1_dec_set_lr(ctx);
+ rockchip_vpu981_av1_dec_set_prob(ctx);
+
+ hantro_reg_write(vpu, &av1_dec_mode, AV1_DEC_MODE);
+ hantro_reg_write(vpu, &av1_dec_out_ec_byte_word, 0);
+ hantro_reg_write(vpu, &av1_write_mvs_e, 1);
+ hantro_reg_write(vpu, &av1_dec_out_ec_bypass, 1);
+ hantro_reg_write(vpu, &av1_dec_clk_gate_e, 1);
+
+ hantro_reg_write(vpu, &av1_dec_abort_e, 0);
+ hantro_reg_write(vpu, &av1_dec_tile_int_e, 0);
+
+ hantro_reg_write(vpu, &av1_dec_alignment, 64);
+ hantro_reg_write(vpu, &av1_apf_disable, 0);
+ hantro_reg_write(vpu, &av1_apf_threshold, 8);
+ hantro_reg_write(vpu, &av1_dec_buswidth, 2);
+ hantro_reg_write(vpu, &av1_dec_max_burst, 16);
+ hantro_reg_write(vpu, &av1_error_conceal_e, 0);
+ hantro_reg_write(vpu, &av1_axi_rd_ostd_threshold, 64);
+ hantro_reg_write(vpu, &av1_axi_wr_ostd_threshold, 64);
+
+ hantro_reg_write(vpu, &av1_ext_timeout_cycles, 0xfffffff);
+ hantro_reg_write(vpu, &av1_ext_timeout_override_e, 1);
+ hantro_reg_write(vpu, &av1_timeout_cycles, 0xfffffff);
+ hantro_reg_write(vpu, &av1_timeout_override_e, 1);
+
+ rockchip_vpu981_av1_dec_set_output_buffer(ctx);
+ rockchip_vpu981_av1_dec_set_input_buffer(ctx, vb2_src);
+
+ hantro_end_prepare_run(ctx);
+
+ hantro_reg_write(vpu, &av1_dec_e, 1);
+
+ return 0;
+
+prepare_error:
+ hantro_end_prepare_run(ctx);
+ hantro_irq_done(vpu, VB2_BUF_STATE_ERROR);
+ return ret;
+}
+
+static void rockchip_vpu981_postproc_enable(struct hantro_ctx *ctx)
+{
+ struct hantro_dev *vpu = ctx->dev;
+ int width = ctx->dst_fmt.width;
+ int height = ctx->dst_fmt.height;
+ struct vb2_v4l2_buffer *vb2_dst;
+ size_t chroma_offset;
+ dma_addr_t dst_dma;
+
+ vb2_dst = hantro_get_dst_buf(ctx);
+
+ dst_dma = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0);
+ chroma_offset = ctx->dst_fmt.plane_fmt[0].bytesperline *
+ ctx->dst_fmt.height;
+
+ /* enable post processor */
+ hantro_reg_write(vpu, &av1_pp_out_e, 1);
+ hantro_reg_write(vpu, &av1_pp_in_format, 0);
+ hantro_reg_write(vpu, &av1_pp0_dup_hor, 1);
+ hantro_reg_write(vpu, &av1_pp0_dup_ver, 1);
+
+ hantro_reg_write(vpu, &av1_pp_in_height, height / 2);
+ hantro_reg_write(vpu, &av1_pp_in_width, width / 2);
+ hantro_reg_write(vpu, &av1_pp_out_height, height);
+ hantro_reg_write(vpu, &av1_pp_out_width, width);
+ hantro_reg_write(vpu, &av1_pp_out_y_stride,
+ ctx->dst_fmt.plane_fmt[0].bytesperline);
+ hantro_reg_write(vpu, &av1_pp_out_c_stride,
+ ctx->dst_fmt.plane_fmt[0].bytesperline);
+ switch (ctx->dst_fmt.pixelformat) {
+ case V4L2_PIX_FMT_P010:
+ hantro_reg_write(vpu, &av1_pp_out_format, 1);
+ break;
+ case V4L2_PIX_FMT_NV12:
+ hantro_reg_write(vpu, &av1_pp_out_format, 3);
+ break;
+ default:
+ hantro_reg_write(vpu, &av1_pp_out_format, 0);
+ }
+
+ hantro_reg_write(vpu, &av1_ppd_blend_exist, 0);
+ hantro_reg_write(vpu, &av1_ppd_dith_exist, 0);
+ hantro_reg_write(vpu, &av1_ablend_crop_e, 0);
+ hantro_reg_write(vpu, &av1_pp_format_customer1_e, 0);
+ hantro_reg_write(vpu, &av1_pp_crop_exist, 0);
+ hantro_reg_write(vpu, &av1_pp_up_level, 0);
+ hantro_reg_write(vpu, &av1_pp_down_level, 0);
+ hantro_reg_write(vpu, &av1_pp_exist, 0);
+
+ hantro_write_addr(vpu, AV1_PP_OUT_LU, dst_dma);
+ hantro_write_addr(vpu, AV1_PP_OUT_CH, dst_dma + chroma_offset);
+}
+
+static void rockchip_vpu981_postproc_disable(struct hantro_ctx *ctx)
+{
+ struct hantro_dev *vpu = ctx->dev;
+
+ /* disable post processor */
+ hantro_reg_write(vpu, &av1_pp_out_e, 0);
+}
+
+const struct hantro_postproc_ops rockchip_vpu981_postproc_ops = {
+ .enable = rockchip_vpu981_postproc_enable,
+ .disable = rockchip_vpu981_postproc_disable,
+};
diff --git a/drivers/media/platform/verisilicon/rockchip_vpu981_regs.h b/drivers/media/platform/verisilicon/rockchip_vpu981_regs.h
new file mode 100644
index 000000000000..182e6c830ff6
--- /dev/null
+++ b/drivers/media/platform/verisilicon/rockchip_vpu981_regs.h
@@ -0,0 +1,477 @@
+/* SPDX-License-Identifier: GPL-2.0-only */
+/*
+ * Copyright (c) 2022, Collabora
+ *
+ * Author: Benjamin Gaignard <benjamin.gaignard@collabora.com>
+ */
+
+#ifndef _ROCKCHIP_VPU981_REGS_H_
+#define _ROCKCHIP_VPU981_REGS_H_
+
+#include "hantro.h"
+
+#define AV1_SWREG(nr) ((nr) * 4)
+
+#define AV1_DEC_REG(b, s, m) \
+ ((const struct hantro_reg) { \
+ .base = AV1_SWREG(b), \
+ .shift = s, \
+ .mask = m, \
+ })
+
+#define AV1_REG_INTERRUPT AV1_SWREG(1)
+#define AV1_REG_INTERRUPT_DEC_RDY_INT BIT(12)
+
+#define AV1_REG_CONFIG AV1_SWREG(2)
+#define AV1_REG_CONFIG_DEC_CLK_GATE_E BIT(10)
+
+#define av1_dec_e AV1_DEC_REG(1, 0, 0x1)
+#define av1_dec_abort_e AV1_DEC_REG(1, 5, 0x1)
+#define av1_dec_tile_int_e AV1_DEC_REG(1, 7, 0x1)
+
+#define av1_dec_clk_gate_e AV1_DEC_REG(2, 10, 0x1)
+
+#define av1_dec_out_ec_bypass AV1_DEC_REG(3, 8, 0x1)
+#define av1_write_mvs_e AV1_DEC_REG(3, 12, 0x1)
+#define av1_filtering_dis AV1_DEC_REG(3, 14, 0x1)
+#define av1_dec_out_dis AV1_DEC_REG(3, 15, 0x1)
+#define av1_dec_out_ec_byte_word AV1_DEC_REG(3, 16, 0x1)
+#define av1_skip_mode AV1_DEC_REG(3, 26, 0x1)
+#define av1_dec_mode AV1_DEC_REG(3, 27, 0x1f)
+
+#define av1_ref_frames AV1_DEC_REG(4, 0, 0xf)
+#define av1_pic_height_in_cbs AV1_DEC_REG(4, 6, 0x1fff)
+#define av1_pic_width_in_cbs AV1_DEC_REG(4, 19, 0x1fff)
+
+#define av1_ref_scaling_enable AV1_DEC_REG(5, 0, 0x1)
+#define av1_filt_level_base_gt32 AV1_DEC_REG(5, 1, 0x1)
+#define av1_error_resilient AV1_DEC_REG(5, 2, 0x1)
+#define av1_force_interger_mv AV1_DEC_REG(5, 3, 0x1)
+#define av1_allow_intrabc AV1_DEC_REG(5, 4, 0x1)
+#define av1_allow_screen_content_tools AV1_DEC_REG(5, 5, 0x1)
+#define av1_reduced_tx_set_used AV1_DEC_REG(5, 6, 0x1)
+#define av1_enable_dual_filter AV1_DEC_REG(5, 7, 0x1)
+#define av1_enable_jnt_comp AV1_DEC_REG(5, 8, 0x1)
+#define av1_allow_filter_intra AV1_DEC_REG(5, 9, 0x1)
+#define av1_enable_intra_edge_filter AV1_DEC_REG(5, 10, 0x1)
+#define av1_tempor_mvp_e AV1_DEC_REG(5, 11, 0x1)
+#define av1_allow_interintra AV1_DEC_REG(5, 12, 0x1)
+#define av1_allow_masked_compound AV1_DEC_REG(5, 13, 0x1)
+#define av1_enable_cdef AV1_DEC_REG(5, 14, 0x1)
+#define av1_switchable_motion_mode AV1_DEC_REG(5, 15, 0x1)
+#define av1_show_frame AV1_DEC_REG(5, 16, 0x1)
+#define av1_superres_is_scaled AV1_DEC_REG(5, 17, 0x1)
+#define av1_allow_warp AV1_DEC_REG(5, 18, 0x1)
+#define av1_disable_cdf_update AV1_DEC_REG(5, 19, 0x1)
+#define av1_preskip_segid AV1_DEC_REG(5, 20, 0x1)
+#define av1_delta_lf_present AV1_DEC_REG(5, 21, 0x1)
+#define av1_delta_lf_multi AV1_DEC_REG(5, 22, 0x1)
+#define av1_delta_lf_res_log AV1_DEC_REG(5, 23, 0x3)
+#define av1_strm_start_bit AV1_DEC_REG(5, 25, 0x7f)
+
+#define av1_stream_len AV1_DEC_REG(6, 0, 0xffffffff)
+
+#define av1_delta_q_present AV1_DEC_REG(7, 0, 0x1)
+#define av1_delta_q_res_log AV1_DEC_REG(7, 1, 0x3)
+#define av1_cdef_damping AV1_DEC_REG(7, 3, 0x3)
+#define av1_cdef_bits AV1_DEC_REG(7, 5, 0x3)
+#define av1_apply_grain AV1_DEC_REG(7, 7, 0x1)
+#define av1_num_y_points_b AV1_DEC_REG(7, 8, 0x1)
+#define av1_num_cb_points_b AV1_DEC_REG(7, 9, 0x1)
+#define av1_num_cr_points_b AV1_DEC_REG(7, 10, 0x1)
+#define av1_overlap_flag AV1_DEC_REG(7, 11, 0x1)
+#define av1_clip_to_restricted_range AV1_DEC_REG(7, 12, 0x1)
+#define av1_chroma_scaling_from_luma AV1_DEC_REG(7, 13, 0x1)
+#define av1_random_seed AV1_DEC_REG(7, 14, 0xffff)
+#define av1_blackwhite_e AV1_DEC_REG(7, 30, 0x1)
+
+#define av1_scaling_shift AV1_DEC_REG(8, 0, 0xf)
+#define av1_bit_depth_c_minus8 AV1_DEC_REG(8, 4, 0x3)
+#define av1_bit_depth_y_minus8 AV1_DEC_REG(8, 6, 0x3)
+#define av1_quant_base_qindex AV1_DEC_REG(8, 8, 0xff)
+#define av1_idr_pic_e AV1_DEC_REG(8, 16, 0x1)
+#define av1_superres_pic_width AV1_DEC_REG(8, 17, 0x7fff)
+
+#define av1_ref4_sign_bias AV1_DEC_REG(9, 2, 0x1)
+#define av1_ref5_sign_bias AV1_DEC_REG(9, 3, 0x1)
+#define av1_ref6_sign_bias AV1_DEC_REG(9, 4, 0x1)
+#define av1_mf1_type AV1_DEC_REG(9, 5, 0x7)
+#define av1_mf2_type AV1_DEC_REG(9, 8, 0x7)
+#define av1_mf3_type AV1_DEC_REG(9, 11, 0x7)
+#define av1_scale_denom_minus9 AV1_DEC_REG(9, 14, 0x7)
+#define av1_last_active_seg AV1_DEC_REG(9, 17, 0x7)
+#define av1_context_update_tile_id AV1_DEC_REG(9, 20, 0xfff)
+
+#define av1_tile_transpose AV1_DEC_REG(10, 0, 0x1)
+#define av1_tile_enable AV1_DEC_REG(10, 1, 0x1)
+#define av1_multicore_full_width AV1_DEC_REG(10, 2, 0xff)
+#define av1_num_tile_rows_8k AV1_DEC_REG(10, 10, 0x7f)
+#define av1_num_tile_cols_8k AV1_DEC_REG(10, 17, 0x7f)
+#define av1_multicore_tile_start_x AV1_DEC_REG(10, 24, 0xff)
+
+#define av1_use_temporal3_mvs AV1_DEC_REG(11, 0, 0x1)
+#define av1_use_temporal2_mvs AV1_DEC_REG(11, 1, 0x1)
+#define av1_use_temporal1_mvs AV1_DEC_REG(11, 2, 0x1)
+#define av1_use_temporal0_mvs AV1_DEC_REG(11, 3, 0x1)
+#define av1_comp_pred_mode AV1_DEC_REG(11, 4, 0x3)
+#define av1_high_prec_mv_e AV1_DEC_REG(11, 7, 0x1)
+#define av1_mcomp_filt_type AV1_DEC_REG(11, 8, 0x7)
+#define av1_multicore_expect_context_update AV1_DEC_REG(11, 11, 0x1)
+#define av1_multicore_sbx_offset AV1_DEC_REG(11, 12, 0x7f)
+#define av1_ulticore_tile_col AV1_DEC_REG(11, 19, 0x7f)
+#define av1_transform_mode AV1_DEC_REG(11, 27, 0x7)
+#define av1_dec_tile_size_mag AV1_DEC_REG(11, 30, 0x3)
+
+#define av1_seg_quant_sign AV1_DEC_REG(12, 2, 0xff)
+#define av1_max_cb_size AV1_DEC_REG(12, 10, 0x7)
+#define av1_min_cb_size AV1_DEC_REG(12, 13, 0x7)
+#define av1_comp_pred_fixed_ref AV1_DEC_REG(12, 16, 0x7)
+#define av1_multicore_tile_width AV1_DEC_REG(12, 19, 0x7f)
+#define av1_pic_height_pad AV1_DEC_REG(12, 26, 0x7)
+#define av1_pic_width_pad AV1_DEC_REG(12, 29, 0x7)
+
+#define av1_segment_e AV1_DEC_REG(13, 0, 0x1)
+#define av1_segment_upd_e AV1_DEC_REG(13, 1, 0x1)
+#define av1_segment_temp_upd_e AV1_DEC_REG(13, 2, 0x1)
+#define av1_comp_pred_var_ref0_av1 AV1_DEC_REG(13, 3, 0x7)
+#define av1_comp_pred_var_ref1_av1 AV1_DEC_REG(13, 6, 0x7)
+#define av1_lossless_e AV1_DEC_REG(13, 9, 0x1)
+#define av1_qp_delta_ch_ac_av1 AV1_DEC_REG(13, 11, 0x7f)
+#define av1_qp_delta_ch_dc_av1 AV1_DEC_REG(13, 18, 0x7f)
+#define av1_qp_delta_y_dc_av1 AV1_DEC_REG(13, 25, 0x7f)
+
+#define av1_quant_seg0 AV1_DEC_REG(14, 0, 0xff)
+#define av1_filt_level_seg0 AV1_DEC_REG(14, 8, 0x3f)
+#define av1_skip_seg0 AV1_DEC_REG(14, 14, 0x1)
+#define av1_refpic_seg0 AV1_DEC_REG(14, 15, 0xf)
+#define av1_filt_level_delta0_seg0 AV1_DEC_REG(14, 19, 0x7f)
+#define av1_filt_level0 AV1_DEC_REG(14, 26, 0x3f)
+
+#define av1_quant_seg1 AV1_DEC_REG(15, 0, 0xff)
+#define av1_filt_level_seg1 AV1_DEC_REG(15, 8, 0x3f)
+#define av1_skip_seg1 AV1_DEC_REG(15, 14, 0x1)
+#define av1_refpic_seg1 AV1_DEC_REG(15, 15, 0xf)
+#define av1_filt_level_delta0_seg1 AV1_DEC_REG(15, 19, 0x7f)
+#define av1_filt_level1 AV1_DEC_REG(15, 26, 0x3f)
+
+#define av1_quant_seg2 AV1_DEC_REG(16, 0, 0xff)
+#define av1_filt_level_seg2 AV1_DEC_REG(16, 8, 0x3f)
+#define av1_skip_seg2 AV1_DEC_REG(16, 14, 0x1)
+#define av1_refpic_seg2 AV1_DEC_REG(16, 15, 0xf)
+#define av1_filt_level_delta0_seg2 AV1_DEC_REG(16, 19, 0x7f)
+#define av1_filt_level2 AV1_DEC_REG(16, 26, 0x3f)
+
+#define av1_quant_seg3 AV1_DEC_REG(17, 0, 0xff)
+#define av1_filt_level_seg3 AV1_DEC_REG(17, 8, 0x3f)
+#define av1_skip_seg3 AV1_DEC_REG(17, 14, 0x1)
+#define av1_refpic_seg3 AV1_DEC_REG(17, 15, 0xf)
+#define av1_filt_level_delta0_seg3 AV1_DEC_REG(17, 19, 0x7f)
+#define av1_filt_level3 AV1_DEC_REG(17, 26, 0x3f)
+
+#define av1_quant_seg4 AV1_DEC_REG(18, 0, 0xff)
+#define av1_filt_level_seg4 AV1_DEC_REG(18, 8, 0x3f)
+#define av1_skip_seg4 AV1_DEC_REG(18, 14, 0x1)
+#define av1_refpic_seg4 AV1_DEC_REG(18, 15, 0xf)
+#define av1_filt_level_delta0_seg4 AV1_DEC_REG(18, 19, 0x7f)
+#define av1_lr_type AV1_DEC_REG(18, 26, 0x3f)
+
+#define av1_quant_seg5 AV1_DEC_REG(19, 0, 0xff)
+#define av1_filt_level_seg5 AV1_DEC_REG(19, 8, 0x3f)
+#define av1_skip_seg5 AV1_DEC_REG(19, 14, 0x1)
+#define av1_refpic_seg5 AV1_DEC_REG(19, 15, 0xf)
+#define av1_filt_level_delta0_seg5 AV1_DEC_REG(19, 19, 0x7f)
+#define av1_lr_unit_size AV1_DEC_REG(19, 26, 0x3f)
+
+#define av1_filt_level_delta1_seg0 AV1_DEC_REG(20, 0, 0x7f)
+#define av1_filt_level_delta2_seg0 AV1_DEC_REG(20, 7, 0x7f)
+#define av1_filt_level_delta3_seg0 AV1_DEC_REG(20, 14, 0x7f)
+#define av1_global_mv_seg0 AV1_DEC_REG(20, 21, 0x1)
+#define av1_mf1_last_offset AV1_DEC_REG(20, 22, 0x1ff)
+
+#define av1_filt_level_delta1_seg1 AV1_DEC_REG(21, 0, 0x7f)
+#define av1_filt_level_delta2_seg1 AV1_DEC_REG(21, 7, 0x7f)
+#define av1_filt_level_delta3_seg1 AV1_DEC_REG(21, 14, 0x7f)
+#define av1_global_mv_seg1 AV1_DEC_REG(21, 21, 0x1)
+#define av1_mf1_last2_offset AV1_DEC_REG(21, 22, 0x1ff)
+
+#define av1_filt_level_delta1_seg2 AV1_DEC_REG(22, 0, 0x7f)
+#define av1_filt_level_delta2_seg2 AV1_DEC_REG(22, 7, 0x7f)
+#define av1_filt_level_delta3_seg2 AV1_DEC_REG(22, 14, 0x7f)
+#define av1_global_mv_seg2 AV1_DEC_REG(22, 21, 0x1)
+#define av1_mf1_last3_offset AV1_DEC_REG(22, 22, 0x1ff)
+
+#define av1_filt_level_delta1_seg3 AV1_DEC_REG(23, 0, 0x7f)
+#define av1_filt_level_delta2_seg3 AV1_DEC_REG(23, 7, 0x7f)
+#define av1_filt_level_delta3_seg3 AV1_DEC_REG(23, 14, 0x7f)
+#define av1_global_mv_seg3 AV1_DEC_REG(23, 21, 0x1)
+#define av1_mf1_golden_offset AV1_DEC_REG(23, 22, 0x1ff)
+
+#define av1_filt_level_delta1_seg4 AV1_DEC_REG(24, 0, 0x7f)
+#define av1_filt_level_delta2_seg4 AV1_DEC_REG(24, 7, 0x7f)
+#define av1_filt_level_delta3_seg4 AV1_DEC_REG(24, 14, 0x7f)
+#define av1_global_mv_seg4 AV1_DEC_REG(24, 21, 0x1)
+#define av1_mf1_bwdref_offset AV1_DEC_REG(24, 22, 0x1ff)
+
+#define av1_filt_level_delta1_seg5 AV1_DEC_REG(25, 0, 0x7f)
+#define av1_filt_level_delta2_seg5 AV1_DEC_REG(25, 7, 0x7f)
+#define av1_filt_level_delta3_seg5 AV1_DEC_REG(25, 14, 0x7f)
+#define av1_global_mv_seg5 AV1_DEC_REG(25, 21, 0x1)
+#define av1_mf1_altref2_offset AV1_DEC_REG(25, 22, 0x1ff)
+
+#define av1_filt_level_delta1_seg6 AV1_DEC_REG(26, 0, 0x7f)
+#define av1_filt_level_delta2_seg6 AV1_DEC_REG(26, 7, 0x7f)
+#define av1_filt_level_delta3_seg6 AV1_DEC_REG(26, 14, 0x7f)
+#define av1_global_mv_seg6 AV1_DEC_REG(26, 21, 0x1)
+#define av1_mf1_altref_offset AV1_DEC_REG(26, 22, 0x1ff)
+
+#define av1_filt_level_delta1_seg7 AV1_DEC_REG(27, 0, 0x7f)
+#define av1_filt_level_delta2_seg7 AV1_DEC_REG(27, 7, 0x7f)
+#define av1_filt_level_delta3_seg7 AV1_DEC_REG(27, 14, 0x7f)
+#define av1_global_mv_seg7 AV1_DEC_REG(27, 21, 0x1)
+#define av1_mf2_last_offset AV1_DEC_REG(27, 22, 0x1ff)
+
+#define av1_cb_offset AV1_DEC_REG(28, 0, 0x1ff)
+#define av1_cb_luma_mult AV1_DEC_REG(28, 9, 0xff)
+#define av1_cb_mult AV1_DEC_REG(28, 17, 0xff)
+#define av1_quant_delta_v_dc AV1_DEC_REG(28, 25, 0x7f)
+
+#define av1_cr_offset AV1_DEC_REG(29, 0, 0x1ff)
+#define av1_cr_luma_mult AV1_DEC_REG(29, 9, 0xff)
+#define av1_cr_mult AV1_DEC_REG(29, 17, 0xff)
+#define av1_quant_delta_v_ac AV1_DEC_REG(29, 25, 0x7f)
+
+#define av1_filt_ref_adj_5 AV1_DEC_REG(30, 0, 0x7f)
+#define av1_filt_ref_adj_4 AV1_DEC_REG(30, 7, 0x7f)
+#define av1_filt_mb_adj_1 AV1_DEC_REG(30, 14, 0x7f)
+#define av1_filt_mb_adj_0 AV1_DEC_REG(30, 21, 0x7f)
+#define av1_filt_sharpness AV1_DEC_REG(30, 28, 0x7)
+
+#define av1_quant_seg6 AV1_DEC_REG(31, 0, 0xff)
+#define av1_filt_level_seg6 AV1_DEC_REG(31, 8, 0x3f)
+#define av1_skip_seg6 AV1_DEC_REG(31, 14, 0x1)
+#define av1_refpic_seg6 AV1_DEC_REG(31, 15, 0xf)
+#define av1_filt_level_delta0_seg6 AV1_DEC_REG(31, 19, 0x7f)
+#define av1_skip_ref0 AV1_DEC_REG(31, 26, 0xf)
+
+#define av1_quant_seg7 AV1_DEC_REG(32, 0, 0xff)
+#define av1_filt_level_seg7 AV1_DEC_REG(32, 8, 0x3f)
+#define av1_skip_seg7 AV1_DEC_REG(32, 14, 0x1)
+#define av1_refpic_seg7 AV1_DEC_REG(32, 15, 0xf)
+#define av1_filt_level_delta0_seg7 AV1_DEC_REG(32, 19, 0x7f)
+#define av1_skip_ref1 AV1_DEC_REG(32, 26, 0xf)
+
+#define av1_ref0_height AV1_DEC_REG(33, 0, 0xffff)
+#define av1_ref0_width AV1_DEC_REG(33, 16, 0xffff)
+
+#define av1_ref1_height AV1_DEC_REG(34, 0, 0xffff)
+#define av1_ref1_width AV1_DEC_REG(34, 16, 0xffff)
+
+#define av1_ref2_height AV1_DEC_REG(35, 0, 0xffff)
+#define av1_ref2_width AV1_DEC_REG(35, 16, 0xffff)
+
+#define av1_ref0_ver_scale AV1_DEC_REG(36, 0, 0xffff)
+#define av1_ref0_hor_scale AV1_DEC_REG(36, 16, 0xffff)
+
+#define av1_ref1_ver_scale AV1_DEC_REG(37, 0, 0xffff)
+#define av1_ref1_hor_scale AV1_DEC_REG(37, 16, 0xffff)
+
+#define av1_ref2_ver_scale AV1_DEC_REG(38, 0, 0xffff)
+#define av1_ref2_hor_scale AV1_DEC_REG(38, 16, 0xffff)
+
+#define av1_ref3_ver_scale AV1_DEC_REG(39, 0, 0xffff)
+#define av1_ref3_hor_scale AV1_DEC_REG(39, 16, 0xffff)
+
+#define av1_ref4_ver_scale AV1_DEC_REG(40, 0, 0xffff)
+#define av1_ref4_hor_scale AV1_DEC_REG(40, 16, 0xffff)
+
+#define av1_ref5_ver_scale AV1_DEC_REG(41, 0, 0xffff)
+#define av1_ref5_hor_scale AV1_DEC_REG(41, 16, 0xffff)
+
+#define av1_ref6_ver_scale AV1_DEC_REG(42, 0, 0xffff)
+#define av1_ref6_hor_scale AV1_DEC_REG(42, 16, 0xffff)
+
+#define av1_ref3_height AV1_DEC_REG(43, 0, 0xffff)
+#define av1_ref3_width AV1_DEC_REG(43, 16, 0xffff)
+
+#define av1_ref4_height AV1_DEC_REG(44, 0, 0xffff)
+#define av1_ref4_width AV1_DEC_REG(44, 16, 0xffff)
+
+#define av1_ref5_height AV1_DEC_REG(45, 0, 0xffff)
+#define av1_ref5_width AV1_DEC_REG(45, 16, 0xffff)
+
+#define av1_ref6_height AV1_DEC_REG(46, 0, 0xffff)
+#define av1_ref6_width AV1_DEC_REG(46, 16, 0xffff)
+
+#define av1_mf2_last2_offset AV1_DEC_REG(47, 0, 0x1ff)
+#define av1_mf2_last3_offset AV1_DEC_REG(47, 9, 0x1ff)
+#define av1_mf2_golden_offset AV1_DEC_REG(47, 18, 0x1ff)
+#define av1_qmlevel_y AV1_DEC_REG(47, 27, 0xf)
+
+#define av1_mf2_bwdref_offset AV1_DEC_REG(48, 0, 0x1ff)
+#define av1_mf2_altref2_offset AV1_DEC_REG(48, 9, 0x1ff)
+#define av1_mf2_altref_offset AV1_DEC_REG(48, 18, 0x1ff)
+#define av1_qmlevel_u AV1_DEC_REG(48, 27, 0xf)
+
+#define av1_filt_ref_adj_6 AV1_DEC_REG(49, 0, 0x7f)
+#define av1_filt_ref_adj_7 AV1_DEC_REG(49, 7, 0x7f)
+#define av1_qmlevel_v AV1_DEC_REG(49, 14, 0xf)
+
+#define av1_superres_chroma_step AV1_DEC_REG(51, 0, 0x3fff)
+#define av1_superres_luma_step AV1_DEC_REG(51, 14, 0x3fff)
+
+#define av1_superres_init_chroma_subpel_x AV1_DEC_REG(52, 0, 0x3fff)
+#define av1_superres_init_luma_subpel_x AV1_DEC_REG(52, 14, 0x3fff)
+
+#define av1_cdef_chroma_secondary_strength AV1_DEC_REG(53, 0, 0xffff)
+#define av1_cdef_luma_secondary_strength AV1_DEC_REG(53, 16, 0xffff)
+
+#define av1_apf_threshold AV1_DEC_REG(55, 0, 0xffff)
+#define av1_apf_single_pu_mode AV1_DEC_REG(55, 30, 0x1)
+#define av1_apf_disable AV1_DEC_REG(55, 30, 0x1)
+
+#define av1_dec_max_burst AV1_DEC_REG(58, 0, 0xff)
+#define av1_dec_buswidth AV1_DEC_REG(58, 8, 0x7)
+#define av1_dec_multicore_mode AV1_DEC_REG(58, 11, 0x3)
+#define av1_dec_axi_wd_id_e AV1_DEC_REG(58, 13, 0x1)
+#define av1_dec_axi_rd_id_e AV1_DEC_REG(58, 14, 0x1)
+#define av1_dec_mc_polltime AV1_DEC_REG(58, 17, 0x3ff)
+#define av1_dec_mc_pollmode AV1_DEC_REG(58, 27, 0x3)
+
+#define av1_filt_ref_adj_3 AV1_DEC_REG(59, 0, 0x3f)
+#define av1_filt_ref_adj_2 AV1_DEC_REG(59, 7, 0x3f)
+#define av1_filt_ref_adj_1 AV1_DEC_REG(59, 14, 0x3f)
+#define av1_filt_ref_adj_0 AV1_DEC_REG(59, 21, 0x3f)
+#define av1_ref0_sign_bias AV1_DEC_REG(59, 28, 0x1)
+#define av1_ref1_sign_bias AV1_DEC_REG(59, 29, 0x1)
+#define av1_ref2_sign_bias AV1_DEC_REG(59, 30, 0x1)
+#define av1_ref3_sign_bias AV1_DEC_REG(59, 31, 0x1)
+
+#define av1_cur_last_roffset AV1_DEC_REG(184, 0, 0x1ff)
+#define av1_cur_last_offset AV1_DEC_REG(184, 9, 0x1ff)
+#define av1_mf3_last_offset AV1_DEC_REG(184, 18, 0x1ff)
+#define av1_ref0_gm_mode AV1_DEC_REG(184, 27, 0x3)
+
+#define av1_cur_last2_roffset AV1_DEC_REG(185, 0, 0x1ff)
+#define av1_cur_last2_offset AV1_DEC_REG(185, 9, 0x1ff)
+#define av1_mf3_last2_offset AV1_DEC_REG(185, 18, 0x1ff)
+#define av1_ref1_gm_mode AV1_DEC_REG(185, 27, 0x3)
+
+#define av1_cur_last3_roffset AV1_DEC_REG(186, 0, 0x1ff)
+#define av1_cur_last3_offset AV1_DEC_REG(186, 9, 0x1ff)
+#define av1_mf3_last3_offset AV1_DEC_REG(186, 18, 0x1ff)
+#define av1_ref2_gm_mode AV1_DEC_REG(186, 27, 0x3)
+
+#define av1_cur_golden_roffset AV1_DEC_REG(187, 0, 0x1ff)
+#define av1_cur_golden_offset AV1_DEC_REG(187, 9, 0x1ff)
+#define av1_mf3_golden_offset AV1_DEC_REG(187, 18, 0x1ff)
+#define av1_ref3_gm_mode AV1_DEC_REG(187, 27, 0x3)
+
+#define av1_cur_bwdref_roffset AV1_DEC_REG(188, 0, 0x1ff)
+#define av1_cur_bwdref_offset AV1_DEC_REG(188, 9, 0x1ff)
+#define av1_mf3_bwdref_offset AV1_DEC_REG(188, 18, 0x1ff)
+#define av1_ref4_gm_mode AV1_DEC_REG(188, 27, 0x3)
+
+#define av1_cur_altref2_roffset AV1_DEC_REG(257, 0, 0x1ff)
+#define av1_cur_altref2_offset AV1_DEC_REG(257, 9, 0x1ff)
+#define av1_mf3_altref2_offset AV1_DEC_REG(257, 18, 0x1ff)
+#define av1_ref5_gm_mode AV1_DEC_REG(257, 27, 0x3)
+
+#define av1_strm_buffer_len AV1_DEC_REG(258, 0, 0xffffffff)
+
+#define av1_strm_start_offset AV1_DEC_REG(259, 0, 0xffffffff)
+
+#define av1_ppd_blend_exist AV1_DEC_REG(260, 21, 0x1)
+#define av1_ppd_dith_exist AV1_DEC_REG(260, 23, 0x1)
+#define av1_ablend_crop_e AV1_DEC_REG(260, 24, 0x1)
+#define av1_pp_format_p010_e AV1_DEC_REG(260, 25, 0x1)
+#define av1_pp_format_customer1_e AV1_DEC_REG(260, 26, 0x1)
+#define av1_pp_crop_exist AV1_DEC_REG(260, 27, 0x1)
+#define av1_pp_up_level AV1_DEC_REG(260, 28, 0x1)
+#define av1_pp_down_level AV1_DEC_REG(260, 29, 0x3)
+#define av1_pp_exist AV1_DEC_REG(260, 31, 0x1)
+
+#define av1_cur_altref_roffset AV1_DEC_REG(262, 0, 0x1ff)
+#define av1_cur_altref_offset AV1_DEC_REG(262, 9, 0x1ff)
+#define av1_mf3_altref_offset AV1_DEC_REG(262, 18, 0x1ff)
+#define av1_ref6_gm_mode AV1_DEC_REG(262, 27, 0x3)
+
+#define av1_cdef_luma_primary_strength AV1_DEC_REG(263, 0, 0xffffffff)
+
+#define av1_cdef_chroma_primary_strength AV1_DEC_REG(264, 0, 0xffffffff)
+
+#define av1_axi_arqos AV1_DEC_REG(265, 0, 0xf)
+#define av1_axi_awqos AV1_DEC_REG(265, 4, 0xf)
+#define av1_axi_wr_ostd_threshold AV1_DEC_REG(265, 8, 0x3ff)
+#define av1_axi_rd_ostd_threshold AV1_DEC_REG(265, 18, 0x3ff)
+#define av1_axi_wr_4k_dis AV1_DEC_REG(265, 31, 0x1)
+
+#define av1_128bit_mode AV1_DEC_REG(266, 5, 0x1)
+#define av1_wr_shaper_bypass AV1_DEC_REG(266, 10, 0x1)
+#define av1_error_conceal_e AV1_DEC_REG(266, 30, 0x1)
+
+#define av1_superres_chroma_step_invra AV1_DEC_REG(298, 0, 0xffff)
+#define av1_superres_luma_step_invra AV1_DEC_REG(298, 16, 0xffff)
+
+#define av1_dec_alignment AV1_DEC_REG(314, 0, 0xffff)
+
+#define av1_ext_timeout_cycles AV1_DEC_REG(318, 0, 0x7fffffff)
+#define av1_ext_timeout_override_e AV1_DEC_REG(318, 31, 0x1)
+
+#define av1_timeout_cycles AV1_DEC_REG(319, 0, 0x7fffffff)
+#define av1_timeout_override_e AV1_DEC_REG(319, 31, 0x1)
+
+#define av1_pp_out_e AV1_DEC_REG(320, 0, 0x1)
+#define av1_pp_cr_first AV1_DEC_REG(320, 1, 0x1)
+#define av1_pp_out_mode AV1_DEC_REG(320, 2, 0x1)
+#define av1_pp_out_tile_e AV1_DEC_REG(320, 3, 0x1)
+#define av1_pp_status AV1_DEC_REG(320, 4, 0xf)
+#define av1_pp_in_blk_size AV1_DEC_REG(320, 8, 0x7)
+#define av1_pp_out_p010_fmt AV1_DEC_REG(320, 11, 0x3)
+#define av1_pp_out_rgb_fmt AV1_DEC_REG(320, 13, 0x1f)
+#define av1_rgb_range_max AV1_DEC_REG(320, 18, 0xfff)
+#define av1_pp_rgb_planar AV1_DEC_REG(320, 30, 0x1)
+
+#define av1_scale_hratio AV1_DEC_REG(322, 0, 0x3ffff)
+#define av1_pp_out_format AV1_DEC_REG(322, 18, 0x1f)
+#define av1_ver_scale_mode AV1_DEC_REG(322, 23, 0x3)
+#define av1_hor_scale_mode AV1_DEC_REG(322, 25, 0x3)
+#define av1_pp_in_format AV1_DEC_REG(322, 27, 0x1f)
+
+#define av1_pp_out_c_stride AV1_DEC_REG(329, 0, 0xffff)
+#define av1_pp_out_y_stride AV1_DEC_REG(329, 16, 0xffff)
+
+#define av1_pp_in_height AV1_DEC_REG(331, 0, 0xffff)
+#define av1_pp_in_width AV1_DEC_REG(331, 16, 0xffff)
+
+#define av1_pp_out_height AV1_DEC_REG(332, 0, 0xffff)
+#define av1_pp_out_width AV1_DEC_REG(332, 16, 0xffff)
+
+#define av1_pp1_dup_ver AV1_DEC_REG(394, 0, 0xff)
+#define av1_pp1_dup_hor AV1_DEC_REG(394, 8, 0xff)
+#define av1_pp0_dup_ver AV1_DEC_REG(394, 16, 0xff)
+#define av1_pp0_dup_hor AV1_DEC_REG(394, 24, 0xff)
+
+#define AV1_TILE_OUT_LU (AV1_SWREG(65))
+#define AV1_REFERENCE_Y(i) (AV1_SWREG(67) + ((i) * 0x8))
+#define AV1_SEGMENTATION (AV1_SWREG(81))
+#define AV1_GLOBAL_MODEL (AV1_SWREG(83))
+#define AV1_CDEF_COL (AV1_SWREG(85))
+#define AV1_SR_COL (AV1_SWREG(89))
+#define AV1_LR_COL (AV1_SWREG(91))
+#define AV1_FILM_GRAIN (AV1_SWREG(95))
+#define AV1_TILE_OUT_CH (AV1_SWREG(99))
+#define AV1_REFERENCE_CB(i) (AV1_SWREG(101) + ((i) * 0x8))
+#define AV1_TILE_OUT_MV (AV1_SWREG(133))
+#define AV1_REFERENCE_MV(i) (AV1_SWREG(135) + ((i) * 0x8))
+#define AV1_TILE_BASE (AV1_SWREG(167))
+#define AV1_INPUT_STREAM (AV1_SWREG(169))
+#define AV1_PROP_TABLE_OUT (AV1_SWREG(171))
+#define AV1_PROP_TABLE (AV1_SWREG(173))
+#define AV1_MC_SYNC_CURR (AV1_SWREG(175))
+#define AV1_MC_SYNC_LEFT (AV1_SWREG(177))
+#define AV1_DB_DATA_COL (AV1_SWREG(179))
+#define AV1_DB_CTRL_COL (AV1_SWREG(183))
+#define AV1_PP_OUT_LU (AV1_SWREG(326))
+#define AV1_PP_OUT_CH (AV1_SWREG(328))
+
+#endif /* _ROCKCHIP_VPU981_REGS_H_ */
--
2.34.1
Some comments: On 1/11/23 17:59, Benjamin Gaignard wrote: > Implement AV1 stateless decoder for rockchip VPU981. > It decode 8 and 10 bits AV1 bitstreams. > AV1 scaling feature is done by the postprocessor. > > Signed-off-by: Benjamin Gaignard <benjamin.gaignard@collabora.com> > --- > v3: > - Fix arrays loops limites. > - Remove unused field. > > drivers/media/platform/verisilicon/Makefile | 1 + > .../media/platform/verisilicon/hantro_hw.h | 64 +- > .../verisilicon/rockchip_vpu981_hw_av1_dec.c | 2065 +++++++++++++++++ > .../verisilicon/rockchip_vpu981_regs.h | 477 ++++ > 4 files changed, 2605 insertions(+), 2 deletions(-) > create mode 100644 drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c > create mode 100644 drivers/media/platform/verisilicon/rockchip_vpu981_regs.h > > diff --git a/drivers/media/platform/verisilicon/Makefile b/drivers/media/platform/verisilicon/Makefile > index d2b2679c00eb..c9a9806ab8c5 100644 > --- a/drivers/media/platform/verisilicon/Makefile > +++ b/drivers/media/platform/verisilicon/Makefile > @@ -18,6 +18,7 @@ hantro-vpu-y += \ > rockchip_vpu2_hw_h264_dec.o \ > rockchip_vpu2_hw_mpeg2_dec.o \ > rockchip_vpu2_hw_vp8_dec.o \ > + rockchip_vpu981_hw_av1_dec.o \ > rockchip_av1_entropymode.o \ > hantro_jpeg.o \ > hantro_h264.o \ > diff --git a/drivers/media/platform/verisilicon/hantro_hw.h b/drivers/media/platform/verisilicon/hantro_hw.h > index c7438e197d85..1741ef939bf8 100644 > --- a/drivers/media/platform/verisilicon/hantro_hw.h > +++ b/drivers/media/platform/verisilicon/hantro_hw.h > @@ -37,6 +37,8 @@ > > #define NUM_REF_PICTURES (V4L2_HEVC_DPB_ENTRIES_NUM_MAX + 1) > > +#define AV1_MAX_FRAME_BUF_COUNT (V4L2_AV1_TOTAL_REFS_PER_FRAME + 1) > + > struct hantro_dev; > struct hantro_ctx; > struct hantro_buf; > @@ -250,23 +252,81 @@ struct hantro_vp9_dec_hw_ctx { > }; > > /** > - * hantro_av1_dec_hw_ctx > + * struct hantro_av1_dec_ctrls > + * @sequence: AV1 Sequence > + * @tile_group_entry: AV1 Tile Group entry > + * @frame: AV1 Frame Header OBU > + * @film_grain: AV1 Film Grain > + */ > +struct hantro_av1_dec_ctrls { > + const struct v4l2_ctrl_av1_sequence *sequence; > + const struct v4l2_ctrl_av1_tile_group_entry *tile_group_entry; > + const struct v4l2_ctrl_av1_frame *frame; > + const struct v4l2_ctrl_av1_film_grain *film_grain; > +}; > + > +struct hantro_av1_frame_ref { > + int width; > + int height; > + int mi_cols; > + int mi_rows; > + u64 timestamp; > + enum v4l2_av1_frame_type frame_type; > + bool used; > + u32 order_hint; > + u32 order_hints[V4L2_AV1_TOTAL_REFS_PER_FRAME]; > + struct vb2_v4l2_buffer *vb2_ref; > +}; > + > +/** > + * struct hantro_av1_dec_hw_ctx > + * @db_data_col: db tile col data buffer > + * @db_ctrl_col: db tile col ctrl buffer > + * @cdef_col: cdef tile col buffer > + * @sr_col: sr tile col buffer > + * @lr_col: lr tile col buffer > + * @global_model: global model buffer > + * @tile_info: tile info buffer > + * @segment: segmentation info buffer > + * @prob_tbl: probability table > + * @prob_tbl_out: probability table output > + * @tile_buf: tile buffer > + * @ctrls: V4L2 controls attached to a run > + * @frame_refs: reference frames info slots > + * @ref_frame_sign_bias: array of sign bias > + * @num_tile_cols_allocated: number of allocated tiles > * @cdfs: current probabilities structure > * @cdfs_ndvc: current mv probabilities structure > * @default_cdfs: default probabilities structure > * @default_cdfs_ndvc: default mv probabilties structure > * @cdfs_last: stored probabilities structures > * @cdfs_last_ndvc: stored mv probabilities structures > + * @current_frame_index: index of the current in frame_refs array > */ > struct hantro_av1_dec_hw_ctx { > + struct hantro_aux_buf db_data_col; > + struct hantro_aux_buf db_ctrl_col; > + struct hantro_aux_buf cdef_col; > + struct hantro_aux_buf sr_col; > + struct hantro_aux_buf lr_col; > + struct hantro_aux_buf global_model; > + struct hantro_aux_buf tile_info; > + struct hantro_aux_buf segment; > + struct hantro_aux_buf prob_tbl; > + struct hantro_aux_buf prob_tbl_out; > + struct hantro_aux_buf tile_buf; > + struct hantro_av1_dec_ctrls ctrls; > + struct hantro_av1_frame_ref frame_refs[AV1_MAX_FRAME_BUF_COUNT]; > + uint32_t ref_frame_sign_bias[V4L2_AV1_TOTAL_REFS_PER_FRAME]; > + unsigned int num_tile_cols_allocated; > struct av1cdfs *cdfs; > struct mvcdfs *cdfs_ndvc; > struct av1cdfs default_cdfs; > struct mvcdfs default_cdfs_ndvc; > struct av1cdfs cdfs_last[NUM_REF_FRAMES]; > struct mvcdfs cdfs_last_ndvc[NUM_REF_FRAMES]; > + int current_frame_index; > }; > - > /** > * struct hantro_postproc_ctx > * > diff --git a/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c b/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c > new file mode 100644 > index 000000000000..81aeb1d6b93f > --- /dev/null > +++ b/drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c > @@ -0,0 +1,2065 @@ > +// SPDX-License-Identifier: GPL-2.0-only > +/* > + * Copyright (c) 2021, Collabora > + * > + * Author: Benjamin Gaignard <benjamin.gaignard@collabora.com> > + */ > + > +#include <media/v4l2-mem2mem.h> > +#include "hantro.h" > +#include "hantro_v4l2.h" > +#include "rockchip_vpu981_regs.h" > + > +#define AV1_DEC_MODE 17 > +#define GM_GLOBAL_MODELS_PER_FRAME 7 > +#define GLOBAL_MODEL_TOTAL_SIZE (6 * 4 + 4 * 2) > +#define GLOBAL_MODEL_SIZE ALIGN(GM_GLOBAL_MODELS_PER_FRAME * GLOBAL_MODEL_TOTAL_SIZE, 2048) > +#define AV1_MAX_TILES 128 > +#define AV1_TILE_INFO_SIZE (AV1_MAX_TILES * 16) > +#define AV1DEC_MAX_PIC_BUFFERS 24 > +#define AV1_REF_SCALE_SHIFT 14 > +#define AV1_INVALID_IDX -1 > +#define MAX_FRAME_DISTANCE 31 > +#define AV1_PRIMARY_REF_NONE 7 > +#define AV1_TILE_SIZE ALIGN(32 * 128, 4096) > +/* > + * These 3 values aren't defined enum v4l2_av1_segment_feature because > + * they are not part of the specification > + */ > +#define V4L2_AV1_SEG_LVL_ALT_LF_Y_H 2 > +#define V4L2_AV1_SEG_LVL_ALT_LF_U 3 > +#define V4L2_AV1_SEG_LVL_ALT_LF_V 4 > + > +#define SUPERRES_SCALE_BITS 3 > +#define SCALE_NUMERATOR 8 > +#define SUPERRES_SCALE_DENOMINATOR_MIN (SCALE_NUMERATOR + 1) > + > +#define RS_SUBPEL_BITS 6 > +#define RS_SUBPEL_MASK ((1 << RS_SUBPEL_BITS) - 1) > +#define RS_SCALE_SUBPEL_BITS 14 > +#define RS_SCALE_SUBPEL_MASK ((1 << RS_SCALE_SUBPEL_BITS) - 1) > +#define RS_SCALE_EXTRA_BITS (RS_SCALE_SUBPEL_BITS - RS_SUBPEL_BITS) > +#define RS_SCALE_EXTRA_OFF (1 << (RS_SCALE_EXTRA_BITS - 1)) > + > +#define IS_INTRA(type) ((type == V4L2_AV1_KEY_FRAME) || (type == V4L2_AV1_INTRA_ONLY_FRAME)) > + > +#define LST_BUF_IDX (V4L2_AV1_REF_LAST_FRAME - V4L2_AV1_REF_LAST_FRAME) > +#define LST2_BUF_IDX (V4L2_AV1_REF_LAST2_FRAME - V4L2_AV1_REF_LAST_FRAME) > +#define LST3_BUF_IDX (V4L2_AV1_REF_LAST3_FRAME - V4L2_AV1_REF_LAST_FRAME) > +#define GLD_BUF_IDX (V4L2_AV1_REF_GOLDEN_FRAME - V4L2_AV1_REF_LAST_FRAME) > +#define BWD_BUF_IDX (V4L2_AV1_REF_BWDREF_FRAME - V4L2_AV1_REF_LAST_FRAME) > +#define ALT2_BUF_IDX (V4L2_AV1_REF_ALTREF2_FRAME - V4L2_AV1_REF_LAST_FRAME) > +#define ALT_BUF_IDX (V4L2_AV1_REF_ALTREF_FRAME - V4L2_AV1_REF_LAST_FRAME) > + > +#define DIV_LUT_PREC_BITS 14 > +#define DIV_LUT_BITS 8 > +#define DIV_LUT_NUM BIT(DIV_LUT_BITS) > +#define WARP_PARAM_REDUCE_BITS 6 > +#define WARPEDMODEL_PREC_BITS 16 > + > +#define AV1_DIV_ROUND_UP_POW2(value, n) \ > +({ \ > + typeof(n) _n = n; \ > + typeof(value) _value = value; \ > + (_value + (BIT(_n) >> 1)) >> _n; \ > +}) > + > +#define AV1_DIV_ROUND_UP_POW2_SIGNED(value, n) \ > +({ \ > + typeof(n) _n_ = n; \ > + typeof(value) _value_ = value; \ > + (((_value_) < 0) ? -AV1_DIV_ROUND_UP_POW2(-(_value_), (_n_)) \ > + : AV1_DIV_ROUND_UP_POW2((_value_), (_n_))); \ > +}) > + > +struct rockchip_av1_film_grain { > + uint8_t scaling_lut_y[256]; > + uint8_t scaling_lut_cb[256]; > + uint8_t scaling_lut_cr[256]; > + int16_t cropped_luma_grain_block[4096]; > + int16_t cropped_chroma_grain_block[1024 * 2]; > +}; > + > +static const short div_lut[DIV_LUT_NUM + 1] = { > + 16384, 16320, 16257, 16194, 16132, 16070, 16009, 15948, 15888, 15828, 15768, > + 15709, 15650, 15592, 15534, 15477, 15420, 15364, 15308, 15252, 15197, 15142, > + 15087, 15033, 14980, 14926, 14873, 14821, 14769, 14717, 14665, 14614, 14564, > + 14513, 14463, 14413, 14364, 14315, 14266, 14218, 14170, 14122, 14075, 14028, > + 13981, 13935, 13888, 13843, 13797, 13752, 13707, 13662, 13618, 13574, 13530, > + 13487, 13443, 13400, 13358, 13315, 13273, 13231, 13190, 13148, 13107, 13066, > + 13026, 12985, 12945, 12906, 12866, 12827, 12788, 12749, 12710, 12672, 12633, > + 12596, 12558, 12520, 12483, 12446, 12409, 12373, 12336, 12300, 12264, 12228, > + 12193, 12157, 12122, 12087, 12053, 12018, 11984, 11950, 11916, 11882, 11848, > + 11815, 11782, 11749, 11716, 11683, 11651, 11619, 11586, 11555, 11523, 11491, > + 11460, 11429, 11398, 11367, 11336, 11305, 11275, 11245, 11215, 11185, 11155, > + 11125, 11096, 11067, 11038, 11009, 10980, 10951, 10923, 10894, 10866, 10838, > + 10810, 10782, 10755, 10727, 10700, 10673, 10645, 10618, 10592, 10565, 10538, > + 10512, 10486, 10460, 10434, 10408, 10382, 10356, 10331, 10305, 10280, 10255, > + 10230, 10205, 10180, 10156, 10131, 10107, 10082, 10058, 10034, 10010, 9986, > + 9963, 9939, 9916, 9892, 9869, 9846, 9823, 9800, 9777, 9754, 9732, > + 9709, 9687, 9664, 9642, 9620, 9598, 9576, 9554, 9533, 9511, 9489, > + 9468, 9447, 9425, 9404, 9383, 9362, 9341, 9321, 9300, 9279, 9259, > + 9239, 9218, 9198, 9178, 9158, 9138, 9118, 9098, 9079, 9059, 9039, > + 9020, 9001, 8981, 8962, 8943, 8924, 8905, 8886, 8867, 8849, 8830, > + 8812, 8793, 8775, 8756, 8738, 8720, 8702, 8684, 8666, 8648, 8630, > + 8613, 8595, 8577, 8560, 8542, 8525, 8508, 8490, 8473, 8456, 8439, > + 8422, 8405, 8389, 8372, 8355, 8339, 8322, 8306, 8289, 8273, 8257, > + 8240, 8224, 8208, 8192, > +}; > + > +static int rockchip_vpu981_get_frame_index(struct hantro_ctx *ctx, int ref) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + u64 timestamp; > + int i, idx = frame->ref_frame_idx[ref]; > + > + if (idx >= V4L2_AV1_TOTAL_REFS_PER_FRAME || idx < 0) > + return AV1_INVALID_IDX; > + > + timestamp = frame->reference_frame_ts[idx]; > + for (i = 0; i < AV1_MAX_FRAME_BUF_COUNT; i++) { > + if (!av1_dec->frame_refs[i].used) > + continue; > + if (av1_dec->frame_refs[i].timestamp == timestamp) > + return i; > + } > + > + return AV1_INVALID_IDX; > +} > + > +static int rockchip_vpu981_get_order_hint(struct hantro_ctx *ctx, int ref) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + int idx = rockchip_vpu981_get_frame_index(ctx, ref); > + > + if (idx != AV1_INVALID_IDX) > + return av1_dec->frame_refs[idx].order_hint; > + > + return 0; > +} > + > +static int rockchip_vpu981_av1_dec_frame_ref(struct hantro_ctx *ctx, > + u64 timestamp) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + int i; > + > + for (i = 0; i < AV1_MAX_FRAME_BUF_COUNT; i++) { I'd do: if (av1_dec->frame_refs[i].used) continue; > + if (!av1_dec->frame_refs[i].used) { > + int j; > + > + av1_dec->frame_refs[i].width = > + frame->frame_width_minus_1 + 1; > + av1_dec->frame_refs[i].height = > + frame->frame_height_minus_1 + 1; > + av1_dec->frame_refs[i].mi_cols = > + DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8); > + av1_dec->frame_refs[i].mi_rows = > + DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8); > + av1_dec->frame_refs[i].timestamp = timestamp; > + av1_dec->frame_refs[i].frame_type = frame->frame_type; > + av1_dec->frame_refs[i].order_hint = frame->order_hint; > + if (!av1_dec->frame_refs[i].vb2_ref) > + av1_dec->frame_refs[i].vb2_ref = hantro_get_dst_buf(ctx); > + > + for (j = 0; j < V4L2_AV1_TOTAL_REFS_PER_FRAME; j++) > + av1_dec->frame_refs[i].order_hints[j] = frame->order_hints[j]; > + > + av1_dec->frame_refs[i].used = true; > + av1_dec->current_frame_index = i; > + return i; That allows the remainder to be shifted on indent to the left. > + } > + } > + > + return AV1_INVALID_IDX; > +} > + > +static void rockchip_vpu981_av1_dec_frame_unref(struct hantro_ctx *ctx, int idx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + > + if (idx < 0) > + return; > + > + av1_dec->frame_refs[idx].used = false; This seems a bit overkill. Just write: if (idx >= 0) ctx->av1_dec.frame_refs[idx].used = false; > +} > + > +static void rockchip_vpu981_av1_dec_clean_refs(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + > + int ref, idx; > + > + for (idx = 0; idx < AV1_MAX_FRAME_BUF_COUNT; idx++) { > + u64 timestamp = av1_dec->frame_refs[idx].timestamp; > + bool used = false; > + > + if (!av1_dec->frame_refs[idx].used) > + continue; > + > + for (ref = 0; ref < V4L2_AV1_TOTAL_REFS_PER_FRAME; ref++) { > + if (ctrls->frame->reference_frame_ts[ref] == timestamp) > + used = true; > + } > + > + if (!used) > + rockchip_vpu981_av1_dec_frame_unref(ctx, idx); > + } > +} > + > +static size_t rockchip_vpu981_av1_dec_luma_size(struct hantro_ctx *ctx) > +{ > + return ctx->dst_fmt.width * ctx->dst_fmt.height * ctx->bit_depth / 8; > +} > + > +static size_t rockchip_vpu981_av1_dec_chroma_size(struct hantro_ctx *ctx) > +{ > + size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx); > + > + return ALIGN((cr_offset * 3) / 2, 64); > +} > + > +void rockchip_vpu981_av1_dec_tiles_free(struct hantro_ctx *ctx) > +{ > + struct hantro_dev *vpu = ctx->dev; > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + > + if (av1_dec->db_data_col.cpu) > + dma_free_coherent(vpu->dev, av1_dec->db_data_col.size, > + av1_dec->db_data_col.cpu, > + av1_dec->db_data_col.dma); > + av1_dec->db_data_col.cpu = NULL; > + > + if (av1_dec->db_ctrl_col.cpu) > + dma_free_coherent(vpu->dev, av1_dec->db_ctrl_col.size, > + av1_dec->db_ctrl_col.cpu, > + av1_dec->db_ctrl_col.dma); > + av1_dec->db_ctrl_col.cpu = NULL; > + > + if (av1_dec->cdef_col.cpu) > + dma_free_coherent(vpu->dev, av1_dec->cdef_col.size, > + av1_dec->cdef_col.cpu, av1_dec->cdef_col.dma); > + av1_dec->cdef_col.cpu = NULL; > + > + if (av1_dec->sr_col.cpu) > + dma_free_coherent(vpu->dev, av1_dec->sr_col.size, > + av1_dec->sr_col.cpu, av1_dec->sr_col.dma); > + av1_dec->sr_col.cpu = NULL; > + > + if (av1_dec->lr_col.cpu) > + dma_free_coherent(vpu->dev, av1_dec->lr_col.size, > + av1_dec->lr_col.cpu, av1_dec->lr_col.dma); > + av1_dec->lr_col.cpu = NULL; > +} > + > +static int rockchip_vpu981_av1_dec_tiles_reallocate(struct hantro_ctx *ctx) > +{ > + struct hantro_dev *vpu = ctx->dev; > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + unsigned int num_tile_cols = 1 << ctrls->tile_group_entry->tile_col; > + unsigned int height = ALIGN(ctrls->frame->frame_height_minus_1 + 1, 64); > + unsigned int height_in_sb = height / 64; > + unsigned int stripe_num = ((height + 8) + 63) / 64; > + size_t size; > + > + if (av1_dec->db_data_col.size >= > + ALIGN(height * 12 * ctx->bit_depth / 8, 128) * num_tile_cols) > + return 0; > + > + rockchip_vpu981_av1_dec_tiles_free(ctx); > + > + size = ALIGN(height * 12 * ctx->bit_depth / 8, 128) * num_tile_cols; > + av1_dec->db_data_col.cpu = dma_alloc_coherent(vpu->dev, size, > + &av1_dec->db_data_col.dma, > + GFP_KERNEL); > + if (!av1_dec->db_data_col.cpu) > + goto buffer_allocation_error; > + av1_dec->db_data_col.size = size; > + > + size = ALIGN(height * 2 * 16 / 4, 128) * num_tile_cols; > + av1_dec->db_ctrl_col.cpu = dma_alloc_coherent(vpu->dev, size, > + &av1_dec->db_ctrl_col.dma, > + GFP_KERNEL); > + if (!av1_dec->db_ctrl_col.cpu) > + goto buffer_allocation_error; > + av1_dec->db_ctrl_col.size = size; > + > + size = ALIGN(height_in_sb * 44 * ctx->bit_depth * 16 / 8, 128) * num_tile_cols; > + av1_dec->cdef_col.cpu = dma_alloc_coherent(vpu->dev, size, > + &av1_dec->cdef_col.dma, > + GFP_KERNEL); > + if (!av1_dec->cdef_col.cpu) > + goto buffer_allocation_error; > + av1_dec->cdef_col.size = size; > + > + size = ALIGN(height_in_sb * (3040 + 1280), 128) * num_tile_cols; > + av1_dec->sr_col.cpu = dma_alloc_coherent(vpu->dev, size, > + &av1_dec->sr_col.dma, > + GFP_KERNEL); > + if (!av1_dec->sr_col.cpu) > + goto buffer_allocation_error; > + av1_dec->sr_col.size = size; > + > + size = ALIGN(stripe_num * 1536 * ctx->bit_depth / 8, 128) * num_tile_cols; > + av1_dec->lr_col.cpu = dma_alloc_coherent(vpu->dev, size, > + &av1_dec->lr_col.dma, > + GFP_KERNEL); > + if (!av1_dec->lr_col.cpu) > + goto buffer_allocation_error; > + av1_dec->lr_col.size = size; > + > + av1_dec->num_tile_cols_allocated = num_tile_cols; > + return 0; > + > +buffer_allocation_error: > + rockchip_vpu981_av1_dec_tiles_free(ctx); > + return -ENOMEM; > +} > + > +void rockchip_vpu981_av1_dec_exit(struct hantro_ctx *ctx) > +{ > + struct hantro_dev *vpu = ctx->dev; > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + > + if (av1_dec->global_model.cpu) > + dma_free_coherent(vpu->dev, av1_dec->global_model.size, > + av1_dec->global_model.cpu, > + av1_dec->global_model.dma); > + av1_dec->global_model.cpu = NULL; > + > + if (av1_dec->tile_info.cpu) > + dma_free_coherent(vpu->dev, av1_dec->tile_info.size, > + av1_dec->tile_info.cpu, > + av1_dec->tile_info.dma); > + av1_dec->tile_info.cpu = NULL; > + > + if (av1_dec->prob_tbl.cpu) > + dma_free_coherent(vpu->dev, av1_dec->prob_tbl.size, > + av1_dec->prob_tbl.cpu, av1_dec->prob_tbl.dma); > + av1_dec->prob_tbl.cpu = NULL; > + > + if (av1_dec->prob_tbl_out.cpu) > + dma_free_coherent(vpu->dev, av1_dec->prob_tbl_out.size, > + av1_dec->prob_tbl_out.cpu, > + av1_dec->prob_tbl_out.dma); > + av1_dec->prob_tbl_out.cpu = NULL; > + > + if (av1_dec->tile_buf.cpu) > + dma_free_coherent(vpu->dev, av1_dec->tile_buf.size, > + av1_dec->tile_buf.cpu, av1_dec->tile_buf.dma); > + av1_dec->tile_buf.cpu = NULL; > + > + rockchip_vpu981_av1_dec_tiles_free(ctx); > +} > + > +int rockchip_vpu981_av1_dec_init(struct hantro_ctx *ctx) > +{ > + struct hantro_dev *vpu = ctx->dev; > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + > + memset(av1_dec, 0, sizeof(*av1_dec)); > + > + av1_dec->global_model.cpu = dma_alloc_coherent(vpu->dev, GLOBAL_MODEL_SIZE, > + &av1_dec->global_model.dma, > + GFP_KERNEL); > + if (!av1_dec->global_model.cpu) > + return -ENOMEM; > + av1_dec->global_model.size = GLOBAL_MODEL_SIZE; > + > + av1_dec->tile_info.cpu = dma_alloc_coherent(vpu->dev, AV1_MAX_TILES, > + &av1_dec->tile_info.dma, > + GFP_KERNEL); > + if (!av1_dec->tile_info.cpu) > + return -ENOMEM; > + av1_dec->tile_info.size = AV1_MAX_TILES; > + > + av1_dec->prob_tbl.cpu = dma_alloc_coherent(vpu->dev, > + ALIGN(sizeof(struct av1cdfs), 2048), > + &av1_dec->prob_tbl.dma, > + GFP_KERNEL); > + if (!av1_dec->prob_tbl.cpu) > + return -ENOMEM; > + av1_dec->prob_tbl.size = ALIGN(sizeof(struct av1cdfs), 2048); > + > + av1_dec->prob_tbl_out.cpu = dma_alloc_coherent(vpu->dev, > + ALIGN(sizeof(struct av1cdfs), 2048), > + &av1_dec->prob_tbl_out.dma, > + GFP_KERNEL); > + if (!av1_dec->prob_tbl_out.cpu) > + return -ENOMEM; > + av1_dec->prob_tbl_out.size = ALIGN(sizeof(struct av1cdfs), 2048); > + av1_dec->cdfs = &av1_dec->default_cdfs; > + av1_dec->cdfs_ndvc = &av1_dec->default_cdfs_ndvc; > + > + rockchip_av1_set_default_cdfs(av1_dec->cdfs, av1_dec->cdfs_ndvc); > + > + av1_dec->tile_buf.cpu = dma_alloc_coherent(vpu->dev, > + AV1_TILE_SIZE, > + &av1_dec->tile_buf.dma, > + GFP_KERNEL); > + if (!av1_dec->tile_buf.cpu) > + return -ENOMEM; > + av1_dec->tile_buf.size = AV1_TILE_SIZE; > + > + return 0; > +} > + > +static int rockchip_vpu981_av1_dec_prepare_run(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + > + ctrls->sequence = hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_SEQUENCE); > + if (WARN_ON(!ctrls->sequence)) > + return -EINVAL; > + > + ctrls->tile_group_entry = > + hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_TILE_GROUP_ENTRY); > + if (WARN_ON(!ctrls->tile_group_entry)) > + return -EINVAL; > + > + ctrls->frame = hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_FRAME); > + if (WARN_ON(!ctrls->frame)) > + return -EINVAL; > + > + ctrls->film_grain = > + hantro_get_ctrl(ctx, V4L2_CID_STATELESS_AV1_FILM_GRAIN); > + > + return rockchip_vpu981_av1_dec_tiles_reallocate(ctx); > +} > + > +static inline int rockchip_vpu981_av1_dec_get_msb(u32 n) > +{ > + if (n == 0) > + return 0; > + return 31 ^ __builtin_clz(n); > +} > + > +static short rockchip_vpu981_av1_dec_resolve_divisor_32(u32 d, short *shift) > +{ > + int f; > + uint64_t e; > + > + *shift = rockchip_vpu981_av1_dec_get_msb(d); > + /* e is obtained from D after resetting the most significant 1 bit. */ > + e = d - ((u32)1 << *shift); > + /* Get the most significant DIV_LUT_BITS (8) bits of e into f */ > + if (*shift > DIV_LUT_BITS) > + f = AV1_DIV_ROUND_UP_POW2(e, *shift - DIV_LUT_BITS); > + else > + f = e << (DIV_LUT_BITS - *shift); > + if (f > DIV_LUT_NUM) > + return -1; > + *shift += DIV_LUT_PREC_BITS; > + /* Use f as lookup into the precomputed table of multipliers */ > + return div_lut[f]; > +} > + > +static void rockchip_vpu981_av1_dec_get_shear_params(const uint32_t *params, > + int64_t *alpha, int64_t *beta, int64_t *gamma, int64_t *delta) Use u32 and s64 instead of uint32_t and int64_t. If these types are used elsewhere as well, please change them. Run 'checkpatch.pl --strict' for these patches, and fix the issues (like this) that it reports where it makes sense. > +{ > + const int *mat = params; > + short shift; > + short y; > + long long gv, dv; > + > + if (mat[2] <= 0) > + return; > + > + *alpha = clamp_val(mat[2] - (1 << WARPEDMODEL_PREC_BITS), S16_MIN, S16_MAX); > + *beta = clamp_val(mat[3], S16_MIN, S16_MAX); > + > + y = rockchip_vpu981_av1_dec_resolve_divisor_32(abs(mat[2]), &shift) * (mat[2] < 0 ? -1 : 1); > + > + gv = ((long long)mat[4] * (1 << WARPEDMODEL_PREC_BITS)) * y; > + > + *gamma = clamp_val((int)AV1_DIV_ROUND_UP_POW2_SIGNED(gv, shift), S16_MIN, S16_MAX); > + > + dv = ((long long)mat[3] * mat[4]) * y; > + *delta = clamp_val( > + mat[5] - > + (int)AV1_DIV_ROUND_UP_POW2_SIGNED(dv, shift) - (1 << WARPEDMODEL_PREC_BITS), > + S16_MIN, S16_MAX); > + > + *alpha = AV1_DIV_ROUND_UP_POW2_SIGNED(*alpha, WARP_PARAM_REDUCE_BITS) > + * (1 << WARP_PARAM_REDUCE_BITS); > + *beta = AV1_DIV_ROUND_UP_POW2_SIGNED(*beta, WARP_PARAM_REDUCE_BITS) > + * (1 << WARP_PARAM_REDUCE_BITS); > + *gamma = AV1_DIV_ROUND_UP_POW2_SIGNED(*gamma, WARP_PARAM_REDUCE_BITS) > + * (1 << WARP_PARAM_REDUCE_BITS); > + *delta = AV1_DIV_ROUND_UP_POW2_SIGNED(*delta, WARP_PARAM_REDUCE_BITS) > + * (1 << WARP_PARAM_REDUCE_BITS); > +} > + > +static void rockchip_vpu981_av1_dec_set_global_model(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + const struct v4l2_av1_global_motion *gm = &frame->global_motion; > + uint8_t *dst = av1_dec->global_model.cpu; > + struct hantro_dev *vpu = ctx->dev; > + int ref_frame, i; > + > + memset(dst, 0, GLOBAL_MODEL_SIZE); > + for (ref_frame = 0; ref_frame < V4L2_AV1_REFS_PER_FRAME; ++ref_frame) { > + int64_t alpha = 0, beta = 0, gamma = 0, delta = 0; > + > + for (i = 0; i < 6; ++i) { > + if (i == 2) > + *(int32_t *)dst = > + gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][3]; > + else if (i == 3) > + *(int32_t *)dst = > + gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][2]; > + else > + *(int32_t *)dst = > + gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][i]; > + dst += 4; > + } > + > + if (gm->type[V4L2_AV1_REF_LAST_FRAME + ref_frame] <= V4L2_AV1_WARP_MODEL_AFFINE) > + rockchip_vpu981_av1_dec_get_shear_params( > + &gm->params[V4L2_AV1_REF_LAST_FRAME + ref_frame][0], > + &alpha, &beta, &gamma, &delta); > + > + *(int16_t *)dst = alpha; > + dst += 2; > + *(int16_t *)dst = beta; > + dst += 2; > + *(int16_t *)dst = gamma; > + dst += 2; > + *(int16_t *)dst = delta; > + dst += 2; > + } > + > + hantro_write_addr(vpu, AV1_GLOBAL_MODEL, av1_dec->global_model.dma); > +} > + > +static void rockchip_vpu981_av1_dec_set_tile_info(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + struct v4l2_av1_tile_info tile_info = ctrls->frame->tile_info; > + const struct v4l2_ctrl_av1_tile_group_entry *group_entry = > + ctrls->tile_group_entry; > + int context_update_y = > + tile_info.context_update_tile_id / tile_info.tile_cols; > + int context_update_x = > + tile_info.context_update_tile_id % tile_info.tile_cols; > + int context_update_tile_id = > + context_update_x * tile_info.tile_rows + context_update_y; > + uint8_t *dst = av1_dec->tile_info.cpu; > + struct hantro_dev *vpu = ctx->dev; > + int tile0, tile1; > + > + memset(dst, 0, av1_dec->tile_info.size); > + > + for (tile0 = 0; tile0 < tile_info.tile_cols; tile0++) { > + for (tile1 = 0; tile1 < tile_info.tile_rows; tile1++) { > + int tile_id = tile1 * tile_info.tile_cols + tile0; > + uint32_t start, end; > + uint32_t y0 = > + tile_info.height_in_sbs_minus_1[tile1] + 1; > + uint32_t x0 = tile_info.width_in_sbs_minus_1[tile0] + 1; > + > + // tile size in SB units (width,height) > + *dst++ = x0; > + *dst++ = 0; > + *dst++ = 0; > + *dst++ = 0; > + *dst++ = y0; > + *dst++ = 0; > + *dst++ = 0; > + *dst++ = 0; > + > + // tile start position > + start = group_entry[tile_id].tile_offset - group_entry[0].tile_offset; > + *dst++ = start & 255; > + *dst++ = (start >> 8) & 255; > + *dst++ = (start >> 16) & 255; > + *dst++ = (start >> 24) & 255; > + > + // # of bytes in tile data > + end = start + group_entry[tile_id].tile_size; > + *dst++ = end & 255; > + *dst++ = (end >> 8) & 255; > + *dst++ = (end >> 16) & 255; > + *dst++ = (end >> 24) & 255; > + } > + } > + > + hantro_reg_write(vpu, &av1_multicore_expect_context_update, > + !!(context_update_x == 0)); > + hantro_reg_write(vpu, &av1_tile_enable, !!((tile_info.tile_cols > 1) > + || (tile_info.tile_rows > 1))); > + hantro_reg_write(vpu, &av1_num_tile_cols_8k, tile_info.tile_cols); > + hantro_reg_write(vpu, &av1_num_tile_rows_8k, tile_info.tile_rows); > + hantro_reg_write(vpu, &av1_context_update_tile_id, > + context_update_tile_id); > + hantro_reg_write(vpu, &av1_tile_transpose, 1); > + if (context_update_tile_id) { > + hantro_reg_write(vpu, &av1_dec_tile_size_mag, > + tile_info.tile_size_bytes); > + } else > + hantro_reg_write(vpu, &av1_dec_tile_size_mag, 3); > + > + hantro_write_addr(vpu, AV1_TILE_BASE, av1_dec->tile_info.dma); > +} > + > +static int rockchip_vpu981_av1_dec_get_relative_dist(struct hantro_ctx *ctx, > + int a, int b) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + int bits = ctrls->sequence->order_hint_bits - 1; > + int diff, m; > + > + if (!ctrls->sequence->order_hint_bits) > + return 0; > + > + diff = a - b; > + m = 1 << bits; > + diff = (diff & (m - 1)) - (diff & m); > + > + return diff; > +} > + > +static void rockchip_vpu981_av1_dec_set_frame_sign_bias(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + const struct v4l2_ctrl_av1_sequence *sequence = ctrls->sequence; > + int i; > + > + if (!sequence->order_hint_bits || IS_INTRA(frame->frame_type)) { > + for (i = 0; i < V4L2_AV1_TOTAL_REFS_PER_FRAME; i++) > + av1_dec->ref_frame_sign_bias[i] = 0; > + > + return; > + } > + // Identify the nearest forward and backward references. > + for (i = 0; i < V4L2_AV1_TOTAL_REFS_PER_FRAME - 1; i++) { > + if (rockchip_vpu981_get_frame_index(ctx, i) >= 0) { > + int rel_off = > + rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rockchip_vpu981_get_order_hint > + (ctx, i), > + frame->order_hint); > + av1_dec->ref_frame_sign_bias[i + 1] = (rel_off <= 0) ? 0 : 1; > + } > + } > +} > + > +static bool > +rockchip_vpu981_av1_dec_set_ref(struct hantro_ctx *ctx, int ref, int idx, > + int width, int height) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + struct hantro_dev *vpu = ctx->dev; > + struct hantro_decoded_buffer *dst; > + dma_addr_t luma_addr, chroma_addr, mv_addr = 0; > + size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx); > + size_t mv_offset = rockchip_vpu981_av1_dec_chroma_size(ctx); > + int cur_width = frame->frame_width_minus_1 + 1; > + int cur_height = frame->frame_height_minus_1 + 1; > + int scale_width = > + ((width << AV1_REF_SCALE_SHIFT) + cur_width / 2) / cur_width; > + int scale_height = > + ((height << AV1_REF_SCALE_SHIFT) + cur_height / 2) / cur_height; > + > + switch (ref) { > + case 0: > + hantro_reg_write(vpu, &av1_ref0_height, height); > + hantro_reg_write(vpu, &av1_ref0_width, width); > + hantro_reg_write(vpu, &av1_ref0_ver_scale, scale_width); > + hantro_reg_write(vpu, &av1_ref0_hor_scale, scale_height); > + break; > + case 1: > + hantro_reg_write(vpu, &av1_ref1_height, height); > + hantro_reg_write(vpu, &av1_ref1_width, width); > + hantro_reg_write(vpu, &av1_ref1_ver_scale, scale_width); > + hantro_reg_write(vpu, &av1_ref1_hor_scale, scale_height); > + break; > + case 2: > + hantro_reg_write(vpu, &av1_ref2_height, height); > + hantro_reg_write(vpu, &av1_ref2_width, width); > + hantro_reg_write(vpu, &av1_ref2_ver_scale, scale_width); > + hantro_reg_write(vpu, &av1_ref2_hor_scale, scale_height); > + break; > + case 3: > + hantro_reg_write(vpu, &av1_ref3_height, height); > + hantro_reg_write(vpu, &av1_ref3_width, width); > + hantro_reg_write(vpu, &av1_ref3_ver_scale, scale_width); > + hantro_reg_write(vpu, &av1_ref3_hor_scale, scale_height); > + break; > + case 4: > + hantro_reg_write(vpu, &av1_ref4_height, height); > + hantro_reg_write(vpu, &av1_ref4_width, width); > + hantro_reg_write(vpu, &av1_ref4_ver_scale, scale_width); > + hantro_reg_write(vpu, &av1_ref4_hor_scale, scale_height); > + break; > + case 5: > + hantro_reg_write(vpu, &av1_ref5_height, height); > + hantro_reg_write(vpu, &av1_ref5_width, width); > + hantro_reg_write(vpu, &av1_ref5_ver_scale, scale_width); > + hantro_reg_write(vpu, &av1_ref5_hor_scale, scale_height); > + break; > + case 6: > + hantro_reg_write(vpu, &av1_ref6_height, height); > + hantro_reg_write(vpu, &av1_ref6_width, width); > + hantro_reg_write(vpu, &av1_ref6_ver_scale, scale_width); > + hantro_reg_write(vpu, &av1_ref6_hor_scale, scale_height); > + break; > + default: > + pr_warn("AV1 invalid reference frame index\n"); > + } > + > + dst = vb2_to_hantro_decoded_buf(&av1_dec->frame_refs[idx].vb2_ref->vb2_buf); > + luma_addr = hantro_get_dec_buf_addr(ctx, &dst->base.vb.vb2_buf); > + chroma_addr = luma_addr + cr_offset; > + mv_addr = luma_addr + mv_offset; > + > + hantro_write_addr(vpu, AV1_REFERENCE_Y(ref), luma_addr); > + hantro_write_addr(vpu, AV1_REFERENCE_CB(ref), chroma_addr); > + hantro_write_addr(vpu, AV1_REFERENCE_MV(ref), mv_addr); > + > + return (scale_width != (1 << AV1_REF_SCALE_SHIFT)) > + || (scale_height != (1 << AV1_REF_SCALE_SHIFT)); > +} > + > +static void rockchip_vpu981_av1_dec_set_sign_bias(struct hantro_ctx *ctx, > + int ref, int val) > +{ > + struct hantro_dev *vpu = ctx->dev; > + > + switch (ref) { > + case 0: > + hantro_reg_write(vpu, &av1_ref0_sign_bias, val); > + break; > + case 1: > + hantro_reg_write(vpu, &av1_ref1_sign_bias, val); > + break; > + case 2: > + hantro_reg_write(vpu, &av1_ref2_sign_bias, val); > + break; > + case 3: > + hantro_reg_write(vpu, &av1_ref3_sign_bias, val); > + break; > + case 4: > + hantro_reg_write(vpu, &av1_ref4_sign_bias, val); > + break; > + case 5: > + hantro_reg_write(vpu, &av1_ref5_sign_bias, val); > + break; > + case 6: > + hantro_reg_write(vpu, &av1_ref6_sign_bias, val); > + break; > + default: > + pr_warn("AV1 invalid sign bias index\n"); > + break; > + } > +} > + > +static void rockchip_vpu981_av1_dec_set_segmentation(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + const struct v4l2_av1_segmentation *seg = &frame->segmentation; > + uint32_t segval[V4L2_AV1_MAX_SEGMENTS][V4L2_AV1_SEG_LVL_MAX] = { 0 }; > + struct hantro_dev *vpu = ctx->dev; > + uint8_t segsign = 0, preskip_segid = 0, last_active_seg = 0, i, j; > + > + if (!!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED) > + && (frame->primary_ref_frame < V4L2_AV1_REFS_PER_FRAME)) { > + int idx = rockchip_vpu981_get_frame_index(ctx, frame->primary_ref_frame); > + > + if (idx >= 0) { > + dma_addr_t luma_addr, chroma_addr, mv_addr = 0; > + size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx); > + size_t mv_offset = rockchip_vpu981_av1_dec_chroma_size(ctx); > + > + luma_addr = > + hantro_get_dec_buf_addr(ctx, > + &av1_dec->frame_refs[idx].vb2_ref->vb2_buf); > + chroma_addr = luma_addr + cr_offset; > + mv_addr = luma_addr + mv_offset; > + > + hantro_write_addr(vpu, AV1_SEGMENTATION, mv_addr); > + hantro_reg_write(vpu, &av1_use_temporal3_mvs, 1); > + } > + } > + > + hantro_reg_write(vpu, &av1_segment_temp_upd_e, > + !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_TEMPORAL_UPDATE)); > + hantro_reg_write(vpu, &av1_segment_upd_e, > + !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_UPDATE_MAP)); > + hantro_reg_write(vpu, &av1_segment_e, > + !!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED)); > + > + hantro_reg_write(vpu, &av1_error_resilient, > + !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE)); > + > + if (IS_INTRA(frame->frame_type) > + || !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE)) { > + hantro_reg_write(vpu, &av1_use_temporal3_mvs, 0); > + } > + > + if (!!(seg->flags & V4L2_AV1_SEGMENTATION_FLAG_ENABLED)) { Why '!!'? > + int s; > + > + for (s = 0; s < V4L2_AV1_MAX_SEGMENTS; s++) { > + if (seg->feature_enabled[s] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_Q)) { > + segval[s][V4L2_AV1_SEG_LVL_ALT_Q] = > + clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_Q]), > + 0, 255); > + segsign |= > + (seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_Q] < 0) << s; > + } > + > + if (seg->feature_enabled[s] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_LF_Y_V)) > + segval[s][V4L2_AV1_SEG_LVL_ALT_LF_Y_V] = > + clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]), > + -63, 63); > + > + if (seg->feature_enabled[s] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_LF_Y_H)) > + segval[s][V4L2_AV1_SEG_LVL_ALT_LF_Y_H] = > + clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]), > + -63, 63); > + > + if (seg->feature_enabled[s] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_LF_U)) > + segval[s][V4L2_AV1_SEG_LVL_ALT_LF_U] = > + clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_LF_U]), > + -63, 63); > + > + if (seg->feature_enabled[s] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_LF_V)) > + segval[s][V4L2_AV1_SEG_LVL_ALT_LF_V] = > + clamp(abs(seg->feature_data[s][V4L2_AV1_SEG_LVL_ALT_LF_V]), > + -63, 63); > + > + if (frame->frame_type && seg->feature_enabled[s] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_REF_FRAME)) > + segval[s][V4L2_AV1_SEG_LVL_REF_FRAME]++; > + > + if (seg->feature_enabled[s] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_REF_SKIP)) > + segval[s][V4L2_AV1_SEG_LVL_REF_SKIP] = 1; > + > + if (seg->feature_enabled[s] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_REF_GLOBALMV)) > + segval[s][V4L2_AV1_SEG_LVL_REF_GLOBALMV] = 1; > + } > + } > + > + for (i = 0; i < V4L2_AV1_MAX_SEGMENTS; i++) { > + for (j = 0; j < V4L2_AV1_SEG_LVL_MAX; j++) { > + if (seg->feature_enabled[i] > + & V4L2_AV1_SEGMENT_FEATURE_ENABLED(j)) { > + preskip_segid |= (j >= V4L2_AV1_SEG_LVL_REF_FRAME); > + last_active_seg = max(i, last_active_seg); > + } > + } > + } > + > + hantro_reg_write(vpu, &av1_last_active_seg, last_active_seg); > + hantro_reg_write(vpu, &av1_preskip_segid, preskip_segid); > + > + hantro_reg_write(vpu, &av1_seg_quant_sign, segsign); > + > + /* Write QP, filter level, ref frame and skip for every segment */ > + hantro_reg_write(vpu, &av1_quant_seg0, > + segval[0][V4L2_AV1_SEG_LVL_ALT_Q]); > + hantro_reg_write(vpu, &av1_filt_level_delta0_seg0, > + segval[0][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]); > + hantro_reg_write(vpu, &av1_filt_level_delta1_seg0, > + segval[0][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]); > + hantro_reg_write(vpu, &av1_filt_level_delta2_seg0, > + segval[0][V4L2_AV1_SEG_LVL_ALT_LF_U]); > + hantro_reg_write(vpu, &av1_filt_level_delta3_seg0, > + segval[0][V4L2_AV1_SEG_LVL_ALT_LF_V]); > + hantro_reg_write(vpu, &av1_refpic_seg0, > + segval[0][V4L2_AV1_SEG_LVL_REF_FRAME]); > + hantro_reg_write(vpu, &av1_skip_seg0, > + segval[0][V4L2_AV1_SEG_LVL_REF_SKIP]); > + hantro_reg_write(vpu, &av1_global_mv_seg0, > + segval[0][V4L2_AV1_SEG_LVL_REF_GLOBALMV]); > + > + hantro_reg_write(vpu, &av1_quant_seg1, > + segval[1][V4L2_AV1_SEG_LVL_ALT_Q]); > + hantro_reg_write(vpu, &av1_filt_level_delta0_seg1, > + segval[1][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]); > + hantro_reg_write(vpu, &av1_filt_level_delta1_seg1, > + segval[1][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]); > + hantro_reg_write(vpu, &av1_filt_level_delta2_seg1, > + segval[1][V4L2_AV1_SEG_LVL_ALT_LF_U]); > + hantro_reg_write(vpu, &av1_filt_level_delta3_seg1, > + segval[1][V4L2_AV1_SEG_LVL_ALT_LF_V]); > + hantro_reg_write(vpu, &av1_refpic_seg1, > + segval[1][V4L2_AV1_SEG_LVL_REF_FRAME]); > + hantro_reg_write(vpu, &av1_skip_seg1, > + segval[1][V4L2_AV1_SEG_LVL_REF_SKIP]); > + hantro_reg_write(vpu, &av1_global_mv_seg1, > + segval[1][V4L2_AV1_SEG_LVL_REF_GLOBALMV]); > + > + hantro_reg_write(vpu, &av1_quant_seg2, > + segval[2][V4L2_AV1_SEG_LVL_ALT_Q]); > + hantro_reg_write(vpu, &av1_filt_level_delta0_seg2, > + segval[2][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]); > + hantro_reg_write(vpu, &av1_filt_level_delta1_seg2, > + segval[2][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]); > + hantro_reg_write(vpu, &av1_filt_level_delta2_seg2, > + segval[2][V4L2_AV1_SEG_LVL_ALT_LF_U]); > + hantro_reg_write(vpu, &av1_filt_level_delta3_seg2, > + segval[2][V4L2_AV1_SEG_LVL_ALT_LF_V]); > + hantro_reg_write(vpu, &av1_refpic_seg2, > + segval[2][V4L2_AV1_SEG_LVL_REF_FRAME]); > + hantro_reg_write(vpu, &av1_skip_seg2, > + segval[2][V4L2_AV1_SEG_LVL_REF_SKIP]); > + hantro_reg_write(vpu, &av1_global_mv_seg2, > + segval[2][V4L2_AV1_SEG_LVL_REF_GLOBALMV]); > + > + hantro_reg_write(vpu, &av1_quant_seg3, > + segval[3][V4L2_AV1_SEG_LVL_ALT_Q]); > + hantro_reg_write(vpu, &av1_filt_level_delta0_seg3, > + segval[3][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]); > + hantro_reg_write(vpu, &av1_filt_level_delta1_seg3, > + segval[3][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]); > + hantro_reg_write(vpu, &av1_filt_level_delta2_seg3, > + segval[3][V4L2_AV1_SEG_LVL_ALT_LF_U]); > + hantro_reg_write(vpu, &av1_filt_level_delta3_seg3, > + segval[3][V4L2_AV1_SEG_LVL_ALT_LF_V]); > + hantro_reg_write(vpu, &av1_refpic_seg3, > + segval[3][V4L2_AV1_SEG_LVL_REF_FRAME]); > + hantro_reg_write(vpu, &av1_skip_seg3, > + segval[3][V4L2_AV1_SEG_LVL_REF_SKIP]); > + hantro_reg_write(vpu, &av1_global_mv_seg3, > + segval[3][V4L2_AV1_SEG_LVL_REF_GLOBALMV]); > + > + hantro_reg_write(vpu, &av1_quant_seg4, > + segval[4][V4L2_AV1_SEG_LVL_ALT_Q]); > + hantro_reg_write(vpu, &av1_filt_level_delta0_seg4, > + segval[4][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]); > + hantro_reg_write(vpu, &av1_filt_level_delta1_seg4, > + segval[4][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]); > + hantro_reg_write(vpu, &av1_filt_level_delta2_seg4, > + segval[4][V4L2_AV1_SEG_LVL_ALT_LF_U]); > + hantro_reg_write(vpu, &av1_filt_level_delta3_seg4, > + segval[4][V4L2_AV1_SEG_LVL_ALT_LF_V]); > + hantro_reg_write(vpu, &av1_refpic_seg4, > + segval[4][V4L2_AV1_SEG_LVL_REF_FRAME]); > + hantro_reg_write(vpu, &av1_skip_seg4, > + segval[4][V4L2_AV1_SEG_LVL_REF_SKIP]); > + hantro_reg_write(vpu, &av1_global_mv_seg4, > + segval[4][V4L2_AV1_SEG_LVL_REF_GLOBALMV]); > + > + hantro_reg_write(vpu, &av1_quant_seg5, > + segval[5][V4L2_AV1_SEG_LVL_ALT_Q]); > + hantro_reg_write(vpu, &av1_filt_level_delta0_seg5, > + segval[5][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]); > + hantro_reg_write(vpu, &av1_filt_level_delta1_seg5, > + segval[5][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]); > + hantro_reg_write(vpu, &av1_filt_level_delta2_seg5, > + segval[5][V4L2_AV1_SEG_LVL_ALT_LF_U]); > + hantro_reg_write(vpu, &av1_filt_level_delta3_seg5, > + segval[5][V4L2_AV1_SEG_LVL_ALT_LF_V]); > + hantro_reg_write(vpu, &av1_refpic_seg5, > + segval[5][V4L2_AV1_SEG_LVL_REF_FRAME]); > + hantro_reg_write(vpu, &av1_skip_seg5, > + segval[5][V4L2_AV1_SEG_LVL_REF_SKIP]); > + hantro_reg_write(vpu, &av1_global_mv_seg5, > + segval[5][V4L2_AV1_SEG_LVL_REF_GLOBALMV]); > + > + hantro_reg_write(vpu, &av1_quant_seg6, > + segval[6][V4L2_AV1_SEG_LVL_ALT_Q]); > + hantro_reg_write(vpu, &av1_filt_level_delta0_seg6, > + segval[6][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]); > + hantro_reg_write(vpu, &av1_filt_level_delta1_seg6, > + segval[6][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]); > + hantro_reg_write(vpu, &av1_filt_level_delta2_seg6, > + segval[6][V4L2_AV1_SEG_LVL_ALT_LF_U]); > + hantro_reg_write(vpu, &av1_filt_level_delta3_seg6, > + segval[6][V4L2_AV1_SEG_LVL_ALT_LF_V]); > + hantro_reg_write(vpu, &av1_refpic_seg6, > + segval[6][V4L2_AV1_SEG_LVL_REF_FRAME]); > + hantro_reg_write(vpu, &av1_skip_seg6, > + segval[6][V4L2_AV1_SEG_LVL_REF_SKIP]); > + hantro_reg_write(vpu, &av1_global_mv_seg6, > + segval[6][V4L2_AV1_SEG_LVL_REF_GLOBALMV]); > + > + hantro_reg_write(vpu, &av1_quant_seg7, > + segval[7][V4L2_AV1_SEG_LVL_ALT_Q]); > + hantro_reg_write(vpu, &av1_filt_level_delta0_seg7, > + segval[7][V4L2_AV1_SEG_LVL_ALT_LF_Y_V]); > + hantro_reg_write(vpu, &av1_filt_level_delta1_seg7, > + segval[7][V4L2_AV1_SEG_LVL_ALT_LF_Y_H]); > + hantro_reg_write(vpu, &av1_filt_level_delta2_seg7, > + segval[7][V4L2_AV1_SEG_LVL_ALT_LF_U]); > + hantro_reg_write(vpu, &av1_filt_level_delta3_seg7, > + segval[7][V4L2_AV1_SEG_LVL_ALT_LF_V]); > + hantro_reg_write(vpu, &av1_refpic_seg7, > + segval[7][V4L2_AV1_SEG_LVL_REF_FRAME]); > + hantro_reg_write(vpu, &av1_skip_seg7, > + segval[7][V4L2_AV1_SEG_LVL_REF_SKIP]); > + hantro_reg_write(vpu, &av1_global_mv_seg7, > + segval[7][V4L2_AV1_SEG_LVL_REF_GLOBALMV]); > +} > + > +static bool rockchip_vpu981_av1_dec_is_lossless(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + const struct v4l2_av1_segmentation *segmentation = &frame->segmentation; > + const struct v4l2_av1_quantization *quantization = &frame->quantization; > + int i; > + > + for (i = 0; i < V4L2_AV1_MAX_SEGMENTS; i++) { > + int qindex = quantization->base_q_idx; > + > + if (segmentation->feature_enabled[i] & > + V4L2_AV1_SEGMENT_FEATURE_ENABLED(V4L2_AV1_SEG_LVL_ALT_Q)) { > + qindex += segmentation->feature_data[i][V4L2_AV1_SEG_LVL_ALT_Q]; > + } > + qindex = clamp(qindex, 0, 255); > + > + if (qindex > + || quantization->delta_q_y_dc > + || quantization->delta_q_u_dc > + || quantization->delta_q_u_ac > + || quantization->delta_q_v_dc || quantization->delta_q_v_ac) > + return false; > + } > + return true; > +} > + > +static void rockchip_vpu981_av1_dec_set_loopfilter(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + const struct v4l2_av1_loop_filter *loop_filter = &frame->loop_filter; > + bool filtering_dis = (loop_filter->level[0] == 0) > + && (loop_filter->level[1] == 0); > + struct hantro_dev *vpu = ctx->dev; > + > + hantro_reg_write(vpu, &av1_filtering_dis, filtering_dis); > + hantro_reg_write(vpu, &av1_filt_level_base_gt32, loop_filter->level[0] > 32); > + hantro_reg_write(vpu, &av1_filt_sharpness, loop_filter->sharpness); > + > + hantro_reg_write(vpu, &av1_filt_level0, loop_filter->level[0]); > + hantro_reg_write(vpu, &av1_filt_level1, loop_filter->level[1]); > + hantro_reg_write(vpu, &av1_filt_level2, loop_filter->level[2]); > + hantro_reg_write(vpu, &av1_filt_level3, loop_filter->level[3]); > + > + if (loop_filter->flags & V4L2_AV1_LOOP_FILTER_FLAG_DELTA_ENABLED > + && !rockchip_vpu981_av1_dec_is_lossless(ctx) > + && !(frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC)) { > + hantro_reg_write(vpu, &av1_filt_ref_adj_0, > + loop_filter->ref_deltas[0]); > + hantro_reg_write(vpu, &av1_filt_ref_adj_1, > + loop_filter->ref_deltas[1]); > + hantro_reg_write(vpu, &av1_filt_ref_adj_2, > + loop_filter->ref_deltas[2]); > + hantro_reg_write(vpu, &av1_filt_ref_adj_3, > + loop_filter->ref_deltas[3]); > + hantro_reg_write(vpu, &av1_filt_ref_adj_4, > + loop_filter->ref_deltas[4]); > + hantro_reg_write(vpu, &av1_filt_ref_adj_5, > + loop_filter->ref_deltas[5]); > + hantro_reg_write(vpu, &av1_filt_ref_adj_6, > + loop_filter->ref_deltas[6]); > + hantro_reg_write(vpu, &av1_filt_ref_adj_7, > + loop_filter->ref_deltas[7]); > + hantro_reg_write(vpu, &av1_filt_mb_adj_0, > + loop_filter->mode_deltas[0]); > + hantro_reg_write(vpu, &av1_filt_mb_adj_1, > + loop_filter->mode_deltas[1]); > + } else { > + hantro_reg_write(vpu, &av1_filt_ref_adj_0, 0); > + hantro_reg_write(vpu, &av1_filt_ref_adj_1, 0); > + hantro_reg_write(vpu, &av1_filt_ref_adj_2, 0); > + hantro_reg_write(vpu, &av1_filt_ref_adj_3, 0); > + hantro_reg_write(vpu, &av1_filt_ref_adj_4, 0); > + hantro_reg_write(vpu, &av1_filt_ref_adj_5, 0); > + hantro_reg_write(vpu, &av1_filt_ref_adj_6, 0); > + hantro_reg_write(vpu, &av1_filt_ref_adj_7, 0); > + hantro_reg_write(vpu, &av1_filt_mb_adj_0, 0); > + hantro_reg_write(vpu, &av1_filt_mb_adj_1, 0); > + } > + > + hantro_write_addr(vpu, AV1_DB_DATA_COL, av1_dec->db_data_col.dma); > + hantro_write_addr(vpu, AV1_DB_CTRL_COL, av1_dec->db_ctrl_col.dma); > +} > + > +static void rockchip_vpu981_av1_dec_update_prob(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + bool frame_is_intra = IS_INTRA(frame->frame_type); > + struct av1cdfs *out_cdfs = (struct av1cdfs *)av1_dec->prob_tbl_out.cpu; > + int i; > + > + if (frame->flags & V4L2_AV1_FRAME_FLAG_DISABLE_FRAME_END_UPDATE_CDF) > + return; > + > + for (i = 0; i < NUM_REF_FRAMES; i++) { > + if (frame->refresh_frame_flags & (1 << i)) { > + struct mvcdfs stored_mv_cdf; > + > + rockchip_av1_get_cdfs(ctx, i); > + stored_mv_cdf = av1_dec->cdfs->mv_cdf; > + *av1_dec->cdfs = *out_cdfs; > + if (frame_is_intra) { > + av1_dec->cdfs->mv_cdf = stored_mv_cdf; > + *av1_dec->cdfs_ndvc = out_cdfs->mv_cdf; > + } > + rockchip_av1_store_cdfs(ctx, > + frame->refresh_frame_flags); > + break; > + } > + } > +} > + > +void rockchip_vpu981_av1_dec_done(struct hantro_ctx *ctx) > +{ > + rockchip_vpu981_av1_dec_update_prob(ctx); > +} > + > +static void rockchip_vpu981_av1_dec_set_prob(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + const struct v4l2_av1_quantization *quantization = &frame->quantization; > + struct hantro_dev *vpu = ctx->dev; > + bool error_resilient_mode = > + !!(frame->flags & V4L2_AV1_FRAME_FLAG_ERROR_RESILIENT_MODE); > + bool frame_is_intra = IS_INTRA(frame->frame_type); > + > + if (error_resilient_mode || frame_is_intra > + || frame->primary_ref_frame == AV1_PRIMARY_REF_NONE) { > + av1_dec->cdfs = &av1_dec->default_cdfs; > + av1_dec->cdfs_ndvc = &av1_dec->default_cdfs_ndvc; > + rockchip_av1_default_coeff_probs(quantization->base_q_idx, > + av1_dec->cdfs); > + } else { > + rockchip_av1_get_cdfs(ctx, frame->ref_frame_idx[frame->primary_ref_frame]); > + } > + rockchip_av1_store_cdfs(ctx, frame->refresh_frame_flags); > + > + memcpy(av1_dec->prob_tbl.cpu, av1_dec->cdfs, sizeof(struct av1cdfs)); > + > + if (frame_is_intra) { > + int mv_offset = offsetof(struct av1cdfs, mv_cdf); > + /* Overwrite MV context area with intrabc MV context */ > + memcpy(av1_dec->prob_tbl.cpu + mv_offset, av1_dec->cdfs_ndvc, > + sizeof(struct mvcdfs)); > + } > + > + hantro_write_addr(vpu, AV1_PROP_TABLE_OUT, av1_dec->prob_tbl_out.dma); > + hantro_write_addr(vpu, AV1_PROP_TABLE, av1_dec->prob_tbl.dma); > +} > + > +static void rockchip_vpu981_av1_dec_set_cdef(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + const struct v4l2_av1_cdef *cdef = &frame->cdef; > + struct hantro_dev *vpu = ctx->dev; > + uint32_t luma_pri_strength = 0; > + uint16_t luma_sec_strength = 0; > + uint32_t chroma_pri_strength = 0; > + uint16_t chroma_sec_strength = 0; > + int i; > + > + hantro_reg_write(vpu, &av1_cdef_bits, cdef->bits); > + hantro_reg_write(vpu, &av1_cdef_damping, cdef->damping_minus_3); > + > + for (i = 0; i < (1 << cdef->bits); i++) { > + luma_pri_strength |= cdef->y_pri_strength[i] << (i * 4); > + if (cdef->y_sec_strength[i] == 4) > + luma_sec_strength |= 3 << (i * 2); > + else > + luma_sec_strength |= cdef->y_sec_strength[i] << (i * 2); > + > + chroma_pri_strength |= cdef->uv_pri_strength[i] << (i * 4); > + if (cdef->uv_sec_strength[i] == 4) > + chroma_sec_strength |= 3 << (i * 2); > + else > + chroma_sec_strength |= cdef->uv_sec_strength[i] << (i * 2); > + } > + > + hantro_reg_write(vpu, &av1_cdef_luma_primary_strength, > + luma_pri_strength); > + hantro_reg_write(vpu, &av1_cdef_luma_secondary_strength, > + luma_sec_strength); > + hantro_reg_write(vpu, &av1_cdef_chroma_primary_strength, > + chroma_pri_strength); > + hantro_reg_write(vpu, &av1_cdef_chroma_secondary_strength, > + chroma_sec_strength); > + > + hantro_write_addr(vpu, AV1_CDEF_COL, av1_dec->cdef_col.dma); > +} > + > +static void rockchip_vpu981_av1_dec_set_lr(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + const struct v4l2_av1_loop_restoration *loop_restoration = > + &frame->loop_restoration; > + struct hantro_dev *vpu = ctx->dev; > + uint16_t lr_type = 0, lr_unit_size = 0; > + uint8_t restoration_unit_size[V4L2_AV1_NUM_PLANES_MAX] = { 3, 3, 3 }; > + int i; > + > + if (loop_restoration->flags & V4L2_AV1_LOOP_RESTORATION_FLAG_USES_LR) { > + restoration_unit_size[0] = 1 + loop_restoration->lr_unit_shift; > + restoration_unit_size[1] = > + 1 + loop_restoration->lr_unit_shift - loop_restoration->lr_uv_shift; > + restoration_unit_size[2] = > + 1 + loop_restoration->lr_unit_shift - loop_restoration->lr_uv_shift; > + } > + > + for (i = 0; i < V4L2_AV1_NUM_PLANES_MAX; i++) { > + lr_type |= > + loop_restoration->frame_restoration_type[i] << (i * 2); > + lr_unit_size |= restoration_unit_size[i] << (i * 2); > + } > + > + hantro_reg_write(vpu, &av1_lr_type, lr_type); > + hantro_reg_write(vpu, &av1_lr_unit_size, lr_unit_size); > + hantro_write_addr(vpu, AV1_LR_COL, av1_dec->lr_col.dma); > +} > + > +static void rockchip_vpu981_av1_dec_set_superres_params(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + struct hantro_dev *vpu = ctx->dev; > + uint8_t superres_scale_denominator = SCALE_NUMERATOR; > + int superres_luma_step = RS_SCALE_SUBPEL_BITS; > + int superres_chroma_step = RS_SCALE_SUBPEL_BITS; > + int superres_luma_step_invra = RS_SCALE_SUBPEL_BITS; > + int superres_chroma_step_invra = RS_SCALE_SUBPEL_BITS; > + int superres_init_luma_subpel_x = 0; > + int superres_init_chroma_subpel_x = 0; > + int superres_is_scaled = 0; > + int min_w = min_t(uint32_t, 16, frame->upscaled_width); > + int upscaled_luma, downscaled_luma; > + int downscaled_chroma, upscaled_chroma; > + int step_luma, step_chroma; > + int err_luma, err_chroma; > + int initial_luma, initial_chroma; > + int width = 0; > + > + if (frame->flags & V4L2_AV1_FRAME_FLAG_USE_SUPERRES) > + superres_scale_denominator = frame->superres_denom; > + > + if (superres_scale_denominator <= SCALE_NUMERATOR) > + goto set_regs; > + > + width = (frame->upscaled_width * SCALE_NUMERATOR + > + (superres_scale_denominator / 2)) / superres_scale_denominator; > + > + if (width < min_w) > + width = min_w; > + > + if (width == frame->upscaled_width) > + goto set_regs; > + > + superres_is_scaled = 1; > + upscaled_luma = frame->upscaled_width; > + downscaled_luma = width; > + downscaled_chroma = (downscaled_luma + 1) >> 1; > + upscaled_chroma = (upscaled_luma + 1) >> 1; > + step_luma = > + ((downscaled_luma << RS_SCALE_SUBPEL_BITS) + > + (upscaled_luma / 2)) / upscaled_luma; > + step_chroma = > + ((downscaled_chroma << RS_SCALE_SUBPEL_BITS) + > + (upscaled_chroma / 2)) / upscaled_chroma; > + err_luma = > + (upscaled_luma * step_luma) > + - (downscaled_luma << RS_SCALE_SUBPEL_BITS); > + err_chroma = > + (upscaled_chroma * step_chroma) > + - (downscaled_chroma << RS_SCALE_SUBPEL_BITS); > + initial_luma = > + ((-((upscaled_luma - downscaled_luma) << (RS_SCALE_SUBPEL_BITS - 1)) > + + upscaled_luma / 2) > + / upscaled_luma + (1 << (RS_SCALE_EXTRA_BITS - 1)) - err_luma / 2) > + & RS_SCALE_SUBPEL_MASK; > + initial_chroma = > + ((-((upscaled_chroma - downscaled_chroma) << (RS_SCALE_SUBPEL_BITS - 1)) > + + upscaled_chroma / 2) > + / upscaled_chroma + (1 << (RS_SCALE_EXTRA_BITS - 1)) - err_chroma / 2) > + & RS_SCALE_SUBPEL_MASK; > + superres_luma_step = step_luma; > + superres_chroma_step = step_chroma; > + superres_luma_step_invra = > + ((upscaled_luma << RS_SCALE_SUBPEL_BITS) + (downscaled_luma / 2)) > + / downscaled_luma; > + superres_chroma_step_invra = > + ((upscaled_chroma << RS_SCALE_SUBPEL_BITS) + (downscaled_chroma / 2)) > + / downscaled_chroma; > + superres_init_luma_subpel_x = initial_luma; > + superres_init_chroma_subpel_x = initial_chroma; > + > +set_regs: > + hantro_reg_write(vpu, &av1_superres_pic_width, frame->upscaled_width); > + > + if (frame->flags & V4L2_AV1_FRAME_FLAG_USE_SUPERRES) > + hantro_reg_write(vpu, &av1_scale_denom_minus9, > + frame->superres_denom - SUPERRES_SCALE_DENOMINATOR_MIN); > + else > + hantro_reg_write(vpu, &av1_scale_denom_minus9, frame->superres_denom); > + > + hantro_reg_write(vpu, &av1_superres_luma_step, superres_luma_step); > + hantro_reg_write(vpu, &av1_superres_chroma_step, superres_chroma_step); > + hantro_reg_write(vpu, &av1_superres_luma_step_invra, > + superres_luma_step_invra); > + hantro_reg_write(vpu, &av1_superres_chroma_step_invra, > + superres_chroma_step_invra); > + hantro_reg_write(vpu, &av1_superres_init_luma_subpel_x, > + superres_init_luma_subpel_x); > + hantro_reg_write(vpu, &av1_superres_init_chroma_subpel_x, > + superres_init_chroma_subpel_x); > + hantro_reg_write(vpu, &av1_superres_is_scaled, superres_is_scaled); > + > + hantro_write_addr(vpu, AV1_SR_COL, av1_dec->sr_col.dma); > +} > + > +static void rockchip_vpu981_av1_dec_set_picture_dimensions(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + struct hantro_dev *vpu = ctx->dev; > + int pic_width_in_cbs = DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8); > + int pic_height_in_cbs = DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8); > + int pic_width_pad = ALIGN(frame->frame_width_minus_1 + 1, 8) > + - (frame->frame_width_minus_1 + 1); > + int pic_height_pad = ALIGN(frame->frame_height_minus_1 + 1, 8) > + - (frame->frame_height_minus_1 + 1); > + > + hantro_reg_write(vpu, &av1_pic_width_in_cbs, pic_width_in_cbs); > + hantro_reg_write(vpu, &av1_pic_height_in_cbs, pic_height_in_cbs); > + hantro_reg_write(vpu, &av1_pic_width_pad, pic_width_pad); > + hantro_reg_write(vpu, &av1_pic_height_pad, pic_height_pad); > + > + rockchip_vpu981_av1_dec_set_superres_params(ctx); > +} > + > +static void rockchip_vpu981_av1_dec_set_other_frames(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + struct hantro_dev *vpu = ctx->dev; > + bool use_ref_frame_mvs = > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_USE_REF_FRAME_MVS); > + int cur_frame_offset = frame->order_hint; > + int alt_frame_offset = 0; > + int gld_frame_offset = 0; > + int bwd_frame_offset = 0; > + int alt2_frame_offset = 0; > + int refs_selected[3] = { 0, 0, 0 }; > + int cur_mi_cols = DIV_ROUND_UP(frame->frame_width_minus_1 + 1, 8); > + int cur_mi_rows = DIV_ROUND_UP(frame->frame_height_minus_1 + 1, 8); > + int cur_offset[V4L2_AV1_TOTAL_REFS_PER_FRAME - 1]; > + int cur_roffset[V4L2_AV1_TOTAL_REFS_PER_FRAME - 1]; > + int mf_types[3] = { 0, 0, 0 }; > + int ref_stamp = 2; > + int ref_ind = 0; > + int rf, idx; > + > + alt_frame_offset = rockchip_vpu981_get_order_hint(ctx, ALT_BUF_IDX); > + gld_frame_offset = rockchip_vpu981_get_order_hint(ctx, GLD_BUF_IDX); > + bwd_frame_offset = rockchip_vpu981_get_order_hint(ctx, BWD_BUF_IDX); > + alt2_frame_offset = rockchip_vpu981_get_order_hint(ctx, ALT2_BUF_IDX); > + > + idx = rockchip_vpu981_get_frame_index(ctx, LST_BUF_IDX); > + if (idx >= 0) { > + int alt_frame_offset_in_lst = > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF_FRAME]; > + bool is_lst_overlay = > + (alt_frame_offset_in_lst == gld_frame_offset); > + > + if (!is_lst_overlay) { > + int lst_mi_cols = av1_dec->frame_refs[idx].mi_cols; > + int lst_mi_rows = av1_dec->frame_refs[idx].mi_rows; > + bool lst_intra_only = > + IS_INTRA(av1_dec->frame_refs[idx].frame_type); > + > + if (lst_mi_cols == cur_mi_cols > + && lst_mi_rows == cur_mi_rows && !lst_intra_only) { > + mf_types[ref_ind] = V4L2_AV1_REF_LAST_FRAME; > + refs_selected[ref_ind++] = LST_BUF_IDX; > + } > + } > + ref_stamp--; > + } > + > + idx = rockchip_vpu981_get_frame_index(ctx, BWD_BUF_IDX); > + if (rockchip_vpu981_av1_dec_get_relative_dist > + (ctx, bwd_frame_offset, cur_frame_offset) > 0) { > + int bwd_mi_cols = av1_dec->frame_refs[idx].mi_cols; > + int bwd_mi_rows = av1_dec->frame_refs[idx].mi_rows; > + bool bwd_intra_only = > + IS_INTRA(av1_dec->frame_refs[idx].frame_type); > + > + if (bwd_mi_cols == cur_mi_cols && bwd_mi_rows == cur_mi_rows && > + !bwd_intra_only) { > + mf_types[ref_ind] = V4L2_AV1_REF_BWDREF_FRAME; > + refs_selected[ref_ind++] = BWD_BUF_IDX; > + ref_stamp--; > + } > + } > + > + idx = rockchip_vpu981_get_frame_index(ctx, ALT2_BUF_IDX); > + if (rockchip_vpu981_av1_dec_get_relative_dist > + (ctx, alt2_frame_offset, cur_frame_offset) > 0) { > + int alt2_mi_cols = av1_dec->frame_refs[idx].mi_cols; > + int alt2_mi_rows = av1_dec->frame_refs[idx].mi_rows; > + bool alt2_intra_only = > + IS_INTRA(av1_dec->frame_refs[idx].frame_type); > + > + if (alt2_mi_cols == cur_mi_cols && alt2_mi_rows == cur_mi_rows > + && !alt2_intra_only) { > + mf_types[ref_ind] = V4L2_AV1_REF_ALTREF2_FRAME; > + refs_selected[ref_ind++] = ALT2_BUF_IDX; > + ref_stamp--; > + } > + } > + > + idx = rockchip_vpu981_get_frame_index(ctx, ALT_BUF_IDX); > + if (rockchip_vpu981_av1_dec_get_relative_dist > + (ctx, alt_frame_offset, cur_frame_offset) > 0 && ref_stamp >= 0) { > + int alt_mi_cols = av1_dec->frame_refs[idx].mi_cols; > + int alt_mi_rows = av1_dec->frame_refs[idx].mi_rows; > + bool alt_intra_only = > + IS_INTRA(av1_dec->frame_refs[idx].frame_type); > + > + if (alt_mi_cols == cur_mi_cols && alt_mi_rows == cur_mi_rows && > + !alt_intra_only) { > + mf_types[ref_ind] = V4L2_AV1_REF_ALTREF_FRAME; > + refs_selected[ref_ind++] = ALT_BUF_IDX; > + ref_stamp--; > + } > + } > + > + idx = rockchip_vpu981_get_frame_index(ctx, LST2_BUF_IDX); > + if (idx >= 0 && ref_stamp >= 0) { > + int lst2_mi_cols = av1_dec->frame_refs[idx].mi_cols; > + int lst2_mi_rows = av1_dec->frame_refs[idx].mi_rows; > + bool lst2_intra_only = > + IS_INTRA(av1_dec->frame_refs[idx].frame_type); > + > + if (lst2_mi_cols == cur_mi_cols && lst2_mi_rows == cur_mi_rows > + && !lst2_intra_only) { > + mf_types[ref_ind] = V4L2_AV1_REF_LAST2_FRAME; > + refs_selected[ref_ind++] = LST2_BUF_IDX; > + ref_stamp--; > + } > + } > + > + for (rf = 0; rf < V4L2_AV1_TOTAL_REFS_PER_FRAME - 1; ++rf) { > + idx = rockchip_vpu981_get_frame_index(ctx, rf); > + if (idx >= 0) { > + int rf_order_hint = rockchip_vpu981_get_order_hint(ctx, rf); > + > + cur_offset[rf] = > + rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + cur_frame_offset, > + rf_order_hint); > + cur_roffset[rf] = > + rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + cur_frame_offset); > + } else { > + cur_offset[rf] = 0; > + cur_roffset[rf] = 0; > + } > + } > + > + hantro_reg_write(vpu, &av1_use_temporal0_mvs, 0); > + hantro_reg_write(vpu, &av1_use_temporal1_mvs, 0); > + hantro_reg_write(vpu, &av1_use_temporal2_mvs, 0); > + hantro_reg_write(vpu, &av1_use_temporal3_mvs, 0); > + > + hantro_reg_write(vpu, &av1_mf1_last_offset, 0); > + hantro_reg_write(vpu, &av1_mf1_last2_offset, 0); > + hantro_reg_write(vpu, &av1_mf1_last3_offset, 0); > + hantro_reg_write(vpu, &av1_mf1_golden_offset, 0); > + hantro_reg_write(vpu, &av1_mf1_bwdref_offset, 0); > + hantro_reg_write(vpu, &av1_mf1_altref2_offset, 0); > + hantro_reg_write(vpu, &av1_mf1_altref_offset, 0); > + > + if (use_ref_frame_mvs && ref_ind > 0 && > + cur_offset[mf_types[0] - V4L2_AV1_REF_LAST_FRAME] <= MAX_FRAME_DISTANCE > + && cur_offset[mf_types[0] - V4L2_AV1_REF_LAST_FRAME] >= -MAX_FRAME_DISTANCE) { > + int rf_order_hint = rockchip_vpu981_get_order_hint(ctx, refs_selected[0]); > + int idx = rockchip_vpu981_get_frame_index(ctx, refs_selected[0]); > + int val; > + > + hantro_reg_write(vpu, &av1_use_temporal0_mvs, 1); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST_FRAME]); > + hantro_reg_write(vpu, &av1_mf1_last_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST2_FRAME]); > + hantro_reg_write(vpu, &av1_mf1_last2_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST3_FRAME]); > + hantro_reg_write(vpu, &av1_mf1_last3_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_GOLDEN_FRAME]); > + hantro_reg_write(vpu, &av1_mf1_golden_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_BWDREF_FRAME]); > + hantro_reg_write(vpu, &av1_mf1_bwdref_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF2_FRAME]); > + hantro_reg_write(vpu, &av1_mf1_altref2_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF_FRAME]); > + hantro_reg_write(vpu, &av1_mf1_altref_offset, val); > + } > + > + hantro_reg_write(vpu, &av1_mf2_last_offset, 0); > + hantro_reg_write(vpu, &av1_mf2_last2_offset, 0); > + hantro_reg_write(vpu, &av1_mf2_last3_offset, 0); > + hantro_reg_write(vpu, &av1_mf2_golden_offset, 0); > + hantro_reg_write(vpu, &av1_mf2_bwdref_offset, 0); > + hantro_reg_write(vpu, &av1_mf2_altref2_offset, 0); > + hantro_reg_write(vpu, &av1_mf2_altref_offset, 0); > + > + if (use_ref_frame_mvs && ref_ind > 1 && > + cur_offset[mf_types[1] - V4L2_AV1_REF_LAST_FRAME] <= MAX_FRAME_DISTANCE > + && cur_offset[mf_types[1] - V4L2_AV1_REF_LAST_FRAME] >= -MAX_FRAME_DISTANCE) { > + int rf_order_hint = rockchip_vpu981_get_order_hint(ctx, refs_selected[1]); > + int idx = rockchip_vpu981_get_frame_index(ctx, refs_selected[1]); > + int val; > + > + hantro_reg_write(vpu, &av1_use_temporal1_mvs, 1); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST_FRAME]); > + hantro_reg_write(vpu, &av1_mf2_last_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST2_FRAME]); > + hantro_reg_write(vpu, &av1_mf2_last2_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST3_FRAME]); > + hantro_reg_write(vpu, &av1_mf2_last3_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_GOLDEN_FRAME]); > + hantro_reg_write(vpu, &av1_mf2_golden_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_BWDREF_FRAME]); > + hantro_reg_write(vpu, &av1_mf2_bwdref_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF2_FRAME]); > + hantro_reg_write(vpu, &av1_mf2_altref2_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF_FRAME]); > + hantro_reg_write(vpu, &av1_mf2_altref_offset, val); > + } > + > + hantro_reg_write(vpu, &av1_mf3_last_offset, 0); > + hantro_reg_write(vpu, &av1_mf3_last2_offset, 0); > + hantro_reg_write(vpu, &av1_mf3_last3_offset, 0); > + hantro_reg_write(vpu, &av1_mf3_golden_offset, 0); > + hantro_reg_write(vpu, &av1_mf3_bwdref_offset, 0); > + hantro_reg_write(vpu, &av1_mf3_altref2_offset, 0); > + hantro_reg_write(vpu, &av1_mf3_altref_offset, 0); > + > + if (use_ref_frame_mvs && ref_ind > 2 && > + cur_offset[mf_types[2] - V4L2_AV1_REF_LAST_FRAME] <= MAX_FRAME_DISTANCE > + && cur_offset[mf_types[2] - V4L2_AV1_REF_LAST_FRAME] >= -MAX_FRAME_DISTANCE) { > + int rf_order_hint = rockchip_vpu981_get_order_hint(ctx, refs_selected[2]); > + int idx = rockchip_vpu981_get_frame_index(ctx, refs_selected[2]); > + int val; > + > + hantro_reg_write(vpu, &av1_use_temporal2_mvs, 1); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST_FRAME]); > + hantro_reg_write(vpu, &av1_mf3_last_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST2_FRAME]); > + hantro_reg_write(vpu, &av1_mf3_last2_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_LAST3_FRAME]); > + hantro_reg_write(vpu, &av1_mf3_last3_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_GOLDEN_FRAME]); > + hantro_reg_write(vpu, &av1_mf3_golden_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_BWDREF_FRAME]); > + hantro_reg_write(vpu, &av1_mf3_bwdref_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF2_FRAME]); > + hantro_reg_write(vpu, &av1_mf3_altref2_offset, val); > + > + val = rockchip_vpu981_av1_dec_get_relative_dist(ctx, > + rf_order_hint, > + av1_dec->frame_refs[idx].order_hints[V4L2_AV1_REF_ALTREF_FRAME]); > + hantro_reg_write(vpu, &av1_mf3_altref_offset, val); > + } > + > + hantro_reg_write(vpu, &av1_cur_last_offset, cur_offset[0]); > + hantro_reg_write(vpu, &av1_cur_last2_offset, cur_offset[1]); > + hantro_reg_write(vpu, &av1_cur_last3_offset, cur_offset[2]); > + hantro_reg_write(vpu, &av1_cur_golden_offset, cur_offset[3]); > + hantro_reg_write(vpu, &av1_cur_bwdref_offset, cur_offset[4]); > + hantro_reg_write(vpu, &av1_cur_altref2_offset, cur_offset[5]); > + hantro_reg_write(vpu, &av1_cur_altref_offset, cur_offset[6]); > + > + hantro_reg_write(vpu, &av1_cur_last_roffset, cur_roffset[0]); > + hantro_reg_write(vpu, &av1_cur_last2_roffset, cur_roffset[1]); > + hantro_reg_write(vpu, &av1_cur_last3_roffset, cur_roffset[2]); > + hantro_reg_write(vpu, &av1_cur_golden_roffset, cur_roffset[3]); > + hantro_reg_write(vpu, &av1_cur_bwdref_roffset, cur_roffset[4]); > + hantro_reg_write(vpu, &av1_cur_altref2_roffset, cur_roffset[5]); > + hantro_reg_write(vpu, &av1_cur_altref_roffset, cur_roffset[6]); > + > + hantro_reg_write(vpu, &av1_mf1_type, mf_types[0] - V4L2_AV1_REF_LAST_FRAME); > + hantro_reg_write(vpu, &av1_mf2_type, mf_types[1] - V4L2_AV1_REF_LAST_FRAME); > + hantro_reg_write(vpu, &av1_mf3_type, mf_types[2] - V4L2_AV1_REF_LAST_FRAME); > +} > + > +static void rockchip_vpu981_av1_dec_set_reference_frames(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_frame *frame = ctrls->frame; > + int frame_type = frame->frame_type; > + bool allow_intrabc = !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC); > + int ref_count[AV1DEC_MAX_PIC_BUFFERS] = { 0 }; > + struct hantro_dev *vpu = ctx->dev; > + int i, ref_frames = 0; > + bool scale_enable = false; > + > + if (IS_INTRA(frame_type) && !allow_intrabc) > + return; > + > + if (!allow_intrabc) { > + for (i = 0; i < V4L2_AV1_REFS_PER_FRAME; i++) { > + int idx = rockchip_vpu981_get_frame_index(ctx, i); > + > + if (idx >= 0) > + ref_count[idx]++; > + } > + > + for (i = 0; i < AV1DEC_MAX_PIC_BUFFERS; i++) { > + if (ref_count[i]) > + ref_frames++; > + } > + } else { > + ref_frames = 1; > + } > + hantro_reg_write(vpu, &av1_ref_frames, ref_frames); > + > + rockchip_vpu981_av1_dec_set_frame_sign_bias(ctx); > + > + for (i = V4L2_AV1_REF_LAST_FRAME; i < V4L2_AV1_TOTAL_REFS_PER_FRAME; i++) { > + uint32_t ref = i - 1; > + int idx = 0; > + int width, height; > + > + if (allow_intrabc) { > + idx = av1_dec->current_frame_index; > + width = frame->frame_width_minus_1 + 1; > + height = frame->frame_height_minus_1 + 1; > + } else { > + if (rockchip_vpu981_get_frame_index(ctx, ref) > 0) > + idx = rockchip_vpu981_get_frame_index(ctx, ref); > + width = av1_dec->frame_refs[idx].width; > + height = av1_dec->frame_refs[idx].height; > + } > + > + scale_enable |= > + rockchip_vpu981_av1_dec_set_ref(ctx, ref, idx, width, > + height); > + > + rockchip_vpu981_av1_dec_set_sign_bias(ctx, ref, > + av1_dec->ref_frame_sign_bias[i]); > + } > + hantro_reg_write(vpu, &av1_ref_scaling_enable, scale_enable); > + > + hantro_reg_write(vpu, &av1_ref0_gm_mode, > + frame->global_motion.type[V4L2_AV1_REF_LAST_FRAME]); > + hantro_reg_write(vpu, &av1_ref1_gm_mode, > + frame->global_motion.type[V4L2_AV1_REF_LAST2_FRAME]); > + hantro_reg_write(vpu, &av1_ref2_gm_mode, > + frame->global_motion.type[V4L2_AV1_REF_LAST3_FRAME]); > + hantro_reg_write(vpu, &av1_ref3_gm_mode, > + frame->global_motion.type[V4L2_AV1_REF_GOLDEN_FRAME]); > + hantro_reg_write(vpu, &av1_ref4_gm_mode, > + frame->global_motion.type[V4L2_AV1_REF_BWDREF_FRAME]); > + hantro_reg_write(vpu, &av1_ref5_gm_mode, > + frame->global_motion.type[V4L2_AV1_REF_ALTREF2_FRAME]); > + hantro_reg_write(vpu, &av1_ref6_gm_mode, > + frame->global_motion.type[V4L2_AV1_REF_ALTREF_FRAME]); > + > + rockchip_vpu981_av1_dec_set_other_frames(ctx); > +} > + > +static void rockchip_vpu981_av1_dec_set_parameters(struct hantro_ctx *ctx) > +{ > + struct hantro_dev *vpu = ctx->dev; > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + > + hantro_reg_write(vpu, &av1_skip_mode, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_SKIP_MODE_PRESENT)); > + hantro_reg_write(vpu, &av1_tempor_mvp_e, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_USE_REF_FRAME_MVS)); > + hantro_reg_write(vpu, &av1_delta_lf_res_log, > + ctrls->frame->loop_filter.delta_lf_res); > + hantro_reg_write(vpu, &av1_delta_lf_multi, > + !!(ctrls->frame->loop_filter.flags > + & V4L2_AV1_LOOP_FILTER_FLAG_DELTA_LF_MULTI)); > + hantro_reg_write(vpu, &av1_delta_lf_present, > + !!(ctrls->frame->loop_filter.flags > + & V4L2_AV1_LOOP_FILTER_FLAG_DELTA_LF_PRESENT)); > + hantro_reg_write(vpu, &av1_disable_cdf_update, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_DISABLE_CDF_UPDATE)); > + hantro_reg_write(vpu, &av1_allow_warp, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_WARPED_MOTION)); > + hantro_reg_write(vpu, &av1_show_frame, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_SHOW_FRAME)); > + hantro_reg_write(vpu, &av1_switchable_motion_mode, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_IS_MOTION_MODE_SWITCHABLE)); > + hantro_reg_write(vpu, &av1_enable_cdef, > + !!(ctrls->sequence->flags & V4L2_AV1_SEQUENCE_FLAG_ENABLE_CDEF)); > + hantro_reg_write(vpu, &av1_allow_masked_compound, > + !!(ctrls->sequence->flags > + & V4L2_AV1_SEQUENCE_FLAG_ENABLE_MASKED_COMPOUND)); > + hantro_reg_write(vpu, &av1_allow_interintra, > + !!(ctrls->sequence->flags > + & V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTERINTRA_COMPOUND)); > + hantro_reg_write(vpu, &av1_enable_intra_edge_filter, > + !!(ctrls->sequence->flags > + & V4L2_AV1_SEQUENCE_FLAG_ENABLE_INTRA_EDGE_FILTER)); > + hantro_reg_write(vpu, &av1_allow_filter_intra, > + !!(ctrls->sequence->flags & V4L2_AV1_SEQUENCE_FLAG_ENABLE_FILTER_INTRA)); > + hantro_reg_write(vpu, &av1_enable_jnt_comp, > + !!(ctrls->sequence->flags & V4L2_AV1_SEQUENCE_FLAG_ENABLE_JNT_COMP)); > + hantro_reg_write(vpu, &av1_enable_dual_filter, > + !!(ctrls->sequence->flags & V4L2_AV1_SEQUENCE_FLAG_ENABLE_DUAL_FILTER)); > + hantro_reg_write(vpu, &av1_reduced_tx_set_used, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_REDUCED_TX_SET)); > + hantro_reg_write(vpu, &av1_allow_screen_content_tools, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_SCREEN_CONTENT_TOOLS)); > + hantro_reg_write(vpu, &av1_allow_intrabc, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_INTRABC)); > + > + if (!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_SCREEN_CONTENT_TOOLS)) > + hantro_reg_write(vpu, &av1_force_interger_mv, 0); > + else > + hantro_reg_write(vpu, &av1_force_interger_mv, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_FORCE_INTEGER_MV)); > + > + hantro_reg_write(vpu, &av1_blackwhite_e, 0); > + hantro_reg_write(vpu, &av1_delta_q_res_log, ctrls->frame->quantization.delta_q_res); > + hantro_reg_write(vpu, &av1_delta_q_present, > + !!(ctrls->frame->quantization.flags > + & V4L2_AV1_QUANTIZATION_FLAG_DELTA_Q_PRESENT)); > + > + hantro_reg_write(vpu, &av1_idr_pic_e, !ctrls->frame->frame_type); > + hantro_reg_write(vpu, &av1_quant_base_qindex, ctrls->frame->quantization.base_q_idx); > + hantro_reg_write(vpu, &av1_bit_depth_y_minus8, ctx->bit_depth - 8); > + hantro_reg_write(vpu, &av1_bit_depth_c_minus8, ctx->bit_depth - 8); > + > + hantro_reg_write(vpu, &av1_mcomp_filt_type, ctrls->frame->interpolation_filter); > + hantro_reg_write(vpu, &av1_high_prec_mv_e, > + !!(ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_ALLOW_HIGH_PRECISION_MV)); > + hantro_reg_write(vpu, &av1_comp_pred_mode, > + (ctrls->frame->flags & V4L2_AV1_FRAME_FLAG_REFERENCE_SELECT) ? 2 : 0); > + hantro_reg_write(vpu, &av1_transform_mode, (ctrls->frame->tx_mode == 1) ? 3 : 4); > + hantro_reg_write(vpu, &av1_max_cb_size, > + (ctrls->sequence->flags > + & V4L2_AV1_SEQUENCE_FLAG_USE_128X128_SUPERBLOCK) ? 7 : 6); > + hantro_reg_write(vpu, &av1_min_cb_size, 3); > + > + hantro_reg_write(vpu, &av1_comp_pred_fixed_ref, 0); > + hantro_reg_write(vpu, &av1_comp_pred_var_ref0_av1, 0); > + hantro_reg_write(vpu, &av1_comp_pred_var_ref1_av1, 0); > + hantro_reg_write(vpu, &av1_filt_level_seg0, 0); > + hantro_reg_write(vpu, &av1_filt_level_seg1, 0); > + hantro_reg_write(vpu, &av1_filt_level_seg2, 0); > + hantro_reg_write(vpu, &av1_filt_level_seg3, 0); > + hantro_reg_write(vpu, &av1_filt_level_seg4, 0); > + hantro_reg_write(vpu, &av1_filt_level_seg5, 0); > + hantro_reg_write(vpu, &av1_filt_level_seg6, 0); > + hantro_reg_write(vpu, &av1_filt_level_seg7, 0); > + > + hantro_reg_write(vpu, &av1_qp_delta_y_dc_av1, ctrls->frame->quantization.delta_q_y_dc); > + hantro_reg_write(vpu, &av1_qp_delta_ch_dc_av1, ctrls->frame->quantization.delta_q_u_dc); > + hantro_reg_write(vpu, &av1_qp_delta_ch_ac_av1, ctrls->frame->quantization.delta_q_u_ac); > + if (ctrls->frame->quantization.flags & V4L2_AV1_QUANTIZATION_FLAG_USING_QMATRIX) { > + hantro_reg_write(vpu, &av1_qmlevel_y, ctrls->frame->quantization.qm_y); > + hantro_reg_write(vpu, &av1_qmlevel_u, ctrls->frame->quantization.qm_u); > + hantro_reg_write(vpu, &av1_qmlevel_v, ctrls->frame->quantization.qm_v); > + } else { > + hantro_reg_write(vpu, &av1_qmlevel_y, 0xff); > + hantro_reg_write(vpu, &av1_qmlevel_u, 0xff); > + hantro_reg_write(vpu, &av1_qmlevel_v, 0xff); > + } > + > + hantro_reg_write(vpu, &av1_lossless_e, rockchip_vpu981_av1_dec_is_lossless(ctx)); > + hantro_reg_write(vpu, &av1_quant_delta_v_dc, ctrls->frame->quantization.delta_q_v_dc); > + hantro_reg_write(vpu, &av1_quant_delta_v_ac, ctrls->frame->quantization.delta_q_v_ac); > + > + hantro_reg_write(vpu, &av1_skip_ref0, > + (ctrls->frame->skip_mode_frame[0]) ? ctrls->frame->skip_mode_frame[0] : 1); > + hantro_reg_write(vpu, &av1_skip_ref1, > + (ctrls->frame->skip_mode_frame[1]) ? ctrls->frame->skip_mode_frame[1] : 1); > + > + hantro_write_addr(vpu, AV1_MC_SYNC_CURR, av1_dec->tile_buf.dma); > + hantro_write_addr(vpu, AV1_MC_SYNC_LEFT, av1_dec->tile_buf.dma); > +} > + > +static void > +rockchip_vpu981_av1_dec_set_input_buffer(struct hantro_ctx *ctx, > + struct vb2_v4l2_buffer *vb2_src) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_av1_dec_ctrls *ctrls = &av1_dec->ctrls; > + const struct v4l2_ctrl_av1_tile_group_entry *group_entry = > + ctrls->tile_group_entry; > + struct hantro_dev *vpu = ctx->dev; > + dma_addr_t src_dma; > + u32 src_len, src_buf_len; > + int start_bit, offset; > + > + src_dma = vb2_dma_contig_plane_dma_addr(&vb2_src->vb2_buf, 0); > + src_len = vb2_get_plane_payload(&vb2_src->vb2_buf, 0); > + src_buf_len = vb2_plane_size(&vb2_src->vb2_buf, 0); > + > + start_bit = (group_entry[0].tile_offset & 0xf) * 8; > + offset = group_entry[0].tile_offset & ~0xf; > + > + hantro_reg_write(vpu, &av1_strm_buffer_len, src_buf_len); > + hantro_reg_write(vpu, &av1_strm_start_bit, start_bit); > + hantro_reg_write(vpu, &av1_stream_len, src_len); > + hantro_reg_write(vpu, &av1_strm_start_offset, 0); > + hantro_write_addr(vpu, AV1_INPUT_STREAM, src_dma + offset); > +} > + > +static void > +rockchip_vpu981_av1_dec_set_output_buffer(struct hantro_ctx *ctx) > +{ > + struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; > + struct hantro_dev *vpu = ctx->dev; > + struct hantro_decoded_buffer *dst; > + struct vb2_v4l2_buffer *vb2_dst; > + dma_addr_t luma_addr, chroma_addr, mv_addr = 0; > + size_t cr_offset = rockchip_vpu981_av1_dec_luma_size(ctx); > + size_t mv_offset = rockchip_vpu981_av1_dec_chroma_size(ctx); > + > + vb2_dst = av1_dec->frame_refs[av1_dec->current_frame_index].vb2_ref; > + dst = vb2_to_hantro_decoded_buf(&vb2_dst->vb2_buf); > + luma_addr = hantro_get_dec_buf_addr(ctx, &dst->base.vb.vb2_buf); > + chroma_addr = luma_addr + cr_offset; > + mv_addr = luma_addr + mv_offset; > + > + hantro_write_addr(vpu, AV1_TILE_OUT_LU, luma_addr); > + hantro_write_addr(vpu, AV1_TILE_OUT_CH, chroma_addr); > + hantro_write_addr(vpu, AV1_TILE_OUT_MV, mv_addr); > +} > + > +int rockchip_vpu981_av1_dec_run(struct hantro_ctx *ctx) > +{ > + struct hantro_dev *vpu = ctx->dev; > + struct vb2_v4l2_buffer *vb2_src; > + int ret; > + > + hantro_start_prepare_run(ctx); > + > + ret = rockchip_vpu981_av1_dec_prepare_run(ctx); > + if (ret) > + goto prepare_error; > + > + vb2_src = hantro_get_src_buf(ctx); > + if (!vb2_src) { > + ret = -EINVAL; > + goto prepare_error; > + } > + > + rockchip_vpu981_av1_dec_clean_refs(ctx); > + rockchip_vpu981_av1_dec_frame_ref(ctx, vb2_src->vb2_buf.timestamp); > + > + rockchip_vpu981_av1_dec_set_parameters(ctx); > + rockchip_vpu981_av1_dec_set_global_model(ctx); > + rockchip_vpu981_av1_dec_set_tile_info(ctx); > + rockchip_vpu981_av1_dec_set_reference_frames(ctx); > + rockchip_vpu981_av1_dec_set_segmentation(ctx); > + rockchip_vpu981_av1_dec_set_loopfilter(ctx); > + rockchip_vpu981_av1_dec_set_picture_dimensions(ctx); > + rockchip_vpu981_av1_dec_set_cdef(ctx); > + rockchip_vpu981_av1_dec_set_lr(ctx); > + rockchip_vpu981_av1_dec_set_prob(ctx); > + > + hantro_reg_write(vpu, &av1_dec_mode, AV1_DEC_MODE); > + hantro_reg_write(vpu, &av1_dec_out_ec_byte_word, 0); > + hantro_reg_write(vpu, &av1_write_mvs_e, 1); > + hantro_reg_write(vpu, &av1_dec_out_ec_bypass, 1); > + hantro_reg_write(vpu, &av1_dec_clk_gate_e, 1); > + > + hantro_reg_write(vpu, &av1_dec_abort_e, 0); > + hantro_reg_write(vpu, &av1_dec_tile_int_e, 0); > + > + hantro_reg_write(vpu, &av1_dec_alignment, 64); > + hantro_reg_write(vpu, &av1_apf_disable, 0); > + hantro_reg_write(vpu, &av1_apf_threshold, 8); > + hantro_reg_write(vpu, &av1_dec_buswidth, 2); > + hantro_reg_write(vpu, &av1_dec_max_burst, 16); > + hantro_reg_write(vpu, &av1_error_conceal_e, 0); > + hantro_reg_write(vpu, &av1_axi_rd_ostd_threshold, 64); > + hantro_reg_write(vpu, &av1_axi_wr_ostd_threshold, 64); > + > + hantro_reg_write(vpu, &av1_ext_timeout_cycles, 0xfffffff); > + hantro_reg_write(vpu, &av1_ext_timeout_override_e, 1); > + hantro_reg_write(vpu, &av1_timeout_cycles, 0xfffffff); > + hantro_reg_write(vpu, &av1_timeout_override_e, 1); > + > + rockchip_vpu981_av1_dec_set_output_buffer(ctx); > + rockchip_vpu981_av1_dec_set_input_buffer(ctx, vb2_src); > + > + hantro_end_prepare_run(ctx); > + > + hantro_reg_write(vpu, &av1_dec_e, 1); > + > + return 0; > + > +prepare_error: > + hantro_end_prepare_run(ctx); > + hantro_irq_done(vpu, VB2_BUF_STATE_ERROR); > + return ret; > +} > + > +static void rockchip_vpu981_postproc_enable(struct hantro_ctx *ctx) > +{ > + struct hantro_dev *vpu = ctx->dev; > + int width = ctx->dst_fmt.width; > + int height = ctx->dst_fmt.height; > + struct vb2_v4l2_buffer *vb2_dst; > + size_t chroma_offset; > + dma_addr_t dst_dma; > + > + vb2_dst = hantro_get_dst_buf(ctx); > + > + dst_dma = vb2_dma_contig_plane_dma_addr(&vb2_dst->vb2_buf, 0); > + chroma_offset = ctx->dst_fmt.plane_fmt[0].bytesperline * > + ctx->dst_fmt.height; > + > + /* enable post processor */ > + hantro_reg_write(vpu, &av1_pp_out_e, 1); > + hantro_reg_write(vpu, &av1_pp_in_format, 0); > + hantro_reg_write(vpu, &av1_pp0_dup_hor, 1); > + hantro_reg_write(vpu, &av1_pp0_dup_ver, 1); > + > + hantro_reg_write(vpu, &av1_pp_in_height, height / 2); > + hantro_reg_write(vpu, &av1_pp_in_width, width / 2); > + hantro_reg_write(vpu, &av1_pp_out_height, height); > + hantro_reg_write(vpu, &av1_pp_out_width, width); > + hantro_reg_write(vpu, &av1_pp_out_y_stride, > + ctx->dst_fmt.plane_fmt[0].bytesperline); > + hantro_reg_write(vpu, &av1_pp_out_c_stride, > + ctx->dst_fmt.plane_fmt[0].bytesperline); > + switch (ctx->dst_fmt.pixelformat) { > + case V4L2_PIX_FMT_P010: > + hantro_reg_write(vpu, &av1_pp_out_format, 1); > + break; > + case V4L2_PIX_FMT_NV12: > + hantro_reg_write(vpu, &av1_pp_out_format, 3); > + break; > + default: > + hantro_reg_write(vpu, &av1_pp_out_format, 0); > + } > + > + hantro_reg_write(vpu, &av1_ppd_blend_exist, 0); > + hantro_reg_write(vpu, &av1_ppd_dith_exist, 0); > + hantro_reg_write(vpu, &av1_ablend_crop_e, 0); > + hantro_reg_write(vpu, &av1_pp_format_customer1_e, 0); > + hantro_reg_write(vpu, &av1_pp_crop_exist, 0); > + hantro_reg_write(vpu, &av1_pp_up_level, 0); > + hantro_reg_write(vpu, &av1_pp_down_level, 0); > + hantro_reg_write(vpu, &av1_pp_exist, 0); > + > + hantro_write_addr(vpu, AV1_PP_OUT_LU, dst_dma); > + hantro_write_addr(vpu, AV1_PP_OUT_CH, dst_dma + chroma_offset); > +} > + > +static void rockchip_vpu981_postproc_disable(struct hantro_ctx *ctx) > +{ > + struct hantro_dev *vpu = ctx->dev; > + > + /* disable post processor */ > + hantro_reg_write(vpu, &av1_pp_out_e, 0); > +} > + > +const struct hantro_postproc_ops rockchip_vpu981_postproc_ops = { > + .enable = rockchip_vpu981_postproc_enable, > + .disable = rockchip_vpu981_postproc_disable, > +}; > diff --git a/drivers/media/platform/verisilicon/rockchip_vpu981_regs.h b/drivers/media/platform/verisilicon/rockchip_vpu981_regs.h > new file mode 100644 > index 000000000000..182e6c830ff6 > --- /dev/null > +++ b/drivers/media/platform/verisilicon/rockchip_vpu981_regs.h > @@ -0,0 +1,477 @@ > +/* SPDX-License-Identifier: GPL-2.0-only */ > +/* > + * Copyright (c) 2022, Collabora > + * > + * Author: Benjamin Gaignard <benjamin.gaignard@collabora.com> > + */ > + > +#ifndef _ROCKCHIP_VPU981_REGS_H_ > +#define _ROCKCHIP_VPU981_REGS_H_ > + > +#include "hantro.h" > + > +#define AV1_SWREG(nr) ((nr) * 4) > + > +#define AV1_DEC_REG(b, s, m) \ > + ((const struct hantro_reg) { \ > + .base = AV1_SWREG(b), \ > + .shift = s, \ > + .mask = m, \ > + }) > + > +#define AV1_REG_INTERRUPT AV1_SWREG(1) > +#define AV1_REG_INTERRUPT_DEC_RDY_INT BIT(12) > + > +#define AV1_REG_CONFIG AV1_SWREG(2) > +#define AV1_REG_CONFIG_DEC_CLK_GATE_E BIT(10) > + > +#define av1_dec_e AV1_DEC_REG(1, 0, 0x1) > +#define av1_dec_abort_e AV1_DEC_REG(1, 5, 0x1) > +#define av1_dec_tile_int_e AV1_DEC_REG(1, 7, 0x1) > + > +#define av1_dec_clk_gate_e AV1_DEC_REG(2, 10, 0x1) > + > +#define av1_dec_out_ec_bypass AV1_DEC_REG(3, 8, 0x1) > +#define av1_write_mvs_e AV1_DEC_REG(3, 12, 0x1) > +#define av1_filtering_dis AV1_DEC_REG(3, 14, 0x1) > +#define av1_dec_out_dis AV1_DEC_REG(3, 15, 0x1) > +#define av1_dec_out_ec_byte_word AV1_DEC_REG(3, 16, 0x1) > +#define av1_skip_mode AV1_DEC_REG(3, 26, 0x1) > +#define av1_dec_mode AV1_DEC_REG(3, 27, 0x1f) > + > +#define av1_ref_frames AV1_DEC_REG(4, 0, 0xf) > +#define av1_pic_height_in_cbs AV1_DEC_REG(4, 6, 0x1fff) > +#define av1_pic_width_in_cbs AV1_DEC_REG(4, 19, 0x1fff) > + > +#define av1_ref_scaling_enable AV1_DEC_REG(5, 0, 0x1) > +#define av1_filt_level_base_gt32 AV1_DEC_REG(5, 1, 0x1) > +#define av1_error_resilient AV1_DEC_REG(5, 2, 0x1) > +#define av1_force_interger_mv AV1_DEC_REG(5, 3, 0x1) > +#define av1_allow_intrabc AV1_DEC_REG(5, 4, 0x1) > +#define av1_allow_screen_content_tools AV1_DEC_REG(5, 5, 0x1) > +#define av1_reduced_tx_set_used AV1_DEC_REG(5, 6, 0x1) > +#define av1_enable_dual_filter AV1_DEC_REG(5, 7, 0x1) > +#define av1_enable_jnt_comp AV1_DEC_REG(5, 8, 0x1) > +#define av1_allow_filter_intra AV1_DEC_REG(5, 9, 0x1) > +#define av1_enable_intra_edge_filter AV1_DEC_REG(5, 10, 0x1) > +#define av1_tempor_mvp_e AV1_DEC_REG(5, 11, 0x1) > +#define av1_allow_interintra AV1_DEC_REG(5, 12, 0x1) > +#define av1_allow_masked_compound AV1_DEC_REG(5, 13, 0x1) > +#define av1_enable_cdef AV1_DEC_REG(5, 14, 0x1) > +#define av1_switchable_motion_mode AV1_DEC_REG(5, 15, 0x1) > +#define av1_show_frame AV1_DEC_REG(5, 16, 0x1) > +#define av1_superres_is_scaled AV1_DEC_REG(5, 17, 0x1) > +#define av1_allow_warp AV1_DEC_REG(5, 18, 0x1) > +#define av1_disable_cdf_update AV1_DEC_REG(5, 19, 0x1) > +#define av1_preskip_segid AV1_DEC_REG(5, 20, 0x1) > +#define av1_delta_lf_present AV1_DEC_REG(5, 21, 0x1) > +#define av1_delta_lf_multi AV1_DEC_REG(5, 22, 0x1) > +#define av1_delta_lf_res_log AV1_DEC_REG(5, 23, 0x3) > +#define av1_strm_start_bit AV1_DEC_REG(5, 25, 0x7f) > + > +#define av1_stream_len AV1_DEC_REG(6, 0, 0xffffffff) > + > +#define av1_delta_q_present AV1_DEC_REG(7, 0, 0x1) > +#define av1_delta_q_res_log AV1_DEC_REG(7, 1, 0x3) > +#define av1_cdef_damping AV1_DEC_REG(7, 3, 0x3) > +#define av1_cdef_bits AV1_DEC_REG(7, 5, 0x3) > +#define av1_apply_grain AV1_DEC_REG(7, 7, 0x1) > +#define av1_num_y_points_b AV1_DEC_REG(7, 8, 0x1) > +#define av1_num_cb_points_b AV1_DEC_REG(7, 9, 0x1) > +#define av1_num_cr_points_b AV1_DEC_REG(7, 10, 0x1) > +#define av1_overlap_flag AV1_DEC_REG(7, 11, 0x1) > +#define av1_clip_to_restricted_range AV1_DEC_REG(7, 12, 0x1) > +#define av1_chroma_scaling_from_luma AV1_DEC_REG(7, 13, 0x1) > +#define av1_random_seed AV1_DEC_REG(7, 14, 0xffff) > +#define av1_blackwhite_e AV1_DEC_REG(7, 30, 0x1) > + > +#define av1_scaling_shift AV1_DEC_REG(8, 0, 0xf) > +#define av1_bit_depth_c_minus8 AV1_DEC_REG(8, 4, 0x3) > +#define av1_bit_depth_y_minus8 AV1_DEC_REG(8, 6, 0x3) > +#define av1_quant_base_qindex AV1_DEC_REG(8, 8, 0xff) > +#define av1_idr_pic_e AV1_DEC_REG(8, 16, 0x1) > +#define av1_superres_pic_width AV1_DEC_REG(8, 17, 0x7fff) > + > +#define av1_ref4_sign_bias AV1_DEC_REG(9, 2, 0x1) > +#define av1_ref5_sign_bias AV1_DEC_REG(9, 3, 0x1) > +#define av1_ref6_sign_bias AV1_DEC_REG(9, 4, 0x1) > +#define av1_mf1_type AV1_DEC_REG(9, 5, 0x7) > +#define av1_mf2_type AV1_DEC_REG(9, 8, 0x7) > +#define av1_mf3_type AV1_DEC_REG(9, 11, 0x7) > +#define av1_scale_denom_minus9 AV1_DEC_REG(9, 14, 0x7) > +#define av1_last_active_seg AV1_DEC_REG(9, 17, 0x7) > +#define av1_context_update_tile_id AV1_DEC_REG(9, 20, 0xfff) > + > +#define av1_tile_transpose AV1_DEC_REG(10, 0, 0x1) > +#define av1_tile_enable AV1_DEC_REG(10, 1, 0x1) > +#define av1_multicore_full_width AV1_DEC_REG(10, 2, 0xff) > +#define av1_num_tile_rows_8k AV1_DEC_REG(10, 10, 0x7f) > +#define av1_num_tile_cols_8k AV1_DEC_REG(10, 17, 0x7f) > +#define av1_multicore_tile_start_x AV1_DEC_REG(10, 24, 0xff) > + > +#define av1_use_temporal3_mvs AV1_DEC_REG(11, 0, 0x1) > +#define av1_use_temporal2_mvs AV1_DEC_REG(11, 1, 0x1) > +#define av1_use_temporal1_mvs AV1_DEC_REG(11, 2, 0x1) > +#define av1_use_temporal0_mvs AV1_DEC_REG(11, 3, 0x1) > +#define av1_comp_pred_mode AV1_DEC_REG(11, 4, 0x3) > +#define av1_high_prec_mv_e AV1_DEC_REG(11, 7, 0x1) > +#define av1_mcomp_filt_type AV1_DEC_REG(11, 8, 0x7) > +#define av1_multicore_expect_context_update AV1_DEC_REG(11, 11, 0x1) > +#define av1_multicore_sbx_offset AV1_DEC_REG(11, 12, 0x7f) > +#define av1_ulticore_tile_col AV1_DEC_REG(11, 19, 0x7f) > +#define av1_transform_mode AV1_DEC_REG(11, 27, 0x7) > +#define av1_dec_tile_size_mag AV1_DEC_REG(11, 30, 0x3) > + > +#define av1_seg_quant_sign AV1_DEC_REG(12, 2, 0xff) > +#define av1_max_cb_size AV1_DEC_REG(12, 10, 0x7) > +#define av1_min_cb_size AV1_DEC_REG(12, 13, 0x7) > +#define av1_comp_pred_fixed_ref AV1_DEC_REG(12, 16, 0x7) > +#define av1_multicore_tile_width AV1_DEC_REG(12, 19, 0x7f) > +#define av1_pic_height_pad AV1_DEC_REG(12, 26, 0x7) > +#define av1_pic_width_pad AV1_DEC_REG(12, 29, 0x7) > + > +#define av1_segment_e AV1_DEC_REG(13, 0, 0x1) > +#define av1_segment_upd_e AV1_DEC_REG(13, 1, 0x1) > +#define av1_segment_temp_upd_e AV1_DEC_REG(13, 2, 0x1) > +#define av1_comp_pred_var_ref0_av1 AV1_DEC_REG(13, 3, 0x7) > +#define av1_comp_pred_var_ref1_av1 AV1_DEC_REG(13, 6, 0x7) > +#define av1_lossless_e AV1_DEC_REG(13, 9, 0x1) > +#define av1_qp_delta_ch_ac_av1 AV1_DEC_REG(13, 11, 0x7f) > +#define av1_qp_delta_ch_dc_av1 AV1_DEC_REG(13, 18, 0x7f) > +#define av1_qp_delta_y_dc_av1 AV1_DEC_REG(13, 25, 0x7f) > + > +#define av1_quant_seg0 AV1_DEC_REG(14, 0, 0xff) > +#define av1_filt_level_seg0 AV1_DEC_REG(14, 8, 0x3f) > +#define av1_skip_seg0 AV1_DEC_REG(14, 14, 0x1) > +#define av1_refpic_seg0 AV1_DEC_REG(14, 15, 0xf) > +#define av1_filt_level_delta0_seg0 AV1_DEC_REG(14, 19, 0x7f) > +#define av1_filt_level0 AV1_DEC_REG(14, 26, 0x3f) > + > +#define av1_quant_seg1 AV1_DEC_REG(15, 0, 0xff) > +#define av1_filt_level_seg1 AV1_DEC_REG(15, 8, 0x3f) > +#define av1_skip_seg1 AV1_DEC_REG(15, 14, 0x1) > +#define av1_refpic_seg1 AV1_DEC_REG(15, 15, 0xf) > +#define av1_filt_level_delta0_seg1 AV1_DEC_REG(15, 19, 0x7f) > +#define av1_filt_level1 AV1_DEC_REG(15, 26, 0x3f) > + > +#define av1_quant_seg2 AV1_DEC_REG(16, 0, 0xff) > +#define av1_filt_level_seg2 AV1_DEC_REG(16, 8, 0x3f) > +#define av1_skip_seg2 AV1_DEC_REG(16, 14, 0x1) > +#define av1_refpic_seg2 AV1_DEC_REG(16, 15, 0xf) > +#define av1_filt_level_delta0_seg2 AV1_DEC_REG(16, 19, 0x7f) > +#define av1_filt_level2 AV1_DEC_REG(16, 26, 0x3f) > + > +#define av1_quant_seg3 AV1_DEC_REG(17, 0, 0xff) > +#define av1_filt_level_seg3 AV1_DEC_REG(17, 8, 0x3f) > +#define av1_skip_seg3 AV1_DEC_REG(17, 14, 0x1) > +#define av1_refpic_seg3 AV1_DEC_REG(17, 15, 0xf) > +#define av1_filt_level_delta0_seg3 AV1_DEC_REG(17, 19, 0x7f) > +#define av1_filt_level3 AV1_DEC_REG(17, 26, 0x3f) > + > +#define av1_quant_seg4 AV1_DEC_REG(18, 0, 0xff) > +#define av1_filt_level_seg4 AV1_DEC_REG(18, 8, 0x3f) > +#define av1_skip_seg4 AV1_DEC_REG(18, 14, 0x1) > +#define av1_refpic_seg4 AV1_DEC_REG(18, 15, 0xf) > +#define av1_filt_level_delta0_seg4 AV1_DEC_REG(18, 19, 0x7f) > +#define av1_lr_type AV1_DEC_REG(18, 26, 0x3f) > + > +#define av1_quant_seg5 AV1_DEC_REG(19, 0, 0xff) > +#define av1_filt_level_seg5 AV1_DEC_REG(19, 8, 0x3f) > +#define av1_skip_seg5 AV1_DEC_REG(19, 14, 0x1) > +#define av1_refpic_seg5 AV1_DEC_REG(19, 15, 0xf) > +#define av1_filt_level_delta0_seg5 AV1_DEC_REG(19, 19, 0x7f) > +#define av1_lr_unit_size AV1_DEC_REG(19, 26, 0x3f) > + > +#define av1_filt_level_delta1_seg0 AV1_DEC_REG(20, 0, 0x7f) > +#define av1_filt_level_delta2_seg0 AV1_DEC_REG(20, 7, 0x7f) > +#define av1_filt_level_delta3_seg0 AV1_DEC_REG(20, 14, 0x7f) > +#define av1_global_mv_seg0 AV1_DEC_REG(20, 21, 0x1) > +#define av1_mf1_last_offset AV1_DEC_REG(20, 22, 0x1ff) > + > +#define av1_filt_level_delta1_seg1 AV1_DEC_REG(21, 0, 0x7f) > +#define av1_filt_level_delta2_seg1 AV1_DEC_REG(21, 7, 0x7f) > +#define av1_filt_level_delta3_seg1 AV1_DEC_REG(21, 14, 0x7f) > +#define av1_global_mv_seg1 AV1_DEC_REG(21, 21, 0x1) > +#define av1_mf1_last2_offset AV1_DEC_REG(21, 22, 0x1ff) > + > +#define av1_filt_level_delta1_seg2 AV1_DEC_REG(22, 0, 0x7f) > +#define av1_filt_level_delta2_seg2 AV1_DEC_REG(22, 7, 0x7f) > +#define av1_filt_level_delta3_seg2 AV1_DEC_REG(22, 14, 0x7f) > +#define av1_global_mv_seg2 AV1_DEC_REG(22, 21, 0x1) > +#define av1_mf1_last3_offset AV1_DEC_REG(22, 22, 0x1ff) > + > +#define av1_filt_level_delta1_seg3 AV1_DEC_REG(23, 0, 0x7f) > +#define av1_filt_level_delta2_seg3 AV1_DEC_REG(23, 7, 0x7f) > +#define av1_filt_level_delta3_seg3 AV1_DEC_REG(23, 14, 0x7f) > +#define av1_global_mv_seg3 AV1_DEC_REG(23, 21, 0x1) > +#define av1_mf1_golden_offset AV1_DEC_REG(23, 22, 0x1ff) > + > +#define av1_filt_level_delta1_seg4 AV1_DEC_REG(24, 0, 0x7f) > +#define av1_filt_level_delta2_seg4 AV1_DEC_REG(24, 7, 0x7f) > +#define av1_filt_level_delta3_seg4 AV1_DEC_REG(24, 14, 0x7f) > +#define av1_global_mv_seg4 AV1_DEC_REG(24, 21, 0x1) > +#define av1_mf1_bwdref_offset AV1_DEC_REG(24, 22, 0x1ff) > + > +#define av1_filt_level_delta1_seg5 AV1_DEC_REG(25, 0, 0x7f) > +#define av1_filt_level_delta2_seg5 AV1_DEC_REG(25, 7, 0x7f) > +#define av1_filt_level_delta3_seg5 AV1_DEC_REG(25, 14, 0x7f) > +#define av1_global_mv_seg5 AV1_DEC_REG(25, 21, 0x1) > +#define av1_mf1_altref2_offset AV1_DEC_REG(25, 22, 0x1ff) > + > +#define av1_filt_level_delta1_seg6 AV1_DEC_REG(26, 0, 0x7f) > +#define av1_filt_level_delta2_seg6 AV1_DEC_REG(26, 7, 0x7f) > +#define av1_filt_level_delta3_seg6 AV1_DEC_REG(26, 14, 0x7f) > +#define av1_global_mv_seg6 AV1_DEC_REG(26, 21, 0x1) > +#define av1_mf1_altref_offset AV1_DEC_REG(26, 22, 0x1ff) > + > +#define av1_filt_level_delta1_seg7 AV1_DEC_REG(27, 0, 0x7f) > +#define av1_filt_level_delta2_seg7 AV1_DEC_REG(27, 7, 0x7f) > +#define av1_filt_level_delta3_seg7 AV1_DEC_REG(27, 14, 0x7f) > +#define av1_global_mv_seg7 AV1_DEC_REG(27, 21, 0x1) > +#define av1_mf2_last_offset AV1_DEC_REG(27, 22, 0x1ff) > + > +#define av1_cb_offset AV1_DEC_REG(28, 0, 0x1ff) > +#define av1_cb_luma_mult AV1_DEC_REG(28, 9, 0xff) > +#define av1_cb_mult AV1_DEC_REG(28, 17, 0xff) > +#define av1_quant_delta_v_dc AV1_DEC_REG(28, 25, 0x7f) > + > +#define av1_cr_offset AV1_DEC_REG(29, 0, 0x1ff) > +#define av1_cr_luma_mult AV1_DEC_REG(29, 9, 0xff) > +#define av1_cr_mult AV1_DEC_REG(29, 17, 0xff) > +#define av1_quant_delta_v_ac AV1_DEC_REG(29, 25, 0x7f) > + > +#define av1_filt_ref_adj_5 AV1_DEC_REG(30, 0, 0x7f) > +#define av1_filt_ref_adj_4 AV1_DEC_REG(30, 7, 0x7f) > +#define av1_filt_mb_adj_1 AV1_DEC_REG(30, 14, 0x7f) > +#define av1_filt_mb_adj_0 AV1_DEC_REG(30, 21, 0x7f) > +#define av1_filt_sharpness AV1_DEC_REG(30, 28, 0x7) > + > +#define av1_quant_seg6 AV1_DEC_REG(31, 0, 0xff) > +#define av1_filt_level_seg6 AV1_DEC_REG(31, 8, 0x3f) > +#define av1_skip_seg6 AV1_DEC_REG(31, 14, 0x1) > +#define av1_refpic_seg6 AV1_DEC_REG(31, 15, 0xf) > +#define av1_filt_level_delta0_seg6 AV1_DEC_REG(31, 19, 0x7f) > +#define av1_skip_ref0 AV1_DEC_REG(31, 26, 0xf) > + > +#define av1_quant_seg7 AV1_DEC_REG(32, 0, 0xff) > +#define av1_filt_level_seg7 AV1_DEC_REG(32, 8, 0x3f) > +#define av1_skip_seg7 AV1_DEC_REG(32, 14, 0x1) > +#define av1_refpic_seg7 AV1_DEC_REG(32, 15, 0xf) > +#define av1_filt_level_delta0_seg7 AV1_DEC_REG(32, 19, 0x7f) > +#define av1_skip_ref1 AV1_DEC_REG(32, 26, 0xf) > + > +#define av1_ref0_height AV1_DEC_REG(33, 0, 0xffff) > +#define av1_ref0_width AV1_DEC_REG(33, 16, 0xffff) > + > +#define av1_ref1_height AV1_DEC_REG(34, 0, 0xffff) > +#define av1_ref1_width AV1_DEC_REG(34, 16, 0xffff) > + > +#define av1_ref2_height AV1_DEC_REG(35, 0, 0xffff) > +#define av1_ref2_width AV1_DEC_REG(35, 16, 0xffff) > + > +#define av1_ref0_ver_scale AV1_DEC_REG(36, 0, 0xffff) > +#define av1_ref0_hor_scale AV1_DEC_REG(36, 16, 0xffff) > + > +#define av1_ref1_ver_scale AV1_DEC_REG(37, 0, 0xffff) > +#define av1_ref1_hor_scale AV1_DEC_REG(37, 16, 0xffff) > + > +#define av1_ref2_ver_scale AV1_DEC_REG(38, 0, 0xffff) > +#define av1_ref2_hor_scale AV1_DEC_REG(38, 16, 0xffff) > + > +#define av1_ref3_ver_scale AV1_DEC_REG(39, 0, 0xffff) > +#define av1_ref3_hor_scale AV1_DEC_REG(39, 16, 0xffff) > + > +#define av1_ref4_ver_scale AV1_DEC_REG(40, 0, 0xffff) > +#define av1_ref4_hor_scale AV1_DEC_REG(40, 16, 0xffff) > + > +#define av1_ref5_ver_scale AV1_DEC_REG(41, 0, 0xffff) > +#define av1_ref5_hor_scale AV1_DEC_REG(41, 16, 0xffff) > + > +#define av1_ref6_ver_scale AV1_DEC_REG(42, 0, 0xffff) > +#define av1_ref6_hor_scale AV1_DEC_REG(42, 16, 0xffff) > + > +#define av1_ref3_height AV1_DEC_REG(43, 0, 0xffff) > +#define av1_ref3_width AV1_DEC_REG(43, 16, 0xffff) > + > +#define av1_ref4_height AV1_DEC_REG(44, 0, 0xffff) > +#define av1_ref4_width AV1_DEC_REG(44, 16, 0xffff) > + > +#define av1_ref5_height AV1_DEC_REG(45, 0, 0xffff) > +#define av1_ref5_width AV1_DEC_REG(45, 16, 0xffff) > + > +#define av1_ref6_height AV1_DEC_REG(46, 0, 0xffff) > +#define av1_ref6_width AV1_DEC_REG(46, 16, 0xffff) > + > +#define av1_mf2_last2_offset AV1_DEC_REG(47, 0, 0x1ff) > +#define av1_mf2_last3_offset AV1_DEC_REG(47, 9, 0x1ff) > +#define av1_mf2_golden_offset AV1_DEC_REG(47, 18, 0x1ff) > +#define av1_qmlevel_y AV1_DEC_REG(47, 27, 0xf) > + > +#define av1_mf2_bwdref_offset AV1_DEC_REG(48, 0, 0x1ff) > +#define av1_mf2_altref2_offset AV1_DEC_REG(48, 9, 0x1ff) > +#define av1_mf2_altref_offset AV1_DEC_REG(48, 18, 0x1ff) > +#define av1_qmlevel_u AV1_DEC_REG(48, 27, 0xf) > + > +#define av1_filt_ref_adj_6 AV1_DEC_REG(49, 0, 0x7f) > +#define av1_filt_ref_adj_7 AV1_DEC_REG(49, 7, 0x7f) > +#define av1_qmlevel_v AV1_DEC_REG(49, 14, 0xf) > + > +#define av1_superres_chroma_step AV1_DEC_REG(51, 0, 0x3fff) > +#define av1_superres_luma_step AV1_DEC_REG(51, 14, 0x3fff) > + > +#define av1_superres_init_chroma_subpel_x AV1_DEC_REG(52, 0, 0x3fff) > +#define av1_superres_init_luma_subpel_x AV1_DEC_REG(52, 14, 0x3fff) > + > +#define av1_cdef_chroma_secondary_strength AV1_DEC_REG(53, 0, 0xffff) > +#define av1_cdef_luma_secondary_strength AV1_DEC_REG(53, 16, 0xffff) > + > +#define av1_apf_threshold AV1_DEC_REG(55, 0, 0xffff) > +#define av1_apf_single_pu_mode AV1_DEC_REG(55, 30, 0x1) > +#define av1_apf_disable AV1_DEC_REG(55, 30, 0x1) > + > +#define av1_dec_max_burst AV1_DEC_REG(58, 0, 0xff) > +#define av1_dec_buswidth AV1_DEC_REG(58, 8, 0x7) > +#define av1_dec_multicore_mode AV1_DEC_REG(58, 11, 0x3) > +#define av1_dec_axi_wd_id_e AV1_DEC_REG(58, 13, 0x1) > +#define av1_dec_axi_rd_id_e AV1_DEC_REG(58, 14, 0x1) > +#define av1_dec_mc_polltime AV1_DEC_REG(58, 17, 0x3ff) > +#define av1_dec_mc_pollmode AV1_DEC_REG(58, 27, 0x3) > + > +#define av1_filt_ref_adj_3 AV1_DEC_REG(59, 0, 0x3f) > +#define av1_filt_ref_adj_2 AV1_DEC_REG(59, 7, 0x3f) > +#define av1_filt_ref_adj_1 AV1_DEC_REG(59, 14, 0x3f) > +#define av1_filt_ref_adj_0 AV1_DEC_REG(59, 21, 0x3f) > +#define av1_ref0_sign_bias AV1_DEC_REG(59, 28, 0x1) > +#define av1_ref1_sign_bias AV1_DEC_REG(59, 29, 0x1) > +#define av1_ref2_sign_bias AV1_DEC_REG(59, 30, 0x1) > +#define av1_ref3_sign_bias AV1_DEC_REG(59, 31, 0x1) > + > +#define av1_cur_last_roffset AV1_DEC_REG(184, 0, 0x1ff) > +#define av1_cur_last_offset AV1_DEC_REG(184, 9, 0x1ff) > +#define av1_mf3_last_offset AV1_DEC_REG(184, 18, 0x1ff) > +#define av1_ref0_gm_mode AV1_DEC_REG(184, 27, 0x3) > + > +#define av1_cur_last2_roffset AV1_DEC_REG(185, 0, 0x1ff) > +#define av1_cur_last2_offset AV1_DEC_REG(185, 9, 0x1ff) > +#define av1_mf3_last2_offset AV1_DEC_REG(185, 18, 0x1ff) > +#define av1_ref1_gm_mode AV1_DEC_REG(185, 27, 0x3) > + > +#define av1_cur_last3_roffset AV1_DEC_REG(186, 0, 0x1ff) > +#define av1_cur_last3_offset AV1_DEC_REG(186, 9, 0x1ff) > +#define av1_mf3_last3_offset AV1_DEC_REG(186, 18, 0x1ff) > +#define av1_ref2_gm_mode AV1_DEC_REG(186, 27, 0x3) > + > +#define av1_cur_golden_roffset AV1_DEC_REG(187, 0, 0x1ff) > +#define av1_cur_golden_offset AV1_DEC_REG(187, 9, 0x1ff) > +#define av1_mf3_golden_offset AV1_DEC_REG(187, 18, 0x1ff) > +#define av1_ref3_gm_mode AV1_DEC_REG(187, 27, 0x3) > + > +#define av1_cur_bwdref_roffset AV1_DEC_REG(188, 0, 0x1ff) > +#define av1_cur_bwdref_offset AV1_DEC_REG(188, 9, 0x1ff) > +#define av1_mf3_bwdref_offset AV1_DEC_REG(188, 18, 0x1ff) > +#define av1_ref4_gm_mode AV1_DEC_REG(188, 27, 0x3) > + > +#define av1_cur_altref2_roffset AV1_DEC_REG(257, 0, 0x1ff) > +#define av1_cur_altref2_offset AV1_DEC_REG(257, 9, 0x1ff) > +#define av1_mf3_altref2_offset AV1_DEC_REG(257, 18, 0x1ff) > +#define av1_ref5_gm_mode AV1_DEC_REG(257, 27, 0x3) > + > +#define av1_strm_buffer_len AV1_DEC_REG(258, 0, 0xffffffff) > + > +#define av1_strm_start_offset AV1_DEC_REG(259, 0, 0xffffffff) > + > +#define av1_ppd_blend_exist AV1_DEC_REG(260, 21, 0x1) > +#define av1_ppd_dith_exist AV1_DEC_REG(260, 23, 0x1) > +#define av1_ablend_crop_e AV1_DEC_REG(260, 24, 0x1) > +#define av1_pp_format_p010_e AV1_DEC_REG(260, 25, 0x1) > +#define av1_pp_format_customer1_e AV1_DEC_REG(260, 26, 0x1) > +#define av1_pp_crop_exist AV1_DEC_REG(260, 27, 0x1) > +#define av1_pp_up_level AV1_DEC_REG(260, 28, 0x1) > +#define av1_pp_down_level AV1_DEC_REG(260, 29, 0x3) > +#define av1_pp_exist AV1_DEC_REG(260, 31, 0x1) > + > +#define av1_cur_altref_roffset AV1_DEC_REG(262, 0, 0x1ff) > +#define av1_cur_altref_offset AV1_DEC_REG(262, 9, 0x1ff) > +#define av1_mf3_altref_offset AV1_DEC_REG(262, 18, 0x1ff) > +#define av1_ref6_gm_mode AV1_DEC_REG(262, 27, 0x3) > + > +#define av1_cdef_luma_primary_strength AV1_DEC_REG(263, 0, 0xffffffff) > + > +#define av1_cdef_chroma_primary_strength AV1_DEC_REG(264, 0, 0xffffffff) > + > +#define av1_axi_arqos AV1_DEC_REG(265, 0, 0xf) > +#define av1_axi_awqos AV1_DEC_REG(265, 4, 0xf) > +#define av1_axi_wr_ostd_threshold AV1_DEC_REG(265, 8, 0x3ff) > +#define av1_axi_rd_ostd_threshold AV1_DEC_REG(265, 18, 0x3ff) > +#define av1_axi_wr_4k_dis AV1_DEC_REG(265, 31, 0x1) > + > +#define av1_128bit_mode AV1_DEC_REG(266, 5, 0x1) > +#define av1_wr_shaper_bypass AV1_DEC_REG(266, 10, 0x1) > +#define av1_error_conceal_e AV1_DEC_REG(266, 30, 0x1) > + > +#define av1_superres_chroma_step_invra AV1_DEC_REG(298, 0, 0xffff) > +#define av1_superres_luma_step_invra AV1_DEC_REG(298, 16, 0xffff) > + > +#define av1_dec_alignment AV1_DEC_REG(314, 0, 0xffff) > + > +#define av1_ext_timeout_cycles AV1_DEC_REG(318, 0, 0x7fffffff) > +#define av1_ext_timeout_override_e AV1_DEC_REG(318, 31, 0x1) > + > +#define av1_timeout_cycles AV1_DEC_REG(319, 0, 0x7fffffff) > +#define av1_timeout_override_e AV1_DEC_REG(319, 31, 0x1) > + > +#define av1_pp_out_e AV1_DEC_REG(320, 0, 0x1) > +#define av1_pp_cr_first AV1_DEC_REG(320, 1, 0x1) > +#define av1_pp_out_mode AV1_DEC_REG(320, 2, 0x1) > +#define av1_pp_out_tile_e AV1_DEC_REG(320, 3, 0x1) > +#define av1_pp_status AV1_DEC_REG(320, 4, 0xf) > +#define av1_pp_in_blk_size AV1_DEC_REG(320, 8, 0x7) > +#define av1_pp_out_p010_fmt AV1_DEC_REG(320, 11, 0x3) > +#define av1_pp_out_rgb_fmt AV1_DEC_REG(320, 13, 0x1f) > +#define av1_rgb_range_max AV1_DEC_REG(320, 18, 0xfff) > +#define av1_pp_rgb_planar AV1_DEC_REG(320, 30, 0x1) > + > +#define av1_scale_hratio AV1_DEC_REG(322, 0, 0x3ffff) > +#define av1_pp_out_format AV1_DEC_REG(322, 18, 0x1f) > +#define av1_ver_scale_mode AV1_DEC_REG(322, 23, 0x3) > +#define av1_hor_scale_mode AV1_DEC_REG(322, 25, 0x3) > +#define av1_pp_in_format AV1_DEC_REG(322, 27, 0x1f) > + > +#define av1_pp_out_c_stride AV1_DEC_REG(329, 0, 0xffff) > +#define av1_pp_out_y_stride AV1_DEC_REG(329, 16, 0xffff) > + > +#define av1_pp_in_height AV1_DEC_REG(331, 0, 0xffff) > +#define av1_pp_in_width AV1_DEC_REG(331, 16, 0xffff) > + > +#define av1_pp_out_height AV1_DEC_REG(332, 0, 0xffff) > +#define av1_pp_out_width AV1_DEC_REG(332, 16, 0xffff) > + > +#define av1_pp1_dup_ver AV1_DEC_REG(394, 0, 0xff) > +#define av1_pp1_dup_hor AV1_DEC_REG(394, 8, 0xff) > +#define av1_pp0_dup_ver AV1_DEC_REG(394, 16, 0xff) > +#define av1_pp0_dup_hor AV1_DEC_REG(394, 24, 0xff) > + > +#define AV1_TILE_OUT_LU (AV1_SWREG(65)) > +#define AV1_REFERENCE_Y(i) (AV1_SWREG(67) + ((i) * 0x8)) > +#define AV1_SEGMENTATION (AV1_SWREG(81)) > +#define AV1_GLOBAL_MODEL (AV1_SWREG(83)) > +#define AV1_CDEF_COL (AV1_SWREG(85)) > +#define AV1_SR_COL (AV1_SWREG(89)) > +#define AV1_LR_COL (AV1_SWREG(91)) > +#define AV1_FILM_GRAIN (AV1_SWREG(95)) > +#define AV1_TILE_OUT_CH (AV1_SWREG(99)) > +#define AV1_REFERENCE_CB(i) (AV1_SWREG(101) + ((i) * 0x8)) > +#define AV1_TILE_OUT_MV (AV1_SWREG(133)) > +#define AV1_REFERENCE_MV(i) (AV1_SWREG(135) + ((i) * 0x8)) > +#define AV1_TILE_BASE (AV1_SWREG(167)) > +#define AV1_INPUT_STREAM (AV1_SWREG(169)) > +#define AV1_PROP_TABLE_OUT (AV1_SWREG(171)) > +#define AV1_PROP_TABLE (AV1_SWREG(173)) > +#define AV1_MC_SYNC_CURR (AV1_SWREG(175)) > +#define AV1_MC_SYNC_LEFT (AV1_SWREG(177)) > +#define AV1_DB_DATA_COL (AV1_SWREG(179)) > +#define AV1_DB_CTRL_COL (AV1_SWREG(183)) > +#define AV1_PP_OUT_LU (AV1_SWREG(326)) > +#define AV1_PP_OUT_CH (AV1_SWREG(328)) > + > +#endif /* _ROCKCHIP_VPU981_REGS_H_ */ Regards, Hans
Hi Benjamin, I love your patch! Perhaps something to improve: [auto build test WARNING on media-tree/master] [also build test WARNING on rockchip/for-next linus/master v6.2-rc3 next-20230112] [cannot apply to pza/reset/next pza/imx-drm/next] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch#_base_tree_information] url: https://github.com/intel-lab-lkp/linux/commits/Benjamin-Gaignard/dt-bindings-media-rockchip-vpu-Add-rk3588-vpu-compatible/20230112-010155 base: git://linuxtv.org/media_tree.git master patch link: https://lore.kernel.org/r/20230111165931.753763-11-benjamin.gaignard%40collabora.com patch subject: [PATCH v3 10/13] media: verisilicon: Add Rockchip AV1 decoder config: hexagon-randconfig-r011-20230110 compiler: clang version 16.0.0 (https://github.com/llvm/llvm-project 8d9828ef5aa9688500657d36cd2aefbe12bbd162) reproduce (this is a W=1 build): wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # https://github.com/intel-lab-lkp/linux/commit/e6afd9e0717775b8e81ee22d5f2dc54fdb1c3a5a git remote add linux-review https://github.com/intel-lab-lkp/linux git fetch --no-tags linux-review Benjamin-Gaignard/dt-bindings-media-rockchip-vpu-Add-rk3588-vpu-compatible/20230112-010155 git checkout e6afd9e0717775b8e81ee22d5f2dc54fdb1c3a5a # save the config file mkdir build_dir && cp config build_dir/.config COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon olddefconfig COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross W=1 O=build_dir ARCH=hexagon SHELL=/bin/bash drivers/media/platform/verisilicon/ If you fix the issue, kindly add following tag where applicable | Reported-by: kernel test robot <lkp@intel.com> All warnings (new ones prefixed by >>): In file included from drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:8: In file included from include/media/v4l2-mem2mem.h:16: In file included from include/media/videobuf2-v4l2.h:16: In file included from include/media/videobuf2-core.h:18: In file included from include/linux/dma-buf.h:16: In file included from include/linux/iosys-map.h:10: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:547:31: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __raw_readb(PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:560:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le16_to_cpu((__le16 __force)__raw_readw(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:37:51: note: expanded from macro '__le16_to_cpu' #define __le16_to_cpu(x) ((__force __u16)(__le16)(x)) ^ In file included from drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:8: In file included from include/media/v4l2-mem2mem.h:16: In file included from include/media/videobuf2-v4l2.h:16: In file included from include/media/videobuf2-core.h:18: In file included from include/linux/dma-buf.h:16: In file included from include/linux/iosys-map.h:10: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:573:61: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] val = __le32_to_cpu((__le32 __force)__raw_readl(PCI_IOBASE + addr)); ~~~~~~~~~~ ^ include/uapi/linux/byteorder/little_endian.h:35:51: note: expanded from macro '__le32_to_cpu' #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) ^ In file included from drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:8: In file included from include/media/v4l2-mem2mem.h:16: In file included from include/media/videobuf2-v4l2.h:16: In file included from include/media/videobuf2-core.h:18: In file included from include/linux/dma-buf.h:16: In file included from include/linux/iosys-map.h:10: In file included from include/linux/io.h:13: In file included from arch/hexagon/include/asm/io.h:334: include/asm-generic/io.h:584:33: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writeb(value, PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:594:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writew((u16 __force)cpu_to_le16(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ include/asm-generic/io.h:604:59: warning: performing pointer arithmetic on a null pointer has undefined behavior [-Wnull-pointer-arithmetic] __raw_writel((u32 __force)cpu_to_le32(value), PCI_IOBASE + addr); ~~~~~~~~~~ ^ >> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:227:6: warning: no previous prototype for function 'rockchip_vpu981_av1_dec_tiles_free' [-Wmissing-prototypes] void rockchip_vpu981_av1_dec_tiles_free(struct hantro_ctx *ctx) ^ drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:227:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void rockchip_vpu981_av1_dec_tiles_free(struct hantro_ctx *ctx) ^ static drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:325:6: warning: no previous prototype for function 'rockchip_vpu981_av1_dec_exit' [-Wmissing-prototypes] void rockchip_vpu981_av1_dec_exit(struct hantro_ctx *ctx) ^ drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:325:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void rockchip_vpu981_av1_dec_exit(struct hantro_ctx *ctx) ^ static drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:361:5: warning: no previous prototype for function 'rockchip_vpu981_av1_dec_init' [-Wmissing-prototypes] int rockchip_vpu981_av1_dec_init(struct hantro_ctx *ctx) ^ drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:361:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int rockchip_vpu981_av1_dec_init(struct hantro_ctx *ctx) ^ static drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:788:26: warning: variable 'chroma_addr' set but not used [-Wunused-but-set-variable] dma_addr_t luma_addr, chroma_addr, mv_addr = 0; ^ drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:1139:6: warning: no previous prototype for function 'rockchip_vpu981_av1_dec_done' [-Wmissing-prototypes] void rockchip_vpu981_av1_dec_done(struct hantro_ctx *ctx) ^ drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:1139:1: note: declare 'static' if the function is not intended to be used outside of this translation unit void rockchip_vpu981_av1_dec_done(struct hantro_ctx *ctx) ^ static drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:1931:5: warning: no previous prototype for function 'rockchip_vpu981_av1_dec_run' [-Wmissing-prototypes] int rockchip_vpu981_av1_dec_run(struct hantro_ctx *ctx) ^ drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:1931:1: note: declare 'static' if the function is not intended to be used outside of this translation unit int rockchip_vpu981_av1_dec_run(struct hantro_ctx *ctx) ^ static >> drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c:1931:5: warning: stack frame size (1176) exceeds limit (1024) in 'rockchip_vpu981_av1_dec_run' [-Wframe-larger-than] int rockchip_vpu981_av1_dec_run(struct hantro_ctx *ctx) ^ 120/1176 (10.20%) spills, 1056/1176 (89.80%) variables 13 warnings generated. vim +/rockchip_vpu981_av1_dec_tiles_free +227 drivers/media/platform/verisilicon/rockchip_vpu981_hw_av1_dec.c 226 > 227 void rockchip_vpu981_av1_dec_tiles_free(struct hantro_ctx *ctx) 228 { 229 struct hantro_dev *vpu = ctx->dev; 230 struct hantro_av1_dec_hw_ctx *av1_dec = &ctx->av1_dec; 231 232 if (av1_dec->db_data_col.cpu) 233 dma_free_coherent(vpu->dev, av1_dec->db_data_col.size, 234 av1_dec->db_data_col.cpu, 235 av1_dec->db_data_col.dma); 236 av1_dec->db_data_col.cpu = NULL; 237 238 if (av1_dec->db_ctrl_col.cpu) 239 dma_free_coherent(vpu->dev, av1_dec->db_ctrl_col.size, 240 av1_dec->db_ctrl_col.cpu, 241 av1_dec->db_ctrl_col.dma); 242 av1_dec->db_ctrl_col.cpu = NULL; 243 244 if (av1_dec->cdef_col.cpu) 245 dma_free_coherent(vpu->dev, av1_dec->cdef_col.size, 246 av1_dec->cdef_col.cpu, av1_dec->cdef_col.dma); 247 av1_dec->cdef_col.cpu = NULL; 248 249 if (av1_dec->sr_col.cpu) 250 dma_free_coherent(vpu->dev, av1_dec->sr_col.size, 251 av1_dec->sr_col.cpu, av1_dec->sr_col.dma); 252 av1_dec->sr_col.cpu = NULL; 253 254 if (av1_dec->lr_col.cpu) 255 dma_free_coherent(vpu->dev, av1_dec->lr_col.size, 256 av1_dec->lr_col.cpu, av1_dec->lr_col.dma); 257 av1_dec->lr_col.cpu = NULL; 258 } 259 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests # # Automatically generated file; DO NOT EDIT. # Linux/hexagon 6.2.0-rc1 Kernel Configuration # CONFIG_CC_VERSION_TEXT="clang version 16.0.0 (git://gitmirror/llvm_project 8d9828ef5aa9688500657d36cd2aefbe12bbd162)" CONFIG_GCC_VERSION=0 CONFIG_CC_IS_CLANG=y CONFIG_CLANG_VERSION=160000 CONFIG_AS_IS_LLVM=y CONFIG_AS_VERSION=160000 CONFIG_LD_VERSION=0 CONFIG_LD_IS_LLD=y CONFIG_LLD_VERSION=160000 CONFIG_RUST_IS_AVAILABLE=y CONFIG_CC_HAS_ASM_GOTO_OUTPUT=y CONFIG_CC_HAS_ASM_GOTO_TIED_OUTPUT=y CONFIG_TOOLS_SUPPORT_RELR=y CONFIG_CC_HAS_ASM_INLINE=y CONFIG_CC_HAS_NO_PROFILE_FN_ATTR=y CONFIG_PAHOLE_VERSION=123 CONFIG_CONSTRUCTORS=y CONFIG_IRQ_WORK=y # # General setup # CONFIG_INIT_ENV_ARG_LIMIT=32 CONFIG_COMPILE_TEST=y # CONFIG_WERROR is not set CONFIG_LOCALVERSION="" CONFIG_BUILD_SALT="" CONFIG_DEFAULT_INIT="" CONFIG_DEFAULT_HOSTNAME="(none)" CONFIG_SYSVIPC=y CONFIG_SYSVIPC_SYSCTL=y # CONFIG_POSIX_MQUEUE is not set # CONFIG_WATCH_QUEUE is not set CONFIG_CROSS_MEMORY_ATTACH=y CONFIG_USELIB=y CONFIG_AUDIT=y # # IRQ subsystem # CONFIG_GENERIC_IRQ_PROBE=y CONFIG_GENERIC_IRQ_SHOW=y CONFIG_GENERIC_IRQ_CHIP=y CONFIG_IRQ_DOMAIN=y CONFIG_IRQ_SIM=y CONFIG_IRQ_DOMAIN_HIERARCHY=y # CONFIG_GENERIC_IRQ_DEBUGFS is not set # end of IRQ subsystem CONFIG_GENERIC_CLOCKEVENTS=y CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y CONFIG_TIME_KUNIT_TEST=y CONFIG_CONTEXT_TRACKING=y CONFIG_CONTEXT_TRACKING_IDLE=y # # Timers subsystem # CONFIG_HZ_PERIODIC=y # CONFIG_NO_HZ_IDLE is not set CONFIG_NO_HZ=y # CONFIG_HIGH_RES_TIMERS is not set # end of Timers subsystem CONFIG_BPF=y # # BPF subsystem # CONFIG_BPF_SYSCALL=y # CONFIG_BPF_UNPRIV_DEFAULT_OFF is not set CONFIG_USERMODE_DRIVER=y # end of BPF subsystem CONFIG_PREEMPT_NONE_BUILD=y CONFIG_PREEMPT_NONE=y # # CPU/Task time and stats accounting # CONFIG_TICK_CPU_ACCOUNTING=y CONFIG_BSD_PROCESS_ACCT=y CONFIG_BSD_PROCESS_ACCT_V3=y # CONFIG_TASKSTATS is not set # CONFIG_PSI is not set # end of CPU/Task time and stats accounting CONFIG_CPU_ISOLATION=y # # RCU Subsystem # CONFIG_TREE_RCU=y # CONFIG_RCU_EXPERT is not set CONFIG_SRCU=y CONFIG_TREE_SRCU=y CONFIG_TASKS_RCU_GENERIC=y CONFIG_TASKS_TRACE_RCU=y CONFIG_RCU_STALL_COMMON=y CONFIG_RCU_NEED_SEGCBLIST=y # end of RCU Subsystem # CONFIG_IKCONFIG is not set CONFIG_IKHEADERS=y CONFIG_LOG_BUF_SHIFT=17 CONFIG_LOG_CPU_MAX_BUF_SHIFT=12 CONFIG_PRINTK_SAFE_LOG_BUF_SHIFT=13 CONFIG_PRINTK_INDEX=y # # Scheduler features # # end of Scheduler features CONFIG_CC_IMPLICIT_FALLTHROUGH="-Wimplicit-fallthrough" CONFIG_GCC12_NO_ARRAY_BOUNDS=y CONFIG_CGROUPS=y CONFIG_CGROUP_FAVOR_DYNMODS=y # CONFIG_MEMCG is not set CONFIG_BLK_CGROUP=y CONFIG_CGROUP_SCHED=y CONFIG_FAIR_GROUP_SCHED=y CONFIG_CFS_BANDWIDTH=y # CONFIG_RT_GROUP_SCHED is not set # CONFIG_CGROUP_PIDS is not set # CONFIG_CGROUP_RDMA is not set # CONFIG_CGROUP_FREEZER is not set CONFIG_CPUSETS=y # CONFIG_PROC_PID_CPUSET is not set # CONFIG_CGROUP_DEVICE is not set # CONFIG_CGROUP_CPUACCT is not set # CONFIG_CGROUP_BPF is not set CONFIG_CGROUP_MISC=y # CONFIG_CGROUP_DEBUG is not set CONFIG_SOCK_CGROUP_DATA=y CONFIG_NAMESPACES=y CONFIG_UTS_NS=y CONFIG_IPC_NS=y # CONFIG_USER_NS is not set # CONFIG_PID_NS is not set # CONFIG_NET_NS is not set CONFIG_CHECKPOINT_RESTORE=y CONFIG_SCHED_AUTOGROUP=y # CONFIG_SYSFS_DEPRECATED is not set # CONFIG_RELAY is not set CONFIG_BLK_DEV_INITRD=y CONFIG_INITRAMFS_SOURCE="" # CONFIG_RD_GZIP is not set CONFIG_RD_BZIP2=y # CONFIG_RD_LZMA is not set # CONFIG_RD_XZ is not set CONFIG_RD_LZO=y # CONFIG_RD_LZ4 is not set # CONFIG_RD_ZSTD is not set CONFIG_BOOT_CONFIG=y # CONFIG_BOOT_CONFIG_EMBED is not set CONFIG_INITRAMFS_PRESERVE_MTIME=y CONFIG_CC_OPTIMIZE_FOR_PERFORMANCE=y # CONFIG_CC_OPTIMIZE_FOR_SIZE is not set CONFIG_LD_ORPHAN_WARN=y CONFIG_LD_ORPHAN_WARN_LEVEL="warn" CONFIG_SYSCTL=y # CONFIG_EXPERT is not set CONFIG_MULTIUSER=y CONFIG_SYSFS_SYSCALL=y CONFIG_FHANDLE=y CONFIG_POSIX_TIMERS=y CONFIG_PRINTK=y CONFIG_BUG=y CONFIG_ELF_CORE=y CONFIG_BASE_FULL=y CONFIG_FUTEX=y CONFIG_FUTEX_PI=y CONFIG_EPOLL=y CONFIG_SIGNALFD=y CONFIG_TIMERFD=y CONFIG_EVENTFD=y CONFIG_SHMEM=y CONFIG_AIO=y CONFIG_IO_URING=y CONFIG_ADVISE_SYSCALLS=y CONFIG_MEMBARRIER=y CONFIG_KALLSYMS=y # CONFIG_KALLSYMS_SELFTEST is not set CONFIG_KALLSYMS_ALL=y CONFIG_KALLSYMS_BASE_RELATIVE=y CONFIG_KCMP=y # CONFIG_EMBEDDED is not set CONFIG_HAVE_PERF_EVENTS=y # # Kernel Performance Events And Counters # # CONFIG_PERF_EVENTS is not set # end of Kernel Performance Events And Counters CONFIG_SYSTEM_DATA_VERIFICATION=y # CONFIG_PROFILING is not set CONFIG_TRACEPOINTS=y # end of General setup # # Linux Kernel Configuration for Hexagon # CONFIG_HEXAGON=y CONFIG_HEXAGON_PHYS_OFFSET=y CONFIG_FRAME_POINTER=y CONFIG_LOCKDEP_SUPPORT=y CONFIG_EARLY_PRINTK=y CONFIG_MMU=y CONFIG_GENERIC_CSUM=y CONFIG_GENERIC_HWEIGHT=y CONFIG_STACKTRACE_SUPPORT=y CONFIG_GENERIC_BUG=y # # Machine selection # CONFIG_HEXAGON_COMET=y CONFIG_HEXAGON_ARCH_VERSION=2 CONFIG_CMDLINE="" CONFIG_SMP=y CONFIG_NR_CPUS=6 # CONFIG_PAGE_SIZE_4KB is not set # CONFIG_PAGE_SIZE_16KB is not set # CONFIG_PAGE_SIZE_64KB is not set CONFIG_PAGE_SIZE_256KB=y CONFIG_HZ_100=y # CONFIG_HZ_250 is not set # CONFIG_HZ_300 is not set # CONFIG_HZ_1000 is not set CONFIG_HZ=100 # end of Machine selection # # General architecture-dependent options # CONFIG_TRACE_IRQFLAGS_SUPPORT=y CONFIG_HAVE_ARCH_TRACEHOOK=y CONFIG_GENERIC_SMP_IDLE_THREAD=y CONFIG_ARCH_32BIT_OFF_T=y CONFIG_LTO_NONE=y CONFIG_MODULES_USE_ELF_RELA=y CONFIG_PGTABLE_LEVELS=2 CONFIG_COMPAT_32BIT_TIME=y CONFIG_ARCH_NO_PREEMPT=y # CONFIG_LOCK_EVENT_COUNTS is not set CONFIG_ARCH_WANT_LD_ORPHAN_WARN=y # # GCOV-based kernel profiling # CONFIG_GCOV_KERNEL=y # end of GCOV-based kernel profiling CONFIG_FUNCTION_ALIGNMENT=0 # end of General architecture-dependent options CONFIG_RT_MUTEXES=y CONFIG_BASE_SMALL=0 # CONFIG_MODULES is not set CONFIG_BLOCK=y CONFIG_BLOCK_LEGACY_AUTOLOAD=y CONFIG_BLK_CGROUP_RWSTAT=y CONFIG_BLK_DEV_BSG_COMMON=y CONFIG_BLK_ICQ=y CONFIG_BLK_DEV_BSGLIB=y CONFIG_BLK_DEV_INTEGRITY=y CONFIG_BLK_DEV_INTEGRITY_T10=y CONFIG_BLK_DEV_ZONED=y CONFIG_BLK_DEV_THROTTLING=y CONFIG_BLK_DEV_THROTTLING_LOW=y # CONFIG_BLK_WBT is not set CONFIG_BLK_CGROUP_IOLATENCY=y CONFIG_BLK_CGROUP_FC_APPID=y # CONFIG_BLK_CGROUP_IOCOST is not set CONFIG_BLK_CGROUP_IOPRIO=y CONFIG_BLK_DEBUG_FS=y CONFIG_BLK_DEBUG_FS_ZONED=y CONFIG_BLK_SED_OPAL=y CONFIG_BLK_INLINE_ENCRYPTION=y CONFIG_BLK_INLINE_ENCRYPTION_FALLBACK=y # # Partition Types # CONFIG_PARTITION_ADVANCED=y CONFIG_ACORN_PARTITION=y # CONFIG_ACORN_PARTITION_CUMANA is not set CONFIG_ACORN_PARTITION_EESOX=y # CONFIG_ACORN_PARTITION_ICS is not set CONFIG_ACORN_PARTITION_ADFS=y # CONFIG_ACORN_PARTITION_POWERTEC is not set # CONFIG_ACORN_PARTITION_RISCIX is not set # CONFIG_AIX_PARTITION is not set CONFIG_OSF_PARTITION=y CONFIG_AMIGA_PARTITION=y # CONFIG_ATARI_PARTITION is not set # CONFIG_MAC_PARTITION is not set # CONFIG_MSDOS_PARTITION is not set CONFIG_LDM_PARTITION=y # CONFIG_LDM_DEBUG is not set # CONFIG_SGI_PARTITION is not set # CONFIG_ULTRIX_PARTITION is not set CONFIG_SUN_PARTITION=y CONFIG_KARMA_PARTITION=y # CONFIG_EFI_PARTITION is not set # CONFIG_SYSV68_PARTITION is not set # CONFIG_CMDLINE_PARTITION is not set # end of Partition Types CONFIG_BLK_MQ_VIRTIO=y CONFIG_BLK_MQ_RDMA=y CONFIG_BLOCK_HOLDER_DEPRECATED=y CONFIG_BLK_MQ_STACKING=y # # IO Schedulers # CONFIG_MQ_IOSCHED_DEADLINE=y CONFIG_MQ_IOSCHED_KYBER=y CONFIG_IOSCHED_BFQ=y # CONFIG_BFQ_GROUP_IOSCHED is not set # end of IO Schedulers CONFIG_ASN1=y CONFIG_UNINLINE_SPIN_UNLOCK=y # # Executable file formats # CONFIG_BINFMT_ELF=y CONFIG_BINFMT_ELF_KUNIT_TEST=y CONFIG_ELFCORE=y # CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set CONFIG_BINFMT_SCRIPT=y # CONFIG_BINFMT_MISC is not set CONFIG_COREDUMP=y # end of Executable file formats # # Memory Management options # # CONFIG_SWAP is not set # # SLAB allocator options # # CONFIG_SLAB is not set CONFIG_SLUB=y # CONFIG_SLAB_MERGE_DEFAULT is not set # CONFIG_SLAB_FREELIST_RANDOM is not set # CONFIG_SLAB_FREELIST_HARDENED is not set CONFIG_SLUB_STATS=y CONFIG_SLUB_CPU_PARTIAL=y # end of SLAB allocator options CONFIG_SHUFFLE_PAGE_ALLOCATOR=y # CONFIG_COMPAT_BRK is not set CONFIG_FLATMEM=y CONFIG_MEMORY_ISOLATION=y CONFIG_SPLIT_PTLOCK_CPUS=4 CONFIG_MEMORY_BALLOON=y # CONFIG_COMPACTION is not set CONFIG_PAGE_REPORTING=y CONFIG_MIGRATION=y CONFIG_CONTIG_ALLOC=y # CONFIG_KSM is not set CONFIG_DEFAULT_MMAP_MIN_ADDR=4096 CONFIG_CMA=y CONFIG_CMA_DEBUG=y CONFIG_CMA_DEBUGFS=y # CONFIG_CMA_SYSFS is not set CONFIG_CMA_AREAS=7 CONFIG_PAGE_IDLE_FLAG=y # CONFIG_IDLE_PAGE_TRACKING is not set CONFIG_VM_EVENT_COUNTERS=y # CONFIG_PERCPU_STATS is not set CONFIG_GUP_TEST=y # CONFIG_ANON_VMA_NAME is not set CONFIG_USERFAULTFD=y CONFIG_LRU_GEN=y # CONFIG_LRU_GEN_ENABLED is not set # CONFIG_LRU_GEN_STATS is not set # # Data Access Monitoring # CONFIG_DAMON=y CONFIG_DAMON_KUNIT_TEST=y CONFIG_DAMON_VADDR=y # CONFIG_DAMON_PADDR is not set CONFIG_DAMON_VADDR_KUNIT_TEST=y # CONFIG_DAMON_SYSFS is not set # end of Data Access Monitoring # end of Memory Management options CONFIG_NET=y CONFIG_NET_EGRESS=y CONFIG_SKB_EXTENSIONS=y # # Networking options # # CONFIG_PACKET is not set CONFIG_UNIX=y CONFIG_UNIX_SCM=y CONFIG_AF_UNIX_OOB=y CONFIG_UNIX_DIAG=y CONFIG_TLS=y # CONFIG_TLS_DEVICE is not set # CONFIG_TLS_TOE is not set CONFIG_XFRM=y CONFIG_XFRM_ALGO=y CONFIG_XFRM_USER=y CONFIG_XFRM_INTERFACE=y CONFIG_XFRM_SUB_POLICY=y CONFIG_XFRM_MIGRATE=y # CONFIG_XFRM_STATISTICS is not set CONFIG_XFRM_AH=y CONFIG_XFRM_ESP=y CONFIG_XFRM_IPCOMP=y CONFIG_NET_KEY=y CONFIG_NET_KEY_MIGRATE=y CONFIG_XFRM_ESPINTCP=y # CONFIG_SMC is not set CONFIG_XDP_SOCKETS=y # CONFIG_XDP_SOCKETS_DIAG is not set CONFIG_INET=y # CONFIG_IP_MULTICAST is not set CONFIG_IP_ADVANCED_ROUTER=y CONFIG_IP_FIB_TRIE_STATS=y # CONFIG_IP_MULTIPLE_TABLES is not set CONFIG_IP_ROUTE_MULTIPATH=y CONFIG_IP_ROUTE_VERBOSE=y CONFIG_IP_PNP=y CONFIG_IP_PNP_DHCP=y CONFIG_IP_PNP_BOOTP=y # CONFIG_IP_PNP_RARP is not set # CONFIG_NET_IPIP is not set # CONFIG_NET_IPGRE_DEMUX is not set CONFIG_NET_IP_TUNNEL=y CONFIG_SYN_COOKIES=y CONFIG_NET_IPVTI=y CONFIG_NET_UDP_TUNNEL=y CONFIG_NET_FOU=y CONFIG_NET_FOU_IP_TUNNELS=y CONFIG_INET_AH=y CONFIG_INET_ESP=y # CONFIG_INET_ESP_OFFLOAD is not set CONFIG_INET_ESPINTCP=y CONFIG_INET_IPCOMP=y CONFIG_INET_TABLE_PERTURB_ORDER=16 CONFIG_INET_XFRM_TUNNEL=y CONFIG_INET_TUNNEL=y CONFIG_INET_DIAG=y CONFIG_INET_TCP_DIAG=y CONFIG_INET_UDP_DIAG=y # CONFIG_INET_RAW_DIAG is not set CONFIG_INET_DIAG_DESTROY=y # CONFIG_TCP_CONG_ADVANCED is not set CONFIG_TCP_CONG_CUBIC=y CONFIG_DEFAULT_TCP_CONG="cubic" # CONFIG_TCP_MD5SIG is not set CONFIG_IPV6=y CONFIG_IPV6_ROUTER_PREF=y # CONFIG_IPV6_ROUTE_INFO is not set CONFIG_IPV6_OPTIMISTIC_DAD=y CONFIG_INET6_AH=y # CONFIG_INET6_ESP is not set CONFIG_INET6_IPCOMP=y CONFIG_IPV6_MIP6=y CONFIG_IPV6_ILA=y CONFIG_INET6_XFRM_TUNNEL=y CONFIG_INET6_TUNNEL=y CONFIG_IPV6_VTI=y CONFIG_IPV6_SIT=y # CONFIG_IPV6_SIT_6RD is not set CONFIG_IPV6_NDISC_NODETYPE=y CONFIG_IPV6_TUNNEL=y CONFIG_IPV6_FOU=y CONFIG_IPV6_FOU_TUNNEL=y CONFIG_IPV6_MULTIPLE_TABLES=y # CONFIG_IPV6_SUBTREES is not set # CONFIG_IPV6_MROUTE is not set # CONFIG_IPV6_SEG6_LWTUNNEL is not set # CONFIG_IPV6_SEG6_HMAC is not set # CONFIG_IPV6_RPL_LWTUNNEL is not set # CONFIG_IPV6_IOAM6_LWTUNNEL is not set # CONFIG_MPTCP is not set # CONFIG_NETWORK_SECMARK is not set CONFIG_NET_PTP_CLASSIFY=y CONFIG_NETWORK_PHY_TIMESTAMPING=y CONFIG_NETFILTER=y CONFIG_NETFILTER_ADVANCED=y # # Core Netfilter Configuration # # CONFIG_NETFILTER_INGRESS is not set CONFIG_NETFILTER_EGRESS=y CONFIG_NETFILTER_NETLINK=y CONFIG_NETFILTER_FAMILY_ARP=y CONFIG_NETFILTER_NETLINK_HOOK=y CONFIG_NETFILTER_NETLINK_ACCT=y CONFIG_NETFILTER_NETLINK_QUEUE=y # CONFIG_NETFILTER_NETLINK_LOG is not set CONFIG_NETFILTER_NETLINK_OSF=y CONFIG_NF_CONNTRACK=y CONFIG_NF_LOG_SYSLOG=y CONFIG_NETFILTER_CONNCOUNT=y CONFIG_NF_CONNTRACK_MARK=y # CONFIG_NF_CONNTRACK_ZONES is not set CONFIG_NF_CONNTRACK_PROCFS=y # CONFIG_NF_CONNTRACK_EVENTS is not set CONFIG_NF_CONNTRACK_TIMEOUT=y # CONFIG_NF_CONNTRACK_TIMESTAMP is not set CONFIG_NF_CONNTRACK_LABELS=y # CONFIG_NF_CT_PROTO_DCCP is not set CONFIG_NF_CT_PROTO_GRE=y CONFIG_NF_CT_PROTO_SCTP=y # CONFIG_NF_CT_PROTO_UDPLITE is not set CONFIG_NF_CONNTRACK_AMANDA=y CONFIG_NF_CONNTRACK_FTP=y CONFIG_NF_CONNTRACK_H323=y # CONFIG_NF_CONNTRACK_IRC is not set CONFIG_NF_CONNTRACK_BROADCAST=y # CONFIG_NF_CONNTRACK_NETBIOS_NS is not set CONFIG_NF_CONNTRACK_SNMP=y CONFIG_NF_CONNTRACK_PPTP=y CONFIG_NF_CONNTRACK_SANE=y CONFIG_NF_CONNTRACK_SIP=y # CONFIG_NF_CONNTRACK_TFTP is not set CONFIG_NF_CT_NETLINK=y CONFIG_NF_CT_NETLINK_TIMEOUT=y # CONFIG_NETFILTER_NETLINK_GLUE_CT is not set CONFIG_NF_NAT=y CONFIG_NF_NAT_AMANDA=y CONFIG_NF_NAT_FTP=y CONFIG_NF_NAT_SIP=y CONFIG_NF_NAT_REDIRECT=y CONFIG_NF_NAT_MASQUERADE=y CONFIG_NF_NAT_OVS=y CONFIG_NETFILTER_SYNPROXY=y CONFIG_NF_TABLES=y # CONFIG_NF_TABLES_INET is not set CONFIG_NF_TABLES_NETDEV=y # CONFIG_NFT_NUMGEN is not set # CONFIG_NFT_CT is not set CONFIG_NFT_CONNLIMIT=y CONFIG_NFT_LOG=y CONFIG_NFT_LIMIT=y CONFIG_NFT_MASQ=y CONFIG_NFT_REDIR=y CONFIG_NFT_NAT=y # CONFIG_NFT_TUNNEL is not set CONFIG_NFT_QUEUE=y # CONFIG_NFT_QUOTA is not set CONFIG_NFT_REJECT=y CONFIG_NFT_COMPAT=y CONFIG_NFT_HASH=y CONFIG_NFT_FIB=y CONFIG_NFT_XFRM=y # CONFIG_NFT_SOCKET is not set CONFIG_NFT_OSF=y CONFIG_NFT_TPROXY=y CONFIG_NFT_SYNPROXY=y CONFIG_NF_DUP_NETDEV=y CONFIG_NFT_DUP_NETDEV=y CONFIG_NFT_FWD_NETDEV=y CONFIG_NETFILTER_XTABLES=y # # Xtables combined modules # CONFIG_NETFILTER_XT_MARK=y CONFIG_NETFILTER_XT_CONNMARK=y # # Xtables targets # CONFIG_NETFILTER_XT_TARGET_AUDIT=y # CONFIG_NETFILTER_XT_TARGET_CHECKSUM is not set # CONFIG_NETFILTER_XT_TARGET_CLASSIFY is not set CONFIG_NETFILTER_XT_TARGET_CONNMARK=y CONFIG_NETFILTER_XT_TARGET_CT=y CONFIG_NETFILTER_XT_TARGET_DSCP=y CONFIG_NETFILTER_XT_TARGET_HL=y # CONFIG_NETFILTER_XT_TARGET_HMARK is not set # CONFIG_NETFILTER_XT_TARGET_IDLETIMER is not set CONFIG_NETFILTER_XT_TARGET_LED=y # CONFIG_NETFILTER_XT_TARGET_LOG is not set CONFIG_NETFILTER_XT_TARGET_MARK=y CONFIG_NETFILTER_XT_NAT=y CONFIG_NETFILTER_XT_TARGET_NETMAP=y # CONFIG_NETFILTER_XT_TARGET_NFLOG is not set CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y CONFIG_NETFILTER_XT_TARGET_NOTRACK=y CONFIG_NETFILTER_XT_TARGET_RATEEST=y CONFIG_NETFILTER_XT_TARGET_REDIRECT=y CONFIG_NETFILTER_XT_TARGET_MASQUERADE=y CONFIG_NETFILTER_XT_TARGET_TEE=y # CONFIG_NETFILTER_XT_TARGET_TRACE is not set # CONFIG_NETFILTER_XT_TARGET_TCPMSS is not set CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=y # # Xtables matches # CONFIG_NETFILTER_XT_MATCH_ADDRTYPE=y CONFIG_NETFILTER_XT_MATCH_BPF=y CONFIG_NETFILTER_XT_MATCH_CGROUP=y CONFIG_NETFILTER_XT_MATCH_CLUSTER=y CONFIG_NETFILTER_XT_MATCH_COMMENT=y CONFIG_NETFILTER_XT_MATCH_CONNBYTES=y # CONFIG_NETFILTER_XT_MATCH_CONNLABEL is not set CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=y CONFIG_NETFILTER_XT_MATCH_CONNMARK=y # CONFIG_NETFILTER_XT_MATCH_CONNTRACK is not set CONFIG_NETFILTER_XT_MATCH_CPU=y # CONFIG_NETFILTER_XT_MATCH_DCCP is not set CONFIG_NETFILTER_XT_MATCH_DEVGROUP=y # CONFIG_NETFILTER_XT_MATCH_DSCP is not set # CONFIG_NETFILTER_XT_MATCH_ECN is not set # CONFIG_NETFILTER_XT_MATCH_ESP is not set CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=y CONFIG_NETFILTER_XT_MATCH_HELPER=y CONFIG_NETFILTER_XT_MATCH_HL=y # CONFIG_NETFILTER_XT_MATCH_IPCOMP is not set # CONFIG_NETFILTER_XT_MATCH_IPRANGE is not set # CONFIG_NETFILTER_XT_MATCH_L2TP is not set # CONFIG_NETFILTER_XT_MATCH_LENGTH is not set CONFIG_NETFILTER_XT_MATCH_LIMIT=y # CONFIG_NETFILTER_XT_MATCH_MAC is not set # CONFIG_NETFILTER_XT_MATCH_MARK is not set # CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set CONFIG_NETFILTER_XT_MATCH_NFACCT=y CONFIG_NETFILTER_XT_MATCH_OSF=y CONFIG_NETFILTER_XT_MATCH_OWNER=y CONFIG_NETFILTER_XT_MATCH_POLICY=y CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y # CONFIG_NETFILTER_XT_MATCH_QUOTA is not set CONFIG_NETFILTER_XT_MATCH_RATEEST=y # CONFIG_NETFILTER_XT_MATCH_REALM is not set CONFIG_NETFILTER_XT_MATCH_RECENT=y CONFIG_NETFILTER_XT_MATCH_SCTP=y CONFIG_NETFILTER_XT_MATCH_SOCKET=y CONFIG_NETFILTER_XT_MATCH_STATE=y CONFIG_NETFILTER_XT_MATCH_STATISTIC=y CONFIG_NETFILTER_XT_MATCH_STRING=y # CONFIG_NETFILTER_XT_MATCH_TCPMSS is not set CONFIG_NETFILTER_XT_MATCH_TIME=y CONFIG_NETFILTER_XT_MATCH_U32=y # end of Core Netfilter Configuration # CONFIG_IP_SET is not set # CONFIG_IP_VS is not set # # IP: Netfilter Configuration # CONFIG_NF_DEFRAG_IPV4=y CONFIG_NF_SOCKET_IPV4=y CONFIG_NF_TPROXY_IPV4=y # CONFIG_NF_TABLES_IPV4 is not set CONFIG_NF_TABLES_ARP=y CONFIG_NF_DUP_IPV4=y # CONFIG_NF_LOG_ARP is not set # CONFIG_NF_LOG_IPV4 is not set # CONFIG_NF_REJECT_IPV4 is not set CONFIG_NF_NAT_SNMP_BASIC=y CONFIG_NF_NAT_PPTP=y CONFIG_NF_NAT_H323=y # CONFIG_IP_NF_IPTABLES is not set CONFIG_IP_NF_ARPTABLES=y CONFIG_IP_NF_ARPFILTER=y # CONFIG_IP_NF_ARP_MANGLE is not set # end of IP: Netfilter Configuration # # IPv6: Netfilter Configuration # CONFIG_NF_SOCKET_IPV6=y CONFIG_NF_TPROXY_IPV6=y CONFIG_NF_TABLES_IPV6=y CONFIG_NFT_REJECT_IPV6=y # CONFIG_NFT_DUP_IPV6 is not set CONFIG_NFT_FIB_IPV6=y CONFIG_NF_DUP_IPV6=y CONFIG_NF_REJECT_IPV6=y CONFIG_NF_LOG_IPV6=y CONFIG_IP6_NF_IPTABLES=y CONFIG_IP6_NF_MATCH_AH=y CONFIG_IP6_NF_MATCH_EUI64=y CONFIG_IP6_NF_MATCH_FRAG=y CONFIG_IP6_NF_MATCH_OPTS=y # CONFIG_IP6_NF_MATCH_HL is not set # CONFIG_IP6_NF_MATCH_IPV6HEADER is not set # CONFIG_IP6_NF_MATCH_MH is not set # CONFIG_IP6_NF_MATCH_RPFILTER is not set CONFIG_IP6_NF_MATCH_RT=y CONFIG_IP6_NF_MATCH_SRH=y CONFIG_IP6_NF_TARGET_HL=y CONFIG_IP6_NF_FILTER=y # CONFIG_IP6_NF_TARGET_REJECT is not set CONFIG_IP6_NF_TARGET_SYNPROXY=y CONFIG_IP6_NF_MANGLE=y CONFIG_IP6_NF_RAW=y CONFIG_IP6_NF_NAT=y # CONFIG_IP6_NF_TARGET_MASQUERADE is not set # CONFIG_IP6_NF_TARGET_NPT is not set # end of IPv6: Netfilter Configuration CONFIG_NF_DEFRAG_IPV6=y CONFIG_NF_CONNTRACK_BRIDGE=y CONFIG_BPFILTER=y CONFIG_IP_DCCP=y CONFIG_INET_DCCP_DIAG=y # # DCCP CCIDs Configuration # # CONFIG_IP_DCCP_CCID2_DEBUG is not set # CONFIG_IP_DCCP_CCID3 is not set # end of DCCP CCIDs Configuration # # DCCP Kernel Hacking # # CONFIG_IP_DCCP_DEBUG is not set # end of DCCP Kernel Hacking CONFIG_IP_SCTP=y CONFIG_SCTP_DBG_OBJCNT=y # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_MD5 is not set CONFIG_SCTP_DEFAULT_COOKIE_HMAC_SHA1=y # CONFIG_SCTP_DEFAULT_COOKIE_HMAC_NONE is not set # CONFIG_SCTP_COOKIE_HMAC_MD5 is not set CONFIG_SCTP_COOKIE_HMAC_SHA1=y CONFIG_INET_SCTP_DIAG=y # CONFIG_RDS is not set CONFIG_TIPC=y # CONFIG_TIPC_MEDIA_UDP is not set # CONFIG_TIPC_CRYPTO is not set CONFIG_TIPC_DIAG=y CONFIG_ATM=y CONFIG_ATM_CLIP=y CONFIG_ATM_CLIP_NO_ICMP=y CONFIG_ATM_LANE=y CONFIG_ATM_MPOA=y # CONFIG_ATM_BR2684 is not set # CONFIG_L2TP is not set # CONFIG_BRIDGE is not set # CONFIG_VLAN_8021Q is not set CONFIG_LLC=y CONFIG_LLC2=y CONFIG_ATALK=y CONFIG_DEV_APPLETALK=y CONFIG_IPDDP=y # CONFIG_IPDDP_ENCAP is not set CONFIG_X25=y CONFIG_LAPB=y CONFIG_PHONET=y # CONFIG_6LOWPAN is not set CONFIG_IEEE802154=y # CONFIG_IEEE802154_NL802154_EXPERIMENTAL is not set # CONFIG_IEEE802154_SOCKET is not set CONFIG_MAC802154=y # CONFIG_NET_SCHED is not set # CONFIG_DCB is not set CONFIG_DNS_RESOLVER=y CONFIG_BATMAN_ADV=y # CONFIG_BATMAN_ADV_BATMAN_V is not set # CONFIG_BATMAN_ADV_BLA is not set CONFIG_BATMAN_ADV_DAT=y CONFIG_BATMAN_ADV_NC=y CONFIG_BATMAN_ADV_MCAST=y CONFIG_BATMAN_ADV_DEBUG=y # CONFIG_BATMAN_ADV_TRACING is not set CONFIG_OPENVSWITCH=y CONFIG_VSOCKETS=y # CONFIG_VSOCKETS_DIAG is not set CONFIG_VSOCKETS_LOOPBACK=y # CONFIG_VIRTIO_VSOCKETS is not set CONFIG_VIRTIO_VSOCKETS_COMMON=y # CONFIG_NETLINK_DIAG is not set CONFIG_MPLS=y CONFIG_NET_MPLS_GSO=y # CONFIG_MPLS_ROUTING is not set CONFIG_NET_NSH=y # CONFIG_HSR is not set CONFIG_NET_SWITCHDEV=y # CONFIG_NET_L3_MASTER_DEV is not set # CONFIG_QRTR is not set CONFIG_NET_NCSI=y # CONFIG_NCSI_OEM_CMD_GET_MAC is not set CONFIG_NCSI_OEM_CMD_KEEP_PHY=y # CONFIG_PCPU_DEV_REFCNT is not set CONFIG_RPS=y CONFIG_RFS_ACCEL=y CONFIG_SOCK_RX_QUEUE_MAPPING=y CONFIG_XPS=y CONFIG_CGROUP_NET_PRIO=y CONFIG_CGROUP_NET_CLASSID=y CONFIG_NET_RX_BUSY_POLL=y CONFIG_BQL=y CONFIG_NET_FLOW_LIMIT=y # # Network testing # CONFIG_NET_PKTGEN=y # CONFIG_NET_DROP_MONITOR is not set # end of Network testing # end of Networking options CONFIG_HAMRADIO=y # # Packet Radio protocols # CONFIG_AX25=y CONFIG_AX25_DAMA_SLAVE=y CONFIG_NETROM=y CONFIG_ROSE=y # # AX.25 network device drivers # CONFIG_MKISS=y CONFIG_6PACK=y CONFIG_BPQETHER=y CONFIG_BAYCOM_SER_FDX=y # CONFIG_BAYCOM_SER_HDX is not set CONFIG_YAM=y # end of AX.25 network device drivers CONFIG_CAN=y # CONFIG_CAN_RAW is not set CONFIG_CAN_BCM=y CONFIG_CAN_GW=y CONFIG_CAN_J1939=y # CONFIG_CAN_ISOTP is not set CONFIG_BT=y CONFIG_BT_BREDR=y # CONFIG_BT_RFCOMM is not set CONFIG_BT_BNEP=y CONFIG_BT_BNEP_MC_FILTER=y # CONFIG_BT_BNEP_PROTO_FILTER is not set # CONFIG_BT_HIDP is not set # CONFIG_BT_HS is not set CONFIG_BT_LE=y # CONFIG_BT_LE_L2CAP_ECRED is not set CONFIG_BT_LEDS=y CONFIG_BT_MSFTEXT=y CONFIG_BT_AOSPEXT=y CONFIG_BT_DEBUGFS=y # CONFIG_BT_SELFTEST is not set # # Bluetooth device drivers # CONFIG_BT_INTEL=y CONFIG_BT_MTK=y CONFIG_BT_HCIUART=y CONFIG_BT_HCIUART_SERDEV=y CONFIG_BT_HCIUART_H4=y CONFIG_BT_HCIUART_BCSP=y CONFIG_BT_HCIUART_ATH3K=y CONFIG_BT_HCIUART_LL=y # CONFIG_BT_HCIUART_3WIRE is not set # CONFIG_BT_HCIUART_INTEL is not set # CONFIG_BT_HCIUART_BCM is not set # CONFIG_BT_HCIUART_QCA is not set CONFIG_BT_HCIUART_AG6XX=y # CONFIG_BT_HCIUART_MRVL is not set CONFIG_BT_HCIVHCI=y CONFIG_BT_MRVL=y CONFIG_BT_MTKUART=y # CONFIG_BT_QCOMSMD is not set CONFIG_BT_VIRTIO=y # end of Bluetooth device drivers CONFIG_AF_RXRPC=y CONFIG_AF_RXRPC_IPV6=y # CONFIG_AF_RXRPC_INJECT_LOSS is not set # CONFIG_AF_RXRPC_DEBUG is not set # CONFIG_RXKAD is not set CONFIG_RXPERF=y CONFIG_AF_KCM=y CONFIG_STREAM_PARSER=y CONFIG_MCTP=y CONFIG_MCTP_TEST=y CONFIG_FIB_RULES=y CONFIG_WIRELESS=y CONFIG_WEXT_CORE=y CONFIG_WEXT_PROC=y CONFIG_CFG80211=y CONFIG_NL80211_TESTMODE=y CONFIG_CFG80211_DEVELOPER_WARNINGS=y CONFIG_CFG80211_REQUIRE_SIGNED_REGDB=y CONFIG_CFG80211_USE_KERNEL_REGDB_KEYS=y # CONFIG_CFG80211_DEFAULT_PS is not set # CONFIG_CFG80211_DEBUGFS is not set CONFIG_CFG80211_CRDA_SUPPORT=y CONFIG_CFG80211_WEXT=y CONFIG_MAC80211=y CONFIG_MAC80211_HAS_RC=y CONFIG_MAC80211_RC_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y CONFIG_MAC80211_RC_DEFAULT="minstrel_ht" CONFIG_MAC80211_MESH=y CONFIG_MAC80211_LEDS=y CONFIG_MAC80211_DEBUGFS=y CONFIG_MAC80211_MESSAGE_TRACING=y # CONFIG_MAC80211_DEBUG_MENU is not set CONFIG_MAC80211_STA_HASH_MAX_SIZE=0 CONFIG_RFKILL=y CONFIG_RFKILL_LEDS=y CONFIG_RFKILL_INPUT=y CONFIG_RFKILL_GPIO=y CONFIG_NET_9P=y CONFIG_NET_9P_FD=y # CONFIG_NET_9P_VIRTIO is not set # CONFIG_NET_9P_RDMA is not set # CONFIG_NET_9P_DEBUG is not set CONFIG_CAIF=y CONFIG_CAIF_DEBUG=y # CONFIG_CAIF_NETDEV is not set CONFIG_CAIF_USB=y CONFIG_CEPH_LIB=y CONFIG_CEPH_LIB_PRETTYDEBUG=y # CONFIG_CEPH_LIB_USE_DNS_RESOLVER is not set CONFIG_NFC=y CONFIG_NFC_DIGITAL=y CONFIG_NFC_NCI=y CONFIG_NFC_NCI_UART=y CONFIG_NFC_HCI=y CONFIG_NFC_SHDLC=y # # Near Field Communication (NFC) devices # CONFIG_NFC_SIM=y CONFIG_NFC_VIRTUAL_NCI=y CONFIG_NFC_FDP=y CONFIG_NFC_FDP_I2C=y # CONFIG_NFC_PN544_I2C is not set CONFIG_NFC_PN533=y # CONFIG_NFC_PN533_I2C is not set CONFIG_NFC_PN532_UART=y CONFIG_NFC_MICROREAD=y CONFIG_NFC_MICROREAD_I2C=y CONFIG_NFC_MRVL=y CONFIG_NFC_MRVL_UART=y # CONFIG_NFC_MRVL_I2C is not set CONFIG_NFC_ST21NFCA=y CONFIG_NFC_ST21NFCA_I2C=y # CONFIG_NFC_ST_NCI_I2C is not set # CONFIG_NFC_NXP_NCI is not set CONFIG_NFC_S3FWRN5=y CONFIG_NFC_S3FWRN5_I2C=y CONFIG_NFC_S3FWRN82_UART=y # end of Near Field Communication (NFC) devices CONFIG_PSAMPLE=y CONFIG_NET_IFE=y CONFIG_LWTUNNEL=y CONFIG_LWTUNNEL_BPF=y CONFIG_DST_CACHE=y CONFIG_GRO_CELLS=y CONFIG_NET_SOCK_MSG=y CONFIG_PAGE_POOL=y # CONFIG_PAGE_POOL_STATS is not set # CONFIG_FAILOVER is not set # CONFIG_ETHTOOL_NETLINK is not set # CONFIG_NETDEV_ADDR_LIST_TEST is not set # # Device Drivers # # CONFIG_PCCARD is not set # # Generic Driver Options # CONFIG_AUXILIARY_BUS=y # CONFIG_UEVENT_HELPER is not set CONFIG_DEVTMPFS=y CONFIG_DEVTMPFS_MOUNT=y CONFIG_DEVTMPFS_SAFE=y CONFIG_STANDALONE=y # CONFIG_PREVENT_FIRMWARE_BUILD is not set # # Firmware loader # CONFIG_FW_LOADER=y CONFIG_EXTRA_FIRMWARE="" # CONFIG_FW_LOADER_USER_HELPER is not set CONFIG_FW_LOADER_COMPRESS=y # CONFIG_FW_LOADER_COMPRESS_XZ is not set CONFIG_FW_LOADER_COMPRESS_ZSTD=y # CONFIG_FW_UPLOAD is not set # end of Firmware loader CONFIG_WANT_DEV_COREDUMP=y CONFIG_ALLOW_DEV_COREDUMP=y CONFIG_DEV_COREDUMP=y CONFIG_DEBUG_DRIVER=y # CONFIG_DEBUG_DEVRES is not set # CONFIG_DEBUG_TEST_DRIVER_REMOVE is not set CONFIG_PM_QOS_KUNIT_TEST=y CONFIG_DRIVER_PE_KUNIT_TEST=y CONFIG_GENERIC_CPU_DEVICES=y CONFIG_SOC_BUS=y CONFIG_REGMAP=y CONFIG_REGMAP_I2C=y CONFIG_REGMAP_SLIMBUS=y CONFIG_REGMAP_SPMI=y CONFIG_REGMAP_W1=y CONFIG_REGMAP_MMIO=y CONFIG_REGMAP_IRQ=y CONFIG_REGMAP_SOUNDWIRE=y CONFIG_REGMAP_SOUNDWIRE_MBQ=y CONFIG_REGMAP_SCCB=y CONFIG_DMA_SHARED_BUFFER=y # CONFIG_DMA_FENCE_TRACE is not set # end of Generic Driver Options # # Bus devices # CONFIG_ARM_INTEGRATOR_LM=y CONFIG_BT1_APB=y CONFIG_BT1_AXI=y CONFIG_INTEL_IXP4XX_EB=y CONFIG_QCOM_EBI2=y CONFIG_MHI_BUS=y # CONFIG_MHI_BUS_DEBUG is not set CONFIG_MHI_BUS_EP=y # end of Bus devices CONFIG_CONNECTOR=y # CONFIG_PROC_EVENTS is not set # # Firmware Drivers # # # ARM System Control and Management Interface Protocol # CONFIG_ARM_SCMI_PROTOCOL=y CONFIG_ARM_SCMI_HAVE_TRANSPORT=y CONFIG_ARM_SCMI_HAVE_SHMEM=y CONFIG_ARM_SCMI_HAVE_MSG=y CONFIG_ARM_SCMI_TRANSPORT_MAILBOX=y CONFIG_ARM_SCMI_TRANSPORT_VIRTIO=y CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_VERSION1_COMPLIANCE=y # CONFIG_ARM_SCMI_TRANSPORT_VIRTIO_ATOMIC_ENABLE is not set CONFIG_ARM_SCMI_POWER_DOMAIN=y CONFIG_ARM_SCMI_POWER_CONTROL=y # end of ARM System Control and Management Interface Protocol CONFIG_ARM_SCPI_PROTOCOL=y # CONFIG_ARM_SCPI_POWER_DOMAIN is not set CONFIG_MTK_ADSP_IPC=y CONFIG_QCOM_SCM=y CONFIG_QCOM_SCM_DOWNLOAD_MODE_DEFAULT=y CONFIG_TURRIS_MOX_RWTM=y # CONFIG_BCM47XX_NVRAM is not set CONFIG_TEE_BNXT_FW=y CONFIG_FW_CS_DSP=y # CONFIG_GOOGLE_FIRMWARE is not set CONFIG_IMX_DSP=y # CONFIG_IMX_SCU is not set # # Tegra firmware driver # # end of Tegra firmware driver # end of Firmware Drivers CONFIG_GNSS=y CONFIG_GNSS_SERIAL=y CONFIG_GNSS_MTK_SERIAL=y CONFIG_GNSS_SIRF_SERIAL=y CONFIG_GNSS_UBX_SERIAL=y CONFIG_MTD=y # # Partition parsers # CONFIG_MTD_AR7_PARTS=y CONFIG_MTD_BCM63XX_PARTS=y CONFIG_MTD_BRCM_U_BOOT=y # CONFIG_MTD_CMDLINE_PARTS is not set # CONFIG_MTD_OF_PARTS is not set CONFIG_MTD_PARSER_IMAGETAG=y CONFIG_MTD_PARSER_TPLINK_SAFELOADER=y CONFIG_MTD_PARSER_TRX=y CONFIG_MTD_SHARPSL_PARTS=y CONFIG_MTD_REDBOOT_PARTS=y CONFIG_MTD_REDBOOT_DIRECTORY_BLOCK=-1 CONFIG_MTD_REDBOOT_PARTS_UNALLOCATED=y CONFIG_MTD_REDBOOT_PARTS_READONLY=y # end of Partition parsers # # User Modules And Translation Layers # CONFIG_MTD_BLKDEVS=y # CONFIG_MTD_BLOCK is not set CONFIG_MTD_BLOCK_RO=y # # Note that in some cases UBI block is preferred. See MTD_UBI_BLOCK. # CONFIG_FTL=y CONFIG_NFTL=y CONFIG_NFTL_RW=y # CONFIG_INFTL is not set CONFIG_RFD_FTL=y # CONFIG_SSFDC is not set CONFIG_SM_FTL=y CONFIG_MTD_OOPS=y # CONFIG_MTD_PARTITIONED_MASTER is not set # # RAM/ROM/Flash chip drivers # CONFIG_MTD_CFI=y CONFIG_MTD_JEDECPROBE=y CONFIG_MTD_GEN_PROBE=y # CONFIG_MTD_CFI_ADV_OPTIONS is not set CONFIG_MTD_MAP_BANK_WIDTH_1=y CONFIG_MTD_MAP_BANK_WIDTH_2=y CONFIG_MTD_MAP_BANK_WIDTH_4=y CONFIG_MTD_CFI_I1=y CONFIG_MTD_CFI_I2=y # CONFIG_MTD_CFI_INTELEXT is not set CONFIG_MTD_CFI_AMDSTD=y # CONFIG_MTD_CFI_STAA is not set CONFIG_MTD_CFI_UTIL=y CONFIG_MTD_RAM=y # CONFIG_MTD_ROM is not set CONFIG_MTD_ABSENT=y # end of RAM/ROM/Flash chip drivers # # Mapping drivers for chip access # CONFIG_MTD_COMPLEX_MAPPINGS=y CONFIG_MTD_PHYSMAP=y CONFIG_MTD_PHYSMAP_COMPAT=y CONFIG_MTD_PHYSMAP_START=0x8000000 CONFIG_MTD_PHYSMAP_LEN=0 CONFIG_MTD_PHYSMAP_BANKWIDTH=2 # CONFIG_MTD_PHYSMAP_OF is not set # CONFIG_MTD_PHYSMAP_GPIO_ADDR is not set # CONFIG_MTD_SC520CDP is not set CONFIG_MTD_NETSC520=y CONFIG_MTD_TS5500=y CONFIG_MTD_PLATRAM=y # end of Mapping drivers for chip access # # Self-contained MTD device drivers # # CONFIG_MTD_SPEAR_SMI is not set CONFIG_MTD_SLRAM=y CONFIG_MTD_PHRAM=y CONFIG_MTD_MTDRAM=y CONFIG_MTDRAM_TOTAL_SIZE=4096 CONFIG_MTDRAM_ERASE_SIZE=128 # CONFIG_MTD_BLOCK2MTD is not set # # Disk-On-Chip Device Drivers # # CONFIG_MTD_DOCG3 is not set # end of Self-contained MTD device drivers # # NAND # CONFIG_MTD_NAND_CORE=y # CONFIG_MTD_ONENAND is not set CONFIG_MTD_RAW_NAND=y # # Raw/parallel NAND flash controllers # CONFIG_MTD_NAND_AMS_DELTA=y CONFIG_MTD_NAND_SHARPSL=y # CONFIG_MTD_NAND_ATMEL is not set CONFIG_MTD_NAND_MARVELL=y CONFIG_MTD_NAND_SLC_LPC32XX=y CONFIG_MTD_NAND_MLC_LPC32XX=y CONFIG_MTD_NAND_BRCMNAND=y CONFIG_MTD_NAND_BRCMNAND_BCM63XX=y # CONFIG_MTD_NAND_BRCMNAND_BCMBCA is not set CONFIG_MTD_NAND_BRCMNAND_BRCMSTB=y CONFIG_MTD_NAND_BRCMNAND_IPROC=y # CONFIG_MTD_NAND_OXNAS is not set CONFIG_MTD_NAND_GPMI_NAND=y CONFIG_MTD_NAND_FSL_IFC=y CONFIG_MTD_NAND_VF610_NFC=y # CONFIG_MTD_NAND_MXC is not set CONFIG_MTD_NAND_SH_FLCTL=y CONFIG_MTD_NAND_DAVINCI=y CONFIG_MTD_NAND_TXX9NDFMC=y CONFIG_MTD_NAND_FSMC=y CONFIG_MTD_NAND_SUNXI=y CONFIG_MTD_NAND_HISI504=y CONFIG_MTD_NAND_QCOM=y # CONFIG_MTD_NAND_MXIC is not set CONFIG_MTD_NAND_TEGRA=y CONFIG_MTD_NAND_STM32_FMC2=y CONFIG_MTD_NAND_GPIO=y CONFIG_MTD_NAND_PLATFORM=y # CONFIG_MTD_NAND_CADENCE is not set CONFIG_MTD_NAND_ARASAN=y CONFIG_MTD_NAND_INTEL_LGM=y # CONFIG_MTD_NAND_RENESAS is not set # # Misc # # CONFIG_MTD_NAND_NANDSIM is not set CONFIG_MTD_NAND_DISKONCHIP=y # CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADVANCED is not set CONFIG_MTD_NAND_DISKONCHIP_PROBE_ADDRESS=0 # CONFIG_MTD_NAND_DISKONCHIP_BBTWRITE is not set # # ECC engine support # CONFIG_MTD_NAND_ECC=y CONFIG_MTD_NAND_ECC_SW_HAMMING=y # CONFIG_MTD_NAND_ECC_SW_HAMMING_SMC is not set # CONFIG_MTD_NAND_ECC_SW_BCH is not set CONFIG_MTD_NAND_ECC_MXIC=y # CONFIG_MTD_NAND_ECC_MEDIATEK is not set # end of ECC engine support # end of NAND # # LPDDR & LPDDR2 PCM memory drivers # CONFIG_MTD_LPDDR=y CONFIG_MTD_QINFO_PROBE=y # end of LPDDR & LPDDR2 PCM memory drivers CONFIG_MTD_UBI=y CONFIG_MTD_UBI_WL_THRESHOLD=4096 CONFIG_MTD_UBI_BEB_LIMIT=20 # CONFIG_MTD_UBI_FASTMAP is not set CONFIG_MTD_UBI_GLUEBI=y CONFIG_MTD_UBI_BLOCK=y CONFIG_MTD_HYPERBUS=y CONFIG_HBMC_AM654=y CONFIG_DTC=y CONFIG_OF=y CONFIG_OF_UNITTEST=y # CONFIG_OF_ALL_DTBS is not set CONFIG_OF_FLATTREE=y CONFIG_OF_EARLY_FLATTREE=y CONFIG_OF_KOBJ=y CONFIG_OF_DYNAMIC=y CONFIG_OF_ADDRESS=y CONFIG_OF_IRQ=y CONFIG_OF_RESERVED_MEM=y CONFIG_OF_RESOLVE=y # CONFIG_OF_OVERLAY is not set # CONFIG_PARPORT is not set # CONFIG_BLK_DEV is not set # # NVME Support # CONFIG_NVME_COMMON=y CONFIG_NVME_CORE=y CONFIG_NVME_MULTIPATH=y CONFIG_NVME_VERBOSE_ERRORS=y CONFIG_NVME_HWMON=y CONFIG_NVME_FABRICS=y CONFIG_NVME_RDMA=y CONFIG_NVME_FC=y CONFIG_NVME_TCP=y CONFIG_NVME_AUTH=y CONFIG_NVME_APPLE=y CONFIG_NVME_TARGET=y # CONFIG_NVME_TARGET_PASSTHRU is not set CONFIG_NVME_TARGET_LOOP=y # CONFIG_NVME_TARGET_RDMA is not set CONFIG_NVME_TARGET_FC=y # CONFIG_NVME_TARGET_FCLOOP is not set # CONFIG_NVME_TARGET_TCP is not set # CONFIG_NVME_TARGET_AUTH is not set # end of NVME Support # # Misc devices # CONFIG_SENSORS_LIS3LV02D=y CONFIG_AD525X_DPOT=y CONFIG_AD525X_DPOT_I2C=y # CONFIG_DUMMY_IRQ is not set CONFIG_ICS932S401=y CONFIG_ATMEL_SSC=y CONFIG_ENCLOSURE_SERVICES=y CONFIG_SMPRO_ERRMON=y # CONFIG_SMPRO_MISC is not set CONFIG_HI6421V600_IRQ=y # CONFIG_QCOM_COINCELL is not set CONFIG_QCOM_FASTRPC=y CONFIG_APDS9802ALS=y CONFIG_ISL29003=y # CONFIG_ISL29020 is not set CONFIG_SENSORS_TSL2550=y CONFIG_SENSORS_BH1770=y CONFIG_SENSORS_APDS990X=y # CONFIG_HMC6352 is not set CONFIG_DS1682=y CONFIG_SRAM=y # CONFIG_XILINX_SDFEC is not set CONFIG_OPEN_DICE=y # CONFIG_VCPU_STALL_DETECTOR is not set CONFIG_C2PORT=y # # EEPROM support # CONFIG_EEPROM_AT24=y CONFIG_EEPROM_LEGACY=y CONFIG_EEPROM_MAX6875=y CONFIG_EEPROM_93CX6=y CONFIG_EEPROM_IDT_89HPESX=y # CONFIG_EEPROM_EE1004 is not set # end of EEPROM support # # Texas Instruments shared transport line discipline # CONFIG_TI_ST=y # end of Texas Instruments shared transport line discipline CONFIG_SENSORS_LIS3_I2C=y CONFIG_ALTERA_STAPL=y CONFIG_ECHO=y CONFIG_UACCE=y CONFIG_PVPANIC=y CONFIG_PVPANIC_MMIO=y # end of Misc devices # # SCSI device support # CONFIG_SCSI_MOD=y CONFIG_RAID_ATTRS=y CONFIG_SCSI_COMMON=y CONFIG_SCSI=y CONFIG_SCSI_DMA=y CONFIG_SCSI_NETLINK=y # CONFIG_SCSI_PROC_FS is not set # # SCSI support type (disk, tape, CD-ROM) # CONFIG_BLK_DEV_SD=y CONFIG_CHR_DEV_ST=y # CONFIG_CHR_DEV_SG is not set CONFIG_BLK_DEV_BSG=y # CONFIG_CHR_DEV_SCH is not set CONFIG_SCSI_ENCLOSURE=y CONFIG_SCSI_CONSTANTS=y # CONFIG_SCSI_LOGGING is not set # CONFIG_SCSI_SCAN_ASYNC is not set # # SCSI Transports # # CONFIG_SCSI_SPI_ATTRS is not set CONFIG_SCSI_FC_ATTRS=y CONFIG_SCSI_ISCSI_ATTRS=y CONFIG_SCSI_SAS_ATTRS=y CONFIG_SCSI_SAS_LIBSAS=y CONFIG_SCSI_SAS_ATA=y CONFIG_SCSI_SAS_HOST_SMP=y # CONFIG_SCSI_SRP_ATTRS is not set # end of SCSI Transports CONFIG_SCSI_LOWLEVEL=y CONFIG_ISCSI_TCP=y # CONFIG_ISCSI_BOOT_SYSFS is not set # CONFIG_SCSI_HISI_SAS is not set CONFIG_LIBFC=y # CONFIG_LIBFCOE is not set CONFIG_SCSI_DEBUG=y # CONFIG_SCSI_VIRTIO is not set CONFIG_SCSI_DH=y CONFIG_SCSI_DH_RDAC=y CONFIG_SCSI_DH_HP_SW=y # CONFIG_SCSI_DH_EMC is not set # CONFIG_SCSI_DH_ALUA is not set # end of SCSI device support CONFIG_ATA=y CONFIG_SATA_HOST=y CONFIG_PATA_TIMINGS=y # CONFIG_ATA_VERBOSE_ERROR is not set CONFIG_ATA_FORCE=y # CONFIG_SATA_PMP is not set # # Controllers with non-SFF native interface # CONFIG_SATA_AHCI_PLATFORM=y CONFIG_AHCI_BRCM=y # CONFIG_AHCI_DA850 is not set CONFIG_AHCI_DM816=y # CONFIG_AHCI_DWC is not set CONFIG_AHCI_ST=y CONFIG_AHCI_IMX=y # CONFIG_AHCI_CEVA is not set CONFIG_AHCI_MTK=y CONFIG_AHCI_MVEBU=y # CONFIG_AHCI_SUNXI is not set # CONFIG_AHCI_TEGRA is not set CONFIG_AHCI_XGENE=y # CONFIG_AHCI_QORIQ is not set # CONFIG_SATA_FSL is not set CONFIG_SATA_GEMINI=y CONFIG_SATA_AHCI_SEATTLE=y CONFIG_ATA_SFF=y # # SFF controllers with custom DMA interface # CONFIG_ATA_BMDMA=y # # SATA SFF controllers with BMDMA # # CONFIG_SATA_DWC is not set CONFIG_SATA_HIGHBANK=y CONFIG_SATA_MV=y # CONFIG_SATA_RCAR is not set # # PATA SFF controllers with BMDMA # # CONFIG_PATA_ARASAN_CF is not set # CONFIG_PATA_FTIDE010 is not set CONFIG_PATA_IMX=y # CONFIG_PATA_PXA is not set # # PIO-only SFF controllers # CONFIG_PATA_IXP4XX_CF=y # CONFIG_PATA_OF_PLATFORM is not set CONFIG_PATA_SAMSUNG_CF=y # # Generic fallback / legacy drivers # CONFIG_MD=y CONFIG_BLK_DEV_MD=y # CONFIG_MD_AUTODETECT is not set CONFIG_MD_LINEAR=y CONFIG_MD_RAID0=y CONFIG_MD_RAID1=y CONFIG_MD_RAID10=y CONFIG_MD_RAID456=y CONFIG_MD_MULTIPATH=y CONFIG_MD_FAULTY=y CONFIG_MD_CLUSTER=y CONFIG_BCACHE=y # CONFIG_BCACHE_DEBUG is not set # CONFIG_BCACHE_CLOSURES_DEBUG is not set CONFIG_BCACHE_ASYNC_REGISTRATION=y CONFIG_BLK_DEV_DM_BUILTIN=y CONFIG_BLK_DEV_DM=y # CONFIG_DM_DEBUG is not set CONFIG_DM_BUFIO=y # CONFIG_DM_DEBUG_BLOCK_MANAGER_LOCKING is not set CONFIG_DM_PERSISTENT_DATA=y CONFIG_DM_UNSTRIPED=y CONFIG_DM_CRYPT=y # CONFIG_DM_SNAPSHOT is not set # CONFIG_DM_THIN_PROVISIONING is not set # CONFIG_DM_CACHE is not set CONFIG_DM_WRITECACHE=y CONFIG_DM_EBS=y # CONFIG_DM_ERA is not set CONFIG_DM_CLONE=y CONFIG_DM_MIRROR=y CONFIG_DM_LOG_USERSPACE=y CONFIG_DM_RAID=y CONFIG_DM_ZERO=y # CONFIG_DM_MULTIPATH is not set CONFIG_DM_DELAY=y CONFIG_DM_DUST=y CONFIG_DM_INIT=y CONFIG_DM_UEVENT=y # CONFIG_DM_FLAKEY is not set CONFIG_DM_VERITY=y # CONFIG_DM_VERITY_VERIFY_ROOTHASH_SIG is not set CONFIG_DM_VERITY_FEC=y CONFIG_DM_SWITCH=y CONFIG_DM_LOG_WRITES=y CONFIG_DM_INTEGRITY=y CONFIG_DM_ZONED=y CONFIG_DM_AUDIT=y # CONFIG_TARGET_CORE is not set # # IEEE 1394 (FireWire) support # CONFIG_FIREWIRE=y CONFIG_FIREWIRE_SBP2=y CONFIG_FIREWIRE_NET=y # end of IEEE 1394 (FireWire) support # CONFIG_NETDEVICES is not set # # Input device support # CONFIG_INPUT=y CONFIG_INPUT_LEDS=y CONFIG_INPUT_FF_MEMLESS=y # CONFIG_INPUT_SPARSEKMAP is not set # CONFIG_INPUT_MATRIXKMAP is not set CONFIG_INPUT_VIVALDIFMAP=y # # Userland interfaces # CONFIG_INPUT_MOUSEDEV=y CONFIG_INPUT_MOUSEDEV_PSAUX=y CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 CONFIG_INPUT_JOYDEV=y CONFIG_INPUT_EVDEV=y CONFIG_INPUT_EVBUG=y # # Input Device Drivers # # CONFIG_INPUT_KEYBOARD is not set # CONFIG_INPUT_MOUSE is not set # CONFIG_INPUT_JOYSTICK is not set CONFIG_INPUT_TABLET=y CONFIG_TABLET_SERIAL_WACOM4=y # CONFIG_INPUT_TOUCHSCREEN is not set # CONFIG_INPUT_MISC is not set CONFIG_RMI4_CORE=y # CONFIG_RMI4_I2C is not set # CONFIG_RMI4_SMB is not set CONFIG_RMI4_F03=y CONFIG_RMI4_F03_SERIO=y CONFIG_RMI4_2D_SENSOR=y CONFIG_RMI4_F11=y CONFIG_RMI4_F12=y CONFIG_RMI4_F30=y CONFIG_RMI4_F34=y CONFIG_RMI4_F3A=y # CONFIG_RMI4_F54 is not set # CONFIG_RMI4_F55 is not set # # Hardware I/O ports # CONFIG_SERIO=y CONFIG_SERIO_SERPORT=y CONFIG_SERIO_LIBPS2=y # CONFIG_SERIO_RAW is not set # CONFIG_SERIO_ALTERA_PS2 is not set # CONFIG_SERIO_PS2MULT is not set CONFIG_SERIO_ARC_PS2=y CONFIG_SERIO_APBPS2=y # CONFIG_SERIO_OLPC_APSP is not set # CONFIG_SERIO_SUN4I_PS2 is not set CONFIG_SERIO_GPIO_PS2=y CONFIG_USERIO=y CONFIG_GAMEPORT=y CONFIG_GAMEPORT_NS558=y CONFIG_GAMEPORT_L4=y # end of Hardware I/O ports # end of Input device support # # Character devices # CONFIG_TTY=y CONFIG_VT=y CONFIG_CONSOLE_TRANSLATIONS=y CONFIG_VT_CONSOLE=y CONFIG_HW_CONSOLE=y CONFIG_VT_HW_CONSOLE_BINDING=y CONFIG_UNIX98_PTYS=y CONFIG_LEGACY_PTYS=y CONFIG_LEGACY_PTY_COUNT=256 CONFIG_LEGACY_TIOCSTI=y CONFIG_LDISC_AUTOLOAD=y # # Serial drivers # CONFIG_SERIAL_EARLYCON=y # CONFIG_SERIAL_8250 is not set # # Non-8250 serial port support # CONFIG_SERIAL_AMBA_PL010=y # CONFIG_SERIAL_AMBA_PL010_CONSOLE is not set # CONFIG_SERIAL_KGDB_NMI is not set CONFIG_SERIAL_MESON=y # CONFIG_SERIAL_MESON_CONSOLE is not set # CONFIG_SERIAL_CLPS711X is not set # CONFIG_SERIAL_SAMSUNG is not set # CONFIG_SERIAL_TEGRA is not set CONFIG_SERIAL_TEGRA_TCU=y CONFIG_SERIAL_TEGRA_TCU_CONSOLE=y CONFIG_SERIAL_IMX=y CONFIG_SERIAL_IMX_CONSOLE=y # CONFIG_SERIAL_IMX_EARLYCON is not set CONFIG_SERIAL_UARTLITE=y # CONFIG_SERIAL_UARTLITE_CONSOLE is not set CONFIG_SERIAL_UARTLITE_NR_UARTS=1 CONFIG_SERIAL_SH_SCI=y CONFIG_SERIAL_SH_SCI_NR_UARTS=2 CONFIG_SERIAL_SH_SCI_CONSOLE=y # CONFIG_SERIAL_HS_LPC32XX is not set CONFIG_SERIAL_CORE=y CONFIG_SERIAL_CORE_CONSOLE=y CONFIG_CONSOLE_POLL=y CONFIG_SERIAL_MSM=y # CONFIG_SERIAL_MSM_CONSOLE is not set # CONFIG_SERIAL_VT8500 is not set # CONFIG_SERIAL_OMAP is not set CONFIG_SERIAL_SIFIVE=y CONFIG_SERIAL_SIFIVE_CONSOLE=y CONFIG_SERIAL_LANTIQ=y # CONFIG_SERIAL_LANTIQ_CONSOLE is not set # CONFIG_SERIAL_SCCNXP is not set CONFIG_SERIAL_SC16IS7XX=y # CONFIG_SERIAL_SC16IS7XX_I2C is not set # CONFIG_SERIAL_TIMBERDALE is not set CONFIG_SERIAL_BCM63XX=y CONFIG_SERIAL_BCM63XX_CONSOLE=y CONFIG_SERIAL_ALTERA_JTAGUART=y CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE=y # CONFIG_SERIAL_ALTERA_JTAGUART_CONSOLE_BYPASS is not set # CONFIG_SERIAL_ALTERA_UART is not set CONFIG_SERIAL_MXS_AUART=y CONFIG_SERIAL_MXS_AUART_CONSOLE=y CONFIG_SERIAL_XILINX_PS_UART=y # CONFIG_SERIAL_XILINX_PS_UART_CONSOLE is not set # CONFIG_SERIAL_MPS2_UART is not set CONFIG_SERIAL_ARC=y # CONFIG_SERIAL_ARC_CONSOLE is not set CONFIG_SERIAL_ARC_NR_PORTS=1 # CONFIG_SERIAL_FSL_LPUART is not set # CONFIG_SERIAL_FSL_LINFLEXUART is not set CONFIG_SERIAL_CONEXANT_DIGICOLOR=y CONFIG_SERIAL_CONEXANT_DIGICOLOR_CONSOLE=y CONFIG_SERIAL_ST_ASC=y # CONFIG_SERIAL_ST_ASC_CONSOLE is not set # CONFIG_SERIAL_MEN_Z135 is not set # CONFIG_SERIAL_STM32 is not set CONFIG_SERIAL_OWL=y # CONFIG_SERIAL_OWL_CONSOLE is not set CONFIG_SERIAL_RDA=y # CONFIG_SERIAL_RDA_CONSOLE is not set # CONFIG_SERIAL_MILBEAUT_USIO is not set CONFIG_SERIAL_LITEUART=y CONFIG_SERIAL_LITEUART_MAX_PORTS=1 # CONFIG_SERIAL_LITEUART_CONSOLE is not set # CONFIG_SERIAL_SUNPLUS is not set # end of Serial drivers CONFIG_SERIAL_MCTRL_GPIO=y # CONFIG_SERIAL_NONSTANDARD is not set # CONFIG_N_GSM is not set CONFIG_NULL_TTY=y CONFIG_HVC_DRIVER=y CONFIG_RPMSG_TTY=y CONFIG_SERIAL_DEV_BUS=y # CONFIG_SERIAL_DEV_CTRL_TTYPORT is not set CONFIG_VIRTIO_CONSOLE=y CONFIG_IPMI_HANDLER=y CONFIG_IPMI_PLAT_DATA=y # CONFIG_IPMI_PANIC_EVENT is not set CONFIG_IPMI_DEVICE_INTERFACE=y CONFIG_IPMI_SI=y CONFIG_IPMI_SSIF=y CONFIG_IPMI_IPMB=y # CONFIG_IPMI_WATCHDOG is not set # CONFIG_IPMI_POWEROFF is not set CONFIG_IPMI_KCS_BMC=y CONFIG_ASPEED_KCS_IPMI_BMC=y # CONFIG_NPCM7XX_KCS_IPMI_BMC is not set # CONFIG_IPMI_KCS_BMC_CDEV_IPMI is not set # CONFIG_IPMI_KCS_BMC_SERIO is not set CONFIG_ASPEED_BT_IPMI_BMC=y # CONFIG_SSIF_IPMI_BMC is not set CONFIG_IPMB_DEVICE_INTERFACE=y CONFIG_HW_RANDOM=y CONFIG_HW_RANDOM_TIMERIOMEM=y # CONFIG_HW_RANDOM_BA431 is not set CONFIG_HW_RANDOM_BCM2835=y CONFIG_HW_RANDOM_IPROC_RNG200=y CONFIG_HW_RANDOM_IXP4XX=y CONFIG_HW_RANDOM_OMAP=y CONFIG_HW_RANDOM_OMAP3_ROM=y CONFIG_HW_RANDOM_VIRTIO=y CONFIG_HW_RANDOM_NOMADIK=y # CONFIG_HW_RANDOM_STM32 is not set # CONFIG_HW_RANDOM_MESON is not set CONFIG_HW_RANDOM_MTK=y CONFIG_HW_RANDOM_EXYNOS=y # CONFIG_HW_RANDOM_NPCM is not set # CONFIG_HW_RANDOM_KEYSTONE is not set CONFIG_HW_RANDOM_CCTRNG=y CONFIG_HW_RANDOM_XIPHERA=y CONFIG_DEVMEM=y # CONFIG_TCG_TPM is not set CONFIG_XILLYBUS_CLASS=y CONFIG_XILLYBUS=y # CONFIG_XILLYBUS_OF is not set # end of Character devices # # I2C support # CONFIG_I2C=y CONFIG_I2C_BOARDINFO=y CONFIG_I2C_COMPAT=y CONFIG_I2C_CHARDEV=y CONFIG_I2C_MUX=y # # Multiplexer I2C Chip support # # CONFIG_I2C_ARB_GPIO_CHALLENGE is not set CONFIG_I2C_MUX_GPIO=y # CONFIG_I2C_MUX_GPMUX is not set CONFIG_I2C_MUX_LTC4306=y CONFIG_I2C_MUX_PCA9541=y CONFIG_I2C_MUX_PCA954x=y CONFIG_I2C_MUX_PINCTRL=y CONFIG_I2C_MUX_REG=y CONFIG_I2C_DEMUX_PINCTRL=y # CONFIG_I2C_MUX_MLXCPLD is not set # end of Multiplexer I2C Chip support # CONFIG_I2C_HELPER_AUTO is not set CONFIG_I2C_SMBUS=y # # I2C Algorithms # CONFIG_I2C_ALGOBIT=y # CONFIG_I2C_ALGOPCF is not set CONFIG_I2C_ALGOPCA=y # end of I2C Algorithms # # I2C Hardware Bus support # CONFIG_I2C_HIX5HD2=y # # I2C system bus drivers (mostly embedded / system-on-chip) # # CONFIG_I2C_ALTERA is not set # CONFIG_I2C_ASPEED is not set # CONFIG_I2C_AT91 is not set # CONFIG_I2C_AXXIA is not set # CONFIG_I2C_BCM_IPROC is not set # CONFIG_I2C_BCM_KONA is not set CONFIG_I2C_BRCMSTB=y # CONFIG_I2C_CADENCE is not set CONFIG_I2C_CBUS_GPIO=y CONFIG_I2C_DAVINCI=y CONFIG_I2C_DESIGNWARE_CORE=y CONFIG_I2C_DESIGNWARE_SLAVE=y CONFIG_I2C_DESIGNWARE_PLATFORM=y CONFIG_I2C_DIGICOLOR=y CONFIG_I2C_EXYNOS5=y CONFIG_I2C_GPIO=y CONFIG_I2C_GPIO_FAULT_INJECTOR=y # CONFIG_I2C_HIGHLANDER is not set # CONFIG_I2C_HISI is not set CONFIG_I2C_IMG=y CONFIG_I2C_IMX=y CONFIG_I2C_IMX_LPI2C=y CONFIG_I2C_IOP3XX=y CONFIG_I2C_JZ4780=y # CONFIG_I2C_KEMPLD is not set CONFIG_I2C_LPC2K=y CONFIG_I2C_MICROCHIP_CORE=y # CONFIG_I2C_MT65XX is not set CONFIG_I2C_MT7621=y # CONFIG_I2C_MV64XXX is not set CONFIG_I2C_MXS=y CONFIG_I2C_NPCM=y CONFIG_I2C_OCORES=y CONFIG_I2C_OMAP=y CONFIG_I2C_OWL=y # CONFIG_I2C_APPLE is not set CONFIG_I2C_PCA_PLATFORM=y CONFIG_I2C_PNX=y CONFIG_I2C_PXA=y # CONFIG_I2C_PXA_SLAVE is not set # CONFIG_I2C_QCOM_CCI is not set # CONFIG_I2C_QUP is not set CONFIG_I2C_RIIC=y CONFIG_I2C_RZV2M=y CONFIG_I2C_S3C2410=y # CONFIG_I2C_SH_MOBILE is not set # CONFIG_I2C_SIMTEC is not set CONFIG_I2C_ST=y # CONFIG_I2C_STM32F4 is not set CONFIG_I2C_STM32F7=y CONFIG_I2C_SUN6I_P2WI=y CONFIG_I2C_SYNQUACER=y # CONFIG_I2C_TEGRA_BPMP is not set CONFIG_I2C_UNIPHIER=y CONFIG_I2C_UNIPHIER_F=y CONFIG_I2C_VERSATILE=y CONFIG_I2C_WMT=y CONFIG_I2C_XILINX=y # CONFIG_I2C_XLP9XX is not set CONFIG_I2C_RCAR=y # # External I2C/SMBus adapter drivers # CONFIG_I2C_TAOS_EVM=y # # Other I2C/SMBus bus drivers # CONFIG_I2C_MLXCPLD=y CONFIG_I2C_VIRTIO=y # end of I2C Hardware Bus support CONFIG_I2C_SLAVE=y # CONFIG_I2C_SLAVE_EEPROM is not set CONFIG_I2C_SLAVE_TESTUNIT=y # CONFIG_I2C_DEBUG_CORE is not set # CONFIG_I2C_DEBUG_ALGO is not set CONFIG_I2C_DEBUG_BUS=y # end of I2C support CONFIG_I3C=y CONFIG_CDNS_I3C_MASTER=y CONFIG_DW_I3C_MASTER=y CONFIG_SVC_I3C_MASTER=y # CONFIG_MIPI_I3C_HCI is not set # CONFIG_SPI is not set CONFIG_SPMI=y CONFIG_SPMI_HISI3670=y CONFIG_SPMI_MSM_PMIC_ARB=y CONFIG_SPMI_MTK_PMIF=y CONFIG_HSI=y CONFIG_HSI_BOARDINFO=y # # HSI controllers # # # HSI clients # CONFIG_HSI_CHAR=y CONFIG_PPS=y CONFIG_PPS_DEBUG=y CONFIG_NTP_PPS=y # # PPS clients support # CONFIG_PPS_CLIENT_KTIMER=y CONFIG_PPS_CLIENT_LDISC=y # CONFIG_PPS_CLIENT_GPIO is not set # # PPS generators support # # # PTP clock support # CONFIG_PTP_1588_CLOCK=y CONFIG_PTP_1588_CLOCK_OPTIONAL=y CONFIG_PTP_1588_CLOCK_DTE=y CONFIG_PTP_1588_CLOCK_QORIQ=y # # Enable PHYLIB and NETWORK_PHY_TIMESTAMPING to see the additional clocks. # CONFIG_PTP_1588_CLOCK_IDT82P33=y # CONFIG_PTP_1588_CLOCK_IDTCM is not set # end of PTP clock support CONFIG_PINCTRL=y CONFIG_GENERIC_PINCTRL_GROUPS=y CONFIG_PINMUX=y CONFIG_GENERIC_PINMUX_FUNCTIONS=y CONFIG_PINCONF=y CONFIG_GENERIC_PINCONF=y CONFIG_DEBUG_PINCTRL=y # CONFIG_PINCTRL_AMD is not set # CONFIG_PINCTRL_AS3722 is not set # CONFIG_PINCTRL_AT91PIO4 is not set CONFIG_PINCTRL_AXP209=y CONFIG_PINCTRL_BM1880=y CONFIG_PINCTRL_CY8C95X0=y CONFIG_PINCTRL_DA850_PUPD=y # CONFIG_PINCTRL_EQUILIBRIUM is not set # CONFIG_PINCTRL_INGENIC is not set # CONFIG_PINCTRL_LOONGSON2 is not set # CONFIG_PINCTRL_LPC18XX is not set CONFIG_PINCTRL_MCP23S08_I2C=y CONFIG_PINCTRL_MCP23S08=y CONFIG_PINCTRL_MICROCHIP_SGPIO=y CONFIG_PINCTRL_OCELOT=y CONFIG_PINCTRL_PALMAS=y # CONFIG_PINCTRL_PISTACHIO is not set CONFIG_PINCTRL_ROCKCHIP=y CONFIG_PINCTRL_SINGLE=y # CONFIG_PINCTRL_STMFX is not set # CONFIG_PINCTRL_SX150X is not set CONFIG_PINCTRL_OWL=y # CONFIG_PINCTRL_S500 is not set CONFIG_PINCTRL_S700=y # CONFIG_PINCTRL_S900 is not set CONFIG_PINCTRL_ASPEED=y # CONFIG_PINCTRL_ASPEED_G4 is not set CONFIG_PINCTRL_ASPEED_G5=y CONFIG_PINCTRL_ASPEED_G6=y # CONFIG_PINCTRL_BCM281XX is not set # CONFIG_PINCTRL_BCM2835 is not set # CONFIG_PINCTRL_BCM4908 is not set CONFIG_PINCTRL_BCM63XX=y CONFIG_PINCTRL_BCM6318=y # CONFIG_PINCTRL_BCM6328 is not set # CONFIG_PINCTRL_BCM6358 is not set CONFIG_PINCTRL_BCM6362=y CONFIG_PINCTRL_BCM6368=y # CONFIG_PINCTRL_BCM63268 is not set # CONFIG_PINCTRL_IPROC_GPIO is not set CONFIG_PINCTRL_CYGNUS_MUX=y CONFIG_PINCTRL_NS=y # CONFIG_PINCTRL_NSP_GPIO is not set CONFIG_PINCTRL_NS2_MUX=y # CONFIG_PINCTRL_NSP_MUX is not set CONFIG_PINCTRL_BERLIN=y CONFIG_PINCTRL_AS370=y CONFIG_PINCTRL_BERLIN_BG4CT=y # CONFIG_PINCTRL_LOCHNAGAR is not set # # Intel pinctrl drivers # # end of Intel pinctrl drivers # # MediaTek pinctrl drivers # CONFIG_EINT_MTK=y CONFIG_PINCTRL_MTK=y CONFIG_PINCTRL_MTK_V2=y CONFIG_PINCTRL_MTK_PARIS=y CONFIG_PINCTRL_MT2701=y # CONFIG_PINCTRL_MT7623 is not set # CONFIG_PINCTRL_MT7629 is not set # CONFIG_PINCTRL_MT8135 is not set # CONFIG_PINCTRL_MT8127 is not set # CONFIG_PINCTRL_MT2712 is not set CONFIG_PINCTRL_MT6765=y # CONFIG_PINCTRL_MT6779 is not set # CONFIG_PINCTRL_MT6795 is not set # CONFIG_PINCTRL_MT6797 is not set # CONFIG_PINCTRL_MT7622 is not set # CONFIG_PINCTRL_MT7986 is not set # CONFIG_PINCTRL_MT8167 is not set CONFIG_PINCTRL_MT8173=y CONFIG_PINCTRL_MT8183=y CONFIG_PINCTRL_MT8186=y # CONFIG_PINCTRL_MT8188 is not set # CONFIG_PINCTRL_MT8192 is not set CONFIG_PINCTRL_MT8195=y # CONFIG_PINCTRL_MT8365 is not set CONFIG_PINCTRL_MT8516=y CONFIG_PINCTRL_MT6397=y # end of MediaTek pinctrl drivers CONFIG_PINCTRL_MESON=y CONFIG_PINCTRL_WPCM450=y # CONFIG_PINCTRL_NPCM7XX is not set CONFIG_PINCTRL_PXA=y CONFIG_PINCTRL_PXA25X=y CONFIG_PINCTRL_PXA27X=y # CONFIG_PINCTRL_MSM is not set # CONFIG_PINCTRL_QCOM_SPMI_PMIC is not set CONFIG_PINCTRL_QCOM_SSBI_PMIC=y CONFIG_PINCTRL_SC7280_LPASS_LPI=y CONFIG_PINCTRL_SM8250_LPASS_LPI=y CONFIG_PINCTRL_SM8450_LPASS_LPI=y CONFIG_PINCTRL_SC8280XP_LPASS_LPI=y CONFIG_PINCTRL_LPASS_LPI=y # # Renesas pinctrl drivers # # CONFIG_PINCTRL_RENESAS is not set CONFIG_PINCTRL_SH_PFC=y CONFIG_PINCTRL_SH_PFC_GPIO=y CONFIG_PINCTRL_SH_FUNC_GPIO=y CONFIG_PINCTRL_PFC_EMEV2=y CONFIG_PINCTRL_PFC_R8A77995=y # CONFIG_PINCTRL_PFC_R8A7794 is not set CONFIG_PINCTRL_PFC_R8A77990=y # CONFIG_PINCTRL_PFC_R8A7779 is not set CONFIG_PINCTRL_PFC_R8A7790=y CONFIG_PINCTRL_PFC_R8A77950=y CONFIG_PINCTRL_PFC_R8A77951=y CONFIG_PINCTRL_PFC_R8A7778=y CONFIG_PINCTRL_PFC_R8A7793=y CONFIG_PINCTRL_PFC_R8A7791=y CONFIG_PINCTRL_PFC_R8A77965=y # CONFIG_PINCTRL_PFC_R8A77960 is not set # CONFIG_PINCTRL_PFC_R8A77961 is not set # CONFIG_PINCTRL_PFC_R8A779F0 is not set # CONFIG_PINCTRL_PFC_R8A7792 is not set # CONFIG_PINCTRL_PFC_R8A77980 is not set CONFIG_PINCTRL_PFC_R8A77970=y # CONFIG_PINCTRL_PFC_R8A779A0 is not set # CONFIG_PINCTRL_PFC_R8A779G0 is not set # CONFIG_PINCTRL_PFC_R8A7740 is not set CONFIG_PINCTRL_PFC_R8A73A4=y # CONFIG_PINCTRL_RZA1 is not set CONFIG_PINCTRL_RZA2=y CONFIG_PINCTRL_RZG2L=y # CONFIG_PINCTRL_PFC_R8A77470 is not set CONFIG_PINCTRL_PFC_R8A7745=y # CONFIG_PINCTRL_PFC_R8A7742 is not set # CONFIG_PINCTRL_PFC_R8A7743 is not set # CONFIG_PINCTRL_PFC_R8A7744 is not set CONFIG_PINCTRL_PFC_R8A774C0=y CONFIG_PINCTRL_PFC_R8A774E1=y CONFIG_PINCTRL_PFC_R8A774A1=y # CONFIG_PINCTRL_PFC_R8A774B1 is not set CONFIG_PINCTRL_RZN1=y CONFIG_PINCTRL_RZV2M=y # CONFIG_PINCTRL_PFC_SH7203 is not set CONFIG_PINCTRL_PFC_SH7264=y CONFIG_PINCTRL_PFC_SH7269=y CONFIG_PINCTRL_PFC_SH7720=y # CONFIG_PINCTRL_PFC_SH7722 is not set # CONFIG_PINCTRL_PFC_SH7734 is not set CONFIG_PINCTRL_PFC_SH7757=y CONFIG_PINCTRL_PFC_SH7785=y # CONFIG_PINCTRL_PFC_SH7786 is not set # CONFIG_PINCTRL_PFC_SH73A0 is not set CONFIG_PINCTRL_PFC_SH7723=y # CONFIG_PINCTRL_PFC_SH7724 is not set CONFIG_PINCTRL_PFC_SHX3=y # end of Renesas pinctrl drivers CONFIG_PINCTRL_SAMSUNG=y CONFIG_PINCTRL_EXYNOS=y CONFIG_PINCTRL_EXYNOS_ARM=y CONFIG_PINCTRL_EXYNOS_ARM64=y # CONFIG_PINCTRL_S3C24XX is not set CONFIG_PINCTRL_S3C64XX=y CONFIG_PINCTRL_SPRD=y CONFIG_PINCTRL_SPRD_SC9860=y CONFIG_PINCTRL_STARFIVE_JH7100=y CONFIG_PINCTRL_STM32=y CONFIG_PINCTRL_STM32F429=y CONFIG_PINCTRL_STM32F469=y # CONFIG_PINCTRL_STM32F746 is not set CONFIG_PINCTRL_STM32F769=y CONFIG_PINCTRL_STM32H743=y CONFIG_PINCTRL_STM32MP135=y # CONFIG_PINCTRL_STM32MP157 is not set CONFIG_PINCTRL_TI_IODELAY=y CONFIG_PINCTRL_UNIPHIER=y CONFIG_PINCTRL_UNIPHIER_LD4=y # CONFIG_PINCTRL_UNIPHIER_PRO4 is not set # CONFIG_PINCTRL_UNIPHIER_SLD8 is not set CONFIG_PINCTRL_UNIPHIER_PRO5=y # CONFIG_PINCTRL_UNIPHIER_PXS2 is not set CONFIG_PINCTRL_UNIPHIER_LD6B=y CONFIG_PINCTRL_UNIPHIER_LD11=y # CONFIG_PINCTRL_UNIPHIER_LD20 is not set CONFIG_PINCTRL_UNIPHIER_PXS3=y CONFIG_PINCTRL_UNIPHIER_NX1=y # CONFIG_PINCTRL_TMPV7700 is not set CONFIG_GPIOLIB=y CONFIG_GPIOLIB_FASTPATH_LIMIT=512 CONFIG_OF_GPIO=y CONFIG_GPIOLIB_IRQCHIP=y CONFIG_DEBUG_GPIO=y CONFIG_GPIO_CDEV=y CONFIG_GPIO_CDEV_V1=y CONFIG_GPIO_GENERIC=y CONFIG_GPIO_REGMAP=y CONFIG_GPIO_MAX730X=y # # Memory mapped GPIO drivers # CONFIG_GPIO_74XX_MMIO=y CONFIG_GPIO_ALTERA=y # CONFIG_GPIO_ASPEED is not set # CONFIG_GPIO_ASPEED_SGPIO is not set # CONFIG_GPIO_ATH79 is not set CONFIG_GPIO_RASPBERRYPI_EXP=y CONFIG_GPIO_BCM_KONA=y CONFIG_GPIO_BCM_XGS_IPROC=y # CONFIG_GPIO_BRCMSTB is not set CONFIG_GPIO_CADENCE=y CONFIG_GPIO_CLPS711X=y # CONFIG_GPIO_DWAPB is not set # CONFIG_GPIO_EIC_SPRD is not set # CONFIG_GPIO_EM is not set CONFIG_GPIO_FTGPIO010=y CONFIG_GPIO_GENERIC_PLATFORM=y CONFIG_GPIO_GRGPIO=y CONFIG_GPIO_HISI=y # CONFIG_GPIO_HLWD is not set CONFIG_GPIO_IOP=y # CONFIG_GPIO_LOGICVC is not set CONFIG_GPIO_LPC18XX=y CONFIG_GPIO_LPC32XX=y CONFIG_GPIO_MB86S7X=y # CONFIG_GPIO_MENZ127 is not set # CONFIG_GPIO_MPC8XXX is not set CONFIG_GPIO_MT7621=y # CONFIG_GPIO_MXC is not set CONFIG_GPIO_MXS=y CONFIG_GPIO_PMIC_EIC_SPRD=y CONFIG_GPIO_PXA=y CONFIG_GPIO_RCAR=y CONFIG_GPIO_RDA=y # CONFIG_GPIO_ROCKCHIP is not set CONFIG_GPIO_SAMA5D2_PIOBU=y # CONFIG_GPIO_SIFIVE is not set # CONFIG_GPIO_SNPS_CREG is not set CONFIG_GPIO_SPRD=y # CONFIG_GPIO_STP_XWAY is not set CONFIG_GPIO_SYSCON=y CONFIG_GPIO_TEGRA=y # CONFIG_GPIO_TEGRA186 is not set CONFIG_GPIO_TS4800=y CONFIG_GPIO_UNIPHIER=y CONFIG_GPIO_VISCONTI=y # CONFIG_GPIO_WCD934X is not set CONFIG_GPIO_XGENE_SB=y CONFIG_GPIO_XILINX=y # CONFIG_GPIO_XLP is not set CONFIG_GPIO_AMD_FCH=y CONFIG_GPIO_IDT3243X=y # end of Memory mapped GPIO drivers # # I2C GPIO expanders # # CONFIG_GPIO_ADNP is not set CONFIG_GPIO_GW_PLD=y CONFIG_GPIO_MAX7300=y CONFIG_GPIO_MAX732X=y # CONFIG_GPIO_MAX732X_IRQ is not set CONFIG_GPIO_PCA953X=y CONFIG_GPIO_PCA953X_IRQ=y CONFIG_GPIO_PCA9570=y # CONFIG_GPIO_PCF857X is not set # CONFIG_GPIO_TPIC2810 is not set CONFIG_GPIO_TS4900=y # end of I2C GPIO expanders # # MFD GPIO expanders # CONFIG_GPIO_ARIZONA=y CONFIG_GPIO_BD71815=y # CONFIG_GPIO_BD71828 is not set CONFIG_GPIO_BD9571MWV=y CONFIG_GPIO_DA9055=y CONFIG_GPIO_KEMPLD=y CONFIG_GPIO_LP873X=y CONFIG_GPIO_LP87565=y CONFIG_GPIO_PALMAS=y # CONFIG_GPIO_RC5T583 is not set # CONFIG_GPIO_SL28CPLD is not set CONFIG_GPIO_STMPE=y # CONFIG_GPIO_TC3589X is not set # CONFIG_GPIO_TPS65086 is not set CONFIG_GPIO_TPS65218=y # CONFIG_GPIO_TPS65910 is not set CONFIG_GPIO_TPS65912=y CONFIG_GPIO_TQMX86=y CONFIG_GPIO_WM831X=y CONFIG_GPIO_WM8994=y # end of MFD GPIO expanders # # Virtual GPIO drivers # # CONFIG_GPIO_AGGREGATOR is not set # CONFIG_GPIO_LATCH is not set CONFIG_GPIO_MOCKUP=y CONFIG_GPIO_VIRTIO=y CONFIG_GPIO_SIM=y # end of Virtual GPIO drivers CONFIG_W1=y CONFIG_W1_CON=y # # 1-wire Bus Masters # # CONFIG_W1_MASTER_DS2482 is not set CONFIG_W1_MASTER_MXC=y # CONFIG_W1_MASTER_DS1WM is not set CONFIG_W1_MASTER_GPIO=y CONFIG_W1_MASTER_SGI=y # end of 1-wire Bus Masters # # 1-wire Slaves # CONFIG_W1_SLAVE_THERM=y CONFIG_W1_SLAVE_SMEM=y # CONFIG_W1_SLAVE_DS2405 is not set # CONFIG_W1_SLAVE_DS2408 is not set CONFIG_W1_SLAVE_DS2413=y CONFIG_W1_SLAVE_DS2406=y CONFIG_W1_SLAVE_DS2423=y # CONFIG_W1_SLAVE_DS2805 is not set CONFIG_W1_SLAVE_DS2430=y CONFIG_W1_SLAVE_DS2431=y CONFIG_W1_SLAVE_DS2433=y # CONFIG_W1_SLAVE_DS2433_CRC is not set CONFIG_W1_SLAVE_DS2438=y CONFIG_W1_SLAVE_DS250X=y CONFIG_W1_SLAVE_DS2780=y CONFIG_W1_SLAVE_DS2781=y CONFIG_W1_SLAVE_DS28E04=y CONFIG_W1_SLAVE_DS28E17=y # end of 1-wire Slaves # CONFIG_POWER_RESET is not set CONFIG_POWER_SUPPLY=y CONFIG_POWER_SUPPLY_DEBUG=y # CONFIG_POWER_SUPPLY_HWMON is not set # CONFIG_PDA_POWER is not set CONFIG_IP5XXX_POWER=y CONFIG_MAX8925_POWER=y CONFIG_WM831X_BACKUP=y # CONFIG_WM831X_POWER is not set CONFIG_TEST_POWER=y CONFIG_BATTERY_88PM860X=y # CONFIG_CHARGER_ADP5061 is not set CONFIG_BATTERY_ACT8945A=y # CONFIG_BATTERY_CW2015 is not set CONFIG_BATTERY_DS2760=y CONFIG_BATTERY_DS2780=y CONFIG_BATTERY_DS2781=y CONFIG_BATTERY_DS2782=y # CONFIG_BATTERY_SAMSUNG_SDI is not set CONFIG_BATTERY_SBS=y CONFIG_CHARGER_SBS=y CONFIG_MANAGER_SBS=y CONFIG_BATTERY_BQ27XXX=y CONFIG_BATTERY_BQ27XXX_I2C=y CONFIG_BATTERY_BQ27XXX_HDQ=y CONFIG_BATTERY_BQ27XXX_DT_UPDATES_NVM=y CONFIG_BATTERY_DA9030=y CONFIG_BATTERY_DA9150=y CONFIG_BATTERY_MAX17040=y CONFIG_BATTERY_MAX17042=y CONFIG_BATTERY_MAX1721X=y # CONFIG_CHARGER_88PM860X is not set # CONFIG_CHARGER_MAX8903 is not set # CONFIG_CHARGER_LP8727 is not set CONFIG_CHARGER_GPIO=y CONFIG_CHARGER_MANAGER=y CONFIG_CHARGER_LT3651=y CONFIG_CHARGER_LTC4162L=y CONFIG_CHARGER_MAX14577=y CONFIG_CHARGER_DETECTOR_MAX14656=y CONFIG_CHARGER_MAX77976=y # CONFIG_CHARGER_MAX8998 is not set # CONFIG_CHARGER_MT6360 is not set # CONFIG_CHARGER_QCOM_SMBB is not set # CONFIG_CHARGER_BQ2415X is not set # CONFIG_CHARGER_BQ24190 is not set CONFIG_CHARGER_BQ24257=y CONFIG_CHARGER_BQ24735=y CONFIG_CHARGER_BQ2515X=y CONFIG_CHARGER_BQ25890=y CONFIG_CHARGER_BQ25980=y # CONFIG_CHARGER_BQ256XX is not set CONFIG_CHARGER_SMB347=y CONFIG_CHARGER_TPS65090=y CONFIG_CHARGER_TPS65217=y # CONFIG_BATTERY_GAUGE_LTC2941 is not set # CONFIG_BATTERY_GOLDFISH is not set CONFIG_BATTERY_RT5033=y CONFIG_CHARGER_RT9455=y CONFIG_CHARGER_SC2731=y # CONFIG_CHARGER_UCS1002 is not set CONFIG_CHARGER_BD99954=y CONFIG_BATTERY_UG3105=y CONFIG_HWMON=y CONFIG_HWMON_VID=y # CONFIG_HWMON_DEBUG_CHIP is not set # # Native drivers # CONFIG_SENSORS_SMPRO=y CONFIG_SENSORS_AD7414=y # CONFIG_SENSORS_AD7418 is not set CONFIG_SENSORS_ADM1025=y CONFIG_SENSORS_ADM1026=y # CONFIG_SENSORS_ADM1029 is not set # CONFIG_SENSORS_ADM1031 is not set # CONFIG_SENSORS_ADM1177 is not set # CONFIG_SENSORS_ADM9240 is not set # CONFIG_SENSORS_ADT7410 is not set # CONFIG_SENSORS_ADT7411 is not set CONFIG_SENSORS_ADT7462=y CONFIG_SENSORS_ADT7470=y # CONFIG_SENSORS_ADT7475 is not set # CONFIG_SENSORS_AHT10 is not set CONFIG_SENSORS_AS370=y CONFIG_SENSORS_ASC7621=y # CONFIG_SENSORS_AXI_FAN_CONTROL is not set CONFIG_SENSORS_ARM_SCMI=y CONFIG_SENSORS_ARM_SCPI=y # CONFIG_SENSORS_ASB100 is not set # CONFIG_SENSORS_ASPEED is not set CONFIG_SENSORS_ATXP1=y CONFIG_SENSORS_BT1_PVT=y # CONFIG_SENSORS_BT1_PVT_ALARMS is not set CONFIG_SENSORS_CORSAIR_CPRO=y CONFIG_SENSORS_CORSAIR_PSU=y CONFIG_SENSORS_DRIVETEMP=y CONFIG_SENSORS_DS620=y # CONFIG_SENSORS_DS1621 is not set CONFIG_SENSORS_DA9055=y CONFIG_SENSORS_SPARX5=y CONFIG_SENSORS_F71805F=y CONFIG_SENSORS_F71882FG=y CONFIG_SENSORS_F75375S=y # CONFIG_SENSORS_GSC is not set CONFIG_SENSORS_MC13783_ADC=y # CONFIG_SENSORS_FSCHMD is not set # CONFIG_SENSORS_FTSTEUTATES is not set CONFIG_SENSORS_GL518SM=y # CONFIG_SENSORS_GL520SM is not set CONFIG_SENSORS_G760A=y CONFIG_SENSORS_G762=y # CONFIG_SENSORS_GPIO_FAN is not set CONFIG_SENSORS_HIH6130=y CONFIG_SENSORS_IBMAEM=y CONFIG_SENSORS_IBMPEX=y # CONFIG_SENSORS_IT87 is not set CONFIG_SENSORS_JC42=y CONFIG_SENSORS_POWR1220=y # CONFIG_SENSORS_LAN966X is not set CONFIG_SENSORS_LINEAGE=y CONFIG_SENSORS_LOCHNAGAR=y CONFIG_SENSORS_LTC2945=y # CONFIG_SENSORS_LTC2947_I2C is not set # CONFIG_SENSORS_LTC2990 is not set # CONFIG_SENSORS_LTC2992 is not set CONFIG_SENSORS_LTC4151=y CONFIG_SENSORS_LTC4215=y # CONFIG_SENSORS_LTC4222 is not set CONFIG_SENSORS_LTC4245=y CONFIG_SENSORS_LTC4260=y CONFIG_SENSORS_LTC4261=y CONFIG_SENSORS_MAX127=y CONFIG_SENSORS_MAX16065=y # CONFIG_SENSORS_MAX1619 is not set CONFIG_SENSORS_MAX1668=y CONFIG_SENSORS_MAX197=y CONFIG_SENSORS_MAX31730=y CONFIG_SENSORS_MAX31760=y # CONFIG_SENSORS_MAX6620 is not set CONFIG_SENSORS_MAX6621=y CONFIG_SENSORS_MAX6639=y CONFIG_SENSORS_MAX6650=y # CONFIG_SENSORS_MAX6697 is not set CONFIG_SENSORS_MAX31790=y # CONFIG_SENSORS_MCP3021 is not set CONFIG_SENSORS_TC654=y CONFIG_SENSORS_TPS23861=y CONFIG_SENSORS_MR75203=y # CONFIG_SENSORS_LM63 is not set CONFIG_SENSORS_LM73=y CONFIG_SENSORS_LM75=y # CONFIG_SENSORS_LM77 is not set CONFIG_SENSORS_LM78=y # CONFIG_SENSORS_LM80 is not set # CONFIG_SENSORS_LM83 is not set CONFIG_SENSORS_LM85=y CONFIG_SENSORS_LM87=y CONFIG_SENSORS_LM90=y CONFIG_SENSORS_LM92=y CONFIG_SENSORS_LM93=y CONFIG_SENSORS_LM95234=y CONFIG_SENSORS_LM95241=y # CONFIG_SENSORS_LM95245 is not set CONFIG_SENSORS_PC87360=y CONFIG_SENSORS_PC87427=y # CONFIG_SENSORS_NCT6683 is not set # CONFIG_SENSORS_NCT6775 is not set # CONFIG_SENSORS_NCT6775_I2C is not set CONFIG_SENSORS_NCT7802=y CONFIG_SENSORS_NCT7904=y CONFIG_SENSORS_NPCM7XX=y # CONFIG_SENSORS_NSA320 is not set CONFIG_SENSORS_OCC_P8_I2C=y CONFIG_SENSORS_OCC=y # CONFIG_SENSORS_PCF8591 is not set CONFIG_PMBUS=y # CONFIG_SENSORS_PMBUS is not set CONFIG_SENSORS_ADM1266=y CONFIG_SENSORS_ADM1275=y CONFIG_SENSORS_BEL_PFE=y CONFIG_SENSORS_BPA_RS600=y CONFIG_SENSORS_DELTA_AHE50DC_FAN=y CONFIG_SENSORS_FSP_3Y=y # CONFIG_SENSORS_IBM_CFFPS is not set CONFIG_SENSORS_DPS920AB=y CONFIG_SENSORS_INSPUR_IPSPS=y # CONFIG_SENSORS_IR35221 is not set # CONFIG_SENSORS_IR36021 is not set CONFIG_SENSORS_IR38064=y CONFIG_SENSORS_IR38064_REGULATOR=y CONFIG_SENSORS_IRPS5401=y CONFIG_SENSORS_ISL68137=y CONFIG_SENSORS_LM25066=y CONFIG_SENSORS_LM25066_REGULATOR=y CONFIG_SENSORS_LT7182S=y CONFIG_SENSORS_LTC2978=y CONFIG_SENSORS_LTC2978_REGULATOR=y # CONFIG_SENSORS_LTC3815 is not set # CONFIG_SENSORS_MAX15301 is not set # CONFIG_SENSORS_MAX16064 is not set CONFIG_SENSORS_MAX16601=y CONFIG_SENSORS_MAX20730=y CONFIG_SENSORS_MAX20751=y # CONFIG_SENSORS_MAX31785 is not set CONFIG_SENSORS_MAX34440=y # CONFIG_SENSORS_MAX8688 is not set CONFIG_SENSORS_MP2888=y CONFIG_SENSORS_MP2975=y # CONFIG_SENSORS_MP5023 is not set CONFIG_SENSORS_PIM4328=y # CONFIG_SENSORS_PLI1209BC is not set CONFIG_SENSORS_PM6764TR=y CONFIG_SENSORS_PXE1610=y CONFIG_SENSORS_Q54SJ108A2=y CONFIG_SENSORS_STPDDC60=y CONFIG_SENSORS_TPS40422=y # CONFIG_SENSORS_TPS53679 is not set CONFIG_SENSORS_TPS546D24=y CONFIG_SENSORS_UCD9000=y CONFIG_SENSORS_UCD9200=y CONFIG_SENSORS_XDPE152=y CONFIG_SENSORS_XDPE122=y # CONFIG_SENSORS_XDPE122_REGULATOR is not set CONFIG_SENSORS_ZL6100=y CONFIG_SENSORS_PWM_FAN=y CONFIG_SENSORS_RASPBERRYPI_HWMON=y CONFIG_SENSORS_SL28CPLD=y CONFIG_SENSORS_SBTSI=y # CONFIG_SENSORS_SBRMI is not set CONFIG_SENSORS_SHT15=y CONFIG_SENSORS_SHT21=y CONFIG_SENSORS_SHT3x=y CONFIG_SENSORS_SHT4x=y # CONFIG_SENSORS_SHTC1 is not set CONFIG_SENSORS_SY7636A=y CONFIG_SENSORS_DME1737=y CONFIG_SENSORS_EMC1403=y CONFIG_SENSORS_EMC2103=y CONFIG_SENSORS_EMC2305=y # CONFIG_SENSORS_EMC6W201 is not set # CONFIG_SENSORS_SMSC47M1 is not set CONFIG_SENSORS_SMSC47M192=y CONFIG_SENSORS_SMSC47B397=y CONFIG_SENSORS_SCH56XX_COMMON=y CONFIG_SENSORS_SCH5627=y CONFIG_SENSORS_SCH5636=y # CONFIG_SENSORS_STTS751 is not set CONFIG_SENSORS_SMM665=y CONFIG_SENSORS_ADC128D818=y CONFIG_SENSORS_ADS7828=y CONFIG_SENSORS_AMC6821=y CONFIG_SENSORS_INA209=y # CONFIG_SENSORS_INA2XX is not set # CONFIG_SENSORS_INA238 is not set CONFIG_SENSORS_INA3221=y # CONFIG_SENSORS_TC74 is not set # CONFIG_SENSORS_THMC50 is not set # CONFIG_SENSORS_TMP102 is not set CONFIG_SENSORS_TMP103=y # CONFIG_SENSORS_TMP108 is not set CONFIG_SENSORS_TMP401=y CONFIG_SENSORS_TMP421=y CONFIG_SENSORS_TMP464=y # CONFIG_SENSORS_TMP513 is not set # CONFIG_SENSORS_VT1211 is not set CONFIG_SENSORS_W83773G=y CONFIG_SENSORS_W83781D=y CONFIG_SENSORS_W83791D=y CONFIG_SENSORS_W83792D=y CONFIG_SENSORS_W83793=y # CONFIG_SENSORS_W83795 is not set CONFIG_SENSORS_W83L785TS=y # CONFIG_SENSORS_W83L786NG is not set CONFIG_SENSORS_W83627HF=y # CONFIG_SENSORS_W83627EHF is not set CONFIG_SENSORS_WM831X=y CONFIG_THERMAL=y CONFIG_THERMAL_NETLINK=y # CONFIG_THERMAL_STATISTICS is not set CONFIG_THERMAL_EMERGENCY_POWEROFF_DELAY_MS=0 # CONFIG_THERMAL_HWMON is not set CONFIG_THERMAL_OF=y # CONFIG_THERMAL_WRITABLE_TRIPS is not set # CONFIG_THERMAL_DEFAULT_GOV_STEP_WISE is not set # CONFIG_THERMAL_DEFAULT_GOV_FAIR_SHARE is not set CONFIG_THERMAL_DEFAULT_GOV_USER_SPACE=y CONFIG_THERMAL_GOV_FAIR_SHARE=y # CONFIG_THERMAL_GOV_STEP_WISE is not set # CONFIG_THERMAL_GOV_BANG_BANG is not set CONFIG_THERMAL_GOV_USER_SPACE=y CONFIG_CPU_THERMAL=y CONFIG_DEVFREQ_THERMAL=y # CONFIG_THERMAL_EMULATION is not set CONFIG_THERMAL_MMIO=y CONFIG_HISI_THERMAL=y # CONFIG_IMX_THERMAL is not set CONFIG_IMX8MM_THERMAL=y CONFIG_K3_THERMAL=y CONFIG_QORIQ_THERMAL=y # CONFIG_SPEAR_THERMAL is not set CONFIG_SUN8I_THERMAL=y # CONFIG_ROCKCHIP_THERMAL is not set CONFIG_RCAR_THERMAL=y CONFIG_RCAR_GEN3_THERMAL=y # CONFIG_RZG2L_THERMAL is not set CONFIG_KIRKWOOD_THERMAL=y CONFIG_DOVE_THERMAL=y # CONFIG_ARMADA_THERMAL is not set CONFIG_DA9062_THERMAL=y CONFIG_MTK_THERMAL=y # # Intel thermal drivers # # # ACPI INT340X thermal drivers # # end of ACPI INT340X thermal drivers # end of Intel thermal drivers # # Broadcom thermal drivers # CONFIG_BCM2711_THERMAL=y # CONFIG_BCM2835_THERMAL is not set CONFIG_BRCMSTB_THERMAL=y CONFIG_BCM_NS_THERMAL=y CONFIG_BCM_SR_THERMAL=y # end of Broadcom thermal drivers # # Texas Instruments thermal drivers # CONFIG_TI_SOC_THERMAL=y # CONFIG_TI_THERMAL is not set CONFIG_OMAP3_THERMAL=y CONFIG_OMAP4_THERMAL=y CONFIG_OMAP5_THERMAL=y # CONFIG_DRA752_THERMAL is not set # end of Texas Instruments thermal drivers # # Samsung thermal drivers # CONFIG_EXYNOS_THERMAL=y # end of Samsung thermal drivers # # NVIDIA Tegra thermal drivers # CONFIG_TEGRA_SOCTHERM=y CONFIG_TEGRA_BPMP_THERMAL=y CONFIG_TEGRA30_TSENSOR=y # end of NVIDIA Tegra thermal drivers # # Qualcomm thermal drivers # # CONFIG_QCOM_TSENS is not set # end of Qualcomm thermal drivers CONFIG_UNIPHIER_THERMAL=y # CONFIG_SPRD_THERMAL is not set # CONFIG_KHADAS_MCU_FAN_THERMAL is not set CONFIG_WATCHDOG=y CONFIG_WATCHDOG_CORE=y # CONFIG_WATCHDOG_NOWAYOUT is not set # CONFIG_WATCHDOG_HANDLE_BOOT_ENABLED is not set CONFIG_WATCHDOG_OPEN_TIMEOUT=0 # CONFIG_WATCHDOG_SYSFS is not set CONFIG_WATCHDOG_HRTIMER_PRETIMEOUT=y # # Watchdog Pretimeout Governors # CONFIG_WATCHDOG_PRETIMEOUT_GOV=y CONFIG_WATCHDOG_PRETIMEOUT_GOV_SEL=y CONFIG_WATCHDOG_PRETIMEOUT_GOV_NOOP=y # CONFIG_WATCHDOG_PRETIMEOUT_GOV_PANIC is not set CONFIG_WATCHDOG_PRETIMEOUT_DEFAULT_GOV_NOOP=y # # Watchdog Device Drivers # CONFIG_SOFT_WATCHDOG=y # CONFIG_SOFT_WATCHDOG_PRETIMEOUT is not set CONFIG_BD957XMUF_WATCHDOG=y # CONFIG_DA9052_WATCHDOG is not set # CONFIG_DA9055_WATCHDOG is not set CONFIG_DA9063_WATCHDOG=y # CONFIG_DA9062_WATCHDOG is not set CONFIG_GPIO_WATCHDOG=y CONFIG_GPIO_WATCHDOG_ARCH_INITCALL=y CONFIG_MENF21BMC_WATCHDOG=y CONFIG_MENZ069_WATCHDOG=y CONFIG_WM831X_WATCHDOG=y CONFIG_XILINX_WATCHDOG=y CONFIG_ZIIRAVE_WATCHDOG=y CONFIG_SL28CPLD_WATCHDOG=y CONFIG_ARMADA_37XX_WATCHDOG=y # CONFIG_ASM9260_WATCHDOG is not set # CONFIG_AT91RM9200_WATCHDOG is not set # CONFIG_AT91SAM9X_WATCHDOG is not set # CONFIG_SAMA5D4_WATCHDOG is not set CONFIG_CADENCE_WATCHDOG=y CONFIG_FTWDT010_WATCHDOG=y CONFIG_S3C2410_WATCHDOG=y CONFIG_DW_WATCHDOG=y CONFIG_EP93XX_WATCHDOG=y # CONFIG_OMAP_WATCHDOG is not set # CONFIG_PNX4008_WATCHDOG is not set CONFIG_DAVINCI_WATCHDOG=y CONFIG_K3_RTI_WATCHDOG=y CONFIG_RN5T618_WATCHDOG=y # CONFIG_SUNXI_WATCHDOG is not set CONFIG_NPCM7XX_WATCHDOG=y CONFIG_STMP3XXX_RTC_WATCHDOG=y CONFIG_TS4800_WATCHDOG=y # CONFIG_TS72XX_WATCHDOG is not set CONFIG_MAX63XX_WATCHDOG=y CONFIG_MAX77620_WATCHDOG=y # CONFIG_IMX2_WDT is not set # CONFIG_IMX7ULP_WDT is not set CONFIG_RETU_WATCHDOG=y # CONFIG_MOXART_WDT is not set # CONFIG_ST_LPC_WATCHDOG is not set CONFIG_TEGRA_WATCHDOG=y CONFIG_QCOM_WDT=y # CONFIG_MESON_GXBB_WATCHDOG is not set CONFIG_MESON_WATCHDOG=y CONFIG_MEDIATEK_WATCHDOG=y CONFIG_DIGICOLOR_WATCHDOG=y CONFIG_LPC18XX_WATCHDOG=y CONFIG_RENESAS_WDT=y # CONFIG_RENESAS_RZAWDT is not set CONFIG_RENESAS_RZN1WDT=y # CONFIG_RENESAS_RZG2LWDT is not set # CONFIG_ASPEED_WATCHDOG is not set CONFIG_STPMIC1_WATCHDOG=y # CONFIG_UNIPHIER_WATCHDOG is not set CONFIG_RTD119X_WATCHDOG=y CONFIG_SPRD_WATCHDOG=y # CONFIG_VISCONTI_WATCHDOG is not set # CONFIG_MSC313E_WATCHDOG is not set # CONFIG_APPLE_WATCHDOG is not set # CONFIG_SUNPLUS_WATCHDOG is not set CONFIG_SC520_WDT=y # CONFIG_KEMPLD_WDT is not set # CONFIG_BCM47XX_WDT is not set CONFIG_BCM2835_WDT=y CONFIG_BCM_KONA_WDT=y # CONFIG_BCM_KONA_WDT_DEBUG is not set CONFIG_BCM7038_WDT=y CONFIG_IMGPDC_WDT=y # CONFIG_MPC5200_WDT is not set CONFIG_MEN_A21_WDT=y # CONFIG_UML_WATCHDOG is not set CONFIG_SSB_POSSIBLE=y # CONFIG_SSB is not set CONFIG_BCMA_POSSIBLE=y # CONFIG_BCMA is not set # # Multifunction device drivers # CONFIG_MFD_CORE=y CONFIG_MFD_ACT8945A=y CONFIG_MFD_SUN4I_GPADC=y # CONFIG_MFD_AS3711 is not set CONFIG_MFD_SMPRO=y CONFIG_MFD_AS3722=y # CONFIG_PMIC_ADP5520 is not set CONFIG_MFD_AAT2870_CORE=y CONFIG_MFD_AT91_USART=y CONFIG_MFD_ATMEL_FLEXCOM=y CONFIG_MFD_ATMEL_HLCDC=y # CONFIG_MFD_BCM590XX is not set CONFIG_MFD_BD9571MWV=y CONFIG_MFD_AXP20X=y CONFIG_MFD_AXP20X_I2C=y # CONFIG_MFD_MADERA is not set CONFIG_MFD_ASIC3=y CONFIG_PMIC_DA903X=y # CONFIG_MFD_DA9052_I2C is not set CONFIG_MFD_DA9055=y # CONFIG_MFD_DA9062 is not set CONFIG_MFD_DA9063=y CONFIG_MFD_DA9150=y CONFIG_MFD_ENE_KB3930=y # CONFIG_MFD_EXYNOS_LPASS is not set CONFIG_MFD_GATEWORKS_GSC=y CONFIG_MFD_MC13XXX=y CONFIG_MFD_MC13XXX_I2C=y CONFIG_MFD_MP2629=y CONFIG_MFD_MXS_LRADC=y CONFIG_MFD_MX25_TSADC=y CONFIG_MFD_HI6421_PMIC=y CONFIG_MFD_HI6421_SPMI=y CONFIG_MFD_HI655X_PMIC=y # CONFIG_HTC_PASIC3 is not set CONFIG_MFD_IQS62X=y CONFIG_MFD_KEMPLD=y CONFIG_MFD_88PM800=y # CONFIG_MFD_88PM805 is not set CONFIG_MFD_88PM860X=y CONFIG_MFD_MAX14577=y # CONFIG_MFD_MAX77620 is not set # CONFIG_MFD_MAX77650 is not set CONFIG_MFD_MAX77686=y # CONFIG_MFD_MAX77693 is not set CONFIG_MFD_MAX77714=y CONFIG_MFD_MAX77843=y # CONFIG_MFD_MAX8907 is not set CONFIG_MFD_MAX8925=y # CONFIG_MFD_MAX8997 is not set CONFIG_MFD_MAX8998=y CONFIG_MFD_MT6360=y # CONFIG_MFD_MT6370 is not set # CONFIG_MFD_MT6397 is not set # CONFIG_MFD_MENF21BMC is not set # CONFIG_MFD_NTXEC is not set CONFIG_MFD_RETU=y # CONFIG_MFD_PCF50633 is not set CONFIG_MFD_PM8XXX=y # CONFIG_MFD_SPMI_PMIC is not set CONFIG_MFD_SY7636A=y # CONFIG_MFD_RT4831 is not set # CONFIG_MFD_RT5033 is not set CONFIG_MFD_RT5120=y CONFIG_MFD_RC5T583=y # CONFIG_MFD_RK808 is not set # CONFIG_MFD_RN5T618 is not set CONFIG_MFD_SEC_CORE=y # CONFIG_MFD_SI476X_CORE is not set CONFIG_MFD_SIMPLE_MFD_I2C=y # CONFIG_MFD_SL28CPLD is not set # CONFIG_MFD_SM501 is not set # CONFIG_MFD_SKY81452 is not set CONFIG_ABX500_CORE=y CONFIG_MFD_STMPE=y # # STMicroelectronics STMPE Interface Drivers # # CONFIG_STMPE_I2C is not set # end of STMicroelectronics STMPE Interface Drivers # CONFIG_MFD_SUN6I_PRCM is not set CONFIG_MFD_SYSCON=y # CONFIG_MFD_TI_AM335X_TSCADC is not set # CONFIG_MFD_LP3943 is not set # CONFIG_MFD_LP8788 is not set CONFIG_MFD_TI_LMU=y CONFIG_MFD_PALMAS=y CONFIG_TPS6105X=y CONFIG_TPS65010=y # CONFIG_TPS6507X is not set CONFIG_MFD_TPS65086=y CONFIG_MFD_TPS65090=y CONFIG_MFD_TPS65217=y CONFIG_MFD_TI_LP873X=y CONFIG_MFD_TI_LP87565=y CONFIG_MFD_TPS65218=y CONFIG_MFD_TPS65219=y # CONFIG_MFD_TPS6586X is not set CONFIG_MFD_TPS65910=y CONFIG_MFD_TPS65912=y CONFIG_MFD_TPS65912_I2C=y # CONFIG_TWL4030_CORE is not set # CONFIG_TWL6040_CORE is not set CONFIG_MFD_WL1273_CORE=y CONFIG_MFD_LM3533=y CONFIG_MFD_TC3589X=y # CONFIG_MFD_TQMX86 is not set CONFIG_MFD_LOCHNAGAR=y CONFIG_MFD_ARIZONA=y CONFIG_MFD_ARIZONA_I2C=y CONFIG_MFD_CS47L24=y # CONFIG_MFD_WM5102 is not set CONFIG_MFD_WM5110=y # CONFIG_MFD_WM8997 is not set # CONFIG_MFD_WM8998 is not set # CONFIG_MFD_WM8400 is not set CONFIG_MFD_WM831X=y CONFIG_MFD_WM831X_I2C=y # CONFIG_MFD_WM8350_I2C is not set CONFIG_MFD_WM8994=y # CONFIG_MFD_STW481X is not set # CONFIG_MFD_ROHM_BD718XX is not set CONFIG_MFD_ROHM_BD71828=y CONFIG_MFD_ROHM_BD957XMUF=y CONFIG_MFD_STM32_LPTIMER=y CONFIG_MFD_STM32_TIMERS=y CONFIG_MFD_STPMIC1=y # CONFIG_MFD_STMFX is not set CONFIG_MFD_WCD934X=y CONFIG_MFD_ATC260X=y CONFIG_MFD_ATC260X_I2C=y CONFIG_MFD_KHADAS_MCU=y # CONFIG_MFD_ACER_A500_EC is not set CONFIG_MFD_QCOM_PM8008=y # CONFIG_RAVE_SP_CORE is not set # CONFIG_MFD_RSMU_I2C is not set # end of Multifunction device drivers CONFIG_REGULATOR=y # CONFIG_REGULATOR_DEBUG is not set CONFIG_REGULATOR_FIXED_VOLTAGE=y # CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set # CONFIG_REGULATOR_USERSPACE_CONSUMER is not set # CONFIG_REGULATOR_88PG86X is not set # CONFIG_REGULATOR_88PM800 is not set CONFIG_REGULATOR_88PM8607=y CONFIG_REGULATOR_ACT8865=y CONFIG_REGULATOR_ACT8945A=y CONFIG_REGULATOR_AD5398=y # CONFIG_REGULATOR_ANATOP is not set # CONFIG_REGULATOR_AAT2870 is not set CONFIG_REGULATOR_ARIZONA_LDO1=y CONFIG_REGULATOR_ARIZONA_MICSUPP=y CONFIG_REGULATOR_ARM_SCMI=y CONFIG_REGULATOR_AS3722=y CONFIG_REGULATOR_ATC260X=y # CONFIG_REGULATOR_AXP20X is not set CONFIG_REGULATOR_BD71815=y # CONFIG_REGULATOR_BD71828 is not set CONFIG_REGULATOR_BD9571MWV=y # CONFIG_REGULATOR_BD957XMUF is not set CONFIG_REGULATOR_DA9055=y CONFIG_REGULATOR_DA9063=y CONFIG_REGULATOR_DA9121=y # CONFIG_REGULATOR_DA9210 is not set # CONFIG_REGULATOR_DA9211 is not set CONFIG_REGULATOR_FAN53555=y CONFIG_REGULATOR_FAN53880=y # CONFIG_REGULATOR_GPIO is not set CONFIG_REGULATOR_HI6421=y # CONFIG_REGULATOR_HI6421V530 is not set CONFIG_REGULATOR_HI655X=y CONFIG_REGULATOR_HI6421V600=y # CONFIG_REGULATOR_ISL9305 is not set # CONFIG_REGULATOR_ISL6271A is not set # CONFIG_REGULATOR_LM363X is not set CONFIG_REGULATOR_LOCHNAGAR=y CONFIG_REGULATOR_LP3971=y # CONFIG_REGULATOR_LP3972 is not set CONFIG_REGULATOR_LP872X=y # CONFIG_REGULATOR_LP873X is not set CONFIG_REGULATOR_LP8755=y # CONFIG_REGULATOR_LP87565 is not set # CONFIG_REGULATOR_LTC3589 is not set # CONFIG_REGULATOR_LTC3676 is not set # CONFIG_REGULATOR_MAX14577 is not set # CONFIG_REGULATOR_MAX1586 is not set CONFIG_REGULATOR_MAX77620=y # CONFIG_REGULATOR_MAX77650 is not set # CONFIG_REGULATOR_MAX8649 is not set CONFIG_REGULATOR_MAX8660=y # CONFIG_REGULATOR_MAX8893 is not set CONFIG_REGULATOR_MAX8907=y CONFIG_REGULATOR_MAX8925=y # CONFIG_REGULATOR_MAX8952 is not set CONFIG_REGULATOR_MAX8973=y CONFIG_REGULATOR_MAX8998=y # CONFIG_REGULATOR_MAX20086 is not set CONFIG_REGULATOR_MAX77686=y CONFIG_REGULATOR_MAX77693=y # CONFIG_REGULATOR_MAX77802 is not set CONFIG_REGULATOR_MAX77826=y CONFIG_REGULATOR_MC13XXX_CORE=y # CONFIG_REGULATOR_MC13783 is not set CONFIG_REGULATOR_MC13892=y # CONFIG_REGULATOR_MCP16502 is not set CONFIG_REGULATOR_MP5416=y CONFIG_REGULATOR_MP8859=y CONFIG_REGULATOR_MP886X=y # CONFIG_REGULATOR_MPQ7920 is not set CONFIG_REGULATOR_MT6311=y CONFIG_REGULATOR_MT6315=y CONFIG_REGULATOR_MT6360=y CONFIG_REGULATOR_MT6380=y # CONFIG_REGULATOR_PALMAS is not set CONFIG_REGULATOR_PBIAS=y # CONFIG_REGULATOR_PCA9450 is not set CONFIG_REGULATOR_PF8X00=y # CONFIG_REGULATOR_PFUZE100 is not set # CONFIG_REGULATOR_PV88060 is not set CONFIG_REGULATOR_PV88080=y # CONFIG_REGULATOR_PV88090 is not set CONFIG_REGULATOR_QCOM_RPMH=y # CONFIG_REGULATOR_QCOM_SMD_RPM is not set CONFIG_REGULATOR_QCOM_SPMI=y CONFIG_REGULATOR_QCOM_USB_VBUS=y CONFIG_REGULATOR_RASPBERRYPI_TOUCHSCREEN_ATTINY=y # CONFIG_REGULATOR_RC5T583 is not set CONFIG_REGULATOR_ROHM=y # CONFIG_REGULATOR_RT4801 is not set CONFIG_REGULATOR_RT5120=y # CONFIG_REGULATOR_RT5190A is not set CONFIG_REGULATOR_RT5759=y # CONFIG_REGULATOR_RT6160 is not set # CONFIG_REGULATOR_RT6190 is not set # CONFIG_REGULATOR_RT6245 is not set CONFIG_REGULATOR_RTQ2134=y CONFIG_REGULATOR_RTMV20=y # CONFIG_REGULATOR_RTQ6752 is not set # CONFIG_REGULATOR_S2MPA01 is not set CONFIG_REGULATOR_S2MPS11=y # CONFIG_REGULATOR_S5M8767 is not set CONFIG_REGULATOR_SC2731=y CONFIG_REGULATOR_SLG51000=y CONFIG_REGULATOR_STM32_BOOSTER=y CONFIG_REGULATOR_STM32_VREFBUF=y # CONFIG_REGULATOR_STM32_PWR is not set # CONFIG_REGULATOR_STPMIC1 is not set CONFIG_REGULATOR_TI_ABB=y CONFIG_REGULATOR_STW481X_VMMC=y CONFIG_REGULATOR_SY7636A=y CONFIG_REGULATOR_SY8106A=y # CONFIG_REGULATOR_SY8824X is not set CONFIG_REGULATOR_SY8827N=y CONFIG_REGULATOR_TPS51632=y # CONFIG_REGULATOR_TPS6105X is not set CONFIG_REGULATOR_TPS62360=y CONFIG_REGULATOR_TPS6286X=y CONFIG_REGULATOR_TPS65023=y # CONFIG_REGULATOR_TPS6507X is not set CONFIG_REGULATOR_TPS65086=y # CONFIG_REGULATOR_TPS65090 is not set # CONFIG_REGULATOR_TPS65132 is not set # CONFIG_REGULATOR_TPS65217 is not set CONFIG_REGULATOR_TPS65218=y # CONFIG_REGULATOR_TPS65219 is not set CONFIG_REGULATOR_TPS65910=y CONFIG_REGULATOR_TPS65912=y # CONFIG_REGULATOR_TPS68470 is not set CONFIG_REGULATOR_UNIPHIER=y # CONFIG_REGULATOR_VCTRL is not set CONFIG_REGULATOR_WM831X=y CONFIG_REGULATOR_WM8994=y # CONFIG_REGULATOR_QCOM_LABIBB is not set # CONFIG_RC_CORE is not set CONFIG_CEC_CORE=y CONFIG_CEC_NOTIFIER=y CONFIG_CEC_PIN=y # # CEC support # # CONFIG_CEC_PIN_ERROR_INJ is not set CONFIG_MEDIA_CEC_SUPPORT=y CONFIG_CEC_CH7322=y CONFIG_CEC_MESON_AO=y CONFIG_CEC_GPIO=y # CONFIG_CEC_SAMSUNG_S5P is not set # CONFIG_CEC_STI is not set CONFIG_CEC_STM32=y CONFIG_CEC_TEGRA=y # end of CEC support CONFIG_MEDIA_SUPPORT=y # CONFIG_MEDIA_SUPPORT_FILTER is not set # CONFIG_MEDIA_SUBDRV_AUTOSELECT is not set # # Media device types # CONFIG_MEDIA_CAMERA_SUPPORT=y CONFIG_MEDIA_ANALOG_TV_SUPPORT=y CONFIG_MEDIA_DIGITAL_TV_SUPPORT=y CONFIG_MEDIA_RADIO_SUPPORT=y CONFIG_MEDIA_SDR_SUPPORT=y CONFIG_MEDIA_PLATFORM_SUPPORT=y CONFIG_MEDIA_TEST_SUPPORT=y # end of Media device types # # Media core support # CONFIG_VIDEO_DEV=y CONFIG_MEDIA_CONTROLLER=y CONFIG_DVB_CORE=y # end of Media core support # # Video4Linux options # CONFIG_VIDEO_V4L2_I2C=y CONFIG_VIDEO_V4L2_SUBDEV_API=y # CONFIG_VIDEO_ADV_DEBUG is not set CONFIG_VIDEO_FIXED_MINOR_RANGES=y CONFIG_V4L2_JPEG_HELPER=y CONFIG_V4L2_H264=y CONFIG_V4L2_VP9=y CONFIG_V4L2_MEM2MEM_DEV=y CONFIG_V4L2_FLASH_LED_CLASS=y CONFIG_V4L2_FWNODE=y CONFIG_V4L2_ASYNC=y # end of Video4Linux options # # Media controller options # CONFIG_MEDIA_CONTROLLER_DVB=y CONFIG_MEDIA_CONTROLLER_REQUEST_API=y # end of Media controller options # # Digital TV options # # CONFIG_DVB_MMAP is not set CONFIG_DVB_NET=y CONFIG_DVB_MAX_ADAPTERS=16 CONFIG_DVB_DYNAMIC_MINORS=y CONFIG_DVB_DEMUX_SECTION_LOSS_LOG=y CONFIG_DVB_ULE_DEBUG=y # end of Digital TV options # # Media drivers # # # Media drivers # CONFIG_RADIO_ADAPTERS=y CONFIG_RADIO_SAA7706H=y CONFIG_RADIO_SI4713=y CONFIG_RADIO_TEA575X=y # CONFIG_RADIO_TEA5764 is not set CONFIG_RADIO_TEF6862=y CONFIG_RADIO_WL1273=y CONFIG_RADIO_SI470X=y CONFIG_I2C_SI470X=y CONFIG_PLATFORM_SI4713=y CONFIG_I2C_SI4713=y CONFIG_RADIO_WL128X=y CONFIG_V4L_RADIO_ISA_DRIVERS=y # CONFIG_RADIO_AZTECH is not set # CONFIG_RADIO_CADET is not set CONFIG_RADIO_GEMTEK=y CONFIG_RADIO_GEMTEK_PORT=34c CONFIG_RADIO_GEMTEK_PROBE=y CONFIG_RADIO_ISA=y CONFIG_RADIO_RTRACK=y # CONFIG_RADIO_RTRACK2 is not set CONFIG_RADIO_RTRACK_PORT=30f CONFIG_RADIO_SF16FMI=y CONFIG_RADIO_SF16FMR2=y # CONFIG_RADIO_TERRATEC is not set CONFIG_RADIO_TRUST=y CONFIG_RADIO_TRUST_PORT=350 # CONFIG_RADIO_TYPHOON is not set # CONFIG_RADIO_ZOLTRIX is not set CONFIG_MEDIA_PLATFORM_DRIVERS=y # CONFIG_V4L_PLATFORM_DRIVERS is not set # CONFIG_SDR_PLATFORM_DRIVERS is not set # CONFIG_DVB_PLATFORM_DRIVERS is not set CONFIG_V4L_MEM2MEM_DRIVERS=y # CONFIG_VIDEO_MEM2MEM_DEINTERLACE is not set # # Allegro DVT media platform drivers # CONFIG_VIDEO_ALLEGRO_DVT=y # # Amlogic media platform drivers # CONFIG_VIDEO_MESON_GE2D=y # # Amphion drivers # # CONFIG_VIDEO_AMPHION_VPU is not set # # Aspeed media platform drivers # # # Atmel media platform drivers # # # Cadence media platform drivers # # CONFIG_VIDEO_CADENCE_CSI2RX is not set CONFIG_VIDEO_CADENCE_CSI2TX=y # # Chips&Media media platform drivers # CONFIG_VIDEO_CODA=y CONFIG_VIDEO_IMX_VDOA=y # # Intel media platform drivers # # # Marvell media platform drivers # # # Mediatek media platform drivers # CONFIG_VIDEO_MEDIATEK_JPEG=y # CONFIG_VIDEO_MEDIATEK_MDP is not set CONFIG_VIDEO_MEDIATEK_VCODEC_SCP=y CONFIG_VIDEO_MEDIATEK_VCODEC=y # CONFIG_VIDEO_MEDIATEK_VPU is not set CONFIG_VIDEO_MEDIATEK_MDP3=y # # Microchip Technology, Inc. media platform drivers # # # NVidia media platform drivers # CONFIG_VIDEO_TEGRA_VDE=y # # NXP media platform drivers # CONFIG_VIDEO_IMX7_CSI=y # CONFIG_VIDEO_IMX_MIPI_CSIS is not set CONFIG_VIDEO_IMX_PXP=y CONFIG_VIDEO_MX2_EMMAPRP=y # CONFIG_VIDEO_DW100 is not set CONFIG_VIDEO_IMX8_JPEG=y # # Qualcomm media platform drivers # # # Renesas media platform drivers # CONFIG_VIDEO_RENESAS_FCP=y # CONFIG_VIDEO_RENESAS_FDP1 is not set # CONFIG_VIDEO_RENESAS_JPU is not set # CONFIG_VIDEO_RENESAS_VSP1 is not set # # Rockchip media platform drivers # # CONFIG_VIDEO_ROCKCHIP_RGA is not set # # Samsung media platform drivers # CONFIG_VIDEO_SAMSUNG_EXYNOS_GSC=y CONFIG_VIDEO_SAMSUNG_S5P_G2D=y CONFIG_VIDEO_SAMSUNG_S5P_JPEG=y CONFIG_VIDEO_SAMSUNG_S5P_MFC=y # # STMicroelectronics media platform drivers # CONFIG_VIDEO_STI_BDISP=y CONFIG_VIDEO_STI_DELTA=y # CONFIG_VIDEO_STI_DELTA_MJPEG is not set CONFIG_VIDEO_STI_HVA=y CONFIG_VIDEO_STI_HVA_DEBUGFS=y CONFIG_VIDEO_STM32_DMA2D=y # # Sunxi media platform drivers # # # Texas Instruments drivers # CONFIG_VIDEO_TI_VPDMA=y CONFIG_VIDEO_TI_SC=y CONFIG_VIDEO_TI_CSC=y CONFIG_VIDEO_TI_VPE=y CONFIG_VIDEO_TI_VPE_DEBUG=y # # Verisilicon media platform drivers # CONFIG_VIDEO_HANTRO=y # CONFIG_VIDEO_HANTRO_IMX8M is not set # CONFIG_VIDEO_HANTRO_SAMA5D4 is not set CONFIG_VIDEO_HANTRO_ROCKCHIP=y # CONFIG_VIDEO_HANTRO_SUNXI is not set # # VIA media platform drivers # # # Xilinx media platform drivers # # CONFIG_V4L_TEST_DRIVERS is not set # CONFIG_DVB_TEST_DRIVERS is not set # # FireWire (IEEE 1394) Adapters # CONFIG_DVB_FIREDTV=y CONFIG_DVB_FIREDTV_INPUT=y CONFIG_VIDEOBUF2_CORE=y CONFIG_VIDEOBUF2_V4L2=y CONFIG_VIDEOBUF2_MEMOPS=y CONFIG_VIDEOBUF2_DMA_CONTIG=y CONFIG_VIDEOBUF2_VMALLOC=y CONFIG_VIDEOBUF2_DMA_SG=y # end of Media drivers # # Media ancillary drivers # # # Camera sensor devices # CONFIG_VIDEO_APTINA_PLL=y CONFIG_VIDEO_AR0521=y # CONFIG_VIDEO_HI556 is not set CONFIG_VIDEO_HI846=y # CONFIG_VIDEO_HI847 is not set # CONFIG_VIDEO_IMX208 is not set CONFIG_VIDEO_IMX214=y # CONFIG_VIDEO_IMX219 is not set CONFIG_VIDEO_IMX258=y # CONFIG_VIDEO_IMX274 is not set # CONFIG_VIDEO_IMX290 is not set CONFIG_VIDEO_IMX319=y CONFIG_VIDEO_IMX334=y CONFIG_VIDEO_IMX335=y CONFIG_VIDEO_IMX355=y CONFIG_VIDEO_IMX412=y CONFIG_VIDEO_MAX9271_LIB=y CONFIG_VIDEO_MT9M001=y CONFIG_VIDEO_MT9M032=y # CONFIG_VIDEO_MT9M111 is not set CONFIG_VIDEO_MT9P031=y # CONFIG_VIDEO_MT9T001 is not set CONFIG_VIDEO_MT9T112=y # CONFIG_VIDEO_MT9V011 is not set # CONFIG_VIDEO_MT9V032 is not set # CONFIG_VIDEO_MT9V111 is not set # CONFIG_VIDEO_NOON010PC30 is not set CONFIG_VIDEO_OG01A1B=y CONFIG_VIDEO_OV02A10=y CONFIG_VIDEO_OV08D10=y # CONFIG_VIDEO_OV08X40 is not set CONFIG_VIDEO_OV13858=y # CONFIG_VIDEO_OV13B10 is not set # CONFIG_VIDEO_OV2640 is not set CONFIG_VIDEO_OV2659=y # CONFIG_VIDEO_OV2680 is not set CONFIG_VIDEO_OV2685=y CONFIG_VIDEO_OV2740=y # CONFIG_VIDEO_OV4689 is not set # CONFIG_VIDEO_OV5640 is not set CONFIG_VIDEO_OV5645=y CONFIG_VIDEO_OV5647=y # CONFIG_VIDEO_OV5670 is not set # CONFIG_VIDEO_OV5675 is not set CONFIG_VIDEO_OV5693=y CONFIG_VIDEO_OV5695=y # CONFIG_VIDEO_OV6650 is not set CONFIG_VIDEO_OV7251=y CONFIG_VIDEO_OV7640=y # CONFIG_VIDEO_OV7670 is not set CONFIG_VIDEO_OV772X=y # CONFIG_VIDEO_OV7740 is not set CONFIG_VIDEO_OV8856=y CONFIG_VIDEO_OV9282=y # CONFIG_VIDEO_OV9640 is not set # CONFIG_VIDEO_OV9650 is not set CONFIG_VIDEO_OV9734=y CONFIG_VIDEO_RDACM20=y CONFIG_VIDEO_RDACM21=y CONFIG_VIDEO_RJ54N1=y # CONFIG_VIDEO_S5K5BAF is not set # CONFIG_VIDEO_S5K6A3 is not set # CONFIG_VIDEO_S5K6AA is not set CONFIG_VIDEO_SR030PC30=y # CONFIG_VIDEO_ST_VGXY61 is not set CONFIG_VIDEO_VS6624=y CONFIG_VIDEO_ET8EK8=y CONFIG_VIDEO_M5MOLS=y # end of Camera sensor devices # # Lens drivers # # CONFIG_VIDEO_AD5820 is not set # CONFIG_VIDEO_AK7375 is not set # CONFIG_VIDEO_DW9714 is not set # CONFIG_VIDEO_DW9768 is not set # CONFIG_VIDEO_DW9807_VCM is not set # end of Lens drivers # # Flash devices # # CONFIG_VIDEO_ADP1653 is not set # CONFIG_VIDEO_LM3560 is not set # CONFIG_VIDEO_LM3646 is not set # end of Flash devices # # Audio decoders, processors and mixers # CONFIG_VIDEO_CS3308=y CONFIG_VIDEO_CS5345=y # CONFIG_VIDEO_CS53L32A is not set CONFIG_VIDEO_MSP3400=y CONFIG_VIDEO_SONY_BTF_MPX=y CONFIG_VIDEO_TDA1997X=y # CONFIG_VIDEO_TDA7432 is not set CONFIG_VIDEO_TDA9840=y # CONFIG_VIDEO_TEA6415C is not set # CONFIG_VIDEO_TEA6420 is not set CONFIG_VIDEO_TLV320AIC23B=y # CONFIG_VIDEO_TVAUDIO is not set # CONFIG_VIDEO_UDA1342 is not set CONFIG_VIDEO_VP27SMPX=y CONFIG_VIDEO_WM8739=y CONFIG_VIDEO_WM8775=y # end of Audio decoders, processors and mixers # # RDS decoders # CONFIG_VIDEO_SAA6588=y # end of RDS decoders # # Video decoders # # CONFIG_VIDEO_ADV7180 is not set # CONFIG_VIDEO_ADV7183 is not set # CONFIG_VIDEO_ADV748X is not set # CONFIG_VIDEO_ADV7604 is not set CONFIG_VIDEO_ADV7842=y CONFIG_VIDEO_ADV7842_CEC=y # CONFIG_VIDEO_BT819 is not set # CONFIG_VIDEO_BT856 is not set # CONFIG_VIDEO_BT866 is not set CONFIG_VIDEO_ISL7998X=y CONFIG_VIDEO_KS0127=y CONFIG_VIDEO_MAX9286=y # CONFIG_VIDEO_ML86V7667 is not set CONFIG_VIDEO_SAA7110=y CONFIG_VIDEO_SAA711X=y CONFIG_VIDEO_TC358743=y # CONFIG_VIDEO_TC358743_CEC is not set CONFIG_VIDEO_TVP514X=y CONFIG_VIDEO_TVP5150=y CONFIG_VIDEO_TVP7002=y # CONFIG_VIDEO_TW2804 is not set CONFIG_VIDEO_TW9903=y # CONFIG_VIDEO_TW9906 is not set CONFIG_VIDEO_TW9910=y # CONFIG_VIDEO_VPX3220 is not set # # Video and audio decoders # CONFIG_VIDEO_SAA717X=y # CONFIG_VIDEO_CX25840 is not set # end of Video decoders # # Video encoders # CONFIG_VIDEO_AD9389B=y CONFIG_VIDEO_ADV7170=y CONFIG_VIDEO_ADV7175=y CONFIG_VIDEO_ADV7343=y CONFIG_VIDEO_ADV7393=y # CONFIG_VIDEO_ADV7511 is not set CONFIG_VIDEO_AK881X=y CONFIG_VIDEO_SAA7127=y # CONFIG_VIDEO_SAA7185 is not set # CONFIG_VIDEO_THS8200 is not set # end of Video encoders # # Video improvement chips # CONFIG_VIDEO_UPD64031A=y CONFIG_VIDEO_UPD64083=y # end of Video improvement chips # # Audio/Video compression chips # CONFIG_VIDEO_SAA6752HS=y # end of Audio/Video compression chips # # SDR tuner chips # CONFIG_SDR_MAX2175=y # end of SDR tuner chips # # Miscellaneous helper chips # CONFIG_VIDEO_I2C=y CONFIG_VIDEO_M52790=y CONFIG_VIDEO_ST_MIPID02=y CONFIG_VIDEO_THS7303=y # end of Miscellaneous helper chips CONFIG_MEDIA_TUNER=y # # Customize TV tuners # CONFIG_MEDIA_TUNER_E4000=y CONFIG_MEDIA_TUNER_FC0011=y # CONFIG_MEDIA_TUNER_FC0012 is not set # CONFIG_MEDIA_TUNER_FC0013 is not set # CONFIG_MEDIA_TUNER_FC2580 is not set # CONFIG_MEDIA_TUNER_IT913X is not set CONFIG_MEDIA_TUNER_M88RS6000T=y CONFIG_MEDIA_TUNER_MAX2165=y CONFIG_MEDIA_TUNER_MC44S803=y CONFIG_MEDIA_TUNER_MT2060=y # CONFIG_MEDIA_TUNER_MT2063 is not set CONFIG_MEDIA_TUNER_MT20XX=y # CONFIG_MEDIA_TUNER_MT2131 is not set CONFIG_MEDIA_TUNER_MT2266=y CONFIG_MEDIA_TUNER_MXL301RF=y CONFIG_MEDIA_TUNER_MXL5005S=y CONFIG_MEDIA_TUNER_MXL5007T=y CONFIG_MEDIA_TUNER_QM1D1B0004=y CONFIG_MEDIA_TUNER_QM1D1C0042=y CONFIG_MEDIA_TUNER_QT1010=y CONFIG_MEDIA_TUNER_R820T=y CONFIG_MEDIA_TUNER_SI2157=y CONFIG_MEDIA_TUNER_SIMPLE=y CONFIG_MEDIA_TUNER_TDA18212=y CONFIG_MEDIA_TUNER_TDA18218=y CONFIG_MEDIA_TUNER_TDA18250=y CONFIG_MEDIA_TUNER_TDA18271=y CONFIG_MEDIA_TUNER_TDA827X=y CONFIG_MEDIA_TUNER_TDA8290=y CONFIG_MEDIA_TUNER_TDA9887=y # CONFIG_MEDIA_TUNER_TEA5761 is not set CONFIG_MEDIA_TUNER_TEA5767=y CONFIG_MEDIA_TUNER_TUA9001=y # CONFIG_MEDIA_TUNER_XC2028 is not set # CONFIG_MEDIA_TUNER_XC4000 is not set CONFIG_MEDIA_TUNER_XC5000=y # end of Customize TV tuners # # Customise DVB Frontends # # # Multistandard (satellite) frontends # CONFIG_DVB_M88DS3103=y CONFIG_DVB_MXL5XX=y # CONFIG_DVB_STB0899 is not set # CONFIG_DVB_STB6100 is not set CONFIG_DVB_STV090x=y # CONFIG_DVB_STV0910 is not set CONFIG_DVB_STV6110x=y CONFIG_DVB_STV6111=y # # Multistandard (cable + terrestrial) frontends # # CONFIG_DVB_DRXK is not set CONFIG_DVB_MN88472=y # CONFIG_DVB_MN88473 is not set CONFIG_DVB_SI2165=y CONFIG_DVB_TDA18271C2DD=y # # DVB-S (satellite) frontends # CONFIG_DVB_CX24110=y CONFIG_DVB_CX24116=y CONFIG_DVB_CX24117=y # CONFIG_DVB_CX24120 is not set # CONFIG_DVB_CX24123 is not set # CONFIG_DVB_DS3000 is not set # CONFIG_DVB_MB86A16 is not set CONFIG_DVB_MT312=y CONFIG_DVB_S5H1420=y # CONFIG_DVB_SI21XX is not set # CONFIG_DVB_STB6000 is not set # CONFIG_DVB_STV0288 is not set # CONFIG_DVB_STV0299 is not set CONFIG_DVB_STV0900=y CONFIG_DVB_STV6110=y # CONFIG_DVB_TDA10071 is not set CONFIG_DVB_TDA10086=y # CONFIG_DVB_TDA8083 is not set CONFIG_DVB_TDA8261=y CONFIG_DVB_TDA826X=y CONFIG_DVB_TS2020=y CONFIG_DVB_TUA6100=y CONFIG_DVB_TUNER_CX24113=y CONFIG_DVB_TUNER_ITD1000=y CONFIG_DVB_VES1X93=y CONFIG_DVB_ZL10036=y CONFIG_DVB_ZL10039=y # # DVB-T (terrestrial) frontends # # CONFIG_DVB_AF9013 is not set # CONFIG_DVB_CX22700 is not set # CONFIG_DVB_CX22702 is not set CONFIG_DVB_CXD2820R=y # CONFIG_DVB_CXD2841ER is not set CONFIG_DVB_DIB3000MB=y CONFIG_DVB_DIB3000MC=y CONFIG_DVB_DIB7000M=y CONFIG_DVB_DIB7000P=y CONFIG_DVB_DIB9000=y CONFIG_DVB_DRXD=y # CONFIG_DVB_EC100 is not set # CONFIG_DVB_L64781 is not set CONFIG_DVB_MT352=y # CONFIG_DVB_NXT6000 is not set # CONFIG_DVB_RTL2830 is not set CONFIG_DVB_RTL2832=y CONFIG_DVB_S5H1432=y CONFIG_DVB_SI2168=y # CONFIG_DVB_SP887X is not set CONFIG_DVB_STV0367=y # CONFIG_DVB_TDA10048 is not set CONFIG_DVB_TDA1004X=y CONFIG_DVB_ZD1301_DEMOD=y CONFIG_DVB_ZL10353=y # # DVB-C (cable) frontends # # CONFIG_DVB_STV0297 is not set CONFIG_DVB_TDA10021=y CONFIG_DVB_TDA10023=y # CONFIG_DVB_VES1820 is not set # # ATSC (North American/Korean Terrestrial/Cable DTV) frontends # CONFIG_DVB_AU8522=y # CONFIG_DVB_AU8522_DTV is not set CONFIG_DVB_AU8522_V4L=y CONFIG_DVB_BCM3510=y # CONFIG_DVB_LG2160 is not set CONFIG_DVB_LGDT3305=y CONFIG_DVB_LGDT3306A=y # CONFIG_DVB_LGDT330X is not set CONFIG_DVB_MXL692=y CONFIG_DVB_NXT200X=y CONFIG_DVB_OR51132=y CONFIG_DVB_OR51211=y CONFIG_DVB_S5H1409=y # CONFIG_DVB_S5H1411 is not set # # ISDB-T (terrestrial) frontends # CONFIG_DVB_DIB8000=y CONFIG_DVB_MB86A20S=y # CONFIG_DVB_S921 is not set # # ISDB-S (satellite) & ISDB-T (terrestrial) frontends # CONFIG_DVB_MN88443X=y # CONFIG_DVB_TC90522 is not set # # Digital terrestrial only tuners/PLL # # CONFIG_DVB_PLL is not set # CONFIG_DVB_TUNER_DIB0070 is not set CONFIG_DVB_TUNER_DIB0090=y # # SEC control devices for DVB-S # CONFIG_DVB_A8293=y CONFIG_DVB_AF9033=y CONFIG_DVB_ASCOT2E=y CONFIG_DVB_ATBM8830=y CONFIG_DVB_HELENE=y CONFIG_DVB_HORUS3A=y CONFIG_DVB_ISL6405=y CONFIG_DVB_ISL6421=y CONFIG_DVB_ISL6423=y # CONFIG_DVB_IX2505V is not set CONFIG_DVB_LGS8GL5=y CONFIG_DVB_LGS8GXX=y CONFIG_DVB_LNBH25=y # CONFIG_DVB_LNBH29 is not set CONFIG_DVB_LNBP21=y # CONFIG_DVB_LNBP22 is not set CONFIG_DVB_M88RS2000=y CONFIG_DVB_TDA665x=y # CONFIG_DVB_DRX39XYJ is not set # # Common Interface (EN50221) controller drivers # # CONFIG_DVB_CXD2099 is not set CONFIG_DVB_SP2=y # end of Customise DVB Frontends # # Tools to develop new frontends # CONFIG_DVB_DUMMY_FE=y # end of Media ancillary drivers # # Graphics support # CONFIG_APERTURE_HELPERS=y CONFIG_VIDEO_NOMODESET=y # CONFIG_IMX_IPUV3_CORE is not set CONFIG_DRM=y CONFIG_DRM_MIPI_DSI=y CONFIG_DRM_DEBUG_MM=y CONFIG_DRM_KUNIT_TEST=y CONFIG_DRM_KMS_HELPER=y CONFIG_DRM_LOAD_EDID_FIRMWARE=y CONFIG_DRM_DP_AUX_BUS=y CONFIG_DRM_DISPLAY_HELPER=y CONFIG_DRM_DISPLAY_DP_HELPER=y CONFIG_DRM_DISPLAY_HDCP_HELPER=y CONFIG_DRM_DISPLAY_HDMI_HELPER=y # CONFIG_DRM_DP_AUX_CHARDEV is not set CONFIG_DRM_DP_CEC=y CONFIG_DRM_BUDDY=y CONFIG_DRM_GEM_DMA_HELPER=y CONFIG_DRM_GEM_SHMEM_HELPER=y # # I2C encoder or helper chips # CONFIG_DRM_I2C_CH7006=y CONFIG_DRM_I2C_SIL164=y CONFIG_DRM_I2C_NXP_TDA998X=y CONFIG_DRM_I2C_NXP_TDA9950=y # end of I2C encoder or helper chips # # ARM devices # # end of ARM devices CONFIG_DRM_KMB_DISPLAY=y CONFIG_DRM_VGEM=y # CONFIG_DRM_VKMS is not set CONFIG_DRM_RCAR_DW_HDMI=y CONFIG_DRM_RCAR_USE_LVDS=y CONFIG_DRM_RCAR_USE_MIPI_DSI=y CONFIG_DRM_RZG2L_MIPI_DSI=y CONFIG_DRM_VIRTIO_GPU=y CONFIG_DRM_PANEL=y # # Display Panels # # CONFIG_DRM_PANEL_ARM_VERSATILE is not set CONFIG_DRM_PANEL_ASUS_Z00T_TM5P5_NT35596=y CONFIG_DRM_PANEL_BOE_BF060Y8M_AJ0=y # CONFIG_DRM_PANEL_BOE_HIMAX8279D is not set # CONFIG_DRM_PANEL_BOE_TV101WUM_NL6 is not set CONFIG_DRM_PANEL_DSI_CM=y CONFIG_DRM_PANEL_LVDS=y CONFIG_DRM_PANEL_EBBG_FT8719=y # CONFIG_DRM_PANEL_ELIDA_KD35T133 is not set CONFIG_DRM_PANEL_FEIXIN_K101_IM2BA02=y CONFIG_DRM_PANEL_FEIYANG_FY07024DI26A30D=y CONFIG_DRM_PANEL_ILITEK_ILI9881C=y CONFIG_DRM_PANEL_INNOLUX_P079ZCA=y CONFIG_DRM_PANEL_JADARD_JD9365DA_H3=y CONFIG_DRM_PANEL_JDI_LT070ME05000=y CONFIG_DRM_PANEL_JDI_R63452=y CONFIG_DRM_PANEL_KHADAS_TS050=y CONFIG_DRM_PANEL_KINGDISPLAY_KD097D04=y # CONFIG_DRM_PANEL_LEADTEK_LTK050H3146W is not set # CONFIG_DRM_PANEL_LEADTEK_LTK500HD1829 is not set CONFIG_DRM_PANEL_NEWVISION_NV3051D=y CONFIG_DRM_PANEL_NOVATEK_NT35510=y CONFIG_DRM_PANEL_NOVATEK_NT35560=y CONFIG_DRM_PANEL_NOVATEK_NT35950=y # CONFIG_DRM_PANEL_NOVATEK_NT36672A is not set # CONFIG_DRM_PANEL_MANTIX_MLAF057WE51 is not set CONFIG_DRM_PANEL_OLIMEX_LCD_OLINUXINO=y CONFIG_DRM_PANEL_ORISETECH_OTM8009A=y CONFIG_DRM_PANEL_OSD_OSD101T2587_53TS=y CONFIG_DRM_PANEL_PANASONIC_VVX10F034N00=y CONFIG_DRM_PANEL_RASPBERRYPI_TOUCHSCREEN=y CONFIG_DRM_PANEL_RAYDIUM_RM67191=y CONFIG_DRM_PANEL_RAYDIUM_RM68200=y CONFIG_DRM_PANEL_RONBO_RB070D30=y # CONFIG_DRM_PANEL_SAMSUNG_S6D16D0 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E3HA2 is not set # CONFIG_DRM_PANEL_SAMSUNG_S6E63J0X03 is not set CONFIG_DRM_PANEL_SAMSUNG_S6E63M0=y CONFIG_DRM_PANEL_SAMSUNG_S6E63M0_DSI=y CONFIG_DRM_PANEL_SAMSUNG_S6E88A0_AMS452EF01=y # CONFIG_DRM_PANEL_SAMSUNG_S6E8AA0 is not set CONFIG_DRM_PANEL_SAMSUNG_SOFEF00=y CONFIG_DRM_PANEL_SEIKO_43WVF1G=y CONFIG_DRM_PANEL_SHARP_LQ101R1SX01=y CONFIG_DRM_PANEL_SHARP_LS037V7DW01=y CONFIG_DRM_PANEL_SHARP_LS043T1LE01=y CONFIG_DRM_PANEL_SHARP_LS060T1SX01=y CONFIG_DRM_PANEL_SITRONIX_ST7701=y # CONFIG_DRM_PANEL_SITRONIX_ST7703 is not set CONFIG_DRM_PANEL_SONY_TULIP_TRULY_NT35521=y # CONFIG_DRM_PANEL_TDO_TL070WSH30 is not set CONFIG_DRM_PANEL_TRULY_NT35597_WQXGA=y # CONFIG_DRM_PANEL_VISIONOX_RM69299 is not set # CONFIG_DRM_PANEL_XINPENG_XPP055C272 is not set # end of Display Panels CONFIG_DRM_BRIDGE=y CONFIG_DRM_PANEL_BRIDGE=y # # Display Interface Bridges # CONFIG_DRM_CDNS_DSI=y CONFIG_DRM_CHIPONE_ICN6211=y CONFIG_DRM_CHRONTEL_CH7033=y # CONFIG_DRM_CROS_EC_ANX7688 is not set # CONFIG_DRM_DISPLAY_CONNECTOR is not set CONFIG_DRM_FSL_LDB=y CONFIG_DRM_ITE_IT6505=y CONFIG_DRM_LONTIUM_LT8912B=y CONFIG_DRM_LONTIUM_LT9211=y CONFIG_DRM_LONTIUM_LT9611=y CONFIG_DRM_LONTIUM_LT9611UXC=y CONFIG_DRM_ITE_IT66121=y CONFIG_DRM_LVDS_CODEC=y CONFIG_DRM_MEGACHIPS_STDPXXXX_GE_B850V3_FW=y # CONFIG_DRM_NXP_PTN3460 is not set # CONFIG_DRM_PARADE_PS8622 is not set CONFIG_DRM_PARADE_PS8640=y CONFIG_DRM_SIL_SII8620=y CONFIG_DRM_SII902X=y CONFIG_DRM_SII9234=y # CONFIG_DRM_SIMPLE_BRIDGE is not set CONFIG_DRM_THINE_THC63LVD1024=y # CONFIG_DRM_TOSHIBA_TC358762 is not set # CONFIG_DRM_TOSHIBA_TC358764 is not set # CONFIG_DRM_TOSHIBA_TC358767 is not set # CONFIG_DRM_TOSHIBA_TC358768 is not set # CONFIG_DRM_TOSHIBA_TC358775 is not set CONFIG_DRM_TI_DLPC3433=y CONFIG_DRM_TI_TFP410=y # CONFIG_DRM_TI_SN65DSI83 is not set CONFIG_DRM_TI_SN65DSI86=y # CONFIG_DRM_TI_TPD12S015 is not set CONFIG_DRM_ANALOGIX_ANX6345=y CONFIG_DRM_ANALOGIX_ANX78XX=y CONFIG_DRM_ANALOGIX_DP=y CONFIG_DRM_ANALOGIX_ANX7625=y CONFIG_DRM_I2C_ADV7511=y # CONFIG_DRM_I2C_ADV7511_AUDIO is not set # CONFIG_DRM_I2C_ADV7511_CEC is not set CONFIG_DRM_CDNS_MHDP8546=y # CONFIG_DRM_CDNS_MHDP8546_J721E is not set # CONFIG_DRM_IMX8QXP_PIXEL_LINK_TO_DPI is not set CONFIG_DRM_DW_HDMI=y # CONFIG_DRM_DW_HDMI_AHB_AUDIO is not set CONFIG_DRM_DW_HDMI_I2S_AUDIO=y CONFIG_DRM_DW_HDMI_GP_AUDIO=y CONFIG_DRM_DW_HDMI_CEC=y # end of Display Interface Bridges # CONFIG_DRM_ETNAVIV is not set CONFIG_DRM_LOGICVC=y # CONFIG_DRM_ARCPGU is not set # CONFIG_DRM_OFDRM is not set CONFIG_DRM_SIMPLEDRM=y # CONFIG_DRM_TVE200 is not set # CONFIG_DRM_ASPEED_GFX is not set CONFIG_DRM_TIDSS=y # CONFIG_DRM_SSD130X is not set # CONFIG_DRM_SPRD is not set CONFIG_DRM_LEGACY=y CONFIG_DRM_PANEL_ORIENTATION_QUIRKS=y CONFIG_DRM_LIB_RANDOM=y # # Frame buffer Devices # CONFIG_FB_CMDLINE=y # CONFIG_FB is not set CONFIG_FB_OMAP_LCD_H3=y CONFIG_MMP_DISP=y # end of Frame buffer Devices # # Backlight & LCD device support # CONFIG_LCD_CLASS_DEVICE=y # CONFIG_LCD_PLATFORM is not set CONFIG_BACKLIGHT_CLASS_DEVICE=y # CONFIG_BACKLIGHT_KTD253 is not set CONFIG_BACKLIGHT_LM3533=y CONFIG_BACKLIGHT_OMAP1=y CONFIG_BACKLIGHT_DA903X=y CONFIG_BACKLIGHT_MAX8925=y CONFIG_BACKLIGHT_QCOM_WLED=y CONFIG_BACKLIGHT_WM831X=y CONFIG_BACKLIGHT_ADP8860=y # CONFIG_BACKLIGHT_ADP8870 is not set CONFIG_BACKLIGHT_88PM860X=y CONFIG_BACKLIGHT_AAT2870=y CONFIG_BACKLIGHT_LM3639=y # CONFIG_BACKLIGHT_TPS65217 is not set # CONFIG_BACKLIGHT_GPIO is not set # CONFIG_BACKLIGHT_LV5207LP is not set CONFIG_BACKLIGHT_BD6107=y # CONFIG_BACKLIGHT_ARCXCNN is not set CONFIG_BACKLIGHT_LED=y # end of Backlight & LCD device support CONFIG_VIDEOMODE_HELPERS=y CONFIG_HDMI=y # # Console display driver support # # CONFIG_VGA_CONSOLE is not set CONFIG_DUMMY_CONSOLE=y CONFIG_DUMMY_CONSOLE_COLUMNS=80 CONFIG_DUMMY_CONSOLE_ROWS=25 # end of Console display driver support # end of Graphics support # CONFIG_DRM_ACCEL is not set CONFIG_SOUND=y CONFIG_SOUND_OSS_CORE=y # CONFIG_SOUND_OSS_CORE_PRECLAIM is not set CONFIG_SND=y CONFIG_SND_TIMER=y CONFIG_SND_PCM=y CONFIG_SND_PCM_ELD=y CONFIG_SND_PCM_IEC958=y CONFIG_SND_DMAENGINE_PCM=y CONFIG_SND_HWDEP=y CONFIG_SND_RAWMIDI=y CONFIG_SND_COMPRESS_OFFLOAD=y CONFIG_SND_JACK=y CONFIG_SND_JACK_INPUT_DEV=y CONFIG_SND_OSSEMUL=y CONFIG_SND_MIXER_OSS=y CONFIG_SND_PCM_OSS=y # CONFIG_SND_PCM_OSS_PLUGINS is not set CONFIG_SND_PCM_TIMER=y CONFIG_SND_DYNAMIC_MINORS=y CONFIG_SND_MAX_CARDS=32 # CONFIG_SND_SUPPORT_OLD_API is not set CONFIG_SND_PROC_FS=y CONFIG_SND_VERBOSE_PROCFS=y # CONFIG_SND_VERBOSE_PRINTK is not set CONFIG_SND_CTL_FAST_LOOKUP=y # CONFIG_SND_DEBUG is not set CONFIG_SND_CTL_INPUT_VALIDATION=y CONFIG_SND_VMASTER=y CONFIG_SND_CTL_LED=y # CONFIG_SND_SEQUENCER is not set # CONFIG_SND_DRIVERS is not set # # HD-Audio # CONFIG_SND_HDA=y CONFIG_SND_HDA_GENERIC_LEDS=y # CONFIG_SND_HDA_HWDEP is not set CONFIG_SND_HDA_RECONFIG=y CONFIG_SND_HDA_INPUT_BEEP=y CONFIG_SND_HDA_INPUT_BEEP_MODE=1 CONFIG_SND_HDA_PATCH_LOADER=y # CONFIG_SND_HDA_CODEC_REALTEK is not set # CONFIG_SND_HDA_CODEC_ANALOG is not set # CONFIG_SND_HDA_CODEC_SIGMATEL is not set # CONFIG_SND_HDA_CODEC_VIA is not set CONFIG_SND_HDA_CODEC_HDMI=y CONFIG_SND_HDA_CODEC_CIRRUS=y # CONFIG_SND_HDA_CODEC_CS8409 is not set CONFIG_SND_HDA_CODEC_CONEXANT=y CONFIG_SND_HDA_CODEC_CA0110=y # CONFIG_SND_HDA_CODEC_CA0132 is not set CONFIG_SND_HDA_CODEC_CMEDIA=y CONFIG_SND_HDA_CODEC_SI3054=y CONFIG_SND_HDA_GENERIC=y # end of HD-Audio CONFIG_SND_HDA_CORE=y CONFIG_SND_HDA_EXT_CORE=y CONFIG_SND_HDA_PREALLOC_SIZE=64 CONFIG_SND_FIREWIRE=y CONFIG_SND_FIREWIRE_LIB=y # CONFIG_SND_DICE is not set # CONFIG_SND_OXFW is not set CONFIG_SND_ISIGHT=y CONFIG_SND_FIREWORKS=y # CONFIG_SND_BEBOB is not set # CONFIG_SND_FIREWIRE_DIGI00X is not set CONFIG_SND_FIREWIRE_TASCAM=y CONFIG_SND_FIREWIRE_MOTU=y CONFIG_SND_FIREFACE=y CONFIG_SND_SOC=y CONFIG_SND_SOC_GENERIC_DMAENGINE_PCM=y CONFIG_SND_SOC_COMPRESS=y CONFIG_SND_SOC_UTILS_KUNIT_TEST=y # CONFIG_SND_SOC_ADI is not set CONFIG_SND_SOC_AMD_ACP=y # CONFIG_SND_SOC_AMD_CZ_RT5645_MACH is not set # CONFIG_SND_AMD_ACP_CONFIG is not set CONFIG_SND_SOC_APPLE_MCA=y CONFIG_SND_ATMEL_SOC=y CONFIG_SND_ATMEL_SOC_PDC=y CONFIG_SND_ATMEL_SOC_DMA=y CONFIG_SND_ATMEL_SOC_SSC=y CONFIG_SND_ATMEL_SOC_SSC_PDC=y CONFIG_SND_ATMEL_SOC_SSC_DMA=y CONFIG_SND_AT91_SOC_SAM9G20_WM8731=y CONFIG_SND_ATMEL_SOC_WM8904=y CONFIG_SND_AT91_SOC_SAM9X5_WM8731=y # CONFIG_SND_ATMEL_SOC_CLASSD is not set # CONFIG_SND_ATMEL_SOC_PDMIC is not set CONFIG_SND_ATMEL_SOC_I2S=y CONFIG_SND_SOC_MIKROE_PROTO=y CONFIG_SND_MCHP_SOC_I2S_MCC=y CONFIG_SND_MCHP_SOC_SPDIFTX=y CONFIG_SND_MCHP_SOC_PDMC=y CONFIG_SND_BCM2835_SOC_I2S=y # CONFIG_SND_SOC_CYGNUS is not set # CONFIG_SND_BCM63XX_I2S_WHISTLER is not set CONFIG_SND_EP93XX_SOC=y # # SoC Audio for Freescale CPUs # # # Common SoC Audio options for Freescale CPUs: # CONFIG_SND_SOC_FSL_ASRC=y CONFIG_SND_SOC_FSL_SAI=y CONFIG_SND_SOC_FSL_MQS=y CONFIG_SND_SOC_FSL_AUDMIX=y CONFIG_SND_SOC_FSL_SSI=y CONFIG_SND_SOC_FSL_SPDIF=y CONFIG_SND_SOC_FSL_ESAI=y CONFIG_SND_SOC_FSL_MICFIL=y CONFIG_SND_SOC_FSL_EASRC=y CONFIG_SND_SOC_FSL_XCVR=y # CONFIG_SND_SOC_FSL_AUD2HTX is not set CONFIG_SND_SOC_FSL_UTILS=y # CONFIG_SND_SOC_IMX_AUDMUX is not set # CONFIG_SND_IMX_SOC is not set # end of SoC Audio for Freescale CPUs CONFIG_SND_I2S_HI6210_I2S=y CONFIG_SND_JZ4740_SOC_I2S=y CONFIG_SND_KIRKWOOD_SOC=y # CONFIG_SND_KIRKWOOD_SOC_ARMADA370_DB is not set # CONFIG_SND_SOC_IMG is not set # CONFIG_SND_SOC_INTEL_SST_TOPLEVEL is not set CONFIG_SND_SOC_MTK_BTCVSD=y # CONFIG_SND_PXA2XX_SOC is not set # CONFIG_SND_SOC_QCOM is not set CONFIG_SND_SOC_ROCKCHIP=y # # SoC Audio support for Renesas SoCs # # CONFIG_SND_SOC_RZ is not set # end of SoC Audio support for Renesas SoCs # CONFIG_SND_SOC_SOF_TOPLEVEL is not set CONFIG_SND_SOC_SPRD=y CONFIG_SND_SOC_SPRD_MCDT=y # CONFIG_SND_SOC_STI is not set # # STMicroelectronics STM32 SOC audio support # # CONFIG_SND_SOC_STM32_SPDIFRX is not set # end of STMicroelectronics STM32 SOC audio support # # Allwinner SoC Audio support # CONFIG_SND_SUN4I_CODEC=y # CONFIG_SND_SUN8I_CODEC_ANALOG is not set CONFIG_SND_SUN50I_CODEC_ANALOG=y CONFIG_SND_SUN4I_I2S=y CONFIG_SND_SUN4I_SPDIF=y # CONFIG_SND_SUN50I_DMIC is not set CONFIG_SND_SUN8I_ADDA_PR_REGMAP=y # end of Allwinner SoC Audio support # # Audio support for Texas Instruments SoCs # CONFIG_SND_SOC_TI_EDMA_PCM=y CONFIG_SND_SOC_TI_SDMA_PCM=y # # Texas Instruments DAI support for: # CONFIG_SND_SOC_DAVINCI_ASP=y CONFIG_SND_SOC_DAVINCI_VCIF=y CONFIG_SND_SOC_OMAP_MCPDM=y # # Audio support for boards with Texas Instruments SoCs # # CONFIG_SND_SOC_OMAP_HDMI is not set # end of Audio support for Texas Instruments SoCs # CONFIG_SND_SOC_UNIPHIER is not set CONFIG_SND_SOC_XILINX_I2S=y CONFIG_SND_SOC_XILINX_AUDIO_FORMATTER=y CONFIG_SND_SOC_XILINX_SPDIF=y CONFIG_SND_SOC_XTFPGA_I2S=y CONFIG_SND_SOC_I2C_AND_SPI=y # # CODEC drivers # CONFIG_SND_SOC_ALL_CODECS=y CONFIG_SND_SOC_88PM860X=y CONFIG_SND_SOC_ARIZONA=y CONFIG_SND_SOC_WM_HUBS=y CONFIG_SND_SOC_WM_ADSP=y CONFIG_SND_SOC_AB8500_CODEC=y # CONFIG_SND_SOC_AC97_CODEC is not set # CONFIG_SND_SOC_AD1836 is not set CONFIG_SND_SOC_AD193X=y # CONFIG_SND_SOC_AD193X_SPI is not set CONFIG_SND_SOC_AD193X_I2C=y # CONFIG_SND_SOC_AD1980 is not set CONFIG_SND_SOC_AD73311=y CONFIG_SND_SOC_ADAU_UTILS=y CONFIG_SND_SOC_ADAU1372=y CONFIG_SND_SOC_ADAU1372_I2C=y # CONFIG_SND_SOC_ADAU1372_SPI is not set CONFIG_SND_SOC_ADAU1373=y CONFIG_SND_SOC_ADAU1701=y CONFIG_SND_SOC_ADAU17X1=y CONFIG_SND_SOC_ADAU1761=y CONFIG_SND_SOC_ADAU1761_I2C=y # CONFIG_SND_SOC_ADAU1761_SPI is not set CONFIG_SND_SOC_ADAU1781=y CONFIG_SND_SOC_ADAU1781_I2C=y # CONFIG_SND_SOC_ADAU1781_SPI is not set CONFIG_SND_SOC_ADAU1977=y # CONFIG_SND_SOC_ADAU1977_SPI is not set CONFIG_SND_SOC_ADAU1977_I2C=y CONFIG_SND_SOC_ADAU7002=y CONFIG_SND_SOC_ADAU7118=y CONFIG_SND_SOC_ADAU7118_HW=y CONFIG_SND_SOC_ADAU7118_I2C=y CONFIG_SND_SOC_ADAV80X=y # CONFIG_SND_SOC_ADAV801 is not set CONFIG_SND_SOC_ADAV803=y CONFIG_SND_SOC_ADS117X=y # CONFIG_SND_SOC_AK4104 is not set CONFIG_SND_SOC_AK4118=y CONFIG_SND_SOC_AK4375=y # CONFIG_SND_SOC_AK4458 is not set CONFIG_SND_SOC_AK4535=y CONFIG_SND_SOC_AK4554=y CONFIG_SND_SOC_AK4613=y CONFIG_SND_SOC_AK4641=y # CONFIG_SND_SOC_AK4642 is not set CONFIG_SND_SOC_AK4671=y CONFIG_SND_SOC_AK5386=y CONFIG_SND_SOC_AK5558=y # CONFIG_SND_SOC_ALC5623 is not set CONFIG_SND_SOC_ALC5632=y CONFIG_SND_SOC_AW8738=y CONFIG_SND_SOC_BD28623=y CONFIG_SND_SOC_BT_SCO=y CONFIG_SND_SOC_CPCAP=y CONFIG_SND_SOC_CQ0093VC=y # CONFIG_SND_SOC_CROS_EC_CODEC is not set # CONFIG_SND_SOC_CS35L32 is not set CONFIG_SND_SOC_CS35L33=y # CONFIG_SND_SOC_CS35L34 is not set # CONFIG_SND_SOC_CS35L35 is not set # CONFIG_SND_SOC_CS35L36 is not set # CONFIG_SND_SOC_CS35L41_SPI is not set # CONFIG_SND_SOC_CS35L41_I2C is not set # CONFIG_SND_SOC_CS35L45_SPI is not set # CONFIG_SND_SOC_CS35L45_I2C is not set CONFIG_SND_SOC_CS42L42_CORE=y CONFIG_SND_SOC_CS42L42=y # CONFIG_SND_SOC_CS42L51_I2C is not set CONFIG_SND_SOC_CS42L52=y CONFIG_SND_SOC_CS42L56=y CONFIG_SND_SOC_CS42L73=y CONFIG_SND_SOC_CS42L83=y # CONFIG_SND_SOC_CS4234 is not set # CONFIG_SND_SOC_CS4265 is not set # CONFIG_SND_SOC_CS4270 is not set CONFIG_SND_SOC_CS4271=y CONFIG_SND_SOC_CS4271_I2C=y # CONFIG_SND_SOC_CS4271_SPI is not set CONFIG_SND_SOC_CS42XX8=y CONFIG_SND_SOC_CS42XX8_I2C=y CONFIG_SND_SOC_CS43130=y CONFIG_SND_SOC_CS4341=y # CONFIG_SND_SOC_CS4349 is not set # CONFIG_SND_SOC_CS47L15 is not set CONFIG_SND_SOC_CS47L24=y # CONFIG_SND_SOC_CS47L35 is not set # CONFIG_SND_SOC_CS47L85 is not set # CONFIG_SND_SOC_CS47L90 is not set # CONFIG_SND_SOC_CS47L92 is not set CONFIG_SND_SOC_CS53L30=y CONFIG_SND_SOC_CX20442=y CONFIG_SND_SOC_CX2072X=y CONFIG_SND_SOC_JZ4740_CODEC=y CONFIG_SND_SOC_JZ4725B_CODEC=y # CONFIG_SND_SOC_JZ4760_CODEC is not set # CONFIG_SND_SOC_JZ4770_CODEC is not set CONFIG_SND_SOC_L3=y CONFIG_SND_SOC_DA7210=y CONFIG_SND_SOC_DA7213=y CONFIG_SND_SOC_DA7218=y CONFIG_SND_SOC_DA7219=y CONFIG_SND_SOC_DA732X=y CONFIG_SND_SOC_DA9055=y # CONFIG_SND_SOC_DMIC is not set CONFIG_SND_SOC_HDMI_CODEC=y CONFIG_SND_SOC_ES7134=y CONFIG_SND_SOC_ES7241=y CONFIG_SND_SOC_ES8316=y CONFIG_SND_SOC_ES8326=y CONFIG_SND_SOC_ES8328=y CONFIG_SND_SOC_ES8328_I2C=y # CONFIG_SND_SOC_ES8328_SPI is not set CONFIG_SND_SOC_GTM601=y CONFIG_SND_SOC_HDAC_HDMI=y CONFIG_SND_SOC_HDAC_HDA=y # CONFIG_SND_SOC_HDA is not set CONFIG_SND_SOC_ICS43432=y CONFIG_SND_SOC_INNO_RK3036=y CONFIG_SND_SOC_ISABELLE=y CONFIG_SND_SOC_LM49453=y CONFIG_SND_SOC_LOCHNAGAR_SC=y # CONFIG_SND_SOC_MAX98088 is not set CONFIG_SND_SOC_MAX98090=y CONFIG_SND_SOC_MAX98095=y CONFIG_SND_SOC_MAX98357A=y CONFIG_SND_SOC_MAX98371=y # CONFIG_SND_SOC_MAX98504 is not set # CONFIG_SND_SOC_MAX9867 is not set CONFIG_SND_SOC_MAX98925=y CONFIG_SND_SOC_MAX98926=y CONFIG_SND_SOC_MAX98927=y # CONFIG_SND_SOC_MAX98520 is not set CONFIG_SND_SOC_MAX98373=y CONFIG_SND_SOC_MAX98373_I2C=y CONFIG_SND_SOC_MAX98373_SDW=y # CONFIG_SND_SOC_MAX98390 is not set # CONFIG_SND_SOC_MAX98396 is not set CONFIG_SND_SOC_MAX9850=y CONFIG_SND_SOC_MAX9860=y CONFIG_SND_SOC_MSM8916_WCD_ANALOG=y CONFIG_SND_SOC_MSM8916_WCD_DIGITAL=y CONFIG_SND_SOC_PCM1681=y CONFIG_SND_SOC_PCM1789=y CONFIG_SND_SOC_PCM1789_I2C=y CONFIG_SND_SOC_PCM179X=y CONFIG_SND_SOC_PCM179X_I2C=y # CONFIG_SND_SOC_PCM179X_SPI is not set # CONFIG_SND_SOC_PCM186X_I2C is not set # CONFIG_SND_SOC_PCM186X_SPI is not set CONFIG_SND_SOC_PCM3008=y # CONFIG_SND_SOC_PCM3060_I2C is not set # CONFIG_SND_SOC_PCM3060_SPI is not set CONFIG_SND_SOC_PCM3168A=y CONFIG_SND_SOC_PCM3168A_I2C=y # CONFIG_SND_SOC_PCM3168A_SPI is not set # CONFIG_SND_SOC_PCM5102A is not set CONFIG_SND_SOC_PCM512x=y CONFIG_SND_SOC_PCM512x_I2C=y # CONFIG_SND_SOC_PCM512x_SPI is not set CONFIG_SND_SOC_RK3328=y # CONFIG_SND_SOC_RK817 is not set CONFIG_SND_SOC_RL6231=y CONFIG_SND_SOC_RL6347A=y CONFIG_SND_SOC_RT274=y CONFIG_SND_SOC_RT286=y CONFIG_SND_SOC_RT298=y CONFIG_SND_SOC_RT1011=y CONFIG_SND_SOC_RT1015=y CONFIG_SND_SOC_RT1015P=y CONFIG_SND_SOC_RT1016=y CONFIG_SND_SOC_RT1019=y CONFIG_SND_SOC_RT1305=y CONFIG_SND_SOC_RT1308=y # CONFIG_SND_SOC_RT1308_SDW is not set # CONFIG_SND_SOC_RT1316_SDW is not set # CONFIG_SND_SOC_RT1318_SDW is not set CONFIG_SND_SOC_RT5514=y # CONFIG_SND_SOC_RT5616 is not set CONFIG_SND_SOC_RT5631=y CONFIG_SND_SOC_RT5640=y CONFIG_SND_SOC_RT5645=y CONFIG_SND_SOC_RT5651=y CONFIG_SND_SOC_RT5659=y CONFIG_SND_SOC_RT5660=y CONFIG_SND_SOC_RT5663=y CONFIG_SND_SOC_RT5665=y CONFIG_SND_SOC_RT5668=y CONFIG_SND_SOC_RT5670=y CONFIG_SND_SOC_RT5677=y CONFIG_SND_SOC_RT5682=y CONFIG_SND_SOC_RT5682_I2C=y CONFIG_SND_SOC_RT5682_SDW=y CONFIG_SND_SOC_RT5682S=y CONFIG_SND_SOC_RT700=y CONFIG_SND_SOC_RT700_SDW=y CONFIG_SND_SOC_RT711=y CONFIG_SND_SOC_RT711_SDW=y CONFIG_SND_SOC_RT711_SDCA_SDW=y CONFIG_SND_SOC_RT715=y CONFIG_SND_SOC_RT715_SDW=y CONFIG_SND_SOC_RT715_SDCA_SDW=y CONFIG_SND_SOC_RT9120=y # CONFIG_SND_SOC_SDW_MOCKUP is not set # CONFIG_SND_SOC_SGTL5000 is not set CONFIG_SND_SOC_SI476X=y CONFIG_SND_SOC_SIGMADSP=y CONFIG_SND_SOC_SIGMADSP_I2C=y CONFIG_SND_SOC_SIGMADSP_REGMAP=y CONFIG_SND_SOC_SIMPLE_AMPLIFIER=y CONFIG_SND_SOC_SIMPLE_MUX=y CONFIG_SND_SOC_SPDIF=y CONFIG_SND_SOC_SRC4XXX_I2C=y CONFIG_SND_SOC_SRC4XXX=y # CONFIG_SND_SOC_SSM2305 is not set CONFIG_SND_SOC_SSM2518=y CONFIG_SND_SOC_SSM2602=y # CONFIG_SND_SOC_SSM2602_SPI is not set CONFIG_SND_SOC_SSM2602_I2C=y CONFIG_SND_SOC_SSM4567=y # CONFIG_SND_SOC_STA32X is not set CONFIG_SND_SOC_STA350=y CONFIG_SND_SOC_STA529=y # CONFIG_SND_SOC_STAC9766 is not set CONFIG_SND_SOC_STI_SAS=y CONFIG_SND_SOC_TAS2552=y CONFIG_SND_SOC_TAS2562=y CONFIG_SND_SOC_TAS2764=y CONFIG_SND_SOC_TAS2770=y CONFIG_SND_SOC_TAS2780=y CONFIG_SND_SOC_TAS5086=y # CONFIG_SND_SOC_TAS571X is not set CONFIG_SND_SOC_TAS5720=y # CONFIG_SND_SOC_TAS5805M is not set CONFIG_SND_SOC_TAS6424=y # CONFIG_SND_SOC_TDA7419 is not set # CONFIG_SND_SOC_TFA9879 is not set CONFIG_SND_SOC_TFA989X=y CONFIG_SND_SOC_TLV320ADC3XXX=y CONFIG_SND_SOC_TLV320AIC23=y CONFIG_SND_SOC_TLV320AIC23_I2C=y # CONFIG_SND_SOC_TLV320AIC23_SPI is not set # CONFIG_SND_SOC_TLV320AIC26 is not set CONFIG_SND_SOC_TLV320AIC31XX=y # CONFIG_SND_SOC_TLV320AIC32X4_I2C is not set # CONFIG_SND_SOC_TLV320AIC32X4_SPI is not set CONFIG_SND_SOC_TLV320AIC3X=y CONFIG_SND_SOC_TLV320AIC3X_I2C=y # CONFIG_SND_SOC_TLV320AIC3X_SPI is not set CONFIG_SND_SOC_TLV320DAC33=y CONFIG_SND_SOC_TLV320ADCX140=y CONFIG_SND_SOC_TS3A227E=y # CONFIG_SND_SOC_TSCS42XX is not set CONFIG_SND_SOC_TSCS454=y # CONFIG_SND_SOC_TWL4030 is not set # CONFIG_SND_SOC_TWL6040 is not set CONFIG_SND_SOC_UDA1334=y CONFIG_SND_SOC_UDA134X=y CONFIG_SND_SOC_UDA1380=y CONFIG_SND_SOC_WCD9335=y CONFIG_SND_SOC_WCD_MBHC=y # CONFIG_SND_SOC_WCD934X is not set CONFIG_SND_SOC_WCD938X=y CONFIG_SND_SOC_WCD938X_SDW=y CONFIG_SND_SOC_WL1273=y # CONFIG_SND_SOC_WM0010 is not set CONFIG_SND_SOC_WM1250_EV1=y CONFIG_SND_SOC_WM2000=y CONFIG_SND_SOC_WM2200=y CONFIG_SND_SOC_WM5100=y # CONFIG_SND_SOC_WM5102 is not set CONFIG_SND_SOC_WM5110=y # CONFIG_SND_SOC_WM8350 is not set # CONFIG_SND_SOC_WM8400 is not set # CONFIG_SND_SOC_WM8510 is not set # CONFIG_SND_SOC_WM8523 is not set CONFIG_SND_SOC_WM8524=y # CONFIG_SND_SOC_WM8580 is not set CONFIG_SND_SOC_WM8711=y CONFIG_SND_SOC_WM8727=y CONFIG_SND_SOC_WM8728=y CONFIG_SND_SOC_WM8731=y CONFIG_SND_SOC_WM8731_I2C=y # CONFIG_SND_SOC_WM8731_SPI is not set CONFIG_SND_SOC_WM8737=y CONFIG_SND_SOC_WM8741=y CONFIG_SND_SOC_WM8750=y CONFIG_SND_SOC_WM8753=y # CONFIG_SND_SOC_WM8770 is not set CONFIG_SND_SOC_WM8776=y CONFIG_SND_SOC_WM8782=y CONFIG_SND_SOC_WM8804=y CONFIG_SND_SOC_WM8804_I2C=y # CONFIG_SND_SOC_WM8804_SPI is not set CONFIG_SND_SOC_WM8900=y CONFIG_SND_SOC_WM8903=y CONFIG_SND_SOC_WM8904=y CONFIG_SND_SOC_WM8940=y CONFIG_SND_SOC_WM8955=y CONFIG_SND_SOC_WM8960=y # CONFIG_SND_SOC_WM8961 is not set CONFIG_SND_SOC_WM8962=y CONFIG_SND_SOC_WM8971=y CONFIG_SND_SOC_WM8974=y CONFIG_SND_SOC_WM8978=y CONFIG_SND_SOC_WM8983=y # CONFIG_SND_SOC_WM8985 is not set CONFIG_SND_SOC_WM8988=y CONFIG_SND_SOC_WM8990=y CONFIG_SND_SOC_WM8991=y CONFIG_SND_SOC_WM8993=y CONFIG_SND_SOC_WM8994=y CONFIG_SND_SOC_WM8995=y CONFIG_SND_SOC_WM8996=y # CONFIG_SND_SOC_WM8997 is not set # CONFIG_SND_SOC_WM8998 is not set CONFIG_SND_SOC_WM9081=y CONFIG_SND_SOC_WM9090=y # CONFIG_SND_SOC_WM9705 is not set # CONFIG_SND_SOC_WM9712 is not set # CONFIG_SND_SOC_WM9713 is not set # CONFIG_SND_SOC_WSA881X is not set CONFIG_SND_SOC_WSA883X=y # CONFIG_SND_SOC_ZL38060 is not set CONFIG_SND_SOC_LM4857=y # CONFIG_SND_SOC_MAX9759 is not set CONFIG_SND_SOC_MAX9768=y CONFIG_SND_SOC_MAX9877=y CONFIG_SND_SOC_MC13783=y CONFIG_SND_SOC_ML26124=y CONFIG_SND_SOC_MT6351=y CONFIG_SND_SOC_MT6358=y # CONFIG_SND_SOC_MT6359 is not set # CONFIG_SND_SOC_MT6359_ACCDET is not set CONFIG_SND_SOC_MT6660=y # CONFIG_SND_SOC_NAU8315 is not set CONFIG_SND_SOC_NAU8540=y # CONFIG_SND_SOC_NAU8810 is not set # CONFIG_SND_SOC_NAU8821 is not set CONFIG_SND_SOC_NAU8822=y # CONFIG_SND_SOC_NAU8824 is not set CONFIG_SND_SOC_NAU8825=y CONFIG_SND_SOC_TPA6130A2=y CONFIG_SND_SOC_LPASS_MACRO_COMMON=y # CONFIG_SND_SOC_LPASS_RX_MACRO is not set # CONFIG_SND_SOC_LPASS_TX_MACRO is not set # end of CODEC drivers CONFIG_SND_SIMPLE_CARD_UTILS=y CONFIG_SND_SIMPLE_CARD=y CONFIG_SND_AUDIO_GRAPH_CARD=y CONFIG_SND_AUDIO_GRAPH_CARD2=y CONFIG_SND_AUDIO_GRAPH_CARD2_CUSTOM_SAMPLE=y CONFIG_SND_TEST_COMPONENT=y # CONFIG_SND_VIRTIO is not set # # HID support # CONFIG_HID=y # CONFIG_HID_BATTERY_STRENGTH is not set CONFIG_HIDRAW=y CONFIG_UHID=y CONFIG_HID_GENERIC=y # # Special HID drivers # # CONFIG_HID_A4TECH is not set CONFIG_HID_ACRUX=y CONFIG_HID_ACRUX_FF=y CONFIG_HID_APPLE=y CONFIG_HID_AUREAL=y CONFIG_HID_BELKIN=y # CONFIG_HID_CHERRY is not set # CONFIG_HID_COUGAR is not set CONFIG_HID_MACALLY=y CONFIG_HID_CMEDIA=y # CONFIG_HID_CYPRESS is not set CONFIG_HID_DRAGONRISE=y CONFIG_DRAGONRISE_FF=y CONFIG_HID_EMS_FF=y # CONFIG_HID_ELECOM is not set CONFIG_HID_EZKEY=y # CONFIG_HID_GEMBIRD is not set # CONFIG_HID_GFRM is not set # CONFIG_HID_GLORIOUS is not set CONFIG_HID_VIVALDI_COMMON=y CONFIG_HID_VIVALDI=y CONFIG_HID_KEYTOUCH=y # CONFIG_HID_KYE is not set # CONFIG_HID_WALTOP is not set CONFIG_HID_VIEWSONIC=y CONFIG_HID_VRC2=y # CONFIG_HID_XIAOMI is not set CONFIG_HID_GYRATION=y CONFIG_HID_ICADE=y CONFIG_HID_ITE=y CONFIG_HID_JABRA=y CONFIG_HID_TWINHAN=y CONFIG_HID_KENSINGTON=y CONFIG_HID_LCPOWER=y CONFIG_HID_LED=y # CONFIG_HID_LENOVO is not set # CONFIG_HID_MAGICMOUSE is not set # CONFIG_HID_MALTRON is not set # CONFIG_HID_MAYFLASH is not set # CONFIG_HID_REDRAGON is not set CONFIG_HID_MICROSOFT=y # CONFIG_HID_MONTEREY is not set # CONFIG_HID_MULTITOUCH is not set # CONFIG_HID_NINTENDO is not set CONFIG_HID_NTI=y CONFIG_HID_ORTEK=y CONFIG_HID_PANTHERLORD=y # CONFIG_PANTHERLORD_FF is not set # CONFIG_HID_PETALYNX is not set CONFIG_HID_PICOLCD=y CONFIG_HID_PICOLCD_BACKLIGHT=y CONFIG_HID_PICOLCD_LCD=y CONFIG_HID_PICOLCD_LEDS=y CONFIG_HID_PLANTRONICS=y CONFIG_HID_PXRC=y # CONFIG_HID_RAZER is not set CONFIG_HID_PRIMAX=y CONFIG_HID_SAITEK=y CONFIG_HID_SEMITEK=y # CONFIG_HID_SPEEDLINK is not set CONFIG_HID_STEAM=y CONFIG_HID_STEELSERIES=y CONFIG_HID_SUNPLUS=y CONFIG_HID_RMI=y CONFIG_HID_GREENASIA=y # CONFIG_GREENASIA_FF is not set CONFIG_HID_SMARTJOYPLUS=y # CONFIG_SMARTJOYPLUS_FF is not set # CONFIG_HID_TIVO is not set CONFIG_HID_TOPSEED=y CONFIG_HID_TOPRE=y # CONFIG_HID_THINGM is not set # CONFIG_HID_UDRAW_PS3 is not set # CONFIG_HID_WIIMOTE is not set CONFIG_HID_XINMO=y # CONFIG_HID_ZEROPLUS is not set CONFIG_HID_ZYDACRON=y CONFIG_HID_SENSOR_HUB=y CONFIG_HID_SENSOR_CUSTOM_SENSOR=y CONFIG_HID_ALPS=y # end of Special HID drivers # # I2C HID support # CONFIG_I2C_HID_OF=y CONFIG_I2C_HID_OF_ELAN=y # CONFIG_I2C_HID_OF_GOODIX is not set # end of I2C HID support CONFIG_I2C_HID_CORE=y # end of HID support CONFIG_USB_OHCI_LITTLE_ENDIAN=y # CONFIG_USB_SUPPORT is not set # CONFIG_MMC is not set CONFIG_SCSI_UFSHCD=y CONFIG_SCSI_UFS_BSG=y CONFIG_SCSI_UFS_CRYPTO=y CONFIG_SCSI_UFS_HPB=y # CONFIG_SCSI_UFS_HWMON is not set # CONFIG_SCSI_UFSHCD_PLATFORM is not set # CONFIG_SCSI_UFS_TI_J721E is not set CONFIG_MEMSTICK=y # CONFIG_MEMSTICK_DEBUG is not set # # MemoryStick drivers # CONFIG_MEMSTICK_UNSAFE_RESUME=y CONFIG_MSPRO_BLOCK=y CONFIG_MS_BLOCK=y # # MemoryStick Host Controller Drivers # CONFIG_NEW_LEDS=y CONFIG_LEDS_CLASS=y CONFIG_LEDS_CLASS_FLASH=y # CONFIG_LEDS_CLASS_MULTICOLOR is not set CONFIG_LEDS_BRIGHTNESS_HW_CHANGED=y # # LED drivers # # CONFIG_LEDS_88PM860X is not set CONFIG_LEDS_AN30259A=y CONFIG_LEDS_ARIEL=y CONFIG_LEDS_AW2013=y CONFIG_LEDS_BCM6328=y # CONFIG_LEDS_BCM6358 is not set CONFIG_LEDS_LM3530=y # CONFIG_LEDS_LM3532 is not set CONFIG_LEDS_LM3533=y CONFIG_LEDS_LM3642=y CONFIG_LEDS_LM3692X=y # CONFIG_LEDS_S3C24XX is not set CONFIG_LEDS_COBALT_QUBE=y # CONFIG_LEDS_COBALT_RAQ is not set # CONFIG_LEDS_PCA9532 is not set CONFIG_LEDS_GPIO=y CONFIG_LEDS_LP3944=y CONFIG_LEDS_LP3952=y # CONFIG_LEDS_LP50XX is not set # CONFIG_LEDS_LP55XX_COMMON is not set CONFIG_LEDS_LP8860=y CONFIG_LEDS_PCA955X=y # CONFIG_LEDS_PCA955X_GPIO is not set CONFIG_LEDS_PCA963X=y CONFIG_LEDS_WM831X_STATUS=y CONFIG_LEDS_DA903X=y CONFIG_LEDS_REGULATOR=y CONFIG_LEDS_BD2802=y CONFIG_LEDS_LT3593=y # CONFIG_LEDS_MC13783 is not set CONFIG_LEDS_NS2=y # CONFIG_LEDS_NETXBIG is not set # CONFIG_LEDS_ASIC3 is not set CONFIG_LEDS_TCA6507=y CONFIG_LEDS_TLC591XX=y # CONFIG_LEDS_LM355x is not set CONFIG_LEDS_OT200=y CONFIG_LEDS_IS31FL319X=y # CONFIG_LEDS_IS31FL32XX is not set # # LED driver for blink(1) USB RGB LED is under Special HID drivers (HID_THINGM) # CONFIG_LEDS_BLINKM=y # CONFIG_LEDS_SYSCON is not set CONFIG_LEDS_PM8058=y CONFIG_LEDS_MLXREG=y CONFIG_LEDS_USER=y # CONFIG_LEDS_TI_LMU_COMMON is not set # CONFIG_LEDS_TPS6105X is not set # CONFIG_LEDS_IP30 is not set CONFIG_LEDS_BCM63138=y CONFIG_LEDS_LGM=y # # Flash and Torch LED drivers # CONFIG_LEDS_AAT1290=y # CONFIG_LEDS_AS3645A is not set CONFIG_LEDS_KTD2692=y CONFIG_LEDS_LM3601X=y CONFIG_LEDS_MT6360=y CONFIG_LEDS_RT4505=y CONFIG_LEDS_RT8515=y # CONFIG_LEDS_SGM3140 is not set # # RGB LED drivers # # # LED Triggers # CONFIG_LEDS_TRIGGERS=y CONFIG_LEDS_TRIGGER_TIMER=y CONFIG_LEDS_TRIGGER_ONESHOT=y # CONFIG_LEDS_TRIGGER_DISK is not set # CONFIG_LEDS_TRIGGER_MTD is not set CONFIG_LEDS_TRIGGER_HEARTBEAT=y # CONFIG_LEDS_TRIGGER_BACKLIGHT is not set # CONFIG_LEDS_TRIGGER_CPU is not set # CONFIG_LEDS_TRIGGER_ACTIVITY is not set CONFIG_LEDS_TRIGGER_GPIO=y CONFIG_LEDS_TRIGGER_DEFAULT_ON=y # # iptables trigger is under Netfilter config (LED target) # # CONFIG_LEDS_TRIGGER_TRANSIENT is not set CONFIG_LEDS_TRIGGER_CAMERA=y # CONFIG_LEDS_TRIGGER_PANIC is not set CONFIG_LEDS_TRIGGER_NETDEV=y CONFIG_LEDS_TRIGGER_PATTERN=y CONFIG_LEDS_TRIGGER_AUDIO=y CONFIG_LEDS_TRIGGER_TTY=y # # Simple LED drivers # # CONFIG_ACCESSIBILITY is not set CONFIG_INFINIBAND=y # CONFIG_INFINIBAND_USER_MAD is not set CONFIG_INFINIBAND_USER_ACCESS=y CONFIG_INFINIBAND_USER_MEM=y # CONFIG_INFINIBAND_ON_DEMAND_PAGING is not set CONFIG_INFINIBAND_ADDR_TRANS=y CONFIG_INFINIBAND_ADDR_TRANS_CONFIGFS=y CONFIG_INFINIBAND_VIRT_DMA=y CONFIG_RDMA_SIW=y # CONFIG_INFINIBAND_SRP is not set # CONFIG_INFINIBAND_ISER is not set CONFIG_INFINIBAND_RTRS=y CONFIG_INFINIBAND_RTRS_CLIENT=y CONFIG_INFINIBAND_RTRS_SERVER=y CONFIG_RTC_LIB=y CONFIG_RTC_CLASS=y # CONFIG_RTC_HCTOSYS is not set CONFIG_RTC_SYSTOHC=y CONFIG_RTC_SYSTOHC_DEVICE="rtc0" # CONFIG_RTC_DEBUG is not set CONFIG_RTC_LIB_KUNIT_TEST=y # CONFIG_RTC_NVMEM is not set # # RTC interfaces # # CONFIG_RTC_INTF_SYSFS is not set # CONFIG_RTC_INTF_PROC is not set # CONFIG_RTC_INTF_DEV is not set CONFIG_RTC_DRV_TEST=y # # I2C RTC drivers # CONFIG_RTC_DRV_88PM860X=y # CONFIG_RTC_DRV_88PM80X is not set # CONFIG_RTC_DRV_ABB5ZES3 is not set CONFIG_RTC_DRV_ABEOZ9=y CONFIG_RTC_DRV_ABX80X=y # CONFIG_RTC_DRV_BRCMSTB is not set # CONFIG_RTC_DRV_AS3722 is not set # CONFIG_RTC_DRV_DS1307 is not set CONFIG_RTC_DRV_DS1374=y CONFIG_RTC_DRV_DS1374_WDT=y # CONFIG_RTC_DRV_DS1672 is not set CONFIG_RTC_DRV_HYM8563=y CONFIG_RTC_DRV_MAX6900=y CONFIG_RTC_DRV_MAX8907=y CONFIG_RTC_DRV_MAX8925=y # CONFIG_RTC_DRV_MAX8998 is not set CONFIG_RTC_DRV_MAX77686=y # CONFIG_RTC_DRV_NCT3018Y is not set # CONFIG_RTC_DRV_RS5C372 is not set # CONFIG_RTC_DRV_ISL1208 is not set CONFIG_RTC_DRV_ISL12022=y CONFIG_RTC_DRV_ISL12026=y # CONFIG_RTC_DRV_X1205 is not set CONFIG_RTC_DRV_PCF8523=y CONFIG_RTC_DRV_PCF85063=y CONFIG_RTC_DRV_PCF85363=y CONFIG_RTC_DRV_PCF8563=y CONFIG_RTC_DRV_PCF8583=y # CONFIG_RTC_DRV_M41T80 is not set CONFIG_RTC_DRV_BD70528=y # CONFIG_RTC_DRV_BQ32K is not set CONFIG_RTC_DRV_PALMAS=y # CONFIG_RTC_DRV_TPS65910 is not set # CONFIG_RTC_DRV_RC5T583 is not set CONFIG_RTC_DRV_S35390A=y # CONFIG_RTC_DRV_FM3130 is not set # CONFIG_RTC_DRV_RX8010 is not set CONFIG_RTC_DRV_RX8581=y # CONFIG_RTC_DRV_RX8025 is not set # CONFIG_RTC_DRV_EM3027 is not set CONFIG_RTC_DRV_RV3028=y # CONFIG_RTC_DRV_RV3032 is not set CONFIG_RTC_DRV_RV8803=y CONFIG_RTC_DRV_S5M=y CONFIG_RTC_DRV_SD3078=y # # SPI RTC drivers # CONFIG_RTC_I2C_AND_SPI=y # # SPI and I2C RTC drivers # CONFIG_RTC_DRV_DS3232=y # CONFIG_RTC_DRV_DS3232_HWMON is not set CONFIG_RTC_DRV_PCF2127=y CONFIG_RTC_DRV_RV3029C2=y CONFIG_RTC_DRV_RV3029_HWMON=y # CONFIG_RTC_DRV_RX6110 is not set # # Platform RTC drivers # CONFIG_RTC_DRV_DS1286=y CONFIG_RTC_DRV_DS1511=y CONFIG_RTC_DRV_DS1553=y # CONFIG_RTC_DRV_DS1685_FAMILY is not set CONFIG_RTC_DRV_DS1742=y CONFIG_RTC_DRV_DS2404=y CONFIG_RTC_DRV_DA9055=y # CONFIG_RTC_DRV_DA9063 is not set CONFIG_RTC_DRV_STK17TA8=y CONFIG_RTC_DRV_M48T86=y # CONFIG_RTC_DRV_M48T35 is not set CONFIG_RTC_DRV_M48T59=y CONFIG_RTC_DRV_MSM6242=y CONFIG_RTC_DRV_BQ4802=y # CONFIG_RTC_DRV_RP5C01 is not set # CONFIG_RTC_DRV_V3020 is not set # CONFIG_RTC_DRV_GAMECUBE is not set CONFIG_RTC_DRV_WM831X=y # CONFIG_RTC_DRV_SC27XX is not set # CONFIG_RTC_DRV_SPEAR is not set CONFIG_RTC_DRV_ZYNQMP=y # # on-CPU RTC drivers # # CONFIG_RTC_DRV_ASM9260 is not set # CONFIG_RTC_DRV_DIGICOLOR is not set CONFIG_RTC_DRV_FSL_FTM_ALARM=y # CONFIG_RTC_DRV_MESON is not set CONFIG_RTC_DRV_MESON_VRTC=y CONFIG_RTC_DRV_OMAP=y CONFIG_RTC_DRV_S3C=y CONFIG_RTC_DRV_EP93XX=y CONFIG_RTC_DRV_AT91RM9200=y # CONFIG_RTC_DRV_AT91SAM9 is not set CONFIG_RTC_DRV_RZN1=y CONFIG_RTC_DRV_GENERIC=y CONFIG_RTC_DRV_VT8500=y CONFIG_RTC_DRV_SUNXI=y # CONFIG_RTC_DRV_MV is not set CONFIG_RTC_DRV_ARMADA38X=y CONFIG_RTC_DRV_CADENCE=y CONFIG_RTC_DRV_FTRTC010=y # CONFIG_RTC_DRV_STMP is not set CONFIG_RTC_DRV_MC13XXX=y CONFIG_RTC_DRV_JZ4740=y # CONFIG_RTC_DRV_LPC24XX is not set # CONFIG_RTC_DRV_LPC32XX is not set CONFIG_RTC_DRV_PM8XXX=y CONFIG_RTC_DRV_TEGRA=y # CONFIG_RTC_DRV_MXC is not set # CONFIG_RTC_DRV_MXC_V2 is not set CONFIG_RTC_DRV_SNVS=y CONFIG_RTC_DRV_MOXART=y # CONFIG_RTC_DRV_MT2712 is not set # CONFIG_RTC_DRV_MT6397 is not set # CONFIG_RTC_DRV_MT7622 is not set CONFIG_RTC_DRV_XGENE=y CONFIG_RTC_DRV_R7301=y CONFIG_RTC_DRV_STM32=y CONFIG_RTC_DRV_RTD119X=y CONFIG_RTC_DRV_ASPEED=y # CONFIG_RTC_DRV_TI_K3 is not set # # HID Sensor RTC drivers # CONFIG_RTC_DRV_GOLDFISH=y CONFIG_RTC_DRV_MSC313=y CONFIG_DMADEVICES=y CONFIG_DMADEVICES_DEBUG=y # CONFIG_DMADEVICES_VDEBUG is not set # # DMA Devices # CONFIG_ASYNC_TX_ENABLE_CHANNEL_SWITCH=y CONFIG_DMA_ENGINE=y CONFIG_DMA_VIRTUAL_CHANNELS=y CONFIG_DMA_OF=y # CONFIG_ALTERA_MSGDMA is not set # CONFIG_APPLE_ADMAC is not set CONFIG_AXI_DMAC=y # CONFIG_BCM_SBA_RAID is not set CONFIG_DMA_JZ4780=y CONFIG_DMA_SA11X0=y # CONFIG_DMA_SUN6I is not set CONFIG_DW_AXI_DMAC=y # CONFIG_EP93XX_DMA is not set CONFIG_FSL_EDMA=y # CONFIG_IMG_MDC_DMA is not set CONFIG_INTEL_IDMA64=y CONFIG_K3_DMA=y # CONFIG_MCF_EDMA is not set CONFIG_MILBEAUT_HDMAC=y # CONFIG_MILBEAUT_XDMAC is not set # CONFIG_MMP_PDMA is not set # CONFIG_MMP_TDMA is not set # CONFIG_MV_XOR is not set CONFIG_MXS_DMA=y CONFIG_NBPFAXI_DMA=y # CONFIG_STM32_DMA is not set # CONFIG_STM32_DMAMUX is not set # CONFIG_STM32_MDMA is not set # CONFIG_SPRD_DMA is not set CONFIG_S3C24XX_DMAC=y CONFIG_TEGRA20_APB_DMA=y CONFIG_TEGRA210_ADMA=y CONFIG_TIMB_DMA=y CONFIG_UNIPHIER_MDMAC=y CONFIG_UNIPHIER_XDMAC=y # CONFIG_XGENE_DMA is not set CONFIG_XILINX_ZYNQMP_DMA=y CONFIG_XILINX_ZYNQMP_DPDMA=y CONFIG_MTK_HSDMA=y CONFIG_MTK_CQDMA=y CONFIG_QCOM_ADM=y # CONFIG_QCOM_HIDMA_MGMT is not set CONFIG_QCOM_HIDMA=y CONFIG_DW_DMAC_CORE=y CONFIG_DW_DMAC=y CONFIG_RZN1_DMAMUX=y # CONFIG_SF_PDMA is not set CONFIG_RENESAS_DMA=y # CONFIG_SH_DMAE_BASE is not set # CONFIG_RCAR_DMAC is not set CONFIG_RENESAS_USB_DMAC=y # CONFIG_RZ_DMAC is not set CONFIG_TI_EDMA=y CONFIG_DMA_OMAP=y CONFIG_TI_DMA_CROSSBAR=y CONFIG_INTEL_LDMA=y # # DMA Clients # # CONFIG_ASYNC_TX_DMA is not set CONFIG_DMATEST=y CONFIG_DMA_ENGINE_RAID=y # # DMABUF options # CONFIG_SYNC_FILE=y CONFIG_SW_SYNC=y CONFIG_UDMABUF=y CONFIG_DMABUF_MOVE_NOTIFY=y CONFIG_DMABUF_DEBUG=y CONFIG_DMABUF_SELFTESTS=y CONFIG_DMABUF_HEAPS=y CONFIG_DMABUF_SYSFS_STATS=y CONFIG_DMABUF_HEAPS_SYSTEM=y # end of DMABUF options CONFIG_AUXDISPLAY=y CONFIG_CHARLCD=y CONFIG_LINEDISP=y # CONFIG_HD44780_COMMON is not set # CONFIG_HD44780 is not set CONFIG_IMG_ASCII_LCD=y CONFIG_LCD2S=y # CONFIG_PANEL_CHANGE_MESSAGE is not set # CONFIG_CHARLCD_BL_OFF is not set CONFIG_CHARLCD_BL_ON=y # CONFIG_CHARLCD_BL_FLASH is not set CONFIG_UIO=y # CONFIG_UIO_PDRV_GENIRQ is not set CONFIG_UIO_DMEM_GENIRQ=y # CONFIG_UIO_PRUSS is not set # CONFIG_VFIO is not set CONFIG_IRQ_BYPASS_MANAGER=y # CONFIG_VIRT_DRIVERS is not set CONFIG_VIRTIO_ANCHOR=y CONFIG_VIRTIO=y CONFIG_VIRTIO_MENU=y CONFIG_VIRTIO_VDPA=y CONFIG_VIRTIO_BALLOON=y CONFIG_VIRTIO_INPUT=y CONFIG_VIRTIO_MMIO=y CONFIG_VIRTIO_MMIO_CMDLINE_DEVICES=y CONFIG_VIRTIO_DMA_SHARED_BUFFER=y CONFIG_VDPA=y CONFIG_VDPA_USER=y CONFIG_VHOST_IOTLB=y CONFIG_VHOST=y CONFIG_VHOST_MENU=y CONFIG_VHOST_NET=y # CONFIG_VHOST_VSOCK is not set CONFIG_VHOST_VDPA=y CONFIG_VHOST_CROSS_ENDIAN_LEGACY=y # # Microsoft Hyper-V guest support # # end of Microsoft Hyper-V guest support CONFIG_GREYBUS=y # CONFIG_COMEDI is not set CONFIG_STAGING=y CONFIG_STAGING_MEDIA=y CONFIG_VIDEO_IMX_MEDIA=y # # i.MX5/6/7/8 Media Sub devices # # end of i.MX5/6/7/8 Media Sub devices CONFIG_VIDEO_IMX8MQ_MIPI_CSI2=y # CONFIG_VIDEO_MAX96712 is not set # CONFIG_VIDEO_MESON_VDEC is not set CONFIG_VIDEO_OMAP4=y CONFIG_VIDEO_ROCKCHIP_VDEC=y CONFIG_VIDEO_SUNXI=y CONFIG_VIDEO_SUNXI_CEDRUS=y # CONFIG_STAGING_MEDIA_DEPRECATED is not set CONFIG_MOST_COMPONENTS=y CONFIG_MOST_NET=y # CONFIG_MOST_VIDEO is not set CONFIG_MOST_DIM2=y CONFIG_MOST_I2C=y CONFIG_GREYBUS_AUDIO=y CONFIG_GREYBUS_AUDIO_APB_CODEC=y CONFIG_GREYBUS_BOOTROM=y CONFIG_GREYBUS_HID=y CONFIG_GREYBUS_LIGHT=y CONFIG_GREYBUS_LOG=y # CONFIG_GREYBUS_LOOPBACK is not set CONFIG_GREYBUS_POWER=y CONFIG_GREYBUS_RAW=y CONFIG_GREYBUS_VIBRATOR=y CONFIG_GREYBUS_BRIDGED_PHY=y # CONFIG_GREYBUS_GPIO is not set CONFIG_GREYBUS_I2C=y # CONFIG_GREYBUS_UART is not set CONFIG_GREYBUS_ARCHE=y # CONFIG_BCM_VIDEOCORE is not set # CONFIG_XIL_AXIS_FIFO is not set CONFIG_FIELDBUS_DEV=y # CONFIG_HMS_ANYBUSS_BUS is not set # CONFIG_GOLDFISH is not set CONFIG_CHROME_PLATFORMS=y # CONFIG_CROS_EC is not set # CONFIG_MELLANOX_PLATFORM is not set CONFIG_OLPC_XO175=y CONFIG_SURFACE_PLATFORMS=y # CONFIG_COMMON_CLK is not set # CONFIG_HWSPINLOCK is not set # # Clock Source drivers # CONFIG_TIMER_OF=y CONFIG_TIMER_PROBE=y CONFIG_CLKSRC_MMIO=y CONFIG_BCM2835_TIMER=y CONFIG_BCM_KONA_TIMER=y # CONFIG_DAVINCI_TIMER is not set CONFIG_DIGICOLOR_TIMER=y # CONFIG_OMAP_DM_TIMER is not set # CONFIG_DW_APB_TIMER is not set # CONFIG_FTTMR010_TIMER is not set CONFIG_IXP4XX_TIMER=y # CONFIG_MESON6_TIMER is not set # CONFIG_OWL_TIMER is not set # CONFIG_RDA_TIMER is not set CONFIG_SUN4I_TIMER=y CONFIG_TEGRA_TIMER=y CONFIG_TEGRA186_TIMER=y CONFIG_VT8500_TIMER=y CONFIG_NPCM7XX_TIMER=y # CONFIG_ASM9260_TIMER is not set # CONFIG_CLKSRC_DBX500_PRCMU is not set CONFIG_CLPS711X_TIMER=y CONFIG_MXS_TIMER=y CONFIG_NSPIRE_TIMER=y # CONFIG_INTEGRATOR_AP_TIMER is not set # CONFIG_CLKSRC_PISTACHIO is not set # CONFIG_CLKSRC_STM32_LP is not set CONFIG_ARMV7M_SYSTICK=y # CONFIG_ATMEL_PIT is not set CONFIG_ATMEL_ST=y # CONFIG_CLKSRC_SAMSUNG_PWM is not set CONFIG_FSL_FTM_TIMER=y # CONFIG_OXNAS_RPS_TIMER is not set CONFIG_MTK_TIMER=y CONFIG_CLKSRC_JCORE_PIT=y CONFIG_SH_TIMER_CMT=y CONFIG_SH_TIMER_MTU2=y CONFIG_RENESAS_OSTM=y CONFIG_SH_TIMER_TMU=y CONFIG_EM_TIMER_STI=y # CONFIG_CLKSRC_PXA is not set # CONFIG_TIMER_IMX_SYS_CTR is not set CONFIG_CLKSRC_ST_LPC=y CONFIG_GXP_TIMER=y CONFIG_MSC313E_TIMER=y # CONFIG_MICROCHIP_PIT64B is not set # CONFIG_GOLDFISH_TIMER is not set # end of Clock Source drivers CONFIG_MAILBOX=y CONFIG_IMX_MBOX=y CONFIG_PLATFORM_MHU=y CONFIG_ARMADA_37XX_RWTM_MBOX=y # CONFIG_ROCKCHIP_MBOX is not set # CONFIG_ALTERA_MBOX is not set CONFIG_MAILBOX_TEST=y CONFIG_POLARFIRE_SOC_MAILBOX=y CONFIG_QCOM_APCS_IPC=y # CONFIG_BCM_PDC_MBOX is not set # CONFIG_STM32_IPCC is not set CONFIG_MTK_ADSP_MBOX=y CONFIG_MTK_CMDQ_MBOX=y # CONFIG_SUN6I_MSGBOX is not set CONFIG_SPRD_MBOX=y CONFIG_QCOM_IPCC=y CONFIG_IOMMU_IOVA=y CONFIG_IOMMU_API=y CONFIG_IOMMU_SUPPORT=y # # Generic IOMMU Pagetable Support # CONFIG_IOMMU_IO_PGTABLE=y CONFIG_IOMMU_IO_PGTABLE_ARMV7S=y # CONFIG_IOMMU_IO_PGTABLE_ARMV7S_SELFTEST is not set # end of Generic IOMMU Pagetable Support CONFIG_IOMMU_DEBUGFS=y CONFIG_IOMMU_DEFAULT_DMA_STRICT=y # CONFIG_IOMMU_DEFAULT_DMA_LAZY is not set # CONFIG_IOMMU_DEFAULT_PASSTHROUGH is not set CONFIG_OF_IOMMU=y CONFIG_IOMMUFD=y CONFIG_OMAP_IOMMU=y # CONFIG_OMAP_IOMMU_DEBUG is not set # CONFIG_ROCKCHIP_IOMMU is not set CONFIG_SUN50I_IOMMU=y CONFIG_EXYNOS_IOMMU=y # CONFIG_EXYNOS_IOMMU_DEBUG is not set # CONFIG_S390_CCW_IOMMU is not set CONFIG_S390_AP_IOMMU=y CONFIG_MTK_IOMMU=y CONFIG_SPRD_IOMMU=y # # Remoteproc drivers # CONFIG_REMOTEPROC=y # CONFIG_REMOTEPROC_CDEV is not set # CONFIG_INGENIC_VPU_RPROC is not set CONFIG_MTK_SCP=y # CONFIG_MESON_MX_AO_ARC_REMOTEPROC is not set CONFIG_RCAR_REMOTEPROC=y # end of Remoteproc drivers # # Rpmsg drivers # CONFIG_RPMSG=y CONFIG_RPMSG_CHAR=y CONFIG_RPMSG_CTRL=y # CONFIG_RPMSG_NS is not set CONFIG_RPMSG_MTK_SCP=y CONFIG_RPMSG_QCOM_GLINK=y CONFIG_RPMSG_QCOM_GLINK_RPM=y # CONFIG_RPMSG_VIRTIO is not set # end of Rpmsg drivers CONFIG_SOUNDWIRE=y # # SoundWire Devices # CONFIG_SOUNDWIRE_QCOM=y # # SOC (System On Chip) specific Drivers # # # Amlogic SoC drivers # # CONFIG_MESON_CANVAS is not set CONFIG_MESON_CLK_MEASURE=y # CONFIG_MESON_GX_SOCINFO is not set CONFIG_MESON_MX_SOCINFO=y # end of Amlogic SoC drivers # # Apple SoC drivers # CONFIG_APPLE_RTKIT=y CONFIG_APPLE_SART=y # end of Apple SoC drivers # # ASPEED SoC drivers # # CONFIG_ASPEED_LPC_CTRL is not set CONFIG_ASPEED_LPC_SNOOP=y CONFIG_ASPEED_UART_ROUTING=y # CONFIG_ASPEED_P2A_CTRL is not set CONFIG_ASPEED_SOCINFO=y # end of ASPEED SoC drivers CONFIG_AT91_SOC_ID=y CONFIG_AT91_SOC_SFR=y # # Broadcom SoC drivers # CONFIG_BCM2835_POWER=y # CONFIG_SOC_BCM63XX is not set # CONFIG_SOC_BRCMSTB is not set # CONFIG_BCM_PMB is not set # end of Broadcom SoC drivers # # NXP/Freescale QorIQ SoC drivers # # CONFIG_QUICC_ENGINE is not set CONFIG_DPAA2_CONSOLE=y # end of NXP/Freescale QorIQ SoC drivers # # fujitsu SoC drivers # # end of fujitsu SoC drivers # # i.MX SoC drivers # # CONFIG_SOC_IMX8M is not set # CONFIG_SOC_IMX9 is not set # end of i.MX SoC drivers # # IXP4xx SoC drivers # # CONFIG_IXP4XX_QMGR is not set # CONFIG_IXP4XX_NPE is not set # end of IXP4xx SoC drivers # # Enable LiteX SoC Builder specific drivers # # CONFIG_LITEX_SOC_CONTROLLER is not set # end of Enable LiteX SoC Builder specific drivers # CONFIG_LOONGSON2_GUTS is not set # # MediaTek SoC drivers # CONFIG_MTK_CMDQ=y CONFIG_MTK_DEVAPC=y CONFIG_MTK_INFRACFG=y CONFIG_MTK_PMIC_WRAP=y CONFIG_MTK_SCPSYS=y CONFIG_MTK_MMSYS=y # CONFIG_MTK_SVS is not set # end of MediaTek SoC drivers # CONFIG_POLARFIRE_SOC_SYS_CTRL is not set # # Qualcomm SoC drivers # CONFIG_QCOM_COMMAND_DB=y # CONFIG_QCOM_GENI_SE is not set CONFIG_QCOM_GSBI=y CONFIG_QCOM_LLCC=y CONFIG_QCOM_PDR_HELPERS=y CONFIG_QCOM_QMI_HELPERS=y CONFIG_QCOM_RPMH=y # CONFIG_QCOM_RPMHPD is not set CONFIG_QCOM_SMD_RPM=y CONFIG_QCOM_SPM=y CONFIG_QCOM_WCNSS_CTRL=y CONFIG_QCOM_APR=y CONFIG_QCOM_ICC_BWMON=y # end of Qualcomm SoC drivers CONFIG_SOC_RENESAS=y CONFIG_RST_RCAR=y CONFIG_SYSC_RCAR=y CONFIG_SYSC_RCAR_GEN4=y CONFIG_SYSC_R8A77995=y # CONFIG_SYSC_R8A7794 is not set CONFIG_SYSC_R8A77990=y CONFIG_SYSC_R8A7779=y # CONFIG_SYSC_R8A7790 is not set # CONFIG_SYSC_R8A7795 is not set CONFIG_SYSC_R8A7791=y # CONFIG_SYSC_R8A77965 is not set CONFIG_SYSC_R8A77960=y CONFIG_SYSC_R8A77961=y CONFIG_SYSC_R8A779F0=y CONFIG_SYSC_R8A7792=y # CONFIG_SYSC_R8A77980 is not set CONFIG_SYSC_R8A77970=y CONFIG_SYSC_R8A779A0=y CONFIG_SYSC_R8A779G0=y CONFIG_SYSC_RMOBILE=y CONFIG_SYSC_R8A77470=y CONFIG_SYSC_R8A7745=y CONFIG_SYSC_R8A7742=y # CONFIG_SYSC_R8A7743 is not set CONFIG_SYSC_R8A774C0=y # CONFIG_SYSC_R8A774E1 is not set CONFIG_SYSC_R8A774A1=y CONFIG_SYSC_R8A774B1=y # CONFIG_ROCKCHIP_GRF is not set CONFIG_ROCKCHIP_IODOMAIN=y CONFIG_SOC_SAMSUNG=y # CONFIG_EXYNOS_CHIPID is not set CONFIG_EXYNOS_USI=y # CONFIG_EXYNOS_PM_DOMAINS is not set CONFIG_EXYNOS_REGULATOR_COUPLER=y CONFIG_SUNXI_SRAM=y CONFIG_SOC_TEGRA20_VOLTAGE_COUPLER=y CONFIG_SOC_TEGRA30_VOLTAGE_COUPLER=y # CONFIG_SOC_TI is not set CONFIG_UX500_SOC_ID=y # # Xilinx SoC drivers # # end of Xilinx SoC drivers # end of SOC (System On Chip) specific Drivers CONFIG_PM_DEVFREQ=y # # DEVFREQ Governors # CONFIG_DEVFREQ_GOV_SIMPLE_ONDEMAND=y CONFIG_DEVFREQ_GOV_PERFORMANCE=y CONFIG_DEVFREQ_GOV_POWERSAVE=y # CONFIG_DEVFREQ_GOV_USERSPACE is not set CONFIG_DEVFREQ_GOV_PASSIVE=y # # DEVFREQ Drivers # CONFIG_ARM_EXYNOS_BUS_DEVFREQ=y # CONFIG_ARM_IMX_BUS_DEVFREQ is not set CONFIG_ARM_MEDIATEK_CCI_DEVFREQ=y CONFIG_PM_DEVFREQ_EVENT=y CONFIG_DEVFREQ_EVENT_EXYNOS_NOCP=y CONFIG_DEVFREQ_EVENT_EXYNOS_PPMU=y CONFIG_DEVFREQ_EVENT_ROCKCHIP_DFI=y CONFIG_EXTCON=y # # Extcon Device Drivers # CONFIG_EXTCON_FSA9480=y CONFIG_EXTCON_GPIO=y CONFIG_EXTCON_MAX14577=y # CONFIG_EXTCON_MAX3355 is not set CONFIG_EXTCON_MAX77843=y CONFIG_EXTCON_PALMAS=y CONFIG_EXTCON_PTN5150=y CONFIG_EXTCON_QCOM_SPMI_MISC=y # CONFIG_EXTCON_RT8973A is not set # CONFIG_EXTCON_SM5502 is not set CONFIG_EXTCON_USB_GPIO=y CONFIG_MEMORY=y CONFIG_DDR=y CONFIG_ATMEL_SDRAMC=y # CONFIG_ATMEL_EBI is not set CONFIG_BRCMSTB_DPFE=y CONFIG_BRCMSTB_MEMC=y # CONFIG_BT1_L2_CTL is not set # CONFIG_TI_AEMIF is not set CONFIG_TI_EMIF=y # CONFIG_OMAP_GPMC is not set CONFIG_MVEBU_DEVBUS=y CONFIG_FSL_CORENET_CF=y CONFIG_FSL_IFC=y # CONFIG_JZ4780_NEMC is not set CONFIG_MTK_SMI=y # CONFIG_DA8XX_DDRCTL is not set # CONFIG_RENESAS_RPCIF is not set CONFIG_STM32_FMC2_EBI=y CONFIG_SAMSUNG_MC=y CONFIG_EXYNOS5422_DMC=y CONFIG_EXYNOS_SROM=y # CONFIG_IIO is not set # CONFIG_PWM is not set # # IRQ chip support # CONFIG_IRQCHIP=y # CONFIG_AL_FIC is not set CONFIG_JCORE_AIC=y # CONFIG_RENESAS_INTC_IRQPIN is not set CONFIG_RENESAS_IRQC=y # CONFIG_RENESAS_RZA1_IRQC is not set # CONFIG_RENESAS_RZG2L_IRQC is not set # CONFIG_SL28CPLD_INTC is not set CONFIG_TS4800_IRQ=y # CONFIG_XILINX_INTC is not set CONFIG_INGENIC_TCU_IRQ=y CONFIG_IRQ_UNIPHIER_AIDET=y CONFIG_MESON_IRQ_GPIO=y # CONFIG_IMX_IRQSTEER is not set # CONFIG_IMX_INTMUX is not set # CONFIG_IMX_MU_MSI is not set CONFIG_EXYNOS_IRQ_COMBINER=y CONFIG_MST_IRQ=y CONFIG_MCHP_EIC=y CONFIG_SUNPLUS_SP7021_INTC=y # end of IRQ chip support CONFIG_IPACK_BUS=y CONFIG_SERIAL_IPOCTAL=y CONFIG_RESET_CONTROLLER=y CONFIG_RESET_A10SR=y # CONFIG_RESET_ATH79 is not set # CONFIG_RESET_AXS10X is not set # CONFIG_RESET_BCM6345 is not set # CONFIG_RESET_BERLIN is not set # CONFIG_RESET_BRCMSTB is not set # CONFIG_RESET_BRCMSTB_RESCAL is not set # CONFIG_RESET_HSDK is not set CONFIG_RESET_IMX7=y # CONFIG_RESET_INTEL_GW is not set # CONFIG_RESET_K210 is not set CONFIG_RESET_LANTIQ=y # CONFIG_RESET_LPC18XX is not set CONFIG_RESET_MCHP_SPARX5=y CONFIG_RESET_MESON=y CONFIG_RESET_MESON_AUDIO_ARB=y CONFIG_RESET_NPCM=y # CONFIG_RESET_PISTACHIO is not set CONFIG_RESET_QCOM_AOSS=y # CONFIG_RESET_QCOM_PDC is not set # CONFIG_RESET_RASPBERRYPI is not set # CONFIG_RESET_RZG2L_USBPHY_CTRL is not set CONFIG_RESET_SCMI=y CONFIG_RESET_SIMPLE=y CONFIG_RESET_SOCFPGA=y CONFIG_RESET_STARFIVE_JH7100=y CONFIG_RESET_SUNPLUS=y # CONFIG_RESET_SUNXI is not set CONFIG_RESET_TI_SCI=y CONFIG_RESET_TI_SYSCON=y CONFIG_RESET_TI_TPS380X=y CONFIG_RESET_TN48M_CPLD=y CONFIG_RESET_UNIPHIER=y # CONFIG_RESET_UNIPHIER_GLUE is not set CONFIG_RESET_ZYNQ=y # CONFIG_COMMON_RESET_HI3660 is not set CONFIG_COMMON_RESET_HI6220=y # # PHY Subsystem # CONFIG_GENERIC_PHY=y CONFIG_GENERIC_PHY_MIPI_DPHY=y CONFIG_PHY_LPC18XX_USB_OTG=y # CONFIG_PHY_PISTACHIO_USB is not set CONFIG_PHY_XGENE=y CONFIG_PHY_CAN_TRANSCEIVER=y # CONFIG_PHY_SUN50I_USB3 is not set # CONFIG_PHY_MESON8_HDMI_TX is not set CONFIG_PHY_MESON_G12A_MIPI_DPHY_ANALOG=y # CONFIG_PHY_MESON_G12A_USB2 is not set CONFIG_PHY_MESON_G12A_USB3_PCIE=y CONFIG_PHY_MESON_AXG_PCIE=y # CONFIG_PHY_MESON_AXG_MIPI_PCIE_ANALOG is not set # CONFIG_PHY_MESON_AXG_MIPI_DPHY is not set # # PHY drivers for Broadcom platforms # CONFIG_PHY_BCM63XX_USBH=y # CONFIG_PHY_CYGNUS_PCIE is not set # CONFIG_PHY_BCM_SR_USB is not set CONFIG_BCM_KONA_USB2_PHY=y CONFIG_PHY_BCM_NS_USB2=y CONFIG_PHY_NS2_USB_DRD=y CONFIG_PHY_BRCM_SATA=y CONFIG_PHY_BRCM_USB=y CONFIG_PHY_BCM_SR_PCIE=y # end of PHY drivers for Broadcom platforms # CONFIG_PHY_CADENCE_DPHY is not set # CONFIG_PHY_CADENCE_DPHY_RX is not set CONFIG_PHY_CADENCE_SALVO=y CONFIG_PHY_FSL_IMX8MQ_USB=y CONFIG_PHY_MIXEL_LVDS_PHY=y # CONFIG_PHY_MIXEL_MIPI_DPHY is not set # CONFIG_PHY_FSL_IMX8M_PCIE is not set # CONFIG_PHY_FSL_LYNX_28G is not set CONFIG_PHY_HI6220_USB=y # CONFIG_PHY_HI3660_USB is not set # CONFIG_PHY_HI3670_USB is not set CONFIG_PHY_HI3670_PCIE=y CONFIG_PHY_HISTB_COMBPHY=y CONFIG_PHY_HISI_INNO_USB2=y # CONFIG_PHY_LANTIQ_VRX200_PCIE is not set # CONFIG_PHY_LANTIQ_RCU_USB2 is not set # CONFIG_ARMADA375_USBCLUSTER_PHY is not set # CONFIG_PHY_BERLIN_SATA is not set CONFIG_PHY_BERLIN_USB=y CONFIG_PHY_MVEBU_A3700_UTMI=y CONFIG_PHY_MVEBU_A38X_COMPHY=y CONFIG_PHY_PXA_28NM_HSIC=y CONFIG_PHY_PXA_28NM_USB2=y # CONFIG_PHY_PXA_USB is not set CONFIG_PHY_MMP3_USB=y # CONFIG_PHY_MMP3_HSIC is not set CONFIG_PHY_MTK_PCIE=y # CONFIG_PHY_MTK_TPHY is not set CONFIG_PHY_MTK_UFS=y CONFIG_PHY_MTK_XSPHY=y CONFIG_PHY_MTK_DP=y CONFIG_PHY_SPARX5_SERDES=y CONFIG_PHY_LAN966X_SERDES=y # CONFIG_PHY_OCELOT_SERDES is not set CONFIG_PHY_ATH79_USB=y CONFIG_PHY_QCOM_IPQ4019_USB=y # CONFIG_PHY_QCOM_QUSB2 is not set CONFIG_PHY_QCOM_USB_SNPS_FEMTO_V2=y CONFIG_PHY_QCOM_USB_HS_28NM=y CONFIG_PHY_QCOM_USB_SS=y CONFIG_PHY_QCOM_IPQ806X_USB=y # CONFIG_PHY_MT7621_PCI is not set # CONFIG_PHY_RALINK_USB is not set # CONFIG_PHY_R8A779F0_ETHERNET_SERDES is not set # CONFIG_PHY_RCAR_GEN3_USB3 is not set CONFIG_PHY_ROCKCHIP_DPHY_RX0=y CONFIG_PHY_ROCKCHIP_INNO_CSIDPHY=y CONFIG_PHY_ROCKCHIP_INNO_DSIDPHY=y CONFIG_PHY_ROCKCHIP_PCIE=y CONFIG_PHY_ROCKCHIP_SNPS_PCIE3=y CONFIG_PHY_ROCKCHIP_TYPEC=y CONFIG_PHY_EXYNOS_DP_VIDEO=y CONFIG_PHY_EXYNOS_MIPI_VIDEO=y CONFIG_PHY_EXYNOS_PCIE=y # CONFIG_PHY_SAMSUNG_UFS is not set # CONFIG_PHY_SAMSUNG_USB2 is not set CONFIG_PHY_UNIPHIER_USB2=y # CONFIG_PHY_UNIPHIER_USB3 is not set # CONFIG_PHY_UNIPHIER_PCIE is not set CONFIG_PHY_UNIPHIER_AHCI=y CONFIG_PHY_ST_SPEAR1310_MIPHY=y CONFIG_PHY_ST_SPEAR1340_MIPHY=y CONFIG_PHY_STIH407_USB=y CONFIG_PHY_SUNPLUS_USB=y CONFIG_PHY_TEGRA194_P2U=y CONFIG_PHY_DA8XX_USB=y CONFIG_OMAP_CONTROL_PHY=y CONFIG_TI_PIPE3=y CONFIG_PHY_INTEL_KEEMBAY_EMMC=y CONFIG_PHY_INTEL_KEEMBAY_USB=y CONFIG_PHY_INTEL_LGM_COMBO=y CONFIG_PHY_INTEL_LGM_EMMC=y CONFIG_PHY_INTEL_THUNDERBAY_EMMC=y CONFIG_PHY_XILINX_ZYNQMP=y # end of PHY Subsystem # CONFIG_POWERCAP is not set CONFIG_MCB=y CONFIG_MCB_LPC=y CONFIG_RAS=y # # Android # # CONFIG_ANDROID_BINDER_IPC is not set # end of Android CONFIG_DAX=y CONFIG_NVMEM=y CONFIG_NVMEM_SYSFS=y CONFIG_NVMEM_APPLE_EFUSES=y # CONFIG_NVMEM_BCM_OCOTP is not set CONFIG_NVMEM_BRCM_NVRAM=y CONFIG_NVMEM_IMX_IIM=y CONFIG_NVMEM_IMX_OCOTP=y # CONFIG_NVMEM_JZ4780_EFUSE is not set # CONFIG_NVMEM_LAN9662_OTPC is not set CONFIG_NVMEM_LAYERSCAPE_SFP=y CONFIG_NVMEM_LPC18XX_EEPROM=y # CONFIG_NVMEM_LPC18XX_OTP is not set # CONFIG_NVMEM_MESON_MX_EFUSE is not set CONFIG_NVMEM_MICROCHIP_OTPC=y CONFIG_NVMEM_MTK_EFUSE=y CONFIG_NVMEM_MXS_OCOTP=y CONFIG_NVMEM_NINTENDO_OTP=y CONFIG_NVMEM_QCOM_QFPROM=y CONFIG_NVMEM_RMEM=y CONFIG_NVMEM_ROCKCHIP_EFUSE=y CONFIG_NVMEM_ROCKCHIP_OTP=y # CONFIG_NVMEM_SC27XX_EFUSE is not set # CONFIG_NVMEM_SNVS_LPGPR is not set CONFIG_NVMEM_SPMI_SDAM=y CONFIG_NVMEM_SPRD_EFUSE=y # CONFIG_NVMEM_STM32_ROMEM is not set CONFIG_NVMEM_SUNPLUS_OCOTP=y # CONFIG_NVMEM_U_BOOT_ENV is not set # CONFIG_NVMEM_UNIPHIER_EFUSE is not set CONFIG_NVMEM_VF610_OCOTP=y # # HW tracing support # CONFIG_STM=y CONFIG_STM_PROTO_BASIC=y # CONFIG_STM_PROTO_SYS_T is not set CONFIG_STM_DUMMY=y # CONFIG_STM_SOURCE_CONSOLE is not set CONFIG_STM_SOURCE_HEARTBEAT=y CONFIG_STM_SOURCE_FTRACE=y # CONFIG_INTEL_TH is not set # end of HW tracing support # CONFIG_FPGA is not set # CONFIG_FSI is not set CONFIG_TEE=y CONFIG_MULTIPLEXER=y # # Multiplexer drivers # CONFIG_MUX_ADG792A=y CONFIG_MUX_GPIO=y CONFIG_MUX_MMIO=y # end of Multiplexer drivers CONFIG_PM_OPP=y # CONFIG_SIOX is not set CONFIG_SLIMBUS=y CONFIG_SLIM_QCOM_CTRL=y CONFIG_SLIM_QCOM_NGD_CTRL=y # CONFIG_INTERCONNECT is not set # CONFIG_COUNTER is not set CONFIG_MOST=y CONFIG_MOST_CDEV=y CONFIG_MOST_SND=y # CONFIG_PECI is not set CONFIG_HTE=y # end of Device Drivers # # File systems # CONFIG_VALIDATE_FS_PARSER=y CONFIG_FS_IOMAP=y # CONFIG_EXT2_FS is not set CONFIG_EXT3_FS=y # CONFIG_EXT3_FS_POSIX_ACL is not set # CONFIG_EXT3_FS_SECURITY is not set CONFIG_EXT4_FS=y CONFIG_EXT4_USE_FOR_EXT2=y CONFIG_EXT4_FS_POSIX_ACL=y CONFIG_EXT4_FS_SECURITY=y # CONFIG_EXT4_DEBUG is not set CONFIG_EXT4_KUNIT_TESTS=y CONFIG_JBD2=y CONFIG_JBD2_DEBUG=y CONFIG_FS_MBCACHE=y CONFIG_REISERFS_FS=y # CONFIG_REISERFS_CHECK is not set CONFIG_REISERFS_PROC_INFO=y CONFIG_REISERFS_FS_XATTR=y CONFIG_REISERFS_FS_POSIX_ACL=y CONFIG_REISERFS_FS_SECURITY=y # CONFIG_JFS_FS is not set # CONFIG_XFS_FS is not set CONFIG_GFS2_FS=y CONFIG_GFS2_FS_LOCKING_DLM=y CONFIG_OCFS2_FS=y CONFIG_OCFS2_FS_O2CB=y CONFIG_OCFS2_FS_USERSPACE_CLUSTER=y CONFIG_OCFS2_FS_STATS=y CONFIG_OCFS2_DEBUG_MASKLOG=y # CONFIG_OCFS2_DEBUG_FS is not set CONFIG_NILFS2_FS=y # CONFIG_F2FS_FS is not set # CONFIG_ZONEFS_FS is not set CONFIG_FS_POSIX_ACL=y CONFIG_EXPORTFS=y CONFIG_EXPORTFS_BLOCK_OPS=y CONFIG_FILE_LOCKING=y CONFIG_FS_ENCRYPTION=y CONFIG_FS_ENCRYPTION_ALGS=y CONFIG_FS_ENCRYPTION_INLINE_CRYPT=y CONFIG_FS_VERITY=y # CONFIG_FS_VERITY_DEBUG is not set # CONFIG_FS_VERITY_BUILTIN_SIGNATURES is not set CONFIG_FSNOTIFY=y CONFIG_DNOTIFY=y # CONFIG_INOTIFY_USER is not set CONFIG_FANOTIFY=y CONFIG_QUOTA=y CONFIG_QUOTA_NETLINK_INTERFACE=y CONFIG_PRINT_QUOTA_WARNING=y CONFIG_QUOTA_DEBUG=y CONFIG_QUOTA_TREE=y CONFIG_QFMT_V1=y CONFIG_QFMT_V2=y CONFIG_QUOTACTL=y CONFIG_AUTOFS4_FS=y CONFIG_AUTOFS_FS=y # CONFIG_FUSE_FS is not set # CONFIG_OVERLAY_FS is not set # # Caches # CONFIG_NETFS_SUPPORT=y CONFIG_NETFS_STATS=y CONFIG_FSCACHE=y # CONFIG_FSCACHE_STATS is not set CONFIG_FSCACHE_DEBUG=y CONFIG_CACHEFILES=y # CONFIG_CACHEFILES_DEBUG is not set # CONFIG_CACHEFILES_ERROR_INJECTION is not set # CONFIG_CACHEFILES_ONDEMAND is not set # end of Caches # # CD-ROM/DVD Filesystems # CONFIG_ISO9660_FS=y # CONFIG_JOLIET is not set # CONFIG_ZISOFS is not set CONFIG_UDF_FS=y # end of CD-ROM/DVD Filesystems # # DOS/FAT/EXFAT/NT Filesystems # CONFIG_FAT_FS=y CONFIG_MSDOS_FS=y CONFIG_VFAT_FS=y CONFIG_FAT_DEFAULT_CODEPAGE=437 CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" # CONFIG_FAT_DEFAULT_UTF8 is not set CONFIG_FAT_KUNIT_TEST=y # CONFIG_EXFAT_FS is not set # CONFIG_NTFS_FS is not set CONFIG_NTFS3_FS=y # CONFIG_NTFS3_LZX_XPRESS is not set # CONFIG_NTFS3_FS_POSIX_ACL is not set # end of DOS/FAT/EXFAT/NT Filesystems # # Pseudo filesystems # CONFIG_PROC_FS=y # CONFIG_PROC_KCORE is not set CONFIG_PROC_SYSCTL=y CONFIG_PROC_PAGE_MONITOR=y CONFIG_PROC_CHILDREN=y CONFIG_KERNFS=y CONFIG_SYSFS=y CONFIG_TMPFS=y # CONFIG_TMPFS_POSIX_ACL is not set CONFIG_TMPFS_XATTR=y CONFIG_MEMFD_CREATE=y CONFIG_CONFIGFS_FS=y # end of Pseudo filesystems # CONFIG_MISC_FILESYSTEMS is not set CONFIG_NETWORK_FILESYSTEMS=y CONFIG_NFS_FS=y CONFIG_NFS_V2=y CONFIG_NFS_V3=y # CONFIG_NFS_V3_ACL is not set # CONFIG_NFS_V4 is not set # CONFIG_ROOT_NFS is not set # CONFIG_NFS_FSCACHE is not set # CONFIG_NFS_DISABLE_UDP_SUPPORT is not set CONFIG_NFSD=y # CONFIG_NFSD_V2 is not set # CONFIG_NFSD_V3_ACL is not set CONFIG_NFSD_V4=y CONFIG_NFSD_PNFS=y CONFIG_NFSD_BLOCKLAYOUT=y # CONFIG_NFSD_SCSILAYOUT is not set # CONFIG_NFSD_FLEXFILELAYOUT is not set CONFIG_GRACE_PERIOD=y CONFIG_LOCKD=y CONFIG_LOCKD_V4=y CONFIG_NFS_COMMON=y CONFIG_SUNRPC=y CONFIG_SUNRPC_GSS=y CONFIG_RPCSEC_GSS_KRB5=y CONFIG_SUNRPC_DISABLE_INSECURE_ENCTYPES=y # CONFIG_SUNRPC_DEBUG is not set # CONFIG_SUNRPC_XPRT_RDMA is not set CONFIG_CEPH_FS=y CONFIG_CEPH_FSCACHE=y CONFIG_CEPH_FS_POSIX_ACL=y CONFIG_CIFS=y CONFIG_CIFS_STATS2=y # CONFIG_CIFS_ALLOW_INSECURE_LEGACY is not set CONFIG_CIFS_UPCALL=y CONFIG_CIFS_XATTR=y # CONFIG_CIFS_DEBUG is not set # CONFIG_CIFS_DFS_UPCALL is not set CONFIG_CIFS_SWN_UPCALL=y # CONFIG_CIFS_SMB_DIRECT is not set # CONFIG_CIFS_FSCACHE is not set CONFIG_CIFS_ROOT=y # CONFIG_SMB_SERVER is not set CONFIG_SMBFS_COMMON=y CONFIG_CODA_FS=y CONFIG_AFS_FS=y CONFIG_AFS_DEBUG=y # CONFIG_AFS_FSCACHE is not set # CONFIG_AFS_DEBUG_CURSOR is not set CONFIG_9P_FS=y CONFIG_9P_FSCACHE=y CONFIG_9P_FS_POSIX_ACL=y CONFIG_9P_FS_SECURITY=y CONFIG_NLS=y CONFIG_NLS_DEFAULT="iso8859-1" CONFIG_NLS_CODEPAGE_437=y # CONFIG_NLS_CODEPAGE_737 is not set CONFIG_NLS_CODEPAGE_775=y # CONFIG_NLS_CODEPAGE_850 is not set # CONFIG_NLS_CODEPAGE_852 is not set CONFIG_NLS_CODEPAGE_855=y # CONFIG_NLS_CODEPAGE_857 is not set CONFIG_NLS_CODEPAGE_860=y # CONFIG_NLS_CODEPAGE_861 is not set CONFIG_NLS_CODEPAGE_862=y CONFIG_NLS_CODEPAGE_863=y # CONFIG_NLS_CODEPAGE_864 is not set CONFIG_NLS_CODEPAGE_865=y CONFIG_NLS_CODEPAGE_866=y CONFIG_NLS_CODEPAGE_869=y CONFIG_NLS_CODEPAGE_936=y CONFIG_NLS_CODEPAGE_950=y CONFIG_NLS_CODEPAGE_932=y CONFIG_NLS_CODEPAGE_949=y # CONFIG_NLS_CODEPAGE_874 is not set CONFIG_NLS_ISO8859_8=y CONFIG_NLS_CODEPAGE_1250=y CONFIG_NLS_CODEPAGE_1251=y CONFIG_NLS_ASCII=y CONFIG_NLS_ISO8859_1=y # CONFIG_NLS_ISO8859_2 is not set # CONFIG_NLS_ISO8859_3 is not set CONFIG_NLS_ISO8859_4=y # CONFIG_NLS_ISO8859_5 is not set CONFIG_NLS_ISO8859_6=y CONFIG_NLS_ISO8859_7=y CONFIG_NLS_ISO8859_9=y CONFIG_NLS_ISO8859_13=y CONFIG_NLS_ISO8859_14=y CONFIG_NLS_ISO8859_15=y CONFIG_NLS_KOI8_R=y CONFIG_NLS_KOI8_U=y CONFIG_NLS_MAC_ROMAN=y CONFIG_NLS_MAC_CELTIC=y CONFIG_NLS_MAC_CENTEURO=y CONFIG_NLS_MAC_CROATIAN=y # CONFIG_NLS_MAC_CYRILLIC is not set CONFIG_NLS_MAC_GAELIC=y CONFIG_NLS_MAC_GREEK=y CONFIG_NLS_MAC_ICELAND=y CONFIG_NLS_MAC_INUIT=y # CONFIG_NLS_MAC_ROMANIAN is not set CONFIG_NLS_MAC_TURKISH=y CONFIG_NLS_UTF8=y CONFIG_DLM=y # CONFIG_DLM_DEPRECATED_API is not set # CONFIG_DLM_DEBUG is not set # CONFIG_UNICODE is not set CONFIG_IO_WQ=y # end of File systems # # Security options # CONFIG_KEYS=y # CONFIG_KEYS_REQUEST_CACHE is not set # CONFIG_PERSISTENT_KEYRINGS is not set CONFIG_BIG_KEYS=y # CONFIG_TRUSTED_KEYS is not set # CONFIG_ENCRYPTED_KEYS is not set # CONFIG_KEY_DH_OPERATIONS is not set # CONFIG_SECURITY_DMESG_RESTRICT is not set # CONFIG_SECURITY is not set # CONFIG_SECURITYFS is not set CONFIG_HAVE_HARDENED_USERCOPY_ALLOCATOR=y # CONFIG_HARDENED_USERCOPY is not set CONFIG_STATIC_USERMODEHELPER=y CONFIG_STATIC_USERMODEHELPER_PATH="/sbin/usermode-helper" CONFIG_DEFAULT_SECURITY_DAC=y CONFIG_LSM="landlock,lockdown,yama,loadpin,safesetid,integrity,bpf" # # Kernel hardening options # # # Memory initialization # CONFIG_CC_HAS_AUTO_VAR_INIT_PATTERN=y CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO_BARE=y CONFIG_CC_HAS_AUTO_VAR_INIT_ZERO=y # CONFIG_INIT_STACK_NONE is not set # CONFIG_INIT_STACK_ALL_PATTERN is not set CONFIG_INIT_STACK_ALL_ZERO=y CONFIG_INIT_ON_ALLOC_DEFAULT_ON=y # CONFIG_INIT_ON_FREE_DEFAULT_ON is not set # end of Memory initialization CONFIG_CC_HAS_RANDSTRUCT=y CONFIG_RANDSTRUCT_NONE=y # CONFIG_RANDSTRUCT_FULL is not set # end of Kernel hardening options # end of Security options CONFIG_XOR_BLOCKS=y CONFIG_ASYNC_CORE=y CONFIG_ASYNC_MEMCPY=y CONFIG_ASYNC_XOR=y CONFIG_ASYNC_PQ=y CONFIG_ASYNC_RAID6_RECOV=y CONFIG_CRYPTO=y # # Crypto core or helper # # CONFIG_CRYPTO_FIPS is not set CONFIG_CRYPTO_ALGAPI=y CONFIG_CRYPTO_ALGAPI2=y CONFIG_CRYPTO_AEAD=y CONFIG_CRYPTO_AEAD2=y CONFIG_CRYPTO_SKCIPHER=y CONFIG_CRYPTO_SKCIPHER2=y CONFIG_CRYPTO_HASH=y CONFIG_CRYPTO_HASH2=y CONFIG_CRYPTO_RNG=y CONFIG_CRYPTO_RNG2=y CONFIG_CRYPTO_RNG_DEFAULT=y CONFIG_CRYPTO_AKCIPHER2=y CONFIG_CRYPTO_AKCIPHER=y CONFIG_CRYPTO_KPP2=y CONFIG_CRYPTO_KPP=y CONFIG_CRYPTO_ACOMP2=y CONFIG_CRYPTO_MANAGER=y CONFIG_CRYPTO_MANAGER2=y # CONFIG_CRYPTO_USER is not set # CONFIG_CRYPTO_MANAGER_DISABLE_TESTS is not set CONFIG_CRYPTO_MANAGER_EXTRA_TESTS=y CONFIG_CRYPTO_NULL=y CONFIG_CRYPTO_NULL2=y # CONFIG_CRYPTO_PCRYPT is not set # CONFIG_CRYPTO_CRYPTD is not set CONFIG_CRYPTO_AUTHENC=y # end of Crypto core or helper # # Public-key cryptography # CONFIG_CRYPTO_RSA=y CONFIG_CRYPTO_DH=y CONFIG_CRYPTO_DH_RFC7919_GROUPS=y CONFIG_CRYPTO_ECC=y CONFIG_CRYPTO_ECDH=y # CONFIG_CRYPTO_ECDSA is not set # CONFIG_CRYPTO_ECRDSA is not set # CONFIG_CRYPTO_SM2 is not set # CONFIG_CRYPTO_CURVE25519 is not set # end of Public-key cryptography # # Block ciphers # CONFIG_CRYPTO_AES=y # CONFIG_CRYPTO_AES_TI is not set # CONFIG_CRYPTO_ARIA is not set CONFIG_CRYPTO_BLOWFISH=y CONFIG_CRYPTO_BLOWFISH_COMMON=y CONFIG_CRYPTO_CAMELLIA=y CONFIG_CRYPTO_CAST_COMMON=y CONFIG_CRYPTO_CAST5=y CONFIG_CRYPTO_CAST6=y CONFIG_CRYPTO_DES=y # CONFIG_CRYPTO_FCRYPT is not set # CONFIG_CRYPTO_SERPENT is not set # CONFIG_CRYPTO_SM4_GENERIC is not set # CONFIG_CRYPTO_TWOFISH is not set # end of Block ciphers # # Length-preserving ciphers and modes # # CONFIG_CRYPTO_ADIANTUM is not set CONFIG_CRYPTO_CHACHA20=y CONFIG_CRYPTO_CBC=y CONFIG_CRYPTO_CFB=y CONFIG_CRYPTO_CTR=y CONFIG_CRYPTO_CTS=y CONFIG_CRYPTO_ECB=y # CONFIG_CRYPTO_HCTR2 is not set CONFIG_CRYPTO_KEYWRAP=y # CONFIG_CRYPTO_LRW is not set # CONFIG_CRYPTO_OFB is not set # CONFIG_CRYPTO_PCBC is not set CONFIG_CRYPTO_XTS=y # end of Length-preserving ciphers and modes # # AEAD (authenticated encryption with associated data) ciphers # CONFIG_CRYPTO_AEGIS128=y CONFIG_CRYPTO_CHACHA20POLY1305=y CONFIG_CRYPTO_CCM=y CONFIG_CRYPTO_GCM=y CONFIG_CRYPTO_SEQIV=y CONFIG_CRYPTO_ECHAINIV=y CONFIG_CRYPTO_ESSIV=y # end of AEAD (authenticated encryption with associated data) ciphers # # Hashes, digests, and MACs # # CONFIG_CRYPTO_BLAKE2B is not set CONFIG_CRYPTO_CMAC=y CONFIG_CRYPTO_GHASH=y CONFIG_CRYPTO_HMAC=y CONFIG_CRYPTO_MD4=y CONFIG_CRYPTO_MD5=y CONFIG_CRYPTO_MICHAEL_MIC=y CONFIG_CRYPTO_POLY1305=y CONFIG_CRYPTO_RMD160=y CONFIG_CRYPTO_SHA1=y CONFIG_CRYPTO_SHA256=y CONFIG_CRYPTO_SHA512=y # CONFIG_CRYPTO_SHA3 is not set CONFIG_CRYPTO_SM3=y CONFIG_CRYPTO_SM3_GENERIC=y CONFIG_CRYPTO_STREEBOG=y CONFIG_CRYPTO_VMAC=y CONFIG_CRYPTO_WP512=y # CONFIG_CRYPTO_XCBC is not set # CONFIG_CRYPTO_XXHASH is not set # end of Hashes, digests, and MACs # # CRCs (cyclic redundancy checks) # CONFIG_CRYPTO_CRC32C=y # CONFIG_CRYPTO_CRC32 is not set CONFIG_CRYPTO_CRCT10DIF=y CONFIG_CRYPTO_CRC64_ROCKSOFT=y # end of CRCs (cyclic redundancy checks) # # Compression # CONFIG_CRYPTO_DEFLATE=y CONFIG_CRYPTO_LZO=y CONFIG_CRYPTO_842=y CONFIG_CRYPTO_LZ4=y CONFIG_CRYPTO_LZ4HC=y # CONFIG_CRYPTO_ZSTD is not set # end of Compression # # Random number generation # CONFIG_CRYPTO_ANSI_CPRNG=y CONFIG_CRYPTO_DRBG_MENU=y CONFIG_CRYPTO_DRBG_HMAC=y # CONFIG_CRYPTO_DRBG_HASH is not set # CONFIG_CRYPTO_DRBG_CTR is not set CONFIG_CRYPTO_DRBG=y CONFIG_CRYPTO_JITTERENTROPY=y # end of Random number generation # # Userspace interface # CONFIG_CRYPTO_USER_API=y CONFIG_CRYPTO_USER_API_HASH=y CONFIG_CRYPTO_USER_API_SKCIPHER=y CONFIG_CRYPTO_USER_API_RNG=y # CONFIG_CRYPTO_USER_API_RNG_CAVP is not set CONFIG_CRYPTO_USER_API_AEAD=y # CONFIG_CRYPTO_USER_API_ENABLE_OBSOLETE is not set # end of Userspace interface CONFIG_CRYPTO_HASH_INFO=y # CONFIG_CRYPTO_HW is not set CONFIG_ASYMMETRIC_KEY_TYPE=y CONFIG_ASYMMETRIC_PUBLIC_KEY_SUBTYPE=y CONFIG_X509_CERTIFICATE_PARSER=y CONFIG_PKCS8_PRIVATE_KEY_PARSER=y CONFIG_PKCS7_MESSAGE_PARSER=y CONFIG_PKCS7_TEST_KEY=y CONFIG_SIGNED_PE_FILE_VERIFICATION=y CONFIG_FIPS_SIGNATURE_SELFTEST=y # # Certificates for signature checking # CONFIG_SYSTEM_TRUSTED_KEYRING=y CONFIG_SYSTEM_TRUSTED_KEYS="" CONFIG_SYSTEM_EXTRA_CERTIFICATE=y CONFIG_SYSTEM_EXTRA_CERTIFICATE_SIZE=4096 CONFIG_SECONDARY_TRUSTED_KEYRING=y CONFIG_SYSTEM_BLACKLIST_KEYRING=y CONFIG_SYSTEM_BLACKLIST_HASH_LIST="" CONFIG_SYSTEM_REVOCATION_LIST=y CONFIG_SYSTEM_REVOCATION_KEYS="" CONFIG_SYSTEM_BLACKLIST_AUTH_UPDATE=y # end of Certificates for signature checking CONFIG_BINARY_PRINTF=y # # Library routines # CONFIG_RAID6_PQ=y # CONFIG_RAID6_PQ_BENCHMARK is not set CONFIG_LINEAR_RANGES=y # CONFIG_PACKING is not set CONFIG_BITREVERSE=y CONFIG_GENERIC_STRNCPY_FROM_USER=y CONFIG_GENERIC_STRNLEN_USER=y CONFIG_GENERIC_NET_UTILS=y CONFIG_CORDIC=y CONFIG_PRIME_NUMBERS=y CONFIG_RATIONAL=y CONFIG_GENERIC_PCI_IOMAP=y CONFIG_GENERIC_IOMAP=y CONFIG_STMP_DEVICE=y # # Crypto library routines # CONFIG_CRYPTO_LIB_UTILS=y CONFIG_CRYPTO_LIB_AES=y CONFIG_CRYPTO_LIB_ARC4=y CONFIG_CRYPTO_LIB_GF128MUL=y CONFIG_CRYPTO_LIB_BLAKE2S_GENERIC=y CONFIG_CRYPTO_LIB_CHACHA_GENERIC=y CONFIG_CRYPTO_LIB_CHACHA=y CONFIG_CRYPTO_LIB_CURVE25519_GENERIC=y CONFIG_CRYPTO_LIB_CURVE25519=y CONFIG_CRYPTO_LIB_DES=y CONFIG_CRYPTO_LIB_POLY1305_RSIZE=1 CONFIG_CRYPTO_LIB_POLY1305_GENERIC=y CONFIG_CRYPTO_LIB_POLY1305=y CONFIG_CRYPTO_LIB_CHACHA20POLY1305=y CONFIG_CRYPTO_LIB_SHA1=y CONFIG_CRYPTO_LIB_SHA256=y # end of Crypto library routines CONFIG_CRC_CCITT=y CONFIG_CRC16=y CONFIG_CRC_T10DIF=y CONFIG_CRC64_ROCKSOFT=y CONFIG_CRC_ITU_T=y CONFIG_CRC32=y # CONFIG_CRC32_SELFTEST is not set # CONFIG_CRC32_SLICEBY8 is not set CONFIG_CRC32_SLICEBY4=y # CONFIG_CRC32_SARWATE is not set # CONFIG_CRC32_BIT is not set CONFIG_CRC64=y # CONFIG_CRC4 is not set CONFIG_CRC7=y CONFIG_LIBCRC32C=y CONFIG_CRC8=y CONFIG_XXHASH=y CONFIG_AUDIT_GENERIC=y # CONFIG_RANDOM32_SELFTEST is not set CONFIG_842_COMPRESS=y CONFIG_842_DECOMPRESS=y CONFIG_ZLIB_INFLATE=y CONFIG_ZLIB_DEFLATE=y CONFIG_LZO_COMPRESS=y CONFIG_LZO_DECOMPRESS=y CONFIG_LZ4_COMPRESS=y CONFIG_LZ4HC_COMPRESS=y CONFIG_LZ4_DECOMPRESS=y CONFIG_ZSTD_COMMON=y CONFIG_ZSTD_DECOMPRESS=y # CONFIG_XZ_DEC is not set CONFIG_DECOMPRESS_BZIP2=y CONFIG_DECOMPRESS_LZO=y CONFIG_GENERIC_ALLOCATOR=y CONFIG_REED_SOLOMON=y CONFIG_REED_SOLOMON_DEC8=y CONFIG_REED_SOLOMON_DEC16=y CONFIG_BCH=y CONFIG_TEXTSEARCH=y CONFIG_TEXTSEARCH_KMP=y CONFIG_TEXTSEARCH_BM=y CONFIG_TEXTSEARCH_FSM=y CONFIG_INTERVAL_TREE=y CONFIG_INTERVAL_TREE_SPAN_ITER=y CONFIG_XARRAY_MULTI=y CONFIG_ASSOCIATIVE_ARRAY=y CONFIG_HAS_IOMEM=y CONFIG_HAS_IOPORT_MAP=y CONFIG_HAS_DMA=y CONFIG_DMA_OPS=y CONFIG_NEED_SG_DMA_LENGTH=y CONFIG_DMA_DECLARE_COHERENT=y CONFIG_ARCH_HAS_SYNC_DMA_FOR_DEVICE=y CONFIG_DMA_GLOBAL_POOL=y # CONFIG_DMA_API_DEBUG is not set # CONFIG_DMA_MAP_BENCHMARK is not set CONFIG_SGL_ALLOC=y # CONFIG_CPUMASK_OFFSTACK is not set CONFIG_CPU_RMAP=y CONFIG_DQL=y CONFIG_GLOB=y # CONFIG_GLOB_SELFTEST is not set CONFIG_NLATTR=y CONFIG_GENERIC_ATOMIC64=y CONFIG_CLZ_TAB=y CONFIG_IRQ_POLL=y CONFIG_MPILIB=y CONFIG_DIMLIB=y CONFIG_LIBFDT=y CONFIG_OID_REGISTRY=y CONFIG_SG_POOL=y CONFIG_STACKDEPOT=y CONFIG_REF_TRACKER=y CONFIG_SBITMAP=y # CONFIG_PARMAN is not set CONFIG_OBJAGG=y # end of Library routines CONFIG_POLYNOMIAL=y # # Kernel hacking # # # printk and dmesg options # CONFIG_PRINTK_TIME=y # CONFIG_PRINTK_CALLER is not set CONFIG_STACKTRACE_BUILD_ID=y CONFIG_CONSOLE_LOGLEVEL_DEFAULT=7 CONFIG_CONSOLE_LOGLEVEL_QUIET=4 CONFIG_MESSAGE_LOGLEVEL_DEFAULT=4 CONFIG_DYNAMIC_DEBUG=y CONFIG_DYNAMIC_DEBUG_CORE=y # CONFIG_SYMBOLIC_ERRNAME is not set CONFIG_DEBUG_BUGVERBOSE=y # end of printk and dmesg options CONFIG_DEBUG_KERNEL=y CONFIG_DEBUG_MISC=y # # Compile-time checks and compiler options # CONFIG_DEBUG_INFO=y CONFIG_AS_HAS_NON_CONST_LEB128=y # CONFIG_DEBUG_INFO_NONE is not set CONFIG_DEBUG_INFO_DWARF_TOOLCHAIN_DEFAULT=y # CONFIG_DEBUG_INFO_DWARF4 is not set # CONFIG_DEBUG_INFO_DWARF5 is not set # CONFIG_DEBUG_INFO_REDUCED is not set CONFIG_DEBUG_INFO_COMPRESSED_NONE=y # CONFIG_DEBUG_INFO_COMPRESSED_ZLIB is not set CONFIG_DEBUG_INFO_SPLIT=y CONFIG_PAHOLE_HAS_SPLIT_BTF=y CONFIG_PAHOLE_HAS_BTF_TAG=y # CONFIG_GDB_SCRIPTS is not set CONFIG_FRAME_WARN=1024 CONFIG_STRIP_ASM_SYMS=y CONFIG_HEADERS_INSTALL=y CONFIG_SECTION_MISMATCH_WARN_ONLY=y CONFIG_DEBUG_FORCE_WEAK_PER_CPU=y # end of Compile-time checks and compiler options # # Generic Kernel Debugging Instruments # CONFIG_MAGIC_SYSRQ=y CONFIG_MAGIC_SYSRQ_DEFAULT_ENABLE=0x1 # CONFIG_MAGIC_SYSRQ_SERIAL is not set CONFIG_DEBUG_FS=y # CONFIG_DEBUG_FS_ALLOW_ALL is not set CONFIG_DEBUG_FS_DISALLOW_MOUNT=y # CONFIG_DEBUG_FS_ALLOW_NONE is not set CONFIG_HAVE_ARCH_KGDB=y CONFIG_KGDB=y CONFIG_KGDB_SERIAL_CONSOLE=y CONFIG_KGDB_TESTS=y CONFIG_KGDB_TESTS_ON_BOOT=y CONFIG_KGDB_TESTS_BOOT_STRING="V1F100" CONFIG_KGDB_KDB=y CONFIG_KDB_DEFAULT_ENABLE=0x1 CONFIG_KDB_KEYBOARD=y CONFIG_KDB_CONTINUE_CATASTROPHIC=0 # CONFIG_UBSAN is not set # end of Generic Kernel Debugging Instruments # # Networking Debugging # # CONFIG_NET_DEV_REFCNT_TRACKER is not set CONFIG_NET_NS_REFCNT_TRACKER=y CONFIG_DEBUG_NET=y # end of Networking Debugging # # Memory Debugging # CONFIG_PAGE_EXTENSION=y CONFIG_DEBUG_PAGEALLOC=y CONFIG_DEBUG_PAGEALLOC_ENABLE_DEFAULT=y CONFIG_SLUB_DEBUG=y # CONFIG_SLUB_DEBUG_ON is not set # CONFIG_PAGE_OWNER is not set CONFIG_PAGE_POISONING=y CONFIG_DEBUG_PAGE_REF=y CONFIG_DEBUG_OBJECTS=y CONFIG_DEBUG_OBJECTS_SELFTEST=y # CONFIG_DEBUG_OBJECTS_FREE is not set CONFIG_DEBUG_OBJECTS_TIMERS=y # CONFIG_DEBUG_OBJECTS_WORK is not set # CONFIG_DEBUG_OBJECTS_RCU_HEAD is not set # CONFIG_DEBUG_OBJECTS_PERCPU_COUNTER is not set CONFIG_DEBUG_OBJECTS_ENABLE_DEFAULT=1 # CONFIG_SHRINKER_DEBUG is not set CONFIG_DEBUG_STACK_USAGE=y CONFIG_SCHED_STACK_END_CHECK=y # CONFIG_DEBUG_VM is not set CONFIG_DEBUG_MEMORY_INIT=y CONFIG_DEBUG_PER_CPU_MAPS=y CONFIG_CC_HAS_KASAN_GENERIC=y CONFIG_CC_HAS_WORKING_NOSANITIZE_ADDRESS=y # end of Memory Debugging # CONFIG_DEBUG_SHIRQ is not set # # Debug Oops, Lockups and Hangs # # CONFIG_PANIC_ON_OOPS is not set CONFIG_PANIC_ON_OOPS_VALUE=0 CONFIG_PANIC_TIMEOUT=0 CONFIG_LOCKUP_DETECTOR=y CONFIG_SOFTLOCKUP_DETECTOR=y CONFIG_BOOTPARAM_SOFTLOCKUP_PANIC=y # CONFIG_DETECT_HUNG_TASK is not set # CONFIG_WQ_WATCHDOG is not set # end of Debug Oops, Lockups and Hangs # # Scheduler Debugging # # CONFIG_SCHED_DEBUG is not set CONFIG_SCHED_INFO=y CONFIG_SCHEDSTATS=y # end of Scheduler Debugging CONFIG_DEBUG_TIMEKEEPING=y # # Lock Debugging (spinlocks, mutexes, etc...) # CONFIG_LOCK_DEBUGGING_SUPPORT=y CONFIG_PROVE_LOCKING=y # CONFIG_PROVE_RAW_LOCK_NESTING is not set CONFIG_LOCK_STAT=y CONFIG_DEBUG_RT_MUTEXES=y CONFIG_DEBUG_SPINLOCK=y CONFIG_DEBUG_MUTEXES=y CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y CONFIG_DEBUG_RWSEMS=y CONFIG_DEBUG_LOCK_ALLOC=y CONFIG_LOCKDEP=y CONFIG_LOCKDEP_BITS=15 CONFIG_LOCKDEP_CHAINS_BITS=16 CONFIG_LOCKDEP_STACK_TRACE_BITS=19 CONFIG_LOCKDEP_STACK_TRACE_HASH_BITS=14 CONFIG_LOCKDEP_CIRCULAR_QUEUE_BITS=12 CONFIG_DEBUG_LOCKDEP=y # CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set CONFIG_LOCK_TORTURE_TEST=y CONFIG_WW_MUTEX_SELFTEST=y CONFIG_SCF_TORTURE_TEST=y # end of Lock Debugging (spinlocks, mutexes, etc...) CONFIG_TRACE_IRQFLAGS=y CONFIG_DEBUG_IRQFLAGS=y CONFIG_STACKTRACE=y # CONFIG_WARN_ALL_UNSEEDED_RANDOM is not set CONFIG_DEBUG_KOBJECT=y # CONFIG_DEBUG_KOBJECT_RELEASE is not set # # Debug kernel data structures # # CONFIG_DEBUG_LIST is not set CONFIG_DEBUG_PLIST=y # CONFIG_DEBUG_SG is not set CONFIG_DEBUG_NOTIFIERS=y # CONFIG_BUG_ON_DATA_CORRUPTION is not set CONFIG_DEBUG_MAPLE_TREE=y # end of Debug kernel data structures # CONFIG_DEBUG_CREDENTIALS is not set # # RCU Debugging # CONFIG_PROVE_RCU=y CONFIG_TORTURE_TEST=y # CONFIG_RCU_SCALE_TEST is not set CONFIG_RCU_TORTURE_TEST=y # CONFIG_RCU_REF_SCALE_TEST is not set CONFIG_RCU_CPU_STALL_TIMEOUT=21 CONFIG_RCU_EXP_CPU_STALL_TIMEOUT=0 # CONFIG_RCU_TRACE is not set # CONFIG_RCU_EQS_DEBUG is not set # end of RCU Debugging # CONFIG_DEBUG_WQ_FORCE_RR_CPU is not set # CONFIG_LATENCYTOP is not set CONFIG_NOP_TRACER=y CONFIG_TRACER_MAX_TRACE=y CONFIG_TRACE_CLOCK=y CONFIG_RING_BUFFER=y CONFIG_EVENT_TRACING=y CONFIG_CONTEXT_SWITCH_TRACER=y CONFIG_RING_BUFFER_ALLOW_SWAP=y CONFIG_PREEMPTIRQ_TRACEPOINTS=y CONFIG_TRACING=y CONFIG_GENERIC_TRACER=y CONFIG_TRACING_SUPPORT=y CONFIG_FTRACE=y CONFIG_BOOTTIME_TRACING=y CONFIG_IRQSOFF_TRACER=y # CONFIG_SCHED_TRACER is not set # CONFIG_HWLAT_TRACER is not set # CONFIG_OSNOISE_TRACER is not set # CONFIG_TIMERLAT_TRACER is not set CONFIG_TRACER_SNAPSHOT=y CONFIG_TRACER_SNAPSHOT_PER_CPU_SWAP=y CONFIG_BRANCH_PROFILE_NONE=y # CONFIG_PROFILE_ANNOTATED_BRANCHES is not set # CONFIG_PROFILE_ALL_BRANCHES is not set # CONFIG_BLK_DEV_IO_TRACE is not set CONFIG_DYNAMIC_EVENTS=y # CONFIG_SYNTH_EVENTS is not set CONFIG_USER_EVENTS=y # CONFIG_TRACE_EVENT_INJECT is not set CONFIG_TRACEPOINT_BENCHMARK=y CONFIG_RING_BUFFER_BENCHMARK=y # CONFIG_TRACE_EVAL_MAP_FILE is not set CONFIG_GCOV_PROFILE_FTRACE=y CONFIG_FTRACE_SELFTEST=y CONFIG_FTRACE_STARTUP_TEST=y CONFIG_EVENT_TRACE_STARTUP_TEST=y # CONFIG_EVENT_TRACE_TEST_SYSCALLS is not set # CONFIG_RING_BUFFER_STARTUP_TEST is not set CONFIG_RING_BUFFER_VALIDATE_TIME_DELTAS=y CONFIG_DA_MON_EVENTS=y CONFIG_DA_MON_EVENTS_ID=y CONFIG_RV=y CONFIG_RV_MON_WWNR=y CONFIG_RV_REACTORS=y # CONFIG_RV_REACT_PRINTK is not set CONFIG_RV_REACT_PANIC=y # CONFIG_SAMPLES is not set # # hexagon Debugging # # end of hexagon Debugging # # Kernel Testing and Coverage # CONFIG_KUNIT=y CONFIG_KUNIT_DEBUGFS=y CONFIG_KUNIT_TEST=y CONFIG_KUNIT_EXAMPLE_TEST=y CONFIG_KUNIT_ALL_TESTS=y # CONFIG_KUNIT_DEFAULT_ENABLED is not set CONFIG_NOTIFIER_ERROR_INJECTION=y CONFIG_OF_RECONFIG_NOTIFIER_ERROR_INJECT=y # CONFIG_NETDEV_NOTIFIER_ERROR_INJECT is not set # CONFIG_FAULT_INJECTION is not set CONFIG_CC_HAS_SANCOV_TRACE_PC=y # CONFIG_RUNTIME_TESTING_MENU is not set # end of Kernel Testing and Coverage # # Rust hacking # # end of Rust hacking # CONFIG_WARN_MISSING_DOCUMENTS is not set CONFIG_WARN_ABI_ERRORS=y # end of Kernel hacking
© 2016 - 2025 Red Hat, Inc.