mirror of
https://github.com/Fishwaldo/build.git
synced 2025-07-23 13:29:33 +00:00
* Introducing Rockchip rk322x SoC support Main features: - Legacy kernel flavour based upon stable v2.x rk3288 Rockchip branch (https://github.com/rockchip-linux/kernel/tree/stable-4.4-rk3288-linux-v2.x) - Current kernel flavour based on mainline 5.6.y kernel - Mainline u-boot (v2020.04) - Single generic tv box target (rk322x-box) which boots on all the known tv boxes - Hardware devices (eMMC/NAND, led wiring configuration, SoC variant selection) modulation done by user at runtime via device tree overlays - a script (rk322x-config) is provided for autodetection and simple configuration by inexperienced users; - Bits added to armbian-hardware-optimization to set affinity for irq handlers - rk322x-box targets already added to targets.conf for automatic image creation * Removed disabled patches * Restored mysteriously removed comment character
732 lines
24 KiB
Diff
732 lines
24 KiB
Diff
diff --git a/drivers/media/v4l2-core/v4l2-mem2mem.c b/drivers/media/v4l2-core/v4l2-mem2mem.c
|
|
index cc34c5ab7009..3070672e6b4f 100644
|
|
--- a/drivers/media/v4l2-core/v4l2-mem2mem.c
|
|
+++ b/drivers/media/v4l2-core/v4l2-mem2mem.c
|
|
@@ -499,12 +499,21 @@ void v4l2_m2m_buf_done_and_job_finish(struct v4l2_m2m_dev *m2m_dev,
|
|
|
|
if (WARN_ON(!src_buf || !dst_buf))
|
|
goto unlock;
|
|
- v4l2_m2m_buf_done(src_buf, state);
|
|
dst_buf->is_held = src_buf->flags & V4L2_BUF_FLAG_M2M_HOLD_CAPTURE_BUF;
|
|
if (!dst_buf->is_held) {
|
|
v4l2_m2m_dst_buf_remove(m2m_ctx);
|
|
v4l2_m2m_buf_done(dst_buf, state);
|
|
}
|
|
+ /*
|
|
+ * If the request API is being used, returning the OUTPUT
|
|
+ * (src) buffer will wake-up any process waiting on the
|
|
+ * request file descriptor.
|
|
+ *
|
|
+ * Therefore, return the CAPTURE (dst) buffer first,
|
|
+ * to avoid signalling the request file descriptor
|
|
+ * before the CAPTURE buffer is done.
|
|
+ */
|
|
+ v4l2_m2m_buf_done(src_buf, state);
|
|
schedule_next = _v4l2_m2m_job_finish(m2m_dev, m2m_ctx);
|
|
unlock:
|
|
spin_unlock_irqrestore(&m2m_dev->job_spinlock, flags);
|
|
--
|
|
2.17.1
|
|
|
|
|
|
From 46fef6ecbc765dedaeef46339474529645f09404 Mon Sep 17 00:00:00 2001
|
|
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Date: Wed, 18 Mar 2020 10:21:02 -0300
|
|
Subject: [PATCH] hantro: Set buffers' zeroth plane payload in .buf_prepare
|
|
|
|
Buffers' zeroth plane payload size is calculated at format
|
|
negotiation time, and so it can be set in .buf_prepare.
|
|
|
|
Keep in mind that, to make this change easier, hantro_buf_prepare
|
|
is refactored, using the cedrus driver as reference. This results
|
|
in cleaner code as byproduct.
|
|
|
|
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
---
|
|
drivers/staging/media/hantro/hantro_v4l2.c | 16 +++++++++++-----
|
|
1 file changed, 11 insertions(+), 5 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/hantro/hantro_v4l2.c b/drivers/staging/media/hantro/hantro_v4l2.c
|
|
index f4ae2cee0f18..3142ab6697d5 100644
|
|
--- a/drivers/staging/media/hantro/hantro_v4l2.c
|
|
+++ b/drivers/staging/media/hantro/hantro_v4l2.c
|
|
@@ -608,7 +608,7 @@ hantro_queue_setup(struct vb2_queue *vq, unsigned int *num_buffers,
|
|
}
|
|
|
|
static int
|
|
-hantro_buf_plane_check(struct vb2_buffer *vb, const struct hantro_fmt *vpu_fmt,
|
|
+hantro_buf_plane_check(struct vb2_buffer *vb,
|
|
struct v4l2_pix_format_mplane *pixfmt)
|
|
{
|
|
unsigned int sz;
|
|
@@ -630,12 +630,18 @@ static int hantro_buf_prepare(struct vb2_buffer *vb)
|
|
{
|
|
struct vb2_queue *vq = vb->vb2_queue;
|
|
struct hantro_ctx *ctx = vb2_get_drv_priv(vq);
|
|
+ struct v4l2_pix_format_mplane *pix_fmt;
|
|
+ int ret;
|
|
|
|
if (V4L2_TYPE_IS_OUTPUT(vq->type))
|
|
- return hantro_buf_plane_check(vb, ctx->vpu_src_fmt,
|
|
- &ctx->src_fmt);
|
|
-
|
|
- return hantro_buf_plane_check(vb, ctx->vpu_dst_fmt, &ctx->dst_fmt);
|
|
+ pix_fmt = &ctx->src_fmt;
|
|
+ else
|
|
+ pix_fmt = &ctx->dst_fmt;
|
|
+ ret = hantro_buf_plane_check(vb, pix_fmt);
|
|
+ if (ret)
|
|
+ return ret;
|
|
+ vb2_set_plane_payload(vb, 0, pix_fmt->plane_fmt[0].sizeimage);
|
|
+ return 0;
|
|
}
|
|
|
|
static void hantro_buf_queue(struct vb2_buffer *vb)
|
|
--
|
|
2.17.1
|
|
|
|
|
|
From 49b98070ac9cbd4e731a84f0a3c10e6dd803d37c Mon Sep 17 00:00:00 2001
|
|
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Date: Wed, 18 Mar 2020 10:21:03 -0300
|
|
Subject: [PATCH] hantro: Use v4l2_m2m_buf_done_and_job_finish
|
|
|
|
Let the core sort out the nuances of returning buffers
|
|
to userspace, by using the v4l2_m2m_buf_done_and_job_finish
|
|
helper.
|
|
|
|
This change also removes usage of buffer sequence fields,
|
|
which shouldn't have any meaning for stateless decoders.
|
|
|
|
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Nacked-by: Hans Verkuil <hverkuil-cisco@xs4all.nl>
|
|
---
|
|
drivers/staging/media/hantro/hantro_drv.c | 27 ++++++++---------------
|
|
1 file changed, 9 insertions(+), 18 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
|
|
index c98835326135..dd503918a017 100644
|
|
--- a/drivers/staging/media/hantro/hantro_drv.c
|
|
+++ b/drivers/staging/media/hantro/hantro_drv.c
|
|
@@ -94,32 +94,23 @@ static void hantro_job_finish(struct hantro_dev *vpu,
|
|
unsigned int bytesused,
|
|
enum vb2_buffer_state result)
|
|
{
|
|
- struct vb2_v4l2_buffer *src, *dst;
|
|
int ret;
|
|
|
|
pm_runtime_mark_last_busy(vpu->dev);
|
|
pm_runtime_put_autosuspend(vpu->dev);
|
|
clk_bulk_disable(vpu->variant->num_clocks, vpu->clocks);
|
|
|
|
- src = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
|
|
- dst = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
|
|
-
|
|
- if (WARN_ON(!src))
|
|
- return;
|
|
- if (WARN_ON(!dst))
|
|
- return;
|
|
-
|
|
- src->sequence = ctx->sequence_out++;
|
|
- dst->sequence = ctx->sequence_cap++;
|
|
-
|
|
- ret = ctx->buf_finish(ctx, &dst->vb2_buf, bytesused);
|
|
- if (ret)
|
|
- result = VB2_BUF_STATE_ERROR;
|
|
+ if (ctx->buf_finish) {
|
|
+ struct vb2_v4l2_buffer *dst;
|
|
|
|
- v4l2_m2m_buf_done(src, result);
|
|
- v4l2_m2m_buf_done(dst, result);
|
|
+ dst = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
|
|
+ ret = ctx->buf_finish(ctx, &dst->vb2_buf, bytesused);
|
|
+ if (ret)
|
|
+ result = VB2_BUF_STATE_ERROR;
|
|
+ }
|
|
|
|
- v4l2_m2m_job_finish(vpu->m2m_dev, ctx->fh.m2m_ctx);
|
|
+ v4l2_m2m_buf_done_and_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx,
|
|
+ result);
|
|
}
|
|
|
|
void hantro_irq_done(struct hantro_dev *vpu, unsigned int bytesused,
|
|
--
|
|
2.17.1
|
|
|
|
|
|
From ee3c913094e5776a0b1270b78ecce8a5e9803a42 Mon Sep 17 00:00:00 2001
|
|
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Date: Wed, 18 Mar 2020 10:21:04 -0300
|
|
Subject: [PATCH] hantro: Remove unneeded hantro_dec_buf_finish
|
|
|
|
Since now .buf_prepare takes care of setting the
|
|
buffer payload size, we can get rid of this,
|
|
at least for decoders.
|
|
|
|
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
---
|
|
drivers/staging/media/hantro/hantro_drv.c | 10 ----------
|
|
1 file changed, 10 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/hantro/hantro_drv.c b/drivers/staging/media/hantro/hantro_drv.c
|
|
index dd503918a017..a732beeb3bb6 100644
|
|
--- a/drivers/staging/media/hantro/hantro_drv.c
|
|
+++ b/drivers/staging/media/hantro/hantro_drv.c
|
|
@@ -80,15 +80,6 @@ hantro_enc_buf_finish(struct hantro_ctx *ctx, struct vb2_buffer *buf,
|
|
return 0;
|
|
}
|
|
|
|
-static int
|
|
-hantro_dec_buf_finish(struct hantro_ctx *ctx, struct vb2_buffer *buf,
|
|
- unsigned int bytesused)
|
|
-{
|
|
- /* For decoders set bytesused as per the output picture. */
|
|
- buf->planes[0].bytesused = ctx->dst_fmt.plane_fmt[0].sizeimage;
|
|
- return 0;
|
|
-}
|
|
-
|
|
static void hantro_job_finish(struct hantro_dev *vpu,
|
|
struct hantro_ctx *ctx,
|
|
unsigned int bytesused,
|
|
@@ -412,7 +403,6 @@ static int hantro_open(struct file *filp)
|
|
ctx->buf_finish = hantro_enc_buf_finish;
|
|
} else if (func->id == MEDIA_ENT_F_PROC_VIDEO_DECODER) {
|
|
allowed_codecs = vpu->variant->codec & HANTRO_DECODERS;
|
|
- ctx->buf_finish = hantro_dec_buf_finish;
|
|
} else {
|
|
ret = -ENODEV;
|
|
goto err_ctx_free;
|
|
--
|
|
2.17.1
|
|
|
|
|
|
From 403b36c2db7e39b46f8e0f6a363af6763373933d Mon Sep 17 00:00:00 2001
|
|
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Date: Wed, 18 Mar 2020 10:21:05 -0300
|
|
Subject: [PATCH] hantro: Move H264 motion vector calculation to a helper
|
|
|
|
Move the extra bytes calculation that are needed for H264
|
|
motion vector to a helper. This is just a cosmetic cleanup.
|
|
|
|
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
---
|
|
drivers/staging/media/hantro/hantro.h | 4 ---
|
|
drivers/staging/media/hantro/hantro_hw.h | 31 ++++++++++++++++++++++
|
|
drivers/staging/media/hantro/hantro_v4l2.c | 25 ++---------------
|
|
3 files changed, 33 insertions(+), 27 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/hantro/hantro.h b/drivers/staging/media/hantro/hantro.h
|
|
index b0faa43b3f79..1a010d438ac2 100644
|
|
--- a/drivers/staging/media/hantro/hantro.h
|
|
+++ b/drivers/staging/media/hantro/hantro.h
|
|
@@ -26,10 +26,6 @@
|
|
|
|
#include "hantro_hw.h"
|
|
|
|
-#define MB_DIM 16
|
|
-#define MB_WIDTH(w) DIV_ROUND_UP(w, MB_DIM)
|
|
-#define MB_HEIGHT(h) DIV_ROUND_UP(h, MB_DIM)
|
|
-
|
|
struct hantro_ctx;
|
|
struct hantro_codec_ops;
|
|
|
|
diff --git a/drivers/staging/media/hantro/hantro_hw.h b/drivers/staging/media/hantro/hantro_hw.h
|
|
index 4a64873bf332..33c1ce169203 100644
|
|
--- a/drivers/staging/media/hantro/hantro_hw.h
|
|
+++ b/drivers/staging/media/hantro/hantro_hw.h
|
|
@@ -18,6 +18,10 @@
|
|
|
|
#define DEC_8190_ALIGN_MASK 0x07U
|
|
|
|
+#define MB_DIM 16
|
|
+#define MB_WIDTH(w) DIV_ROUND_UP(w, MB_DIM)
|
|
+#define MB_HEIGHT(h) DIV_ROUND_UP(h, MB_DIM)
|
|
+
|
|
struct hantro_dev;
|
|
struct hantro_ctx;
|
|
struct hantro_buf;
|
|
@@ -180,6 +184,33 @@ void rk3399_vpu_h264_dec_run(struct hantro_ctx *ctx);
|
|
int hantro_h264_dec_init(struct hantro_ctx *ctx);
|
|
void hantro_h264_dec_exit(struct hantro_ctx *ctx);
|
|
|
|
+static inline size_t
|
|
+hantro_h264_mv_size(unsigned int width, unsigned int height)
|
|
+{
|
|
+ /*
|
|
+ * A decoded 8-bit 4:2:0 NV12 frame may need memory for up to
|
|
+ * 448 bytes per macroblock with additional 32 bytes on
|
|
+ * multi-core variants.
|
|
+ *
|
|
+ * The H264 decoder needs extra space on the output buffers
|
|
+ * to store motion vectors. This is needed for reference
|
|
+ * frames and only if the format is non-post-processed NV12.
|
|
+ *
|
|
+ * Memory layout is as follow:
|
|
+ *
|
|
+ * +---------------------------+
|
|
+ * | Y-plane 256 bytes x MBs |
|
|
+ * +---------------------------+
|
|
+ * | UV-plane 128 bytes x MBs |
|
|
+ * +---------------------------+
|
|
+ * | MV buffer 64 bytes x MBs |
|
|
+ * +---------------------------+
|
|
+ * | MC sync 32 bytes |
|
|
+ * +---------------------------+
|
|
+ */
|
|
+ return 64 * MB_WIDTH(width) * MB_WIDTH(height) + 32;
|
|
+}
|
|
+
|
|
void hantro_g1_mpeg2_dec_run(struct hantro_ctx *ctx);
|
|
void rk3399_vpu_mpeg2_dec_run(struct hantro_ctx *ctx);
|
|
void hantro_mpeg2_dec_copy_qtable(u8 *qtable,
|
|
diff --git a/drivers/staging/media/hantro/hantro_v4l2.c b/drivers/staging/media/hantro/hantro_v4l2.c
|
|
index 3142ab6697d5..458b502ff01b 100644
|
|
--- a/drivers/staging/media/hantro/hantro_v4l2.c
|
|
+++ b/drivers/staging/media/hantro/hantro_v4l2.c
|
|
@@ -273,32 +273,11 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f,
|
|
/* Fill remaining fields */
|
|
v4l2_fill_pixfmt_mp(pix_mp, fmt->fourcc, pix_mp->width,
|
|
pix_mp->height);
|
|
- /*
|
|
- * A decoded 8-bit 4:2:0 NV12 frame may need memory for up to
|
|
- * 448 bytes per macroblock with additional 32 bytes on
|
|
- * multi-core variants.
|
|
- *
|
|
- * The H264 decoder needs extra space on the output buffers
|
|
- * to store motion vectors. This is needed for reference
|
|
- * frames and only if the format is non-post-processed NV12.
|
|
- *
|
|
- * Memory layout is as follow:
|
|
- *
|
|
- * +---------------------------+
|
|
- * | Y-plane 256 bytes x MBs |
|
|
- * +---------------------------+
|
|
- * | UV-plane 128 bytes x MBs |
|
|
- * +---------------------------+
|
|
- * | MV buffer 64 bytes x MBs |
|
|
- * +---------------------------+
|
|
- * | MC sync 32 bytes |
|
|
- * +---------------------------+
|
|
- */
|
|
if (ctx->vpu_src_fmt->fourcc == V4L2_PIX_FMT_H264_SLICE &&
|
|
!hantro_needs_postproc(ctx, fmt))
|
|
pix_mp->plane_fmt[0].sizeimage +=
|
|
- 64 * MB_WIDTH(pix_mp->width) *
|
|
- MB_WIDTH(pix_mp->height) + 32;
|
|
+ hantro_h264_mv_size(pix_mp->width,
|
|
+ pix_mp->height);
|
|
} else if (!pix_mp->plane_fmt[0].sizeimage) {
|
|
/*
|
|
* For coded formats the application can specify
|
|
--
|
|
2.17.1
|
|
|
|
|
|
From 220559bea572812494ac528eb4bb3af770748641 Mon Sep 17 00:00:00 2001
|
|
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Date: Wed, 18 Mar 2020 10:21:06 -0300
|
|
Subject: [PATCH] hantro: Refactor for V4L2 API spec compliancy
|
|
|
|
Refactor how S_FMT and TRY_FMT are handled, and also make sure
|
|
internal initial format and format reset are done properly.
|
|
|
|
The latter is achieved by making sure the same hantro_{set,try}_fmt
|
|
helpers are called on all paths that set the format (which is
|
|
part of the driver state).
|
|
|
|
This commit removes the following v4l2-compliance warnings:
|
|
|
|
test VIDIOC_G_FMT: OK
|
|
fail: v4l2-test-formats.cpp(711): Video Capture Multiplanar: TRY_FMT(G_FMT) != G_FMT
|
|
test VIDIOC_TRY_FMT: FAIL
|
|
fail: v4l2-test-formats.cpp(1116): Video Capture Multiplanar: S_FMT(G_FMT) != G_FMT
|
|
test VIDIOC_S_FMT: FAIL
|
|
|
|
Reported-by: Nicolas Dufresne <nicolas.dufresne@collabora.com>
|
|
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
---
|
|
drivers/staging/media/hantro/hantro.h | 3 +-
|
|
drivers/staging/media/hantro/hantro_v4l2.c | 70 ++++++++++++++--------
|
|
2 files changed, 47 insertions(+), 26 deletions(-)
|
|
|
|
diff --git a/drivers/staging/media/hantro/hantro.h b/drivers/staging/media/hantro/hantro.h
|
|
index 1a010d438ac2..f0aca46969f9 100644
|
|
--- a/drivers/staging/media/hantro/hantro.h
|
|
+++ b/drivers/staging/media/hantro/hantro.h
|
|
@@ -417,7 +417,8 @@ hantro_get_dst_buf(struct hantro_ctx *ctx)
|
|
}
|
|
|
|
static inline bool
|
|
-hantro_needs_postproc(struct hantro_ctx *ctx, const struct hantro_fmt *fmt)
|
|
+hantro_needs_postproc(const struct hantro_ctx *ctx,
|
|
+ const struct hantro_fmt *fmt)
|
|
{
|
|
return fmt->fourcc != V4L2_PIX_FMT_NV12;
|
|
}
|
|
diff --git a/drivers/staging/media/hantro/hantro_v4l2.c b/drivers/staging/media/hantro/hantro_v4l2.c
|
|
index 458b502ff01b..f28a94e2fa93 100644
|
|
--- a/drivers/staging/media/hantro/hantro_v4l2.c
|
|
+++ b/drivers/staging/media/hantro/hantro_v4l2.c
|
|
@@ -30,6 +30,11 @@
|
|
#include "hantro_hw.h"
|
|
#include "hantro_v4l2.h"
|
|
|
|
+static int hantro_set_fmt_out(struct hantro_ctx *ctx,
|
|
+ struct v4l2_pix_format_mplane *pix_mp);
|
|
+static int hantro_set_fmt_cap(struct hantro_ctx *ctx,
|
|
+ struct v4l2_pix_format_mplane *pix_mp);
|
|
+
|
|
static const struct hantro_fmt *
|
|
hantro_get_formats(const struct hantro_ctx *ctx, unsigned int *num_fmts)
|
|
{
|
|
@@ -227,12 +232,12 @@ static int vidioc_g_fmt_cap_mplane(struct file *file, void *priv,
|
|
return 0;
|
|
}
|
|
|
|
-static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f,
|
|
- bool capture)
|
|
+static int hantro_try_fmt(const struct hantro_ctx *ctx,
|
|
+ struct v4l2_pix_format_mplane *pix_mp,
|
|
+ enum v4l2_buf_type type)
|
|
{
|
|
- struct hantro_ctx *ctx = fh_to_ctx(priv);
|
|
- struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp;
|
|
const struct hantro_fmt *fmt, *vpu_fmt;
|
|
+ bool capture = !V4L2_TYPE_IS_OUTPUT(type);
|
|
bool coded;
|
|
|
|
coded = capture == hantro_is_encoder_ctx(ctx);
|
|
@@ -246,7 +251,7 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f,
|
|
fmt = hantro_find_format(ctx, pix_mp->pixelformat);
|
|
if (!fmt) {
|
|
fmt = hantro_get_default_fmt(ctx, coded);
|
|
- f->fmt.pix_mp.pixelformat = fmt->fourcc;
|
|
+ pix_mp->pixelformat = fmt->fourcc;
|
|
}
|
|
|
|
if (coded) {
|
|
@@ -294,13 +299,13 @@ static int vidioc_try_fmt(struct file *file, void *priv, struct v4l2_format *f,
|
|
static int vidioc_try_fmt_cap_mplane(struct file *file, void *priv,
|
|
struct v4l2_format *f)
|
|
{
|
|
- return vidioc_try_fmt(file, priv, f, true);
|
|
+ return hantro_try_fmt(fh_to_ctx(priv), &f->fmt.pix_mp, f->type);
|
|
}
|
|
|
|
static int vidioc_try_fmt_out_mplane(struct file *file, void *priv,
|
|
struct v4l2_format *f)
|
|
{
|
|
- return vidioc_try_fmt(file, priv, f, false);
|
|
+ return hantro_try_fmt(fh_to_ctx(priv), &f->fmt.pix_mp, f->type);
|
|
}
|
|
|
|
static void
|
|
@@ -334,11 +339,12 @@ hantro_reset_encoded_fmt(struct hantro_ctx *ctx)
|
|
}
|
|
|
|
hantro_reset_fmt(fmt, vpu_fmt);
|
|
- fmt->num_planes = 1;
|
|
fmt->width = vpu_fmt->frmsize.min_width;
|
|
fmt->height = vpu_fmt->frmsize.min_height;
|
|
- fmt->plane_fmt[0].sizeimage = vpu_fmt->header_size +
|
|
- fmt->width * fmt->height * vpu_fmt->max_depth;
|
|
+ if (hantro_is_encoder_ctx(ctx))
|
|
+ hantro_set_fmt_cap(ctx, fmt);
|
|
+ else
|
|
+ hantro_set_fmt_out(ctx, fmt);
|
|
}
|
|
|
|
static void
|
|
@@ -360,9 +366,12 @@ hantro_reset_raw_fmt(struct hantro_ctx *ctx)
|
|
}
|
|
|
|
hantro_reset_fmt(raw_fmt, raw_vpu_fmt);
|
|
- v4l2_fill_pixfmt_mp(raw_fmt, raw_vpu_fmt->fourcc,
|
|
- encoded_fmt->width,
|
|
- encoded_fmt->height);
|
|
+ raw_fmt->width = encoded_fmt->width;
|
|
+ raw_fmt->width = encoded_fmt->width;
|
|
+ if (hantro_is_encoder_ctx(ctx))
|
|
+ hantro_set_fmt_out(ctx, raw_fmt);
|
|
+ else
|
|
+ hantro_set_fmt_cap(ctx, raw_fmt);
|
|
}
|
|
|
|
void hantro_reset_fmts(struct hantro_ctx *ctx)
|
|
@@ -388,15 +397,15 @@ hantro_update_requires_request(struct hantro_ctx *ctx, u32 fourcc)
|
|
}
|
|
}
|
|
|
|
-static int
|
|
-vidioc_s_fmt_out_mplane(struct file *file, void *priv, struct v4l2_format *f)
|
|
+static int hantro_set_fmt_out(struct hantro_ctx *ctx,
|
|
+ struct v4l2_pix_format_mplane *pix_mp)
|
|
{
|
|
- struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp;
|
|
- struct hantro_ctx *ctx = fh_to_ctx(priv);
|
|
- struct vb2_queue *vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, f->type);
|
|
+ struct vb2_queue *vq;
|
|
int ret;
|
|
|
|
- ret = vidioc_try_fmt_out_mplane(file, priv, f);
|
|
+ vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx,
|
|
+ V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
|
|
+ ret = hantro_try_fmt(ctx, pix_mp, V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE);
|
|
if (ret)
|
|
return ret;
|
|
|
|
@@ -458,16 +467,15 @@ vidioc_s_fmt_out_mplane(struct file *file, void *priv, struct v4l2_format *f)
|
|
return 0;
|
|
}
|
|
|
|
-static int vidioc_s_fmt_cap_mplane(struct file *file, void *priv,
|
|
- struct v4l2_format *f)
|
|
+static int hantro_set_fmt_cap(struct hantro_ctx *ctx,
|
|
+ struct v4l2_pix_format_mplane *pix_mp)
|
|
{
|
|
- struct v4l2_pix_format_mplane *pix_mp = &f->fmt.pix_mp;
|
|
- struct hantro_ctx *ctx = fh_to_ctx(priv);
|
|
struct vb2_queue *vq;
|
|
int ret;
|
|
|
|
/* Change not allowed if queue is busy. */
|
|
- vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx, f->type);
|
|
+ vq = v4l2_m2m_get_vq(ctx->fh.m2m_ctx,
|
|
+ V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
|
|
if (vb2_is_busy(vq))
|
|
return -EBUSY;
|
|
|
|
@@ -488,7 +496,7 @@ static int vidioc_s_fmt_cap_mplane(struct file *file, void *priv,
|
|
return -EBUSY;
|
|
}
|
|
|
|
- ret = vidioc_try_fmt_cap_mplane(file, priv, f);
|
|
+ ret = hantro_try_fmt(ctx, pix_mp, V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE);
|
|
if (ret)
|
|
return ret;
|
|
|
|
@@ -522,6 +530,18 @@ static int vidioc_s_fmt_cap_mplane(struct file *file, void *priv,
|
|
return 0;
|
|
}
|
|
|
|
+static int
|
|
+vidioc_s_fmt_out_mplane(struct file *file, void *priv, struct v4l2_format *f)
|
|
+{
|
|
+ return hantro_set_fmt_out(fh_to_ctx(priv), &f->fmt.pix_mp);
|
|
+}
|
|
+
|
|
+static int
|
|
+vidioc_s_fmt_cap_mplane(struct file *file, void *priv, struct v4l2_format *f)
|
|
+{
|
|
+ return hantro_set_fmt_cap(fh_to_ctx(priv), &f->fmt.pix_mp);
|
|
+}
|
|
+
|
|
const struct v4l2_ioctl_ops hantro_ioctl_ops = {
|
|
.vidioc_querycap = vidioc_querycap,
|
|
.vidioc_enum_framesizes = vidioc_enum_framesizes,
|
|
--
|
|
2.17.1
|
|
|
|
|
|
From 03a4222379d16c8a5f4a9c74f78c977b6a0e16a0 Mon Sep 17 00:00:00 2001
|
|
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Date: Wed, 18 Mar 2020 10:21:07 -0300
|
|
Subject: [PATCH] dt-bindings: rockchip-vpu: Convert bindings to json-schema
|
|
|
|
Convert Rockchip VPU (Hantro IP block) codec driver documentation to
|
|
json-schema.
|
|
|
|
Cc: Rob Herring <robh@kernel.org>
|
|
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
---
|
|
.../bindings/media/rockchip-vpu.txt | 43 ----------
|
|
.../bindings/media/rockchip-vpu.yaml | 82 +++++++++++++++++++
|
|
MAINTAINERS | 2 +-
|
|
3 files changed, 83 insertions(+), 44 deletions(-)
|
|
delete mode 100644 Documentation/devicetree/bindings/media/rockchip-vpu.txt
|
|
create mode 100644 Documentation/devicetree/bindings/media/rockchip-vpu.yaml
|
|
|
|
diff --git a/Documentation/devicetree/bindings/media/rockchip-vpu.txt b/Documentation/devicetree/bindings/media/rockchip-vpu.txt
|
|
deleted file mode 100644
|
|
index 339252d9c515..000000000000
|
|
--- a/Documentation/devicetree/bindings/media/rockchip-vpu.txt
|
|
+++ /dev/null
|
|
@@ -1,43 +0,0 @@
|
|
-device-tree bindings for rockchip VPU codec
|
|
-
|
|
-Rockchip (Video Processing Unit) present in various Rockchip platforms,
|
|
-such as RK3288, RK3328 and RK3399.
|
|
-
|
|
-Required properties:
|
|
-- compatible: value should be one of the following
|
|
- "rockchip,rk3288-vpu";
|
|
- "rockchip,rk3328-vpu";
|
|
- "rockchip,rk3399-vpu";
|
|
-- interrupts: encoding and decoding interrupt specifiers
|
|
-- interrupt-names: should be
|
|
- "vepu", "vdpu" on RK3288 and RK3399,
|
|
- "vdpu" on RK3328.
|
|
-- clocks: phandle to VPU aclk, hclk clocks
|
|
-- clock-names: should be "aclk" and "hclk"
|
|
-- power-domains: phandle to power domain node
|
|
-- iommus: phandle to a iommu node
|
|
-
|
|
-Example:
|
|
-SoC-specific DT entry:
|
|
- vpu: video-codec@ff9a0000 {
|
|
- compatible = "rockchip,rk3288-vpu";
|
|
- reg = <0x0 0xff9a0000 0x0 0x800>;
|
|
- interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
|
|
- <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
|
- interrupt-names = "vepu", "vdpu";
|
|
- clocks = <&cru ACLK_VCODEC>, <&cru HCLK_VCODEC>;
|
|
- clock-names = "aclk", "hclk";
|
|
- power-domains = <&power RK3288_PD_VIDEO>;
|
|
- iommus = <&vpu_mmu>;
|
|
- };
|
|
-
|
|
- vpu: video-codec@ff350000 {
|
|
- compatible = "rockchip,rk3328-vpu";
|
|
- reg = <0x0 0xff350000 0x0 0x800>;
|
|
- interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
|
- interrupt-names = "vdpu";
|
|
- clocks = <&cru ACLK_VPU>, <&cru HCLK_VPU>;
|
|
- clock-names = "aclk", "hclk";
|
|
- power-domains = <&power RK3328_PD_VPU>;
|
|
- iommus = <&vpu_mmu>;
|
|
- };
|
|
diff --git a/Documentation/devicetree/bindings/media/rockchip-vpu.yaml b/Documentation/devicetree/bindings/media/rockchip-vpu.yaml
|
|
new file mode 100644
|
|
index 000000000000..a0c45e05cf03
|
|
--- /dev/null
|
|
+++ b/Documentation/devicetree/bindings/media/rockchip-vpu.yaml
|
|
@@ -0,0 +1,82 @@
|
|
+# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause)
|
|
+
|
|
+%YAML 1.2
|
|
+---
|
|
+$id: "http://devicetree.org/schemas/media/rockchip-vpu.yaml#"
|
|
+$schema: "http://devicetree.org/meta-schemas/core.yaml#"
|
|
+
|
|
+title: Hantro G1 VPU codecs implemented on Rockchip SoCs
|
|
+
|
|
+maintainers:
|
|
+ - Ezequiel Garcia <ezequiel@collabora.com>
|
|
+
|
|
+description:
|
|
+ Hantro G1 video encode and decode accelerators present on Rockchip SoCs.
|
|
+
|
|
+properties:
|
|
+ compatible:
|
|
+ enum:
|
|
+ - rockchip,rk3288-vpu
|
|
+ - rockchip,rk3328-vpu
|
|
+ - rockchip,rk3399-vpu
|
|
+
|
|
+ reg:
|
|
+ maxItems: 1
|
|
+
|
|
+ interrupts:
|
|
+ maxItems: 2
|
|
+
|
|
+ interrupt-names:
|
|
+ items:
|
|
+ - const: vepu
|
|
+ - const: vdpu
|
|
+
|
|
+ clocks:
|
|
+ maxItems: 2
|
|
+
|
|
+ clock-names:
|
|
+ items:
|
|
+ - const: aclk
|
|
+ - const: hclk
|
|
+
|
|
+ power-domains:
|
|
+ maxItems: 1
|
|
+
|
|
+ iommus:
|
|
+ maxItems: 1
|
|
+
|
|
+required:
|
|
+ - compatible
|
|
+ - reg
|
|
+ - interrupts
|
|
+ - interrupt-names
|
|
+ - clocks
|
|
+ - clock-names
|
|
+
|
|
+examples:
|
|
+ - |
|
|
+ #include <dt-bindings/clock/rk3288-cru.h>
|
|
+ #include <dt-bindings/interrupt-controller/arm-gic.h>
|
|
+
|
|
+ vpu: video-codec@ff9a0000 {
|
|
+ compatible = "rockchip,rk3288-vpu";
|
|
+ reg = <0x0 0xff9a0000 0x0 0x800>;
|
|
+ interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>,
|
|
+ <GIC_SPI 10 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ interrupt-names = "vepu", "vdpu";
|
|
+ clocks = <&cru ACLK_VCODEC>, <&cru HCLK_VCODEC>;
|
|
+ clock-names = "aclk", "hclk";
|
|
+ power-domains = <&power RK3288_PD_VIDEO>;
|
|
+ iommus = <&vpu_mmu>;
|
|
+ };
|
|
+
|
|
+ vpu: video-codec@ff350000 {
|
|
+ compatible = "rockchip,rk3328-vpu";
|
|
+ reg = <0x0 0xff350000 0x0 0x800>;
|
|
+ interrupts = <GIC_SPI 9 IRQ_TYPE_LEVEL_HIGH>;
|
|
+ interrupt-names = "vdpu";
|
|
+ clocks = <&cru ACLK_VPU>, <&cru HCLK_VPU>;
|
|
+ clock-names = "aclk", "hclk";
|
|
+ power-domains = <&power RK3328_PD_VPU>;
|
|
+ iommus = <&vpu_mmu>;
|
|
+ };
|
|
diff --git a/MAINTAINERS b/MAINTAINERS
|
|
index 0bff05c4c96d..ca95e804aae0 100644
|
|
--- a/MAINTAINERS
|
|
+++ b/MAINTAINERS
|
|
@@ -14319,7 +14319,7 @@ M: Ezequiel Garcia <ezequiel@collabora.com>
|
|
L: linux-media@vger.kernel.org
|
|
S: Maintained
|
|
F: drivers/staging/media/hantro/
|
|
-F: Documentation/devicetree/bindings/media/rockchip-vpu.txt
|
|
+F: Documentation/devicetree/bindings/media/rockchip-vpu.yaml
|
|
|
|
ROCKER DRIVER
|
|
M: Jiri Pirko <jiri@resnulli.us>
|
|
--
|
|
2.17.1
|
|
|
|
|
|
From 1eba04297572f566a06ab9fe50f901640c77b091 Mon Sep 17 00:00:00 2001
|
|
From: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Date: Wed, 18 Mar 2020 10:21:08 -0300
|
|
Subject: [PATCH] hantro: Add linux-rockchip mailing list to MAINTAINERS
|
|
|
|
The linux-rockchip mailing list is relevant for the
|
|
Hantro driver, given this support the VPU present
|
|
in Rockchip SoCs.
|
|
|
|
Signed-off-by: Ezequiel Garcia <ezequiel@collabora.com>
|
|
Reviewed-by: Heiko Stuebner <heiko@sntech.de>
|
|
---
|
|
MAINTAINERS | 1 +
|
|
1 file changed, 1 insertion(+)
|
|
|
|
diff --git a/MAINTAINERS b/MAINTAINERS
|
|
index ca95e804aae0..47876afb9e26 100644
|
|
--- a/MAINTAINERS
|
|
+++ b/MAINTAINERS
|
|
@@ -14317,6 +14317,7 @@ F: Documentation/devicetree/bindings/media/rockchip-rga.txt
|
|
HANTRO VPU CODEC DRIVER
|
|
M: Ezequiel Garcia <ezequiel@collabora.com>
|
|
L: linux-media@vger.kernel.org
|
|
+L: linux-rockchip@lists.infradead.org
|
|
S: Maintained
|
|
F: drivers/staging/media/hantro/
|
|
F: Documentation/devicetree/bindings/media/rockchip-vpu.yaml
|
|
--
|
|
2.17.1
|
|
|