linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests
@ 2018-07-10  8:00 Paul Kocialkowski
  2018-07-10  8:00 ` [PATCH v5 01/22] v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions Paul Kocialkowski
                   ` (21 more replies)
  0 siblings, 22 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:00 UTC (permalink / raw)
  To: linux-media, devicetree, linux-arm-kernel, linux-kernel
  Cc: Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Maxime Ripard,
	Chen-Yu Tsai, Paul Kocialkowski, Marco Franchi, Icenowy Zheng,
	Hans Verkuil, Keiichi Watanabe, Jonathan Corbet, Smitha T Murthy,
	Tom Saeger, Andrzej Hajda, David S . Miller, Greg Kroah-Hartman,
	Andrew Morton, Randy Dunlap, Arnd Bergmann, Geert Uytterhoeven,
	Laurent Pinchart, Jacob Chen, Neil Armstrong, Benoit Parrot,
	Todor Tomov, Alexandre Courbot, Sakari Ailus, Andy Shevchenko,
	Pawel Osciak, Ricardo Ribalda Delgado, Hans de Goede,
	Sami Tolvanen, Niklas Söderlund, linux-sunxi,
	Thomas Petazzoni, Hugues Fruchet, Randy Li

This is the fifth iteration of the updated Sunxi-Cedrus driver,
that supports the Video Engine found in most Allwinner SoCs, starting
with the A10. It was tested on the A13, A20, A33 and H3.

The initial version of this driver[0] was originally written and
submitted by Florent Revest using a previous version of the request API
that is necessary to provide coherency between controls and the buffers
they apply to.

The driver was adapted to use the latest version of the media request
API[1], as submitted by Hand Verkuil. Media request API support is a
hard requirement for the Sunxi-Cedrus driver.

The driver itself currently only supports MPEG2 and more codecs will be
added to the driver eventually. The output frames provided by the
Video Engine are in a multi-planar 32x32-tiled YUV format, with a plane
for luminance (Y) and a plane for chrominance (UV). A specific format is
introduced in the V4L2 API to describe it.

This implementation is based on the significant work that was conducted
by various members of the linux-sunxi community for understanding and
documenting the Video Engine's innards.

In addition to the media requests API, the following series is required for
Sunxi-Cedrus:
* allwinner: a64: add SRAM controller / system control

Changes since v4:
* updated to version 16 of the media requests API;
* added support for VPU-based untiling (starting with the A33);
* added support for the H3, with SRAM support;
* reworked SRAM support and associated compatibles;
* improved failure paths;
* added some MPEG2 input data validation;
* reworked video/format functions to handle multiple formats;
* removed in-driver buffer queues;
* used a threaded irq instead of a workqueue;
* merged various improvements and cleanups from Maxime;
* renamed MPEG2_SLICE_HEADER to MPEG2_SLICE_PARAMS;
* added prefixes to MPEG2 picture coding types;
* used single-buffer allocations to ensure contiguous planes

Changes since v3:
* updated to version 15 of the media request API;
* got rid of untested MPEG1 support;
* added definitons for picture coding types;
* added documentation about MPEG2 slice header fields;
* added documentation about MPEG2 slice format;
* added documentation about the MB32 NV12 format;
* added MPEG2 slice header validation;
* removed the assigned-clocks property;
* reworked and fixed error paths;
* harmonized debug prints, with v4l2 helpers when applicable;
* checked the series through checkpatch;
* switched to SPDX license headers;
* renamed MPEG2 frame header to slice header for consistency and clarity;
* removed A20 SRAM compatible from the driver's list.

Changes since v2:
* updated to version 13 of the media request API;
* integrated various changes from Maxime Ripard;
* reworked memory reservation to use CMA, dynamic allocation and allow
  DMABUF;
* removed reserved memory binding since the CMA pool is the default one
  (and allow ENODEV in the driver, for that use case);
* added SRAM controller support for the SRAM region used by the VE;
* updated the device-tree bindings the for SRAM region;
* added per-platform bindings;
* added A13 support;
* renamed VE node name and label;
* fixed Florent's authorship for the MPEG2 headers;
* added a MAINTAINERS entry.

Changes since v1:
* use the latest version of the request API for Hans Verkuil;
* added media controller support and dependency
* renamed v4l2 format to the more explicit V4L2_PIX_FMT_MB32_NV12;
* reworked bindings documentation;
* moved driver to drivers/media/platforms/sunxi/cedrus to pair with
  incoming CSI support ;
* added a workqueue and lists to schedule buffer completion, since it
  cannot be done in interrupt context;
* split mpeg2 support into a setup and a trigger function to avoid race
  condition;
* split video-related ops to a dedicated sunxi_cedrus_video file;
* cleaned up the included headers for each file;
* used device PFN offset instead of subtracting PHYS_BASE;
* used reset_control_reset instead of assert+deassert;
* put the device in reset when removing driver;
* changed dt bindings to use the last 96 Mib of the first 256 MiB of
  DRAM;
* made it clear in the mpeg frame header structure that forward and
  backward indexes are used as reference frames for motion vectors;
* lots of small cosmetic and consistency changes, including naming
  harmonization and headers text rework.

Cheers!

[0]: https://patchwork.kernel.org/patch/9299073/
[1]: https://git.linuxtv.org/hverkuil/media_tree.git/log/?h=reqv16

Hans Verkuil (1):
  v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions

Maxime Ripard (4):
  drivers: soc: sunxi: Add support for the C1 SRAM region
  ARM: sun5i: Add support for the C1 SRAM region with the SRAM
    controller
  ARM: sun7i-a20: Add support for the C1 SRAM region with the SRAM
    controller
  ARM: sun8i-a23-a33: Add SRAM controller node and C1 SRAM region

Paul Kocialkowski (17):
  fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find
    functions
  dt-bindings: sram: sunxi: Introduce new A10 binding for system-control
  dt-bindings: sram: sunxi: Add A13, A20, A23 and H3 dedicated bindings
  dt-bindings: sram: sunxi: Populate valid sections compatibles
  soc: sunxi: sram: Add dt match for the A10 system-control compatible
  ARM: dts: sun4i-a10: Use system-control compatible
  ARM: dts: sun5i: Use most-qualified system control compatibles
  ARM: dts: sun7i-a20: Use most-qualified system control compatibles
  ARM: sun8i-h3: Add SRAM controller node and C1 SRAM region
  media: v4l: Add definitions for MPEG2 slice format and header metadata
  media: v4l: Add definition for Allwinner's MB32-tiled NV12 format
  dt-bindings: media: Document bindings for the Sunxi-Cedrus VPU driver
  media: platform: Add Sunxi-Cedrus VPU decoder driver
  ARM: dts: sun5i: Add Video Engine and reserved memory nodes
  ARM: dts: sun7i-a20: Add Video Engine and reserved memory nodes
  ARM: dts: sun8i-a33: Add Video Engine and reserved memory nodes
  ARM: dts: sun8i-h3: Add Video Engine and reserved memory nodes

 .../bindings/media/sunxi-cedrus.txt           |  54 ++
 .../devicetree/bindings/sram/sunxi-sram.txt   |  36 +-
 .../media/uapi/v4l/extended-controls.rst      |  74 +++
 .../media/uapi/v4l/pixfmt-compressed.rst      |   5 +
 .../media/uapi/v4l/pixfmt-reserved.rst        |  15 +-
 MAINTAINERS                                   |   7 +
 arch/arm/boot/dts/sun4i-a10.dtsi              |   4 +-
 arch/arm/boot/dts/sun5i.dtsi                  |  53 +-
 arch/arm/boot/dts/sun7i-a20.dtsi              |  53 +-
 arch/arm/boot/dts/sun8i-a23-a33.dtsi          |  23 +
 arch/arm/boot/dts/sun8i-a33.dtsi              |  29 +
 arch/arm/boot/dts/sun8i-h3.dtsi               |  50 ++
 drivers/media/platform/Kconfig                |   2 +
 drivers/media/platform/Makefile               |   1 +
 drivers/media/platform/sunxi/Kconfig          |  15 +
 drivers/media/platform/sunxi/Makefile         |   1 +
 drivers/media/platform/sunxi/cedrus/Kconfig   |  13 +
 drivers/media/platform/sunxi/cedrus/Makefile  |   3 +
 drivers/media/platform/sunxi/cedrus/cedrus.c  | 374 ++++++++++++
 drivers/media/platform/sunxi/cedrus/cedrus.h  | 161 +++++
 .../media/platform/sunxi/cedrus/cedrus_dec.c  | 129 ++++
 .../media/platform/sunxi/cedrus/cedrus_dec.h  |  27 +
 .../media/platform/sunxi/cedrus/cedrus_hw.c   | 325 ++++++++++
 .../media/platform/sunxi/cedrus/cedrus_hw.h   |  29 +
 .../platform/sunxi/cedrus/cedrus_mpeg2.c      | 178 ++++++
 .../media/platform/sunxi/cedrus/cedrus_regs.h | 195 ++++++
 .../platform/sunxi/cedrus/cedrus_video.c      | 556 ++++++++++++++++++
 .../platform/sunxi/cedrus/cedrus_video.h      |  31 +
 drivers/media/v4l2-core/v4l2-ctrls.c          |  69 +++
 drivers/media/v4l2-core/v4l2-ioctl.c          |   2 +
 drivers/soc/sunxi/sunxi_sram.c                |  14 +
 include/media/v4l2-ctrls.h                    |  60 +-
 include/uapi/linux/v4l2-controls.h            |  30 +
 include/uapi/linux/videodev2.h                |   4 +
 34 files changed, 2600 insertions(+), 22 deletions(-)
 create mode 100644 Documentation/devicetree/bindings/media/sunxi-cedrus.txt
 create mode 100644 drivers/media/platform/sunxi/Kconfig
 create mode 100644 drivers/media/platform/sunxi/Makefile
 create mode 100644 drivers/media/platform/sunxi/cedrus/Kconfig
 create mode 100644 drivers/media/platform/sunxi/cedrus/Makefile
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus.c
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus.h
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus_dec.c
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus_dec.h
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus_hw.c
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus_hw.h
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus_mpeg2.c
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus_regs.h
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus_video.c
 create mode 100644 drivers/media/platform/sunxi/cedrus/cedrus_video.h

-- 
2.17.1


^ permalink raw reply	[flat|nested] 52+ messages in thread

end of thread, other threads:[~2018-07-24 14:57 UTC | newest]

Thread overview: 52+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
2018-07-10  8:00 ` [PATCH v5 01/22] v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions Paul Kocialkowski
2018-07-10  8:00 ` [PATCH v5 02/22] fixup! " Paul Kocialkowski
2018-07-10  8:07   ` Geert Uytterhoeven
2018-07-10  8:13     ` Paul Kocialkowski
2018-07-10  8:17       ` Hans Verkuil
2018-07-10  8:21         ` Paul Kocialkowski
2018-07-10  8:00 ` [PATCH v5 03/22] dt-bindings: sram: sunxi: Introduce new A10 binding for system-control Paul Kocialkowski
2018-07-10 14:02   ` Chen-Yu Tsai
2018-07-11  8:34   ` Maxime Ripard
2018-07-10  8:00 ` [PATCH v5 04/22] dt-bindings: sram: sunxi: Add A13, A20, A23 and H3 dedicated bindings Paul Kocialkowski
2018-07-10 14:36   ` Chen-Yu Tsai
2018-07-11  8:46     ` Maxime Ripard
2018-07-10  8:00 ` [PATCH v5 05/22] dt-bindings: sram: sunxi: Populate valid sections compatibles Paul Kocialkowski
2018-07-10 14:47   ` Chen-Yu Tsai
2018-07-11  8:55     ` Maxime Ripard
2018-07-10  8:00 ` [PATCH v5 06/22] soc: sunxi: sram: Add dt match for the A10 system-control compatible Paul Kocialkowski
2018-07-10 14:48   ` Chen-Yu Tsai
2018-07-11  8:35   ` Maxime Ripard
2018-07-10  8:00 ` [PATCH v5 07/22] drivers: soc: sunxi: Add support for the C1 SRAM region Paul Kocialkowski
2018-07-10 14:49   ` Chen-Yu Tsai
2018-07-10  8:01 ` [PATCH v5 08/22] ARM: dts: sun4i-a10: Use system-control compatible Paul Kocialkowski
2018-07-10 14:52   ` Chen-Yu Tsai
2018-07-10 14:58     ` Maxime Ripard
2018-07-10  8:01 ` [PATCH v5 09/22] ARM: dts: sun5i: Use most-qualified system control compatibles Paul Kocialkowski
2018-07-10 14:53   ` [linux-sunxi] " Chen-Yu Tsai
2018-07-11  9:01     ` Maxime Ripard
2018-07-10  8:01 ` [PATCH v5 10/22] ARM: dts: sun7i-a20: " Paul Kocialkowski
2018-07-10 14:54   ` [linux-sunxi] " Chen-Yu Tsai
2018-07-10  8:01 ` [PATCH v5 11/22] ARM: sun5i: Add support for the C1 SRAM region with the SRAM controller Paul Kocialkowski
2018-07-10 14:56   ` Chen-Yu Tsai
2018-07-11  9:08     ` Maxime Ripard
2018-07-10  8:01 ` [PATCH v5 12/22] ARM: sun7i-a20: " Paul Kocialkowski
2018-07-11  9:11   ` Maxime Ripard
2018-07-10  8:01 ` [PATCH v5 13/22] ARM: sun8i-a23-a33: Add SRAM controller node and C1 SRAM region Paul Kocialkowski
2018-07-11  9:14   ` Maxime Ripard
2018-07-10  8:01 ` [PATCH v5 14/22] ARM: sun8i-h3: " Paul Kocialkowski
2018-07-11  9:15   ` Maxime Ripard
2018-07-10  8:01 ` [PATCH v5 15/22] media: v4l: Add definitions for MPEG2 slice format and header metadata Paul Kocialkowski
2018-07-10  8:01 ` [PATCH v5 16/22] media: v4l: Add definition for Allwinner's MB32-tiled NV12 format Paul Kocialkowski
2018-07-10  8:01 ` [PATCH v5 17/22] dt-bindings: media: Document bindings for the Sunxi-Cedrus VPU driver Paul Kocialkowski
2018-07-10  8:01 ` [PATCH v5 18/22] media: platform: Add Sunxi-Cedrus VPU decoder driver Paul Kocialkowski
2018-07-10  8:42   ` Maxime Ripard
2018-07-24 14:56     ` Paul Kocialkowski
2018-07-10 19:57   ` Ezequiel Garcia
2018-07-13  8:40     ` Paul Kocialkowski
2018-07-10  8:01 ` [PATCH v5 19/22] ARM: dts: sun5i: Add Video Engine and reserved memory nodes Paul Kocialkowski
2018-07-10  8:01 ` [PATCH v5 20/22] ARM: dts: sun7i-a20: " Paul Kocialkowski
2018-07-10  9:23   ` Maxime Ripard
2018-07-13  8:28     ` Paul Kocialkowski
2018-07-10  8:01 ` [PATCH v5 21/22] ARM: dts: sun8i-a33: " Paul Kocialkowski
2018-07-10  8:01 ` [PATCH v5 22/22] ARM: dts: sun8i-h3: " Paul Kocialkowski

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).