From: sashiko-bot@kernel.org
To: "Zhentao Guo" <zhentao.guo@amlogic.com>
Cc: linux-amlogic@lists.infradead.org, devicetree@vger.kernel.org,
robh@kernel.org, conor+dt@kernel.org, neil.armstrong@linaro.org,
media-ci@linuxtv.org
Subject: Re: [PATCH v12 6/6] arm64: defconfig: Enable CONFIG_VIDEO_AMLOGIC_VDEC
Date: Thu, 22 Oct 2026 05:53:53 +0000 [thread overview]
Message-ID: <sashiko-outbox-181043@kernel.org> (raw)
In-Reply-To: <20261022-b4-s4-vdec-upstream-v12-6-616240978792@amlogic.com>
Thank you for your contribution! Sashiko AI review found 9 potential issue(s) to consider:
- [Critical] media: amlogic: vdec: unchecked ref_list bounds and canvas lifecycle in h264
- [High] media: amlogic: vdec: aml_vdec_init_dec_inst() returns -1 on output restart
- [High] media: amlogic: vdec: check DPB entry flags in poc_is_in_dpb() and get_dpb_by_poc()
- [High] media: amlogic: vdec: out-of-bounds SPS workspace write in h264_config_params()
- [High] media: amlogic: vdec: ignored pm-domain error, unenabled clk, early vdev reg
- [High] media: amlogic: vdec: wrong IS_ERR() check on meson_sm_get() return
- [Medium] media: amlogic: vdec: uninitialized pic_info, prematuresizeimage calc, and split locks
- [Medium] media: amlogic: vdec: missing error unwind and propagation in vdec_poweron()
- [Low] media: amlogic: vdec: missing select REGMAP_MMIO in Kconfig
--
commit 05491c1c72b85040b071b152b79a908d403d95f0
Author: Zhentao Guo <zhentao.guo@amlogic.com>
arm64: defconfig: Enable CONFIG_VIDEO_AMLOGIC_VDEC
This commit enables the Amlogic V4L2 stateless video decoder driver
(CONFIG_VIDEO_AMLOGIC_VDEC=m) as a module in the arm64 defconfig for
Amlogic SoCs such as the S4 (S805X2) platform.
> diff --git a/arch/arm64/configs/defconfig b/arch/arm64/configs/defconfig
> index 7b4985b29b21c..f00c8a418a464 100644
> --- a/arch/arm64/configs/defconfig
> +++ b/arch/arm64/configs/defconfig
> @@ -929,6 +929,7 @@ CONFIG_USB_VIDEO_CLASS=m
> CONFIG_V4L_PLATFORM_DRIVERS=y
> CONFIG_SDR_PLATFORM_DRIVERS=y
> CONFIG_V4L_MEM2MEM_DRIVERS=y
> +CONFIG_VIDEO_AMLOGIC_VDEC=m
[Severity: Critical]
Can h264_config_ref_lists() and h264_reorder_reflists() in
drivers/media/platform/amlogic/vdec/h264.c overflow ref_list0 and ref_list1
and leak meson_canvas indices?
First, in struct aml_h264_ctx, ref_list0 and ref_list1 are sized to
V4L2_H264_NUM_DPB_ENTRIES + 1 (17 elements). However, in
h264_config_ref_lists(), v4l2_h264_init_reflist_builder() sets
builder.num_valid up to V4L2_H264_REF_LIST_LEN (32) when
V4L2_H264_DECODE_PARAM_FLAG_FIELD_PIC is set in decode->flags, and passes
builder.num_valid as list_size to config_p_reflist() and config_b_reflist():
drivers/media/platform/amlogic/vdec/h264.c:config_p_reflist() {
for (i = 0; i < list_size; i++) {
index = v4l2_p0_reflist[i].index;
h264_ctx->ref_list0[i].used = 1;
...
}
}
Won't list_size > 17 write past the end of ref_list0 and ref_list1 in
config_p_reflist() and config_b_reflist(), as well as in the loops using
h264_ctx->list_size[] in h264_config_decode_spec(), get_canvas_index(), and
h264_release_decode_spec()?
Second, when all 16 dpb entries are active and num_ref_idx_lx_active is 16,
reorder_short_term() and reorder_long_term() shift ref_list_reordered[15] into
the sentinel slot ref_list_reordered[16] without clearing the sentinel
afterward:
drivers/media/platform/amlogic/vdec/h264.c:reorder_short_term() {
for (c_idx = num_ref_idx_lx_active; c_idx > *ref_idx_lx; c_idx--)
memcpy(&ref_list_reordered[c_idx], &ref_list_reordered[c_idx - 1],
sizeof(struct h264_decode_buf_spec));
...
h264_ctx->list_size[cur_list] = num_ref_idx_lx_active;
}
Since get_refidx_by_picnum(), get_st_refpic_by_num(), and
get_lt_refpic_by_num() iterate until ref_list[i].dpb is NULL with no upper
bound on i:
drivers/media/platform/amlogic/vdec/h264.c:get_refidx_by_picnum() {
for (i = 0; ref_list[i].dpb; i++) {
if (pic_num == ref_list[i].dpb->pic_num)
return i;
}
}
can overwriting ref_list[16].dpb cause these helpers to read past the end of
ref_list0 and ref_list1 on subsequent reordering commands?
Third, reorder_short_term() and reorder_long_term() overwrite
h264_ctx->list_size[cur_list] with num_ref_idx_lx_active. In
get_canvas_index(), config_decode_canvas() is called for every entry below
list_size without checking buf->used or buf->valid, while
h264_release_decode_spec() only calls release_canvas_index() when buf->used is
non-zero:
drivers/media/platform/amlogic/vdec/h264.c:get_canvas_index() {
if (h264_ctx->list_size[0] > 0) {
for (i = 0; i < h264_ctx->list_size[0]; i++) {
buf = &h264_ctx->ref_list0[i];
ret = config_decode_canvas(hw, buf, h264_ctx->mb_width,
h264_ctx->mb_height);
...
}
}
}
drivers/media/platform/amlogic/vdec/h264.c:h264_release_decode_spec() {
if (h264_ctx->list_size[0] > 0) {
for (i = 0; i < h264_ctx->list_size[0]; i++) {
buf = &h264_ctx->ref_list0[i];
buf->valid = 0;
if (buf->used) {
buf->dpb = NULL;
release_canvas_index(hw, buf);
buf->used = 0;
}
}
h264_ctx->list_size[0] = 0;
}
}
If num_ref_idx_lx_active is larger than the initial list_size, won't
get_canvas_index() allocate meson canvases for entries with buf->used == 0
that h264_release_decode_spec() never frees, and if num_ref_idx_lx_active is
smaller, won't entries above the new list_size retain stale state?
[Severity: High]
What happens in drivers/media/platform/amlogic/vdec/aml_vdec.c when the output
queue is stopped and restarted while the capture queue remains streaming?
When a client stops the output queue via vb2ops_vdec_stop_streaming() while
ctx->is_cap_streamon is still set, aml_vdec_release_instance() is not called
and ctx->codec_priv remains non-NULL:
drivers/media/platform/amlogic/vdec/aml_vdec.c:vb2ops_vdec_stop_streaming() {
if (!ctx->is_output_streamon && !ctx->is_cap_streamon)
aml_vdec_release_instance(ctx);
}
When the output queue is subsequently restarted, vb2ops_vdec_start_streaming()
calls aml_vdec_init_dec_inst(), which initializes ret to -1 and skips
ctx->codec_ops->init(ctx) because ctx->codec_priv is already allocated:
drivers/media/platform/amlogic/vdec/aml_vdec.c:aml_vdec_init_dec_inst() {
int ret = -1;
...
if (ctx->codec_ops->init && !ctx->codec_priv) {
ret = ctx->codec_ops->init(ctx);
if (ret < 0)
return ret;
}
ctx->curr_dec_type = fmt_out->codec_type;
...
return ret;
}
Because ret stays -1, vb2ops_vdec_start_streaming() treats the call as a
failure, returns all queued source buffers via v4l2_m2m_src_buf_remove() and
v4l2_m2m_buf_done(), and fails VIDIOC_STREAMON with -EINVAL:
drivers/media/platform/amlogic/vdec/aml_vdec.c:vb2ops_vdec_start_streaming() {
if (aml_vdec_init_dec_inst(ctx) < 0) {
while ((src_buf = v4l2_m2m_src_buf_remove(ctx->m2m_ctx)))
v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_QUEUED);
return -EINVAL;
}
}
Should ret be initialized to 0 in aml_vdec_init_dec_inst() so restarting the
output queue succeeds when ctx->codec_priv is already present?
[Severity: High]
Should poc_is_in_dpb() and get_dpb_by_poc() in
drivers/media/platform/amlogic/vdec/h264.c check whether a dpb entry is active
before matching top_field_order_cnt?
During H264_SLICE_HEADER_DONE handling in
h264_threaded_isr_func()->h264_config_decode_spec()->clear_unused_col_buf(),
poc_is_in_dpb() is called to decide whether to release colocated_buf and
canvas_pos slots:
drivers/media/platform/amlogic/vdec/h264.c:poc_is_in_dpb() {
for (i = 0; i < V4L2_H264_NUM_DPB_ENTRIES; i++) {
if (poc == dpb[i].top_field_order_cnt) {
ret = 1;
break;
}
}
}
Because decode->dpb has 16 fixed entries and poc_is_in_dpb() does not check
dpb[i].flags for V4L2_H264_DPB_ENTRY_FLAG_ACTIVE (or
V4L2_H264_DPB_ENTRY_FLAG_VALID), any unused zeroed dpb entry has
top_field_order_cnt == 0, causing poc_is_in_dpb(0, decode->dpb) to always
return 1 and leak the colocated_buf and canvas_pos slots for poc 0 in
clear_unused_col_buf():
drivers/media/platform/amlogic/vdec/h264.c:clear_unused_col_buf() {
for (i = 0; i < h264_ctx->colocated_buf_num; i++) {
if (!((h264_ctx->colocated_buf_map >> i) & 0x1))
continue;
col_poc = h264_ctx->colocated_buf_poc[i];
if (poc_is_in_dpb(col_poc, decode->dpb) != 1)
release_colocate_buf(h264_ctx, i);
}
for (i = 0; i < (V4L2_H264_NUM_DPB_ENTRIES + 1); i++) {
if (!((h264_ctx->canvas_pos_map >> i) & 0x1))
continue;
col_poc = h264_ctx->ref_canvas[i].poc;
if (poc_is_in_dpb(col_poc, decode->dpb) != 1)
release_canvas_pos(h264_ctx, i);
}
}
Similarly, if userspace clears flags on retired dpb entries without zeroing
top_field_order_cnt, their colocated_buf and canvas_pos slots are never freed
until all slots are exhausted.
In addition, h264_config_decode_buf() looks up reference entries with
get_dpb_by_poc():
drivers/media/platform/amlogic/vdec/h264.c:get_dpb_by_poc() {
for (i = 0; i < V4L2_H264_NUM_DPB_ENTRIES; i++) {
if (decode->dpb[i].top_field_order_cnt == poc)
return &decode->dpb[i];
}
return NULL;
}
drivers/media/platform/amlogic/vdec/h264.c:h264_config_decode_buf() {
dpb = get_dpb_by_poc(decode, poc);
if (dpb && (dpb->flags & V4L2_H264_DPB_ENTRY_FLAG_ACTIVE)) {
}
If an earlier inactive dpb slot has the same top_field_order_cnt as a later
active dpb slot (for instance, an unused zeroed slot before an active poc 0
entry), won't get_dpb_by_poc() return the inactive slot and cause
h264_config_decode_buf() to skip writing the active reference frame's info
into H264_BUFFER_INFO_DATA?
[Severity: High]
Can a userspace V4L2_CID_STATELESS_H264_SPS control with
sps->seq_parameter_set_id >= 32 cause an out-of-bounds write in
h264_config_params() in drivers/media/platform/amlogic/vdec/h264.c?
In drivers/media/v4l2-core/v4l2-ctrls-core.c, std_validate_compound() does not
validate that p_h264_sps->seq_parameter_set_id is within 0..31, and
aml_vdec_ctrls_setup() in drivers/media/platform/amlogic/vdec/aml_vdec.c does
not provide custom validation. When aml_h264_dec_run() calls
h264_config_params()->config_sps_params(), p_sps_base is calculated directly
from sps->seq_parameter_set_id (a u8 up to 255):
drivers/media/platform/amlogic/vdec/h264.c:h264_config_params() {
p_sps_base = (unsigned short *)(h264_ctx->workspace_vaddr +
MEM_SPS_BASE + sps->seq_parameter_set_id * 0x400);
p_pps_base = (unsigned short *)(h264_ctx->workspace_vaddr +
MEM_PPS_BASE + pps->pic_parameter_set_id * 0x200);
}
drivers/media/platform/amlogic/vdec/h264.c:config_sps_params() {
memset(sps_base, 0, 0x100);
memset(data_tmp, 0, sizeof(data_tmp));
}
Since MEM_SPS_BASE (0x01c3c00) to MEM_PPS_BASE (0x01cbc00) only has room for
32 entries of 0x400 bytes, won't seq_parameter_set_id >= 32 cause
config_sps_params() to overwrite the MEM_PPS_BASE table and adjacent regions
of h264_ctx->workspace_vaddr?
[Severity: High]
Could drivers/media/platform/amlogic/vdec/aml_vdec_hw.c and
drivers/media/platform/amlogic/vdec/aml_vdec_drv.c access unclocked or
unpowered DOS_BUS registers if power domain attachment fails or before
vdec_enable() runs?
In pm_vdec_power_domain_init(), errors from dev_pm_domain_attach_by_name()
(including -EPROBE_DEFER) are ignored and pd[i].dev is set to NULL:
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c:pm_vdec_power_domain_init() {
pd[i].dev = dev_pm_domain_attach_by_name(hw->dev, pd[i].name);
if (IS_ERR_OR_NULL(pd[i].dev)) {
err = PTR_ERR(pd[i].dev);
dev_dbg(hw->dev, "Get %s failed, pm-domain: %d\n",
pd[i].name, err);
pd[i].dev = NULL;
continue;
}
}
When pd_data[core].dev is NULL, vdec_poweron() skips hw->pm->power_on(hw, core)
and leaves both the vdec power domain and vdec clock disabled, so subsequent
DOS_BUS register accesses in m2mops_vdec_device_run()->dos_enable() can
trigger a synchronous external abort:
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c:vdec_poweron() {
mutex_lock(&hw->pm_mutex);
if (!hw->pm->pd_data[core].dev)
goto out;
...
hw->pm->power_on(hw, core);
}
In addition, vdec_clock_gate_init() acquires the dos clock in
hw->gates[CLK_DOS]:
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c:vdec_clock_gate_init() {
hw->gates[CLK_DOS].id = "dos";
hw->gates[CLK_VDEC].id = "vdec";
hw->gates[CLK_HVDEC].id = "hvdec";
return devm_clk_bulk_get(hw->dev, CLK_MAX, hw->gates);
}
Yet pm_vdec_power_domain_power_on() only enables vdec and hvdec and never
enables hw->gates[CLK_DOS].clk.
Furthermore, in aml_vdec_drv_probe() in
drivers/media/platform/amlogic/vdec/aml_vdec_drv.c, video_register_device() is
called before dev->v4l2_dev.mdev is initialized and before
vdec_enable(dev->dec_hw) is called:
drivers/media/platform/amlogic/vdec/aml_vdec_drv.c:aml_vdec_drv_probe() {
ret = video_register_device(vfd_dec, VFL_TYPE_VIDEO, -1);
if (ret) {
v4l2_err(&dev->v4l2_dev, "Failed to register video device");
goto err_vid_dev_register;
}
dev->mdev.dev = &pdev->dev;
strscpy(dev->mdev.model, AML_VDEC_DRV_NAME, sizeof(dev->mdev.model));
media_device_init(&dev->mdev);
dev->mdev.ops = &aml_m2m_media_ops;
dev->v4l2_dev.mdev = &dev->mdev;
...
vdec_enable(dev->dec_hw);
}
Should pm_vdec_power_domain_init() propagate errors from
dev_pm_domain_attach_by_name(), should CLK_DOS be enabled before accessing
DOS_BUS registers, and should vdec_enable() and media_device_init() run before
video_register_device() publishes the device node?
[Severity: High]
Why does dev_request_hw_resources() in
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c check meson_sm_get() with
IS_ERR() instead of checking for NULL?
In drivers/firmware/meson/meson_sm.c, meson_sm_get() returns NULL when the
secure-monitor device is missing or has not finished probing:
drivers/firmware/meson/meson_sm.c:meson_sm_get() {
if (!pdev)
return NULL;
fw = platform_get_drvdata(pdev);
put_device(&pdev->dev);
return fw;
}
However, dev_request_hw_resources() only checks IS_ERR(hw->sec_fw):
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c:dev_request_hw_resources() {
hw->sec_fw = meson_sm_get(sm_np);
of_node_put(sm_np);
if (IS_ERR(hw->sec_fw))
return PTR_ERR(hw->sec_fw);
}
If meson_sm_get() returns NULL, probe succeeds with hw->sec_fw == NULL, and
when a decode job runs m2mops_vdec_device_run()->load_firmware() in
drivers/media/platform/amlogic/vdec/aml_vdec_tee_fw.c:
drivers/media/platform/amlogic/vdec/aml_vdec_tee_fw.c:load_firmware() {
meson_sm_call(hw->sec_fw, SM_LOAD_VIDEO_FW, &ret,
video_fw->fw_format, video_fw->core,
video_fw->is_swap, 0, 0);
}
won't meson_sm_call() dereference a NULL hw->sec_fw pointer instead of probe
returning -EPROBE_DEFER?
[Severity: Medium]
Are ctx->pic_info, plane_fmt[0].sizeimage, and the format/queue locks in
drivers/media/platform/amlogic/vdec/aml_vdec.c initialized in the right order?
First, when a file handle is opened, fops_vcodec_open()->aml_vdec_reset_fmts()
calls reset_output_fmts(), which sets ctx->pix_fmt[AML_FMT_SRC] without
calling set_pic_info():
drivers/media/platform/amlogic/vdec/aml_vdec.c:reset_output_fmts() {
vdec_try_fmt_mp(ctx, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, &fmt,
out_fmt);
ctx->pix_fmt[AML_FMT_SRC] = fmt;
}
If userspace starts streaming with the default format without calling
VIDIOC_S_FMT on V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE, ctx->pic_info.fb_size[0]
remains 0, so h264_config_decode_spec() and h264_config_ref_spec() in
drivers/media/platform/amlogic/vdec/h264.c set c_dma_addr equal to y_dma_addr
for single-planar capture formats:
drivers/media/platform/amlogic/vdec/h264.c:h264_config_decode_spec() {
h264_ctx->curr_spec.y_dma_addr = vb2_dma_contig_plane_dma_addr(vb, 0);
if (ctx->pix_fmt[AML_FMT_DST].num_planes > 1)
h264_ctx->curr_spec.c_dma_addr =
vb2_dma_contig_plane_dma_addr(vb, 1);
else
h264_ctx->curr_spec.c_dma_addr =
h264_ctx->curr_spec.y_dma_addr + ctx->pic_info.fb_size[0];
}
Second, in vdec_try_fmt_mp(), plane_fmt[0].sizeimage for the output queue is
computed from pix_mp->height and pix_mp->width before ALIGN() and
v4l2_apply_frmsize_constraints() clamp and align them:
drivers/media/platform/amlogic/vdec/aml_vdec.c:vdec_try_fmt_mp() {
if (V4L2_TYPE_IS_OUTPUT(type)) {
pix_mp->num_planes = dec_fmt->num_planes;
pix_mp->pixelformat = dec_fmt->fourcc;
if (!pix_mp->plane_fmt[0].sizeimage)
pix_mp->plane_fmt[0].sizeimage =
(pix_mp->height * pix_mp->width * 3) / 2;
pix_mp->height = ALIGN(pix_mp->height, align);
pix_mp->width = ALIGN(pix_mp->width, align);
} else {
...
}
v4l2_apply_frmsize_constraints(&pix_mp->width, &pix_mp->height,
&dec_fmt->stepwise);
}
If userspace passes width == 0 or height == 0 with sizeimage == 0, sizeimage
remains 0 even after width and height are clamped to the minimum frame size.
Third, aml_vdec_reset_fmts() and aml_vdec_queue_init() set
ctx->m2m_ctx->q_lock, src_vq->lock, and dst_vq->lock to &ctx->v4l2_intf_lock,
whereas aml_vdec_drv_probe() sets vfd_dec->lock to &dev->dev_mutex:
drivers/media/platform/amlogic/vdec/aml_vdec.c:aml_vdec_reset_fmts() {
ctx->m2m_ctx->q_lock = &ctx->v4l2_intf_lock;
reset_output_fmts(ctx);
reset_capture_fmts(ctx);
}
Doesn't using two different mutexes allow VIDIOC_S_FMT and VIDIOC_G_FMT to
race with queue ioctls such as VIDIOC_REQBUFS, VIDIOC_QBUF, and
VIDIOC_STREAMON?
[Severity: Medium]
What happens in drivers/media/platform/amlogic/vdec/aml_vdec_hw.c when
pm_runtime_resume_and_get() or clk_prepare_enable() fails during
vdec_poweron()?
In pm_vdec_power_domain_power_on(), if clk_prepare_enable(gate_node->clk)
succeeds and pm_runtime_resume_and_get(dev) fails, gate_node->clk is not
disabled and unprepared, and the error is not returned to the caller:
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c:pm_vdec_power_domain_power_on() {
if (gate_node) {
ret = clk_prepare_enable(gate_node->clk);
...
if (!ret && dev) {
ret = pm_runtime_resume_and_get(dev);
if (ret < 0)
dev_err(hw->dev, "failed to power on %s domain: %d\n",
pm->pd_data[id].name, ret);
...
if (!ret)
dos_local_config(hw, 1, id);
}
Because vdec_poweron() increments hw->pm->pd_data[core].ref_count before
calling hw->pm->power_on(hw, core) and vdec_enable() always returns 0 to
aml_vdec_drv_probe():
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c:vdec_poweron() {
hw->pm->pd_data[core].ref_count++;
if (hw->pm->pd_data[core].ref_count > 1)
goto out;
hw->pm->power_on(hw, core);
}
when aml_vdec_drv_remove() later calls
vdec_disable()->vdec_poweroff()->pm_vdec_power_domain_power_off():
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c:pm_vdec_power_domain_power_off() {
dos_local_config(hw, 0, id);
if (dev) {
pm_runtime_put_sync(dev);
}
won't pm_vdec_power_domain_power_off() access unpowered DOS_BUS registers in
dos_local_config(hw, 0, id) and cause unbalanced pm_runtime_put_sync() and
clk_disable_unprepare() calls?
[Severity: Low]
Should VIDEO_AMLOGIC_VDEC in drivers/media/platform/amlogic/vdec/Kconfig
select REGMAP_MMIO?
In drivers/media/platform/amlogic/vdec/aml_vdec_hw.c,
dev_request_hw_resources() initializes regmaps via devm_regmap_init_mmio():
drivers/media/platform/amlogic/vdec/aml_vdec_hw.c:dev_request_hw_resources() {
if (i == DOS_BUS) {
hw->map[i] = devm_regmap_init_mmio(&pdev->dev, reg_base[i],
&dos_regmap_conf);
} else if (i == DMC_BUS) {
hw->map[i] = devm_regmap_init_mmio(&pdev->dev, reg_base[i],
&dmc_regmap_conf);
}
}
However, VIDEO_AMLOGIC_VDEC in drivers/media/platform/amlogic/vdec/Kconfig
does not select REGMAP_MMIO:
drivers/media/platform/amlogic/vdec/Kconfig: {
config VIDEO_AMLOGIC_VDEC
tristate "Amlogic Video Decoder Driver"
...
select VIDEOBUF2_DMA_CONTIG
select V4L2_H264
select V4L2_MEM2MEM_DEV
select MESON_CANVAS
}
Could configurations enabling CONFIG_VIDEO_AMLOGIC_VDEC without another driver
selecting CONFIG_REGMAP_MMIO fail to build or link?
> CONFIG_VIDEO_AMPHION_VPU=m
> CONFIG_VIDEO_CADENCE_CSI2RX=m
> CONFIG_VIDEO_WAVE_VPU=m
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261022-b4-s4-vdec-upstream-v12-0-616240978792@amlogic.com?part=6
_______________________________________________
linux-amlogic mailing list
linux-amlogic@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-amlogic
next prev parent reply other threads:[~2026-10-22 5:53 UTC|newest]
Thread overview: 11+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-22 5:26 [PATCH v12 0/6] Add Amlogic stateless H.264 video decoder for S4 Zhentao Guo via B4 Relay
2026-10-22 5:26 ` [PATCH v12 1/6] firmware: meson: sm: video firmware loading via secure monitor Zhentao Guo via B4 Relay
2026-10-22 5:27 ` [PATCH v12 2/6] firmware: meson: sm: Add video firmware loading SMC call Zhentao Guo via B4 Relay
2026-10-22 5:27 ` [PATCH v12 3/6] media: dt-bindings: Add Amlogic V4L2 video decoder Zhentao Guo via B4 Relay
2026-10-22 5:27 ` [PATCH v12 4/6] decoder: Add V4L2 stateless H.264 decoder driver Zhentao Guo via B4 Relay
2026-10-22 5:27 ` [PATCH v12 5/6] arm64: dts: amlogic: Add video decoder driver support for S4 SOCs Zhentao Guo via B4 Relay
2026-10-22 6:01 ` sashiko-bot
2026-10-23 11:25 ` Zhentao Guo
2026-10-22 5:27 ` [PATCH v12 6/6] arm64: defconfig: Enable CONFIG_VIDEO_AMLOGIC_VDEC Zhentao Guo via B4 Relay
2026-10-22 5:53 ` sashiko-bot [this message]
2026-10-23 9:46 ` Zhentao Guo
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=sashiko-outbox-181043@kernel.org \
--to=sashiko-bot@kernel.org \
--cc=conor+dt@kernel.org \
--cc=devicetree@vger.kernel.org \
--cc=linux-amlogic@lists.infradead.org \
--cc=media-ci@linuxtv.org \
--cc=neil.armstrong@linaro.org \
--cc=robh@kernel.org \
--cc=sashiko-reviews@lists.linux.dev \
--cc=zhentao.guo@amlogic.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox