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

* [PATCH v5 01/22] v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
  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 ` Paul Kocialkowski
  2018-07-10  8:00 ` [PATCH v5 02/22] fixup! " Paul Kocialkowski
                   ` (20 subsequent siblings)
  21 siblings, 0 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, Hans Verkuil

From: Hans Verkuil <hverkuil@xs4all.nl>

If a driver needs to find/inspect the controls set in a request then
it can use these functions.

E.g. to check if a required control is set in a request use this in the
req_validate() implementation:

	int res = -EINVAL;

	hdl = v4l2_ctrl_request_hdl_find(req, parent_hdl);
	if (hdl) {
		if (v4l2_ctrl_request_hdl_ctrl_find(hdl, ctrl_id))
			res = 0;
		v4l2_ctrl_request_hdl_put(hdl);
	}
	return res;

Signed-off-by: Hans Verkuil <hans.verkuil@cisco.com>
---
 drivers/media/v4l2-core/v4l2-ctrls.c | 25 ++++++++++++++++
 include/media/v4l2-ctrls.h           | 44 +++++++++++++++++++++++++++-
 2 files changed, 68 insertions(+), 1 deletion(-)

diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 86a6ae54ccaa..198b7e924d21 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -2976,6 +2976,31 @@ static const struct media_request_object_ops req_ops = {
 	.release = v4l2_ctrl_request_release,
 };
 
+struct v4l2_ctrl_handler *v4l2_ctrl_request_hdl_find(struct media_request *req,
+					struct v4l2_ctrl_handler *parent)
+{
+	struct media_request_object *obj;
+	
+	if (WARN_ON(req->state != MEDIA_REQUEST_STATE_VALIDATING &&
+		    req->state != MEDIA_REQUEST_STATE_QUEUED))
+		return NULL;
+
+	obj = media_request_object_find(req, &req_ops, parent);
+	if (obj)
+		return container_of(obj, struct v4l2_ctrl_handler, req_obj);
+	return NULL;
+}
+EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_find);
+
+struct v4l2_ctrl *
+v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
+{
+	struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
+
+	return (ref && ref->req == ref) ? ref : NULL;
+}
+EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_ctrl_find);
+
 static int v4l2_ctrl_request_bind(struct media_request *req,
 			   struct v4l2_ctrl_handler *hdl,
 			   struct v4l2_ctrl_handler *from)
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index de70cc3a1b80..34ee3167d7dd 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -1111,7 +1111,49 @@ void v4l2_ctrl_request_setup(struct media_request *req,
  * request object.
  */
 void v4l2_ctrl_request_complete(struct media_request *req,
-				struct v4l2_ctrl_handler *hdl);
+				struct v4l2_ctrl_handler *parent);
+
+/**
+ * v4l2_ctrl_request_hdl_find - Find the control handler in the request
+ *
+ * @req: The request
+ * @parent: The parent control handler ('priv' in media_request_object_find())
+ *
+ * This function finds the control handler in the request. It may return
+ * NULL if not found. When done, you must call v4l2_ctrl_request_put_hdl()
+ * with the returned handler pointer.
+ *
+ * If the request is not in state VALIDATING or QUEUED, then this function
+ * will always return NULL.
+ */
+struct v4l2_ctrl_handler *v4l2_ctrl_request_hdl_find(struct media_request *req,
+					struct v4l2_ctrl_handler *parent);
+
+/**
+ * v4l2_ctrl_request_hdl_put - Put the control handler
+ *
+ * @hdl: Put this control handler
+ *
+ * This function released the control handler previously obtained from'
+ * v4l2_ctrl_request_hdl_find().
+ */
+static inline void v4l2_ctrl_request_hdl_put(struct v4l2_ctrl_handler *hdl)
+{
+	if (hdl)
+		media_request_object_put(&hdl->req_obj);
+}
+
+/**
+ * v4l2_ctrl_request_ctrl_find() - Find a control with the given ID.
+ *
+ * @hdl: The control handler from the request.
+ * @id: The ID of the control to find.
+ *
+ * This function returns a pointer to the control if this control is
+ * part of the request or NULL otherwise.
+ */
+struct v4l2_ctrl *
+v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id);
 
 /* Helpers for ioctl_ops */
 
-- 
2.17.1


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

* [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
  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 ` Paul Kocialkowski
  2018-07-10  8:07   ` Geert Uytterhoeven
  2018-07-10  8:00 ` [PATCH v5 03/22] dt-bindings: sram: sunxi: Introduce new A10 binding for system-control Paul Kocialkowski
                   ` (19 subsequent siblings)
  21 siblings, 1 reply; 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

---
 drivers/media/v4l2-core/v4l2-ctrls.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 198b7e924d21..3610dce3a4f8 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -2997,7 +2997,7 @@ v4l2_ctrl_request_hdl_ctrl_find(struct v4l2_ctrl_handler *hdl, u32 id)
 {
 	struct v4l2_ctrl_ref *ref = find_ref_lock(hdl, id);
 
-	return (ref && ref->req == ref) ? ref : NULL;
+	return (ref && ref->req == ref) ? ref->ctrl : NULL;
 }
 EXPORT_SYMBOL_GPL(v4l2_ctrl_request_hdl_ctrl_find);
 
-- 
2.17.1


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

* [PATCH v5 03/22] dt-bindings: sram: sunxi: Introduce new A10 binding for system-control
  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:00 ` 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
                   ` (18 subsequent siblings)
  21 siblings, 2 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

Following-up on the introduction of a new binding for the A64, this
introduces a system-control binding for the A10 as a replacement of
the sram-controller binding.

This change is motivated by consistency with the Allwinner literature,
that mentions system control over SRAM controller. Moreover, the system
control block is sometimes used for more than SRAM (e.g. for muxing
related to the ethernet PHY).

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 Documentation/devicetree/bindings/sram/sunxi-sram.txt | 7 ++++---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/Documentation/devicetree/bindings/sram/sunxi-sram.txt b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
index 9ef40e2e0a48..d7dd1a393011 100644
--- a/Documentation/devicetree/bindings/sram/sunxi-sram.txt
+++ b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
@@ -10,7 +10,8 @@ Controller Node
 
 Required properties:
 - compatible : should be:
-    - "allwinner,sun4i-a10-sram-controller"
+    - "allwinner,sun4i-a10-sram-controller" (deprecated)
+    - "allwinner,sun4i-a10-system-control"
     - "allwinner,sun50i-a64-sram-controller" (deprecated)
     - "allwinner,sun50i-a64-system-control"
 - reg : sram controller register offset + length
@@ -48,8 +49,8 @@ This valid values for this argument are:
 
 Example
 -------
-sram-controller@1c00000 {
-	compatible = "allwinner,sun4i-a10-sram-controller";
+system-control@1c00000 {
+	compatible = "allwinner,sun4i-a10-system-control";
 	reg = <0x01c00000 0x30>;
 	#address-cells = <1>;
 	#size-cells = <1>;
-- 
2.17.1


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

* [PATCH v5 04/22] dt-bindings: sram: sunxi: Add A13, A20, A23 and H3 dedicated bindings
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (2 preceding siblings ...)
  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  8:00 ` Paul Kocialkowski
  2018-07-10 14:36   ` Chen-Yu Tsai
  2018-07-10  8:00 ` [PATCH v5 05/22] dt-bindings: sram: sunxi: Populate valid sections compatibles Paul Kocialkowski
                   ` (17 subsequent siblings)
  21 siblings, 1 reply; 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 introduces dedicated bindings for the system control blocks found
on the A13, A20, A23 and H3 sunxi platforms.

Since the controllers on the A33 are the very same as those on the A23,
no specific compatible is introduced for it.

These bindings are introduced to allow reflecting the differences that
exist between these controllers, that may become significant to driver
implementations.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 Documentation/devicetree/bindings/sram/sunxi-sram.txt | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/Documentation/devicetree/bindings/sram/sunxi-sram.txt b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
index d7dd1a393011..156a02ab6b54 100644
--- a/Documentation/devicetree/bindings/sram/sunxi-sram.txt
+++ b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
@@ -12,6 +12,10 @@ Required properties:
 - compatible : should be:
     - "allwinner,sun4i-a10-sram-controller" (deprecated)
     - "allwinner,sun4i-a10-system-control"
+    - "allwinner,sun5i-a13-system-control"
+    - "allwinner,sun7i-a20-system-control"
+    - "allwinner,sun8i-a23-system-control"
+    - "allwinner,sun8i-h3-system-control"
     - "allwinner,sun50i-a64-sram-controller" (deprecated)
     - "allwinner,sun50i-a64-system-control"
 - reg : sram controller register offset + length
-- 
2.17.1


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

* [PATCH v5 05/22] dt-bindings: sram: sunxi: Populate valid sections compatibles
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (3 preceding siblings ...)
  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  8:00 ` Paul Kocialkowski
  2018-07-10 14:47   ` Chen-Yu Tsai
  2018-07-10  8:00 ` [PATCH v5 06/22] soc: sunxi: sram: Add dt match for the A10 system-control compatible Paul Kocialkowski
                   ` (16 subsequent siblings)
  21 siblings, 1 reply; 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 adds a list of valid SRAM sections compatibles for the A13, A20,
A23 and H3 platforms. Per-platform compatibles are introduced for the
SRAM sections of these platforms, with the A10 compatibles also listed
as valid when applicable.

In particular, compatibles for the C1 SRAM section are introduced.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 .../devicetree/bindings/sram/sunxi-sram.txt   | 25 +++++++++++++++++++
 1 file changed, 25 insertions(+)

diff --git a/Documentation/devicetree/bindings/sram/sunxi-sram.txt b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
index 156a02ab6b54..07c53c5214a0 100644
--- a/Documentation/devicetree/bindings/sram/sunxi-sram.txt
+++ b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
@@ -32,8 +32,33 @@ once again the representation described in the mmio-sram binding.
 
 The valid sections compatible for A10 are:
     - allwinner,sun4i-a10-sram-a3-a4
+    - allwinner,sun4i-a10-sram-c1
     - allwinner,sun4i-a10-sram-d
 
+The valid sections compatible for A13 are:
+    - allwinner,sun5i-a13-sram-a3-a4
+    - allwinner,sun4i-a10-sram-a3-a4
+    - allwinner,sun5i-a13-sram-c1
+    - allwinner,sun4i-a10-sram-c1
+    - allwinner,sun5i-a13-sram-d
+    - allwinner,sun4i-a10-sram-d
+
+The valid sections compatible for A20 are:
+    - allwinner,sun7i-a20-sram-a3-a4
+    - allwinner,sun4i-a10-sram-a3-a4
+    - allwinner,sun7i-a20-sram-c1
+    - allwinner,sun4i-a10-sram-c1
+    - allwinner,sun7i-a20-sram-d
+    - allwinner,sun4i-a10-sram-d
+
+The valid sections compatible for A23/A33 are:
+    - allwinner,sun8i-a23-sram-c1
+    - allwinner,sun4i-a10-sram-c1
+
+The valid sections compatible for H3 are:
+    - allwinner,sun8i-h3-sram-c1
+    - allwinner,sun4i-a10-sram-c1
+
 The valid sections compatible for A64 are:
     - allwinner,sun50i-a64-sram-c
 
-- 
2.17.1


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

* [PATCH v5 06/22] soc: sunxi: sram: Add dt match for the A10 system-control compatible
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (4 preceding siblings ...)
  2018-07-10  8:00 ` [PATCH v5 05/22] dt-bindings: sram: sunxi: Populate valid sections compatibles Paul Kocialkowski
@ 2018-07-10  8:00 ` 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
                   ` (15 subsequent siblings)
  21 siblings, 2 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 binds the new A10 system-control compatible to the associated
driver, with the same driver data as the previous compatible.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 drivers/soc/sunxi/sunxi_sram.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/soc/sunxi/sunxi_sram.c b/drivers/soc/sunxi/sunxi_sram.c
index 7fec1b160dbb..236f34307c0f 100644
--- a/drivers/soc/sunxi/sunxi_sram.c
+++ b/drivers/soc/sunxi/sunxi_sram.c
@@ -355,6 +355,10 @@ static const struct of_device_id sunxi_sram_dt_match[] = {
 		.compatible = "allwinner,sun4i-a10-sram-controller",
 		.data = &sun4i_a10_sramc_variant,
 	},
+	{
+		.compatible = "allwinner,sun4i-a10-system-control",
+		.data = &sun4i_a10_sramc_variant,
+	},
 	{
 		.compatible = "allwinner,sun50i-a64-sram-controller",
 		.data = &sun50i_a64_sramc_variant,
-- 
2.17.1


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

* [PATCH v5 07/22] drivers: soc: sunxi: Add support for the C1 SRAM region
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (5 preceding siblings ...)
  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  8:00 ` 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
                   ` (14 subsequent siblings)
  21 siblings, 1 reply; 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

From: Maxime Ripard <maxime.ripard@bootlin.com>

This introduces support for the SRAM C1 section, that is controlled by
the system controller. This SRAM area can be muxed either to the CPU
or the Video Engine, that needs this area to store various tables (e.g.
the Huffman VLD decoding tables).

This only supports devices with the same layout as the A10 (which also
includes the A13, A20, A33 and other SoCs).

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 drivers/soc/sunxi/sunxi_sram.c | 10 ++++++++++
 1 file changed, 10 insertions(+)

diff --git a/drivers/soc/sunxi/sunxi_sram.c b/drivers/soc/sunxi/sunxi_sram.c
index 236f34307c0f..b19fa2cc67c2 100644
--- a/drivers/soc/sunxi/sunxi_sram.c
+++ b/drivers/soc/sunxi/sunxi_sram.c
@@ -64,6 +64,12 @@ static struct sunxi_sram_desc sun4i_a10_sram_a3_a4 = {
 				  SUNXI_SRAM_MAP(1, 1, "emac")),
 };
 
+static struct sunxi_sram_desc sun4i_a10_sram_c1 = {
+	.data	= SUNXI_SRAM_DATA("C1", 0x0, 0x0, 31,
+				  SUNXI_SRAM_MAP(0, 0, "cpu"),
+				  SUNXI_SRAM_MAP(0x7fffffff, 1, "ve")),
+};
+
 static struct sunxi_sram_desc sun4i_a10_sram_d = {
 	.data	= SUNXI_SRAM_DATA("D", 0x4, 0x0, 1,
 				  SUNXI_SRAM_MAP(0, 0, "cpu"),
@@ -81,6 +87,10 @@ static const struct of_device_id sunxi_sram_dt_ids[] = {
 		.compatible	= "allwinner,sun4i-a10-sram-a3-a4",
 		.data		= &sun4i_a10_sram_a3_a4.data,
 	},
+	{
+		.compatible	= "allwinner,sun4i-a10-sram-c1",
+		.data		= &sun4i_a10_sram_c1.data,
+	},
 	{
 		.compatible	= "allwinner,sun4i-a10-sram-d",
 		.data		= &sun4i_a10_sram_d.data,
-- 
2.17.1


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

* [PATCH v5 08/22] ARM: dts: sun4i-a10: Use system-control compatible
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (6 preceding siblings ...)
  2018-07-10  8:00 ` [PATCH v5 07/22] drivers: soc: sunxi: Add support for the C1 SRAM region Paul Kocialkowski
@ 2018-07-10  8:01 ` Paul Kocialkowski
  2018-07-10 14:52   ` Chen-Yu Tsai
  2018-07-10  8:01 ` [PATCH v5 09/22] ARM: dts: sun5i: Use most-qualified system control compatibles Paul Kocialkowski
                   ` (13 subsequent siblings)
  21 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 switches the sun4i-a10 dtsi to use the new compatible for the
system-control block (previously named SRAM controller) instead of
the deprecated one.

The phandle is also updated to reflect the fact that the controller
described is really about system control rather than SRAM control.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun4i-a10.dtsi | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
index 3a1c6b45c9a1..82f81f06f201 100644
--- a/arch/arm/boot/dts/sun4i-a10.dtsi
+++ b/arch/arm/boot/dts/sun4i-a10.dtsi
@@ -190,8 +190,8 @@
 		#size-cells = <1>;
 		ranges;
 
-		sram-controller@1c00000 {
-			compatible = "allwinner,sun4i-a10-sram-controller";
+		system-control@1c00000 {
+			compatible = "allwinner,sun4i-a10-system-control";
 			reg = <0x01c00000 0x30>;
 			#address-cells = <1>;
 			#size-cells = <1>;
-- 
2.17.1


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

* [PATCH v5 09/22] ARM: dts: sun5i: Use most-qualified system control compatibles
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (7 preceding siblings ...)
  2018-07-10  8:01 ` [PATCH v5 08/22] ARM: dts: sun4i-a10: Use system-control compatible Paul Kocialkowski
@ 2018-07-10  8:01 ` Paul Kocialkowski
  2018-07-10 14:53   ` [linux-sunxi] " Chen-Yu Tsai
  2018-07-10  8:01 ` [PATCH v5 10/22] ARM: dts: sun7i-a20: " Paul Kocialkowski
                   ` (12 subsequent siblings)
  21 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 switches the sun5i dtsi to use the most qualified compatibles for
the system-control block (previously named SRAM controller) as well as
the SRAM blocks. The sun4i-a10 compatibles are kept since these hardware
blocks are backward-compatible.

The phandle for system control is also updated to reflect the fact that
the controller described is really about system control rather than SRAM
control.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun5i.dtsi | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/arch/arm/boot/dts/sun5i.dtsi b/arch/arm/boot/dts/sun5i.dtsi
index 07f2248ed5f8..68711954c293 100644
--- a/arch/arm/boot/dts/sun5i.dtsi
+++ b/arch/arm/boot/dts/sun5i.dtsi
@@ -114,8 +114,9 @@
 		#size-cells = <1>;
 		ranges;
 
-		sram-controller@1c00000 {
-			compatible = "allwinner,sun4i-a10-sram-controller";
+		system-control@1c00000 {
+			compatible = "allwinner,sun5i-a13-system-control",
+				     "allwinner,sun4i-a10-system-control";
 			reg = <0x01c00000 0x30>;
 			#address-cells = <1>;
 			#size-cells = <1>;
@@ -130,7 +131,8 @@
 			};
 
 			emac_sram: sram-section@8000 {
-				compatible = "allwinner,sun4i-a10-sram-a3-a4";
+				compatible = "allwinner,sun5i-a13-sram-a3-a4",
+					     "allwinner,sun4i-a10-sram-a3-a4";
 				reg = <0x8000 0x4000>;
 				status = "disabled";
 			};
@@ -143,7 +145,8 @@
 				ranges = <0 0x00010000 0x1000>;
 
 				otg_sram: sram-section@0 {
-					compatible = "allwinner,sun4i-a10-sram-d";
+					compatible = "allwinner,sun5i-a13-sram-d",
+						     "allwinner,sun4i-a10-sram-d";
 					reg = <0x0000 0x1000>;
 					status = "disabled";
 				};
-- 
2.17.1


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

* [PATCH v5 10/22] ARM: dts: sun7i-a20: Use most-qualified system control compatibles
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (8 preceding siblings ...)
  2018-07-10  8:01 ` [PATCH v5 09/22] ARM: dts: sun5i: Use most-qualified system control compatibles Paul Kocialkowski
@ 2018-07-10  8:01 ` 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
                   ` (11 subsequent siblings)
  21 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 switches the sun7i-a20 dtsi to use the most qualified compatibles
for the system-control block (previously named SRAM controller) as well
as the SRAM blocks. The sun4i-a10 compatibles are kept since these
hardware blocks are backward-compatible.

The phandle for system control is also updated to reflect the fact that
the controller described is really about system control rather than SRAM
control.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun7i-a20.dtsi | 11 +++++++----
 1 file changed, 7 insertions(+), 4 deletions(-)

diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
index e529e4ff2174..59abb623b249 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
@@ -239,8 +239,9 @@
 		#size-cells = <1>;
 		ranges;
 
-		sram-controller@1c00000 {
-			compatible = "allwinner,sun4i-a10-sram-controller";
+		system-control@1c00000 {
+			compatible = "allwinner,sun7i-a20-system-control",
+				     "allwinner,sun4i-a10-system-control";
 			reg = <0x01c00000 0x30>;
 			#address-cells = <1>;
 			#size-cells = <1>;
@@ -254,7 +255,8 @@
 				ranges = <0 0x00000000 0xc000>;
 
 				emac_sram: sram-section@8000 {
-					compatible = "allwinner,sun4i-a10-sram-a3-a4";
+					compatible = "allwinner,sun7i-a20-sram-a3-a4",
+						     "allwinner,sun4i-a10-sram-a3-a4";
 					reg = <0x8000 0x4000>;
 					status = "disabled";
 				};
@@ -268,7 +270,8 @@
 				ranges = <0 0x00010000 0x1000>;
 
 				otg_sram: sram-section@0 {
-					compatible = "allwinner,sun4i-a10-sram-d";
+					compatible = "allwinner,sun7i-a20-sram-d",
+						     "allwinner,sun4i-a10-sram-d";
 					reg = <0x0000 0x1000>;
 					status = "disabled";
 				};
-- 
2.17.1


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

* [PATCH v5 11/22] ARM: sun5i: Add support for the C1 SRAM region with the SRAM controller
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (9 preceding siblings ...)
  2018-07-10  8:01 ` [PATCH v5 10/22] ARM: dts: sun7i-a20: " Paul Kocialkowski
@ 2018-07-10  8:01 ` Paul Kocialkowski
  2018-07-10 14:56   ` Chen-Yu Tsai
  2018-07-10  8:01 ` [PATCH v5 12/22] ARM: sun7i-a20: " Paul Kocialkowski
                   ` (10 subsequent siblings)
  21 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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

From: Maxime Ripard <maxime.ripard@bootlin.com>

This adds support for the C1 SRAM region (to be used with the SRAM
controller driver) for sun5i-based platforms. The region is shared
between the Video Engine and the CPU.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun5i.dtsi | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/arch/arm/boot/dts/sun5i.dtsi b/arch/arm/boot/dts/sun5i.dtsi
index 68711954c293..51dcefc76c12 100644
--- a/arch/arm/boot/dts/sun5i.dtsi
+++ b/arch/arm/boot/dts/sun5i.dtsi
@@ -137,6 +137,20 @@
 				status = "disabled";
 			};
 
+			sram_c: sram@1d00000 {
+				compatible = "mmio-sram";
+				reg = <0x01d00000 0x80000>;
+				#address-cells = <1>;
+				#size-cells = <1>;
+				ranges = <0 0x01d00000 0x80000>;
+
+				ve_sram: sram-section@0 {
+					compatible = "allwinner,sun5i-a13-sram-c1",
+						     "allwinner,sun4i-a10-sram-c1";
+					reg = <0x000000 0x80000>;
+				};
+			};
+
 			sram_d: sram@10000 {
 				compatible = "mmio-sram";
 				reg = <0x00010000 0x1000>;
-- 
2.17.1


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

* [PATCH v5 12/22] ARM: sun7i-a20: Add support for the C1 SRAM region with the SRAM controller
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (10 preceding siblings ...)
  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  8:01 ` 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
                   ` (9 subsequent siblings)
  21 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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

From: Maxime Ripard <maxime.ripard@bootlin.com>

This adds support for the C1 SRAM region (to be used with the SRAM
controller driver) for the A20 platform. The region is shared
between the Video Engine and the CPU.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun7i-a20.dtsi | 14 ++++++++++++++
 1 file changed, 14 insertions(+)

diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
index 59abb623b249..38999d791cb5 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
@@ -276,6 +276,20 @@
 					status = "disabled";
 				};
 			};
+
+			sram_c: sram@1d00000 {
+				compatible = "mmio-sram";
+				reg = <0x01d00000 0x80000>;
+				#address-cells = <1>;
+				#size-cells = <1>;
+				ranges = <0 0x01d00000 0x80000>;
+
+				ve_sram: sram-section@0 {
+					compatible = "allwinner,sun7i-a20-sram-c1",
+						     "allwinner,sun4i-a10-sram-c1";
+					reg = <0x000000 0x80000>;
+				};
+			};
 		};
 
 		nmi_intc: interrupt-controller@1c00030 {
-- 
2.17.1


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

* [PATCH v5 13/22] ARM: sun8i-a23-a33: Add SRAM controller node and C1 SRAM region
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (11 preceding siblings ...)
  2018-07-10  8:01 ` [PATCH v5 12/22] ARM: sun7i-a20: " Paul Kocialkowski
@ 2018-07-10  8:01 ` Paul Kocialkowski
  2018-07-11  9:14   ` Maxime Ripard
  2018-07-10  8:01 ` [PATCH v5 14/22] ARM: sun8i-h3: " Paul Kocialkowski
                   ` (8 subsequent siblings)
  21 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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

From: Maxime Ripard <maxime.ripard@bootlin.com>

This adds a SRAM controller node for the A23 and A33, with support for
the C1 SRAM region that is shared between the Video Engine and the CPU.

Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun8i-a23-a33.dtsi | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-a23-a33.dtsi b/arch/arm/boot/dts/sun8i-a23-a33.dtsi
index 44f3cad3de75..ad2dd62205d6 100644
--- a/arch/arm/boot/dts/sun8i-a23-a33.dtsi
+++ b/arch/arm/boot/dts/sun8i-a23-a33.dtsi
@@ -124,6 +124,29 @@
 		#size-cells = <1>;
 		ranges;
 
+		system-control@1c00000 {
+			compatible = "allwinner,sun8i-a23-system-control",
+				     "allwinner,sun4i-a10-system-control";
+			reg = <0x01c00000 0x30>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges;
+
+			sram_c: sram@1d00000 {
+				compatible = "mmio-sram";
+				reg = <0x01d00000 0x80000>;
+				#address-cells = <1>;
+				#size-cells = <1>;
+				ranges = <0 0x01d00000 0x80000>;
+
+				ve_sram: sram-section@0 {
+					compatible = "allwinner,sun8i-a23-sram-c1",
+						     "allwinner,sun4i-a10-sram-c1";
+					reg = <0x000000 0x80000>;
+				};
+			};
+		};
+
 		dma: dma-controller@1c02000 {
 			compatible = "allwinner,sun8i-a23-dma";
 			reg = <0x01c02000 0x1000>;
-- 
2.17.1


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

* [PATCH v5 14/22] ARM: sun8i-h3: Add SRAM controller node and C1 SRAM region
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (12 preceding siblings ...)
  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-10  8:01 ` 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
                   ` (7 subsequent siblings)
  21 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 adds a SRAM controller node for the H3, with support for the C1
SRAM region that is shared between the Video Engine and the CPU.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun8i-h3.dtsi | 23 +++++++++++++++++++++++
 1 file changed, 23 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi
index 41d57c76f290..c93f6be40533 100644
--- a/arch/arm/boot/dts/sun8i-h3.dtsi
+++ b/arch/arm/boot/dts/sun8i-h3.dtsi
@@ -111,6 +111,29 @@
 	};
 
 	soc {
+		system-control@1c00000 {
+			compatible = "allwinner,sun8i-h3-system-control",
+				     "allwinner,sun4i-a10-system-control";
+			reg = <0x01c00000 0x30>;
+			#address-cells = <1>;
+			#size-cells = <1>;
+			ranges;
+
+			sram_c: sram@1d00000 {
+				compatible = "mmio-sram";
+				reg = <0x01d00000 0x80000>;
+				#address-cells = <1>;
+				#size-cells = <1>;
+				ranges = <0 0x01d00000 0x80000>;
+
+				ve_sram: sram-section@0 {
+					compatible = "allwinner,sun8i-h3-sram-c1",
+						     "allwinner,sun4i-a10-sram-c1";
+					reg = <0x000000 0x80000>;
+				};
+			};
+		};
+
 		mali: gpu@1c40000 {
 			compatible = "allwinner,sun8i-h3-mali", "arm,mali-400";
 			reg = <0x01c40000 0x10000>;
-- 
2.17.1


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

* [PATCH v5 15/22] media: v4l: Add definitions for MPEG2 slice format and header metadata
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (13 preceding siblings ...)
  2018-07-10  8:01 ` [PATCH v5 14/22] ARM: sun8i-h3: " Paul Kocialkowski
@ 2018-07-10  8:01 ` Paul Kocialkowski
  2018-07-10  8:01 ` [PATCH v5 16/22] media: v4l: Add definition for Allwinner's MB32-tiled NV12 format Paul Kocialkowski
                   ` (6 subsequent siblings)
  21 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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

Stateless video decoding engines require both the MPEG slices and
associated metadata from the video stream in order to decode frames.

This introduces definitions for a new pixel format, describing buffers
with MPEG2 slice data, as well as a control structure for passing the
frame header (metadata) to drivers.

This is based on work from both Florent Revest and Hugues Fruchet.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 .../media/uapi/v4l/extended-controls.rst      | 74 +++++++++++++++++++
 .../media/uapi/v4l/pixfmt-compressed.rst      |  5 ++
 drivers/media/v4l2-core/v4l2-ctrls.c          | 44 +++++++++++
 drivers/media/v4l2-core/v4l2-ioctl.c          |  1 +
 include/media/v4l2-ctrls.h                    | 16 ++--
 include/uapi/linux/v4l2-controls.h            | 30 ++++++++
 include/uapi/linux/videodev2.h                |  3 +
 7 files changed, 166 insertions(+), 7 deletions(-)

diff --git a/Documentation/media/uapi/v4l/extended-controls.rst b/Documentation/media/uapi/v4l/extended-controls.rst
index 9f7312bf3365..ef301122a14d 100644
--- a/Documentation/media/uapi/v4l/extended-controls.rst
+++ b/Documentation/media/uapi/v4l/extended-controls.rst
@@ -1497,6 +1497,80 @@ enum v4l2_mpeg_video_h264_hierarchical_coding_type -
 
 
 
+.. _v4l2-mpeg-mpeg2:
+
+``V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS (struct)``
+    Specifies the slice parameters (also known as slice header) for an
+    associated MPEG-2 slice data. This includes all the necessary
+    parameters for configuring a hardware decoder pipeline for MPEG-2.
+
+.. tabularcolumns:: |p{2.0cm}|p{4.0cm}|p{11.0cm}|
+
+.. c:type:: v4l2_ctrl_mpeg2_slice_params
+
+.. cssclass:: longtable
+
+.. flat-table:: struct v4l2_ctrl_mpeg2_slice_params
+    :header-rows:  0
+    :stub-columns: 0
+    :widths:       1 1 2
+
+    * - __u32
+      - ``slice_len``
+      - Length (in bits) of the current slice data.
+    * - __u32
+      - ``slice_pos``
+      - Position (in bits) of the current slice data, relative to the
+        frame start.
+    * - __u16
+      - ``width``
+      - Width of the corresponding output frame for the current slice.
+    * - __u16
+      - ``height``
+      - Height of the corresponding output frame for the current slice.
+    * - __u8
+      - ``slice_type``
+      - Picture coding type for the frame covered by the current slice
+        (V4L2_MPEG2_SLICE_TYPE_I, V4L2_MPEG2_SLICE_TYPE_P or
+        V4L2_MPEG2_SLICE_PCT_B).
+    * - __u8
+      - ``f_code[2][2]``
+      - Motion vector codes.
+    * - __u8
+      - ``intra_dc_precision``
+      - Precision of Discrete Cosine transform (0: 8 bits precision,
+        1: 9 bits precision, 2: 10 bits precision, 11: 11 bits precision).
+    * - __u8
+      - ``picture_structure``
+      - Picture structure (1: interlaced top field,
+        2: interlaced bottom field, 3: progressive frame).
+    * - __u8
+      - ``top_field_first``
+      - If set to 1 and interlaced stream, top field is output first.
+    * - __u8
+      - ``frame_pred_frame_dct``
+      - If set to 1, only frame-DCT and frame prediction are used.
+    * - __u8
+      - ``concealment_motion_vectors``
+      -  If set to 1, motion vectors are coded for intra macroblocks.
+    * - __u8
+      - ``q_scale_type``
+      - This flag affects the inverse quantisation process.
+    * - __u8
+      - ``intra_vlc_format``
+      - This flag affects the decoding of transform coefficient data.
+    * - __u8
+      - ``alternate_scan``
+      - This flag affects the decoding of transform coefficient data.
+    * - __u8
+      - ``backward_ref_index``
+      - Index for the V4L2 buffer to use as backward reference, used with
+        B-coded and P-coded frames.
+    * - __u8
+      - ``forward_ref_index``
+      - Index for the V4L2 buffer to use as forward reference, used with
+        P-coded frames.
+    * - :cspan:`2`
 
 MFC 5.1 MPEG Controls
 ---------------------
diff --git a/Documentation/media/uapi/v4l/pixfmt-compressed.rst b/Documentation/media/uapi/v4l/pixfmt-compressed.rst
index abec03937bb3..4e73f62b5163 100644
--- a/Documentation/media/uapi/v4l/pixfmt-compressed.rst
+++ b/Documentation/media/uapi/v4l/pixfmt-compressed.rst
@@ -60,6 +60,11 @@ Compressed Formats
       - ``V4L2_PIX_FMT_MPEG2``
       - 'MPG2'
       - MPEG2 video elementary stream.
+    * .. _V4L2-PIX-FMT-MPEG2-SLICE:
+
+      - ``V4L2_PIX_FMT_MPEG2_SLICE``
+      - 'MG2S'
+      - MPEG2 parsed slice data, as extracted from the MPEG2 bitstream.
     * .. _V4L2-PIX-FMT-MPEG4:
 
       - ``V4L2_PIX_FMT_MPEG4``
diff --git a/drivers/media/v4l2-core/v4l2-ctrls.c b/drivers/media/v4l2-core/v4l2-ctrls.c
index 3610dce3a4f8..eedbd4df25ce 100644
--- a/drivers/media/v4l2-core/v4l2-ctrls.c
+++ b/drivers/media/v4l2-core/v4l2-ctrls.c
@@ -844,6 +844,7 @@ const char *v4l2_ctrl_get_name(u32 id)
 	case V4L2_CID_MPEG_VIDEO_MV_V_SEARCH_RANGE:		return "Vertical MV Search Range";
 	case V4L2_CID_MPEG_VIDEO_REPEAT_SEQ_HEADER:		return "Repeat Sequence Header";
 	case V4L2_CID_MPEG_VIDEO_FORCE_KEY_FRAME:		return "Force Key Frame";
+	case V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS:		return "MPEG2 Slice Header";
 
 	/* VPX controls */
 	case V4L2_CID_MPEG_VIDEO_VPX_NUM_PARTITIONS:		return "VPX Number of Partitions";
@@ -1292,6 +1293,9 @@ void v4l2_ctrl_fill(u32 id, const char **name, enum v4l2_ctrl_type *type,
 	case V4L2_CID_RDS_TX_ALT_FREQS:
 		*type = V4L2_CTRL_TYPE_U32;
 		break;
+	case V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS:
+		*type = V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS;
+		break;
 	default:
 		*type = V4L2_CTRL_TYPE_INTEGER;
 		break;
@@ -1550,6 +1554,7 @@ static void std_log(const struct v4l2_ctrl *ctrl)
 static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
 			union v4l2_ctrl_ptr ptr)
 {
+	struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
 	size_t len;
 	u64 offset;
 	s64 val;
@@ -1612,6 +1617,42 @@ static int std_validate(const struct v4l2_ctrl *ctrl, u32 idx,
 			return -ERANGE;
 		return 0;
 
+	case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
+		p_mpeg2_slice_params = ptr.p;
+
+		switch (p_mpeg2_slice_params->intra_dc_precision) {
+		case 0: /* 8 bits */
+		case 1: /* 9 bits */
+		case 11: /* 11 bits */
+			break;
+		default:
+			return -EINVAL;
+		}
+
+		switch (p_mpeg2_slice_params->picture_structure) {
+		case 1: /* interlaced top field */
+		case 2: /* interlaced bottom field */
+		case 3: /* progressive */
+			break;
+		default:
+			return -EINVAL;
+		}
+
+		switch (p_mpeg2_slice_params->slice_type) {
+		case V4L2_MPEG2_SLICE_TYPE_I:
+		case V4L2_MPEG2_SLICE_TYPE_P:
+		case V4L2_MPEG2_SLICE_TYPE_B:
+			break;
+		default:
+			return -EINVAL;
+		}
+
+		if (p_mpeg2_slice_params->backward_ref_index > VIDEO_MAX_FRAME ||
+		    p_mpeg2_slice_params->forward_ref_index > VIDEO_MAX_FRAME)
+			return -EINVAL;
+
+		return 0;
+
 	default:
 		return -EINVAL;
 	}
@@ -2186,6 +2227,9 @@ static struct v4l2_ctrl *v4l2_ctrl_new(struct v4l2_ctrl_handler *hdl,
 	case V4L2_CTRL_TYPE_U32:
 		elem_size = sizeof(u32);
 		break;
+	case V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS:
+		elem_size = sizeof(struct v4l2_ctrl_mpeg2_slice_params);
+		break;
 	default:
 		if (type < V4L2_CTRL_COMPOUND_TYPES)
 			elem_size = sizeof(s32);
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 44fc0102221f..68e914b83a03 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1304,6 +1304,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 		case V4L2_PIX_FMT_H263:		descr = "H.263"; break;
 		case V4L2_PIX_FMT_MPEG1:	descr = "MPEG-1 ES"; break;
 		case V4L2_PIX_FMT_MPEG2:	descr = "MPEG-2 ES"; break;
+		case V4L2_PIX_FMT_MPEG2_SLICE:	descr = "MPEG-2 parsed slice data"; break;
 		case V4L2_PIX_FMT_MPEG4:	descr = "MPEG-4 part 2 ES"; break;
 		case V4L2_PIX_FMT_XVID:		descr = "Xvid"; break;
 		case V4L2_PIX_FMT_VC1_ANNEX_G:	descr = "VC-1 (SMPTE 412M Annex G)"; break;
diff --git a/include/media/v4l2-ctrls.h b/include/media/v4l2-ctrls.h
index 34ee3167d7dd..8dfa22d70f8c 100644
--- a/include/media/v4l2-ctrls.h
+++ b/include/media/v4l2-ctrls.h
@@ -35,13 +35,14 @@ struct poll_table_struct;
 
 /**
  * union v4l2_ctrl_ptr - A pointer to a control value.
- * @p_s32:	Pointer to a 32-bit signed value.
- * @p_s64:	Pointer to a 64-bit signed value.
- * @p_u8:	Pointer to a 8-bit unsigned value.
- * @p_u16:	Pointer to a 16-bit unsigned value.
- * @p_u32:	Pointer to a 32-bit unsigned value.
- * @p_char:	Pointer to a string.
- * @p:		Pointer to a compound value.
+ * @p_s32:			Pointer to a 32-bit signed value.
+ * @p_s64:			Pointer to a 64-bit signed value.
+ * @p_u8:			Pointer to a 8-bit unsigned value.
+ * @p_u16:			Pointer to a 16-bit unsigned value.
+ * @p_u32:			Pointer to a 32-bit unsigned value.
+ * @p_char:			Pointer to a string.
+ * @p_mpeg2_slice_params:	Pointer to a MPEG2 slice parameters structure.
+ * @p:				Pointer to a compound value.
  */
 union v4l2_ctrl_ptr {
 	s32 *p_s32;
@@ -50,6 +51,7 @@ union v4l2_ctrl_ptr {
 	u16 *p_u16;
 	u32 *p_u32;
 	char *p_char;
+	struct v4l2_ctrl_mpeg2_slice_params *p_mpeg2_slice_params;
 	void *p;
 };
 
diff --git a/include/uapi/linux/v4l2-controls.h b/include/uapi/linux/v4l2-controls.h
index e4ee10ee917d..bbcab3d65f55 100644
--- a/include/uapi/linux/v4l2-controls.h
+++ b/include/uapi/linux/v4l2-controls.h
@@ -557,6 +557,8 @@ enum v4l2_mpeg_video_mpeg4_profile {
 };
 #define V4L2_CID_MPEG_VIDEO_MPEG4_QPEL		(V4L2_CID_MPEG_BASE+407)
 
+#define V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS  (V4L2_CID_MPEG_BASE+450)
+
 /*  Control IDs for VP8 streams
  *  Although VP8 is not part of MPEG we add these controls to the MPEG class
  *  as that class is already handling other video compression standards
@@ -1092,4 +1094,32 @@ enum v4l2_detect_md_mode {
 #define V4L2_CID_DETECT_MD_THRESHOLD_GRID	(V4L2_CID_DETECT_CLASS_BASE + 3)
 #define V4L2_CID_DETECT_MD_REGION_GRID		(V4L2_CID_DETECT_CLASS_BASE + 4)
 
+#define V4L2_MPEG2_SLICE_TYPE_I			1
+#define V4L2_MPEG2_SLICE_TYPE_P			2
+#define V4L2_MPEG2_SLICE_TYPE_B			3
+#define V4L2_MPEG2_SLICE_TYPE_D			4
+
+struct v4l2_ctrl_mpeg2_slice_params {
+	__u32	slice_len;
+	__u32	slice_pos;
+
+	__u16	width;
+	__u16	height;
+
+	__u8	slice_type;
+	__u8	f_code[2][2];
+
+	__u8	intra_dc_precision;
+	__u8	picture_structure;
+	__u8	top_field_first;
+	__u8	frame_pred_frame_dct;
+	__u8	concealment_motion_vectors;
+	__u8	q_scale_type;
+	__u8	intra_vlc_format;
+	__u8	alternate_scan;
+
+	__u8	backward_ref_index;
+	__u8	forward_ref_index;
+};
+
 #endif
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index 1f6c4b52baae..bbfe95e3fba8 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -629,6 +629,7 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_H263     v4l2_fourcc('H', '2', '6', '3') /* H263          */
 #define V4L2_PIX_FMT_MPEG1    v4l2_fourcc('M', 'P', 'G', '1') /* MPEG-1 ES     */
 #define V4L2_PIX_FMT_MPEG2    v4l2_fourcc('M', 'P', 'G', '2') /* MPEG-2 ES     */
+#define V4L2_PIX_FMT_MPEG2_SLICE v4l2_fourcc('M', 'G', '2', 'S') /* MPEG-2 parsed slice data */
 #define V4L2_PIX_FMT_MPEG4    v4l2_fourcc('M', 'P', 'G', '4') /* MPEG-4 part 2 ES */
 #define V4L2_PIX_FMT_XVID     v4l2_fourcc('X', 'V', 'I', 'D') /* Xvid           */
 #define V4L2_PIX_FMT_VC1_ANNEX_G v4l2_fourcc('V', 'C', '1', 'G') /* SMPTE 421M Annex G compliant stream */
@@ -1587,6 +1588,7 @@ struct v4l2_ext_control {
 		__u8 __user *p_u8;
 		__u16 __user *p_u16;
 		__u32 __user *p_u32;
+		struct v4l2_ctrl_mpeg2_slice_params __user *p_mpeg2_slice_params;
 		void __user *ptr;
 	};
 } __attribute__ ((packed));
@@ -1632,6 +1634,7 @@ enum v4l2_ctrl_type {
 	V4L2_CTRL_TYPE_U8	     = 0x0100,
 	V4L2_CTRL_TYPE_U16	     = 0x0101,
 	V4L2_CTRL_TYPE_U32	     = 0x0102,
+	V4L2_CTRL_TYPE_MPEG2_SLICE_PARAMS = 0x0103,
 };
 
 /*  Used in the VIDIOC_QUERYCTRL ioctl for querying controls */
-- 
2.17.1


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

* [PATCH v5 16/22] media: v4l: Add definition for Allwinner's MB32-tiled NV12 format
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (14 preceding siblings ...)
  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 ` Paul Kocialkowski
  2018-07-10  8:01 ` [PATCH v5 17/22] dt-bindings: media: Document bindings for the Sunxi-Cedrus VPU driver Paul Kocialkowski
                   ` (5 subsequent siblings)
  21 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 introduces support for Allwinner's MB32-tiled NV12 format, where
each plane is divided into macroblocks of 32x32 pixels. Hence, the size
of each plane has to be aligned to 32 bytes. The pixels inside each
macroblock are coded as they would be if the macroblock was a single
plane, line after line.

The MB32-tiled NV12 format is used by the video engine on Allwinner
platforms: it is the default format for decoded frames (and the only one
available in the oldest supported platforms).

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 Documentation/media/uapi/v4l/pixfmt-reserved.rst | 15 ++++++++++++++-
 drivers/media/v4l2-core/v4l2-ioctl.c             |  1 +
 include/uapi/linux/videodev2.h                   |  1 +
 3 files changed, 16 insertions(+), 1 deletion(-)

diff --git a/Documentation/media/uapi/v4l/pixfmt-reserved.rst b/Documentation/media/uapi/v4l/pixfmt-reserved.rst
index 38af1472a4b4..9a68b6a787bf 100644
--- a/Documentation/media/uapi/v4l/pixfmt-reserved.rst
+++ b/Documentation/media/uapi/v4l/pixfmt-reserved.rst
@@ -243,7 +243,20 @@ please make a proposal on the linux-media mailing list.
 	It is an opaque intermediate format and the MDP hardware must be
 	used to convert ``V4L2_PIX_FMT_MT21C`` to ``V4L2_PIX_FMT_NV12M``,
 	``V4L2_PIX_FMT_YUV420M`` or ``V4L2_PIX_FMT_YVU420``.
-
+    * .. _V4L2-PIX-FMT-MB32-NV12:
+
+      - ``V4L2_PIX_FMT_MB32_NV12``
+      - 'MN12'
+      - Two-planar NV12-based format used by the Allwinner video engine
+        hardware, with 32x32 tiles for the luminance plane and 32x64 tiles
+        for the chrominance plane. Each tile is a linear pixel data
+        representation within its own bounds. Each tile follows the previous
+        one linearly (as in, from left to right, top to bottom).
+
+        The frame dimensions are aligned to match an integer number of
+        tiles, resulting in 32-aligned resolutions for the luminance plane
+        and 16-aligned resolutions for the chrominance plane (with 2x2
+        subsampling).
 
 .. tabularcolumns:: |p{6.6cm}|p{2.2cm}|p{8.7cm}|
 
diff --git a/drivers/media/v4l2-core/v4l2-ioctl.c b/drivers/media/v4l2-core/v4l2-ioctl.c
index 68e914b83a03..7e1c200de10d 100644
--- a/drivers/media/v4l2-core/v4l2-ioctl.c
+++ b/drivers/media/v4l2-core/v4l2-ioctl.c
@@ -1331,6 +1331,7 @@ static void v4l_fill_fmtdesc(struct v4l2_fmtdesc *fmt)
 		case V4L2_PIX_FMT_SE401:	descr = "GSPCA SE401"; break;
 		case V4L2_PIX_FMT_S5C_UYVY_JPG:	descr = "S5C73MX interleaved UYVY/JPEG"; break;
 		case V4L2_PIX_FMT_MT21C:	descr = "Mediatek Compressed Format"; break;
+		case V4L2_PIX_FMT_MB32_NV12:	descr = "Allwinner tiled NV12 format"; break;
 		default:
 			WARN(1, "Unknown pixelformat 0x%08x\n", fmt->pixelformat);
 			if (fmt->description[0])
diff --git a/include/uapi/linux/videodev2.h b/include/uapi/linux/videodev2.h
index bbfe95e3fba8..35bc9304a762 100644
--- a/include/uapi/linux/videodev2.h
+++ b/include/uapi/linux/videodev2.h
@@ -670,6 +670,7 @@ struct v4l2_pix_format {
 #define V4L2_PIX_FMT_Z16      v4l2_fourcc('Z', '1', '6', ' ') /* Depth data 16-bit */
 #define V4L2_PIX_FMT_MT21C    v4l2_fourcc('M', 'T', '2', '1') /* Mediatek compressed block mode  */
 #define V4L2_PIX_FMT_INZI     v4l2_fourcc('I', 'N', 'Z', 'I') /* Intel Planar Greyscale 10-bit and Depth 16-bit */
+#define V4L2_PIX_FMT_MB32_NV12 v4l2_fourcc('M', 'N', '1', '2') /* Allwinner tiled NV12 format */
 
 /* 10bit raw bayer packed, 32 bytes for every 25 pixels, last LSB 6 bits unused */
 #define V4L2_PIX_FMT_IPU3_SBGGR10	v4l2_fourcc('i', 'p', '3', 'b') /* IPU3 packed 10-bit BGGR bayer */
-- 
2.17.1


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

* [PATCH v5 17/22] dt-bindings: media: Document bindings for the Sunxi-Cedrus VPU driver
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (15 preceding siblings ...)
  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 ` Paul Kocialkowski
  2018-07-10  8:01 ` [PATCH v5 18/22] media: platform: Add Sunxi-Cedrus VPU decoder driver Paul Kocialkowski
                   ` (4 subsequent siblings)
  21 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 adds a device-tree binding document that specifies the properties
used by the Sunxi-Cedurs VPU driver, as well as examples.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
Reviewed-by: Rob Herring <robh@kernel.org>
---
 .../bindings/media/sunxi-cedrus.txt           | 54 +++++++++++++++++++
 1 file changed, 54 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/media/sunxi-cedrus.txt

diff --git a/Documentation/devicetree/bindings/media/sunxi-cedrus.txt b/Documentation/devicetree/bindings/media/sunxi-cedrus.txt
new file mode 100644
index 000000000000..a089a0c1ff05
--- /dev/null
+++ b/Documentation/devicetree/bindings/media/sunxi-cedrus.txt
@@ -0,0 +1,54 @@
+Device-tree bindings for the VPU found in Allwinner SoCs, referred to as the
+Video Engine (VE) in Allwinner literature.
+
+The VPU can only access the first 256 MiB of DRAM, that are DMA-mapped starting
+from the DRAM base. This requires specific memory allocation and handling.
+
+Required properties:
+- compatible		: must be one of the following compatibles:
+			- "allwinner,sun4i-a10-video-engine"
+			- "allwinner,sun5i-a13-video-engine"
+			- "allwinner,sun7i-a20-video-engine"
+			- "allwinner,sun8i-a33-video-engine"
+			- "allwinner,sun8i-h3-video-engine"
+- reg			: register base and length of VE;
+- clocks		: list of clock specifiers, corresponding to entries in
+			  the clock-names property;
+- clock-names		: should contain "ahb", "mod" and "ram" entries;
+- resets		: phandle for reset;
+- interrupts		: VE interrupt number;
+- allwinner,sram	: SRAM region to use with the VE.
+
+Optional properties:
+- memory-region		: CMA pool to use for buffers allocation instead of the
+			  default CMA pool.
+
+Example:
+
+reserved-memory {
+	#address-cells = <1>;
+	#size-cells = <1>;
+	ranges;
+
+	/* Address must be kept in the lower 256 MiBs of DRAM for VE. */
+	cma_pool: cma@4a000000 {
+		compatible = "shared-dma-pool";
+		size = <0x6000000>;
+		alloc-ranges = <0x4a000000 0x6000000>;
+		reusable;
+		linux,cma-default;
+	};
+};
+
+video-codec@1c0e000 {
+	compatible = "allwinner,sun7i-a20-video-engine";
+	reg = <0x01c0e000 0x1000>;
+
+	clocks = <&ccu CLK_AHB_VE>, <&ccu CLK_VE>,
+		 <&ccu CLK_DRAM_VE>;
+	clock-names = "ahb", "mod", "ram";
+
+	resets = <&ccu RST_VE>;
+	interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
+	allwinner,sram = <&ve_sram 1>;
+};
-- 
2.17.1


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

* [PATCH v5 18/22] media: platform: Add Sunxi-Cedrus VPU decoder driver
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (16 preceding siblings ...)
  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 ` Paul Kocialkowski
  2018-07-10  8:42   ` Maxime Ripard
  2018-07-10 19:57   ` Ezequiel Garcia
  2018-07-10  8:01 ` [PATCH v5 19/22] ARM: dts: sun5i: Add Video Engine and reserved memory nodes Paul Kocialkowski
                   ` (3 subsequent siblings)
  21 siblings, 2 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 introduces the Sunxi-Cedrus VPU driver that supports the VPU found
in Allwinner SoCs, also known as Video Engine. It is implemented through
a v4l2 m2m decoder device and a media device (used for media requests).
So far, it only supports MPEG2 decoding.

Since this VPU is stateless, synchronization with media requests is
required in order to ensure consistency between frame headers that
contain metadata about the frame to process and the raw slice data that
is used to generate the frame.

This driver was made possible thanks to the long-standing effort
carried out by the linux-sunxi community in the interest of reverse
engineering, documenting and implementing support for Allwinner VPU.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 MAINTAINERS                                   |   7 +
 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 +
 17 files changed, 2047 insertions(+)
 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

diff --git a/MAINTAINERS b/MAINTAINERS
index 89853313c697..e9f190109d58 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -656,6 +656,13 @@ L:	linux-crypto@vger.kernel.org
 S:	Maintained
 F:	drivers/crypto/sunxi-ss/
 
+ALLWINNER VPU DRIVER
+M:	Maxime Ripard <maxime.ripard@bootlin.com>
+M:	Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+L:	linux-media@vger.kernel.org
+S:	Maintained
+F:	drivers/media/platform/sunxi/cedrus/
+
 ALPHA PORT
 M:	Richard Henderson <rth@twiddle.net>
 M:	Ivan Kokshaysky <ink@jurassic.park.msu.ru>
diff --git a/drivers/media/platform/Kconfig b/drivers/media/platform/Kconfig
index 210b44a457eb..6ee971b7258a 100644
--- a/drivers/media/platform/Kconfig
+++ b/drivers/media/platform/Kconfig
@@ -32,6 +32,8 @@ source "drivers/media/platform/davinci/Kconfig"
 
 source "drivers/media/platform/omap/Kconfig"
 
+source "drivers/media/platform/sunxi/Kconfig"
+
 config VIDEO_SH_VOU
 	tristate "SuperH VOU video output driver"
 	depends on MEDIA_CAMERA_SUPPORT
diff --git a/drivers/media/platform/Makefile b/drivers/media/platform/Makefile
index 04bc1502a30e..3e2665cec205 100644
--- a/drivers/media/platform/Makefile
+++ b/drivers/media/platform/Makefile
@@ -70,6 +70,7 @@ obj-$(CONFIG_VIDEO_ROCKCHIP_RGA)	+= rockchip/rga/
 obj-y	+= omap/
 
 obj-$(CONFIG_VIDEO_AM437X_VPFE)		+= am437x/
+obj-$(CONFIG_VIDEO_SUNXI)		+= sunxi/
 
 obj-$(CONFIG_VIDEO_XILINX)		+= xilinx/
 
diff --git a/drivers/media/platform/sunxi/Kconfig b/drivers/media/platform/sunxi/Kconfig
new file mode 100644
index 000000000000..a639b0949826
--- /dev/null
+++ b/drivers/media/platform/sunxi/Kconfig
@@ -0,0 +1,15 @@
+config VIDEO_SUNXI
+	bool "Allwinner sunXi family Video Devices"
+	depends on ARCH_SUNXI
+	help
+	  If you have an Allwinner SoC based on the sunXi family, say Y.
+
+	  Note that this option doesn't include new drivers in the
+	  kernel: saying N will just cause Kconfig to skip all the
+	  questions about Allwinner media devices.
+
+if VIDEO_SUNXI
+
+source "drivers/media/platform/sunxi/cedrus/Kconfig"
+
+endif
diff --git a/drivers/media/platform/sunxi/Makefile b/drivers/media/platform/sunxi/Makefile
new file mode 100644
index 000000000000..cee2846c3ecf
--- /dev/null
+++ b/drivers/media/platform/sunxi/Makefile
@@ -0,0 +1 @@
+obj-$(CONFIG_VIDEO_SUNXI_CEDRUS)	+= cedrus/
diff --git a/drivers/media/platform/sunxi/cedrus/Kconfig b/drivers/media/platform/sunxi/cedrus/Kconfig
new file mode 100644
index 000000000000..870a4b64a45c
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/Kconfig
@@ -0,0 +1,13 @@
+config VIDEO_SUNXI_CEDRUS
+	tristate "Allwinner Cedrus VPU driver"
+	depends on VIDEO_DEV && VIDEO_V4L2 && MEDIA_CONTROLLER
+	depends on HAS_DMA
+	select VIDEOBUF2_DMA_CONTIG
+	select MEDIA_REQUEST_API
+	select V4L2_MEM2MEM_DEV
+	help
+	  Support for the VPU found in Allwinner SoCs, also known as the Cedar
+	  video engine.
+
+	  To compile this driver as a module, choose M here: the module
+	  will be called cedrus.
diff --git a/drivers/media/platform/sunxi/cedrus/Makefile b/drivers/media/platform/sunxi/cedrus/Makefile
new file mode 100644
index 000000000000..632a0be90ed7
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/Makefile
@@ -0,0 +1,3 @@
+obj-$(CONFIG_VIDEO_SUNXI_CEDRUS) += cedrus.o
+
+cedrus-y = cedrus.o cedrus_video.o cedrus_hw.o cedrus_dec.o cedrus_mpeg2.o
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus.c b/drivers/media/platform/sunxi/cedrus/cedrus.c
new file mode 100644
index 000000000000..087ccf044313
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus.c
@@ -0,0 +1,374 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#include <linux/platform_device.h>
+#include <linux/module.h>
+#include <linux/of.h>
+
+#include <media/v4l2-device.h>
+#include <media/v4l2-ioctl.h>
+#include <media/v4l2-ctrls.h>
+#include <media/v4l2-mem2mem.h>
+
+#include "cedrus.h"
+#include "cedrus_video.h"
+#include "cedrus_dec.h"
+#include "cedrus_hw.h"
+
+static const struct cedrus_control cedrus_controls[] = {
+	{
+		.id		= V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS,
+		.elem_size	= sizeof(struct v4l2_ctrl_mpeg2_slice_params),
+		.codec		= CEDRUS_CODEC_MPEG2,
+		.required	= true,
+	},
+};
+
+#define CEDRUS_CONTROLS_COUNT	ARRAY_SIZE(cedrus_controls)
+
+void *cedrus_find_control_data(struct cedrus_ctx *ctx, u32 id)
+{
+	unsigned int i;
+
+	for (i = 0; ctx->ctrls[i] != NULL; i++)
+		if (ctx->ctrls[i]->id == id)
+			return ctx->ctrls[i]->p_cur.p;
+
+	return NULL;
+}
+
+static int cedrus_init_ctrls(struct cedrus_dev *dev, struct cedrus_ctx *ctx)
+{
+	struct v4l2_ctrl_handler *hdl = &ctx->hdl;
+	struct v4l2_ctrl *ctrl;
+	unsigned int ctrl_size;
+	unsigned int i;
+
+	v4l2_ctrl_handler_init(hdl, CEDRUS_CONTROLS_COUNT);
+	if (hdl->error) {
+		v4l2_err(&dev->v4l2_dev,
+			 "Failed to initialize control handler\n");
+		return hdl->error;
+	}
+
+	ctrl_size = sizeof(ctrl) * CEDRUS_CONTROLS_COUNT + 1;
+
+	ctx->ctrls = kzalloc(ctrl_size, GFP_KERNEL);
+	memset(ctx->ctrls, 0, ctrl_size);
+
+	for (i = 0; i < CEDRUS_CONTROLS_COUNT; i++) {
+		struct v4l2_ctrl_config cfg = { 0 };
+
+		cfg.elem_size = cedrus_controls[i].elem_size;
+		cfg.id = cedrus_controls[i].id;
+
+		ctrl = v4l2_ctrl_new_custom(hdl, &cfg, NULL);
+		if (hdl->error) {
+			v4l2_err(&dev->v4l2_dev,
+				 "Failed to create new custom control\n");
+
+			v4l2_ctrl_handler_free(hdl);
+			kfree(ctx->ctrls);
+			return hdl->error;
+		}
+
+		ctx->ctrls[i] = ctrl;
+	}
+
+	ctx->fh.ctrl_handler = hdl;
+	v4l2_ctrl_handler_setup(hdl);
+
+	return 0;
+}
+
+static int cedrus_request_validate(struct media_request *req)
+{
+	struct media_request_object *obj, *obj_safe;
+	struct v4l2_ctrl_handler *parent_hdl, *hdl;
+	struct cedrus_ctx *ctx = NULL;
+	struct v4l2_ctrl *ctrl_test;
+	unsigned int i;
+
+	list_for_each_entry_safe(obj, obj_safe, &req->objects, list) {
+		struct vb2_buffer *vb;
+
+		if (vb2_request_object_is_buffer(obj)) {
+			vb = container_of(obj, struct vb2_buffer, req_obj);
+			ctx = vb2_get_drv_priv(vb->vb2_queue);
+
+			break;
+		}
+	}
+
+	if (ctx == NULL)
+		return -EINVAL;
+
+	parent_hdl = &ctx->hdl;
+
+	hdl = v4l2_ctrl_request_hdl_find(req, parent_hdl);
+	if (!hdl) {
+		v4l2_err(&ctx->dev->v4l2_dev, "Missing codec control(s)\n");
+		return -EINVAL;
+	}
+
+	for (i = 0; i < CEDRUS_CONTROLS_COUNT; i++) {
+		if (cedrus_controls[i].codec == ctx->current_codec &&
+		    cedrus_controls[i].required) {
+			ctrl_test = v4l2_ctrl_request_hdl_ctrl_find(hdl,
+				cedrus_controls[i].id);
+			if (!ctrl_test) {
+				v4l2_err(&ctx->dev->v4l2_dev,
+					 "Missing required codec control\n");
+				return -EINVAL;
+			}
+		}
+	}
+
+	v4l2_ctrl_request_hdl_put(hdl);
+
+	return vb2_request_validate(req);
+}
+
+static int cedrus_open(struct file *file)
+{
+	struct cedrus_dev *dev = video_drvdata(file);
+	struct cedrus_ctx *ctx = NULL;
+	int ret;
+
+	if (mutex_lock_interruptible(&dev->dev_mutex))
+		return -ERESTARTSYS;
+
+	ctx = kzalloc(sizeof(*ctx), GFP_KERNEL);
+	if (!ctx) {
+		mutex_unlock(&dev->dev_mutex);
+		return -ENOMEM;
+	}
+
+	v4l2_fh_init(&ctx->fh, video_devdata(file));
+	file->private_data = &ctx->fh;
+	ctx->dev = dev;
+
+	ret = cedrus_init_ctrls(dev, ctx);
+	if (ret)
+		goto err_free;
+
+	ctx->fh.m2m_ctx = v4l2_m2m_ctx_init(dev->m2m_dev, ctx,
+					    &cedrus_queue_init);
+	if (IS_ERR(ctx->fh.m2m_ctx)) {
+		ret = PTR_ERR(ctx->fh.m2m_ctx);
+		goto err_ctrls;
+	}
+
+	v4l2_fh_add(&ctx->fh);
+
+	mutex_unlock(&dev->dev_mutex);
+
+	return 0;
+
+err_ctrls:
+	v4l2_ctrl_handler_free(&ctx->hdl);
+err_free:
+	kfree(ctx);
+	mutex_unlock(&dev->dev_mutex);
+
+	return ret;
+}
+
+static int cedrus_release(struct file *file)
+{
+	struct cedrus_dev *dev = video_drvdata(file);
+	struct cedrus_ctx *ctx = container_of(file->private_data,
+					      struct cedrus_ctx, fh);
+
+	mutex_lock(&dev->dev_mutex);
+
+	v4l2_fh_del(&ctx->fh);
+	v4l2_m2m_ctx_release(ctx->fh.m2m_ctx);
+
+	v4l2_ctrl_handler_free(&ctx->hdl);
+	kfree(ctx->ctrls);
+
+	v4l2_fh_exit(&ctx->fh);
+	v4l2_fh_exit(&ctx->fh);
+
+	kfree(ctx);
+
+	mutex_unlock(&dev->dev_mutex);
+
+	return 0;
+}
+
+static const struct v4l2_file_operations cedrus_fops = {
+	.owner		= THIS_MODULE,
+	.open		= cedrus_open,
+	.release	= cedrus_release,
+	.poll		= v4l2_m2m_fop_poll,
+	.unlocked_ioctl	= video_ioctl2,
+	.mmap		= v4l2_m2m_fop_mmap,
+};
+
+static const struct video_device cedrus_video_device = {
+	.name		= CEDRUS_NAME,
+	.vfl_dir	= VFL_DIR_M2M,
+	.fops		= &cedrus_fops,
+	.ioctl_ops	= &cedrus_ioctl_ops,
+	.minor		= -1,
+	.release	= video_device_release_empty,
+};
+
+static const struct v4l2_m2m_ops cedrus_m2m_ops = {
+	.device_run	= cedrus_device_run,
+	.job_abort	= cedrus_job_abort,
+};
+
+static const struct media_device_ops cedrus_m2m_media_ops = {
+	.req_validate	= cedrus_request_validate,
+	.req_queue	= vb2_m2m_request_queue,
+};
+
+static int cedrus_probe(struct platform_device *pdev)
+{
+	struct cedrus_dev *dev;
+	struct video_device *vfd;
+	int ret;
+
+	dev = devm_kzalloc(&pdev->dev, sizeof(*dev), GFP_KERNEL);
+	if (!dev)
+		return -ENOMEM;
+
+	dev->dev = &pdev->dev;
+	dev->pdev = pdev;
+
+	ret = cedrus_hw_probe(dev);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to probe hardware\n");
+		return ret;
+	}
+
+	mutex_init(&dev->dev_mutex);
+	spin_lock_init(&dev->irq_lock);
+
+	dev->vfd = cedrus_video_device;
+	vfd = &dev->vfd;
+	vfd->lock = &dev->dev_mutex;
+	vfd->v4l2_dev = &dev->v4l2_dev;
+
+	dev->mdev.dev = &pdev->dev;
+	strlcpy(dev->mdev.model, CEDRUS_NAME, sizeof(dev->mdev.model));
+
+	media_device_init(&dev->mdev);
+	dev->mdev.ops = &cedrus_m2m_media_ops;
+	dev->v4l2_dev.mdev = &dev->mdev;
+	dev->pad[0].flags = MEDIA_PAD_FL_SINK;
+	dev->pad[1].flags = MEDIA_PAD_FL_SOURCE;
+
+	ret = media_entity_pads_init(&vfd->entity, 2, dev->pad);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to initialize media entity pads\n");
+		return ret;
+	}
+
+	dev->dec_ops[CEDRUS_CODEC_MPEG2] = &cedrus_dec_ops_mpeg2;
+
+	ret = v4l2_device_register(&pdev->dev, &dev->v4l2_dev);
+	if (ret) {
+		dev_err(&pdev->dev, "Failed to register V4L2 device\n");
+		return ret;
+	}
+
+	ret = video_register_device(vfd, VFL_TYPE_GRABBER, 0);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to register video device\n");
+		goto err_v4l2;
+	}
+
+	video_set_drvdata(vfd, dev);
+	snprintf(vfd->name, sizeof(vfd->name), "%s", cedrus_video_device.name);
+
+	v4l2_info(&dev->v4l2_dev,
+		  "Device registered as /dev/video%d\n", vfd->num);
+
+	platform_set_drvdata(pdev, dev);
+
+	dev->m2m_dev = v4l2_m2m_init(&cedrus_m2m_ops);
+	if (IS_ERR(dev->m2m_dev)) {
+		v4l2_err(&dev->v4l2_dev,
+			 "Failed to initialize V4L2 M2M device\n");
+		ret = PTR_ERR(dev->m2m_dev);
+		goto err_video;
+	}
+
+	ret = media_device_register(&dev->mdev);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to register media device\n");
+		goto err_m2m;
+	}
+
+	return 0;
+
+err_m2m:
+	v4l2_m2m_release(dev->m2m_dev);
+err_video:
+	video_unregister_device(&dev->vfd);
+err_v4l2:
+	v4l2_device_unregister(&dev->v4l2_dev);
+
+	return ret;
+}
+
+static int cedrus_remove(struct platform_device *pdev)
+{
+	struct cedrus_dev *dev = platform_get_drvdata(pdev);
+
+	v4l2_info(&dev->v4l2_dev, "Removing " CEDRUS_NAME);
+
+	if (media_devnode_is_registered(dev->mdev.devnode)) {
+		media_device_unregister(&dev->mdev);
+		media_device_cleanup(&dev->mdev);
+	}
+
+	v4l2_m2m_release(dev->m2m_dev);
+	video_unregister_device(&dev->vfd);
+	v4l2_device_unregister(&dev->v4l2_dev);
+	cedrus_hw_remove(dev);
+
+	return 0;
+}
+
+static const struct of_device_id cedrus_dt_match[] = {
+	{ .compatible = "allwinner,sun4i-a10-video-engine" },
+	{ .compatible = "allwinner,sun5i-a13-video-engine" },
+	{ .compatible = "allwinner,sun7i-a20-video-engine" },
+	{ .compatible = "allwinner,sun8i-a33-video-engine" },
+	{ .compatible = "allwinner,sun8i-h3-video-engine" },
+	{ /* sentinel */ }
+};
+MODULE_DEVICE_TABLE(of, cedrus_dt_match);
+
+static struct platform_driver cedrus_driver = {
+	.probe		= cedrus_probe,
+	.remove		= cedrus_remove,
+	.driver		= {
+		.name		= CEDRUS_NAME,
+		.owner		= THIS_MODULE,
+		.of_match_table	= of_match_ptr(cedrus_dt_match),
+	},
+};
+module_platform_driver(cedrus_driver);
+
+MODULE_LICENSE("GPL v2");
+MODULE_AUTHOR("Florent Revest <florent.revest@free-electrons.com>");
+MODULE_AUTHOR("Paul Kocialkowski <paul.kocialkowski@bootlin.com>");
+MODULE_AUTHOR("Maxime Ripard <maxime.ripard@bootlin.com>");
+MODULE_DESCRIPTION("Sunxi-Cedrus VPU driver");
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus.h b/drivers/media/platform/sunxi/cedrus/cedrus.h
new file mode 100644
index 000000000000..98ca13abd678
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus.h
@@ -0,0 +1,161 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#ifndef _CEDRUS_H_
+#define _CEDRUS_H_
+
+#include <media/v4l2-ctrls.h>
+#include <media/v4l2-device.h>
+#include <media/v4l2-mem2mem.h>
+#include <media/videobuf2-v4l2.h>
+#include <media/videobuf2-dma-contig.h>
+
+#include <linux/platform_device.h>
+
+#define CEDRUS_NAME	"cedrus"
+
+#define CEDRUS_CAPABILITY_UNTILED	BIT(0)
+
+enum cedrus_codec {
+	CEDRUS_CODEC_MPEG2,
+
+	CEDRUS_CODEC_LAST,
+};
+
+enum cedrus_irq_status {
+	CEDRUS_IRQ_NONE,
+	CEDRUS_IRQ_ERROR,
+	CEDRUS_IRQ_OK,
+};
+
+struct cedrus_control {
+	u32			id;
+	u32			elem_size;
+	enum cedrus_codec	codec;
+	bool			required;
+};
+
+struct cedrus_mpeg2_run {
+	const struct v4l2_ctrl_mpeg2_slice_params	*slice_params;
+};
+
+struct cedrus_run {
+	struct vb2_v4l2_buffer	*src;
+	struct vb2_v4l2_buffer	*dst;
+
+	union {
+		struct cedrus_mpeg2_run	mpeg2;
+	};
+};
+
+struct cedrus_buffer {
+	struct v4l2_m2m_buffer          m2m_buf;
+};
+
+struct cedrus_ctx {
+	struct v4l2_fh			fh;
+	struct cedrus_dev		*dev;
+
+	struct v4l2_pix_format_mplane	src_fmt;
+	struct v4l2_pix_format_mplane	dst_fmt;
+	enum cedrus_codec		current_codec;
+
+	struct v4l2_ctrl_handler	hdl;
+	struct v4l2_ctrl		**ctrls;
+
+	struct vb2_buffer		*dst_bufs[VIDEO_MAX_FRAME];
+
+	int				job_abort;
+};
+
+struct cedrus_dec_ops {
+	void (*irq_clear)(struct cedrus_ctx *ctx);
+	void (*irq_disable)(struct cedrus_ctx *ctx);
+	enum cedrus_irq_status (*irq_status)(struct cedrus_ctx *ctx);
+	void (*setup)(struct cedrus_ctx *ctx, struct cedrus_run *run);
+	int (*start)(struct cedrus_ctx *ctx);
+	void (*stop)(struct cedrus_ctx *ctx);
+	void (*trigger)(struct cedrus_ctx *ctx);
+};
+
+struct cedrus_dev {
+	struct v4l2_device	v4l2_dev;
+	struct video_device	vfd;
+	struct media_device	mdev;
+	struct media_pad	pad[2];
+	struct platform_device	*pdev;
+	struct device		*dev;
+	struct v4l2_m2m_dev	*m2m_dev;
+	struct cedrus_dec_ops	*dec_ops[CEDRUS_CODEC_LAST];
+
+	/* Device file mutex */
+	struct mutex		dev_mutex;
+	/* Interrupt spinlock */
+	spinlock_t		irq_lock;
+
+	void __iomem		*base;
+
+	struct clk		*mod_clk;
+	struct clk		*ahb_clk;
+	struct clk		*ram_clk;
+
+	struct reset_control	*rstc;
+
+	unsigned int		capabilities;
+};
+
+extern struct cedrus_dec_ops cedrus_dec_ops_mpeg2;
+
+static inline void cedrus_write(struct cedrus_dev *dev, u32 reg, u32 val)
+{
+	writel(val, dev->base + reg);
+}
+
+static inline u32 cedrus_read(struct cedrus_dev *dev, u32 reg)
+{
+	return readl(dev->base + reg);
+}
+
+static inline dma_addr_t cedrus_buf_addr(struct vb2_buffer *buf,
+					 struct v4l2_pix_format_mplane *fmt,
+					 unsigned int plane)
+{
+	dma_addr_t addr = vb2_dma_contig_plane_dma_addr(buf, 0);
+
+	return addr + (fmt ? (dma_addr_t) fmt->plane_fmt[0].bytesperline *
+	       fmt->height * plane : 0);
+}
+
+static inline dma_addr_t cedrus_dst_buf_addr(struct cedrus_ctx *ctx,
+					     unsigned int index,
+					     unsigned int plane)
+{
+	struct vb2_buffer *buf = ctx->dst_bufs[index];
+
+	return buf ? cedrus_buf_addr(buf, &ctx->dst_fmt, plane) : 0;
+}
+
+static inline struct cedrus_buffer *vb2_v4l2_to_cedrus_buffer(const struct vb2_v4l2_buffer *p)
+{
+	return container_of(p, struct cedrus_buffer, m2m_buf.vb);
+}
+
+static inline struct cedrus_buffer *vb2_to_cedrus_buffer(const struct vb2_buffer *p)
+{
+	return vb2_v4l2_to_cedrus_buffer(to_vb2_v4l2_buffer(p));
+}
+
+void *cedrus_find_control_data(struct cedrus_ctx *ctx, u32 id);
+
+#endif
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus_dec.c b/drivers/media/platform/sunxi/cedrus/cedrus_dec.c
new file mode 100644
index 000000000000..d3e952e2fa47
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus_dec.c
@@ -0,0 +1,129 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#include <media/v4l2-device.h>
+#include <media/v4l2-ioctl.h>
+#include <media/v4l2-event.h>
+#include <media/v4l2-mem2mem.h>
+
+#include "cedrus.h"
+#include "cedrus_dec.h"
+#include "cedrus_hw.h"
+
+void cedrus_device_run(void *priv)
+{
+	struct cedrus_ctx *ctx = priv;
+	struct cedrus_dev *dev = ctx->dev;
+	struct cedrus_run run = { 0 };
+	struct media_request *src_req;
+	unsigned long flags;
+
+	run.src = v4l2_m2m_next_src_buf(ctx->fh.m2m_ctx);
+	if (!run.src) {
+		v4l2_err(&dev->v4l2_dev, "No source buffer to prepare\n");
+		return;
+	}
+
+	run.dst = v4l2_m2m_next_dst_buf(ctx->fh.m2m_ctx);
+	if (!run.dst) {
+		v4l2_err(&dev->v4l2_dev, "No destination buffer to prepare\n");
+		return;
+	}
+
+	/* Apply request(s) controls if needed. */
+	src_req = run.src->vb2_buf.req_obj.req;
+
+	if (src_req)
+		v4l2_ctrl_request_setup(src_req, &ctx->hdl);
+
+	ctx->job_abort = 0;
+
+	spin_lock_irqsave(&ctx->dev->irq_lock, flags);
+
+	switch (ctx->src_fmt.pixelformat) {
+	case V4L2_PIX_FMT_MPEG2_SLICE:
+		run.mpeg2.slice_params = cedrus_find_control_data(ctx,
+			V4L2_CID_MPEG_VIDEO_MPEG2_SLICE_PARAMS);
+
+		if (!run.mpeg2.slice_params) {
+			v4l2_err(&dev->v4l2_dev,
+				 "Missing MPEG2 frame params control\n");
+			ctx->job_abort = 1;
+			goto unlock_complete;
+		}
+		break;
+
+	default:
+		ctx->job_abort = 1;
+	}
+
+	if (!ctx->job_abort)
+		dev->dec_ops[ctx->current_codec]->setup(ctx, &run);
+
+unlock_complete:
+	spin_unlock_irqrestore(&ctx->dev->irq_lock, flags);
+
+	/* Complete request(s) controls if needed. */
+
+	if (src_req)
+		v4l2_ctrl_request_complete(src_req, &ctx->hdl);
+
+	spin_lock_irqsave(&ctx->dev->irq_lock, flags);
+
+	if (!ctx->job_abort) {
+		dev->dec_ops[ctx->current_codec]->trigger(ctx);
+	} else {
+		v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+		v4l2_m2m_buf_done(run.src, VB2_BUF_STATE_ERROR);
+
+		v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+		v4l2_m2m_buf_done(run.dst, VB2_BUF_STATE_ERROR);
+	}
+
+	spin_unlock_irqrestore(&ctx->dev->irq_lock, flags);
+
+	if (ctx->job_abort)
+		v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
+}
+
+void cedrus_job_abort(void *priv)
+{
+	struct cedrus_ctx *ctx = priv;
+	struct vb2_v4l2_buffer *src_buf, *dst_buf;
+	unsigned long flags;
+
+	ctx->job_abort = 1;
+
+	/*
+	 * V4L2 M2M and request API cleanup is done here while hardware state
+	 * cleanup is done in the interrupt context. Doing all the cleanup in
+	 * the interrupt context is a bit risky, since the job_abort call might
+	 * originate from the release hook, where interrupts have already been
+	 * disabled.
+	 */
+
+	spin_lock_irqsave(&ctx->dev->irq_lock, flags);
+
+	src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+	if (src_buf)
+		v4l2_m2m_buf_done(src_buf, VB2_BUF_STATE_ERROR);
+
+	dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+	if (dst_buf)
+		v4l2_m2m_buf_done(dst_buf, VB2_BUF_STATE_ERROR);
+
+	spin_unlock_irqrestore(&ctx->dev->irq_lock, flags);
+
+	v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
+}
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus_dec.h b/drivers/media/platform/sunxi/cedrus/cedrus_dec.h
new file mode 100644
index 000000000000..b38812136504
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus_dec.h
@@ -0,0 +1,27 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#ifndef _CEDRUS_DEC_H_
+#define _CEDRUS_DEC_H_
+
+extern const struct v4l2_ioctl_ops cedrus_ioctl_ops;
+
+void cedrus_device_work(struct work_struct *work);
+void cedrus_device_run(void *priv);
+void cedrus_job_abort(void *priv);
+
+int cedrus_queue_init(void *priv, struct vb2_queue *src_vq,
+		      struct vb2_queue *dst_vq);
+
+#endif
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus_hw.c b/drivers/media/platform/sunxi/cedrus/cedrus_hw.c
new file mode 100644
index 000000000000..ec013f89f960
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus_hw.c
@@ -0,0 +1,325 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#include <linux/platform_device.h>
+#include <linux/of_reserved_mem.h>
+#include <linux/dma-mapping.h>
+#include <linux/interrupt.h>
+#include <linux/clk.h>
+#include <linux/regmap.h>
+#include <linux/reset.h>
+#include <linux/soc/sunxi/sunxi_sram.h>
+
+#include <media/videobuf2-core.h>
+#include <media/v4l2-mem2mem.h>
+
+#include "cedrus.h"
+#include "cedrus_hw.h"
+#include "cedrus_regs.h"
+
+int cedrus_engine_enable(struct cedrus_dev *dev, enum cedrus_codec codec)
+{
+	u32 reg = 0;
+
+	/*
+	 * FIXME: This is only valid on 32-bits DDR's, we should test
+	 * it on the A13/A33.
+	 */
+	reg |= VE_CTRL_REC_WR_MODE_2MB;
+
+	reg |= VE_CTRL_CACHE_BUS_BW_128;
+
+	switch (codec) {
+	case CEDRUS_CODEC_MPEG2:
+		reg |= VE_CTRL_DEC_MODE_MPEG;
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	cedrus_write(dev, VE_CTRL, reg);
+
+	return 0;
+}
+
+void cedrus_engine_disable(struct cedrus_dev *dev)
+{
+	cedrus_write(dev, VE_CTRL, VE_CTRL_DEC_MODE_DISABLED);
+}
+
+void cedrus_dst_format_set(struct cedrus_dev *dev,
+			   struct v4l2_pix_format_mplane *fmt)
+{
+	unsigned int width = fmt->width;
+	unsigned int height = fmt->height;
+	u32 chroma_size;
+	u32 reg;
+
+	switch (fmt->pixelformat) {
+	case V4L2_PIX_FMT_NV12:
+		chroma_size = ALIGN(width, 32) * ALIGN(height / 2, 32);
+
+		reg = VE_PRIMARY_OUT_FMT_NV12 | VE_SECONDARY_SPECIAL_OUT_FMT_NV12;
+		cedrus_write(dev, VE_PRIMARY_OUT_FMT, reg);
+
+		reg = VE_SECONDARY_OUT_FMT_SPECIAL | (chroma_size / 2);
+		cedrus_write(dev, VE_CHROMA_BUF_LEN, reg);
+
+		reg = chroma_size / 2;
+		cedrus_write(dev, VE_PRIMARY_CHROMA_BUF_LEN, reg);
+
+		reg = (ALIGN(width / 2, 16) << VE_CHROMA_LINE_STRIDE_SHIFT) |
+		      (ALIGN(width, 32) << VE_LUMA_LINE_STRIDE_SHIFT);
+		cedrus_write(dev, VE_PRIMARY_FB_LINE_STRIDE, reg);
+
+		break;
+	case V4L2_PIX_FMT_MB32_NV12:
+	default:
+		reg = VE_PRIMARY_OUT_FMT_MB32_NV12;
+		cedrus_write(dev, VE_PRIMARY_OUT_FMT, reg);
+
+		reg = VE_SECONDARY_OUT_FMT_MB32_NV12;
+		cedrus_write(dev, VE_CHROMA_BUF_LEN, reg);
+
+		break;
+	}
+}
+
+static irqreturn_t cedrus_bh(int irq, void *data)
+{
+	struct cedrus_dev *dev = data;
+	struct cedrus_ctx *ctx;
+
+	ctx = v4l2_m2m_get_curr_priv(dev->m2m_dev);
+	if (!ctx) {
+		v4l2_err(&dev->v4l2_dev,
+			 "Instance released before the end of transaction\n");
+		return IRQ_HANDLED;
+	}
+
+	v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
+
+	return IRQ_HANDLED;
+}
+
+static irqreturn_t cedrus_irq(int irq, void *data)
+{
+	struct cedrus_dev *dev = data;
+	struct cedrus_ctx *ctx;
+	struct vb2_v4l2_buffer *src_buf, *dst_buf;
+	enum vb2_buffer_state state;
+	enum cedrus_irq_status status;
+	unsigned long flags;
+
+	spin_lock_irqsave(&dev->irq_lock, flags);
+
+	ctx = v4l2_m2m_get_curr_priv(dev->m2m_dev);
+	if (!ctx) {
+		v4l2_err(&dev->v4l2_dev,
+			 "Instance released before the end of transaction\n");
+		spin_unlock_irqrestore(&dev->irq_lock, flags);
+
+		return IRQ_NONE;
+	}
+
+	status = dev->dec_ops[ctx->current_codec]->irq_status(ctx);
+	if (status == CEDRUS_IRQ_NONE) {
+		spin_unlock_irqrestore(&dev->irq_lock, flags);
+		return IRQ_NONE;
+	}
+
+	dev->dec_ops[ctx->current_codec]->irq_disable(ctx);
+	dev->dec_ops[ctx->current_codec]->irq_clear(ctx);
+
+	src_buf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+	dst_buf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+
+	if (!src_buf || !dst_buf) {
+		v4l2_err(&dev->v4l2_dev,
+			 "Missing source and/or destination buffers\n");
+		spin_unlock_irqrestore(&dev->irq_lock, flags);
+
+		return IRQ_HANDLED;
+	}
+
+	if (ctx->job_abort || status == CEDRUS_IRQ_ERROR)
+		state = VB2_BUF_STATE_ERROR;
+	else
+		state = VB2_BUF_STATE_DONE;
+
+	v4l2_m2m_buf_done(src_buf, state);
+	v4l2_m2m_buf_done(dst_buf, state);
+
+	spin_unlock_irqrestore(&dev->irq_lock, flags);
+
+	return IRQ_WAKE_THREAD;
+}
+
+static void cedrus_hw_set_capabilities(struct cedrus_dev *dev)
+{
+	unsigned int engine_version;
+
+	engine_version = cedrus_read(dev, VE_VERSION) >> VE_VERSION_SHIFT;
+
+	if (engine_version >= 0x1667)
+		dev->capabilities |= CEDRUS_CAPABILITY_UNTILED;
+}
+
+int cedrus_hw_probe(struct cedrus_dev *dev)
+{
+	struct resource *res;
+	int irq_dec;
+	int ret;
+
+	irq_dec = platform_get_irq(dev->pdev, 0);
+	if (irq_dec <= 0) {
+		v4l2_err(&dev->v4l2_dev, "Failed to get IRQ\n");
+		return -ENXIO;
+	}
+	ret = devm_request_threaded_irq(dev->dev, irq_dec, cedrus_irq,
+					cedrus_bh, 0, dev_name(dev->dev),
+					dev);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to request IRQ\n");
+		return -ENXIO;
+	}
+
+	/*
+	 * The VPU is only able to handle bus addresses so we have to subtract
+	 * the RAM offset to the physcal addresses.
+	 */
+	dev->dev->dma_pfn_offset = PHYS_PFN_OFFSET;
+
+	ret = of_reserved_mem_device_init(dev->dev);
+	if (ret && ret != -ENODEV) {
+		v4l2_err(&dev->v4l2_dev, "Failed to reserved memory\n");
+		return -ENODEV;
+	}
+
+	ret = sunxi_sram_claim(dev->dev);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to claim SRAM\n");
+		goto err_mem;
+	}
+
+	dev->ahb_clk = devm_clk_get(dev->dev, "ahb");
+	if (IS_ERR(dev->ahb_clk)) {
+		v4l2_err(&dev->v4l2_dev, "Failed to get AHB clock\n");
+
+		ret = PTR_ERR(dev->ahb_clk);
+		goto err_sram;
+	}
+
+	dev->mod_clk = devm_clk_get(dev->dev, "mod");
+	if (IS_ERR(dev->mod_clk)) {
+		v4l2_err(&dev->v4l2_dev, "Failed to get MOD clock\n");
+
+		ret = PTR_ERR(dev->mod_clk);
+		goto err_sram;
+	}
+
+	dev->ram_clk = devm_clk_get(dev->dev, "ram");
+	if (IS_ERR(dev->ram_clk)) {
+		v4l2_err(&dev->v4l2_dev, "Failed to get RAM clock\n");
+
+		ret = PTR_ERR(dev->ram_clk);
+		goto err_sram;
+	}
+
+	dev->rstc = devm_reset_control_get(dev->dev, NULL);
+	if (IS_ERR(dev->rstc)) {
+		v4l2_err(&dev->v4l2_dev, "Failed to get reset control\n");
+
+		ret = PTR_ERR(dev->rstc);
+		goto err_sram;
+	}
+
+	res = platform_get_resource(dev->pdev, IORESOURCE_MEM, 0);
+	dev->base = devm_ioremap_resource(dev->dev, res);
+	if (!dev->base) {
+		v4l2_err(&dev->v4l2_dev, "Failed to map registers\n");
+
+		ret = -EFAULT;
+		goto err_sram;
+	}
+
+	ret = clk_set_rate(dev->mod_clk, CEDRUS_CLOCK_RATE_DEFAULT);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to set clock rate\n");
+		goto err_sram;
+	}
+
+	ret = clk_prepare_enable(dev->ahb_clk);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to enable AHB clock\n");
+
+		ret = -EFAULT;
+		goto err_sram;
+	}
+
+	ret = clk_prepare_enable(dev->mod_clk);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to enable MOD clock\n");
+
+		ret = -EFAULT;
+		goto err_ahb_clk;
+	}
+
+	ret = clk_prepare_enable(dev->ram_clk);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to enable RAM clock\n");
+
+		ret = -EFAULT;
+		goto err_mod_clk;
+	}
+
+	ret = reset_control_reset(dev->rstc);
+	if (ret) {
+		v4l2_err(&dev->v4l2_dev, "Failed to apply reset\n");
+
+		ret = -EFAULT;
+		goto err_ram_clk;
+	}
+
+	cedrus_hw_set_capabilities(dev);
+
+	return 0;
+
+err_ram_clk:
+	clk_disable_unprepare(dev->ram_clk);
+err_mod_clk:
+	clk_disable_unprepare(dev->mod_clk);
+err_ahb_clk:
+	clk_disable_unprepare(dev->ahb_clk);
+err_sram:
+	sunxi_sram_release(dev->dev);
+err_mem:
+	of_reserved_mem_device_release(dev->dev);
+
+	return ret;
+}
+
+void cedrus_hw_remove(struct cedrus_dev *dev)
+{
+	reset_control_assert(dev->rstc);
+
+	clk_disable_unprepare(dev->ram_clk);
+	clk_disable_unprepare(dev->mod_clk);
+	clk_disable_unprepare(dev->ahb_clk);
+
+	sunxi_sram_release(dev->dev);
+
+	of_reserved_mem_device_release(dev->dev);
+}
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus_hw.h b/drivers/media/platform/sunxi/cedrus/cedrus_hw.h
new file mode 100644
index 000000000000..9704f1e0921c
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus_hw.h
@@ -0,0 +1,29 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#ifndef _CEDRUS_HW_H_
+#define _CEDRUS_HW_H_
+
+#define CEDRUS_CLOCK_RATE_DEFAULT	320000000
+
+int cedrus_engine_enable(struct cedrus_dev *dev, enum cedrus_codec codec);
+void cedrus_engine_disable(struct cedrus_dev *dev);
+
+void cedrus_dst_format_set(struct cedrus_dev *dev,
+			   struct v4l2_pix_format_mplane *fmt);
+
+int cedrus_hw_probe(struct cedrus_dev *dev);
+void cedrus_hw_remove(struct cedrus_dev *dev);
+
+#endif
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus_mpeg2.c b/drivers/media/platform/sunxi/cedrus/cedrus_mpeg2.c
new file mode 100644
index 000000000000..6d12725377b2
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus_mpeg2.c
@@ -0,0 +1,178 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#include <media/videobuf2-dma-contig.h>
+
+#include "cedrus.h"
+#include "cedrus_hw.h"
+#include "cedrus_regs.h"
+
+static const u8 mpeg_default_intra_quant[64] = {
+	8, 16, 16, 19, 16, 19, 22, 22,
+	22, 22, 22, 22, 26, 24, 26, 27,
+	27, 27, 26, 26, 26, 26, 27, 27,
+	27, 29, 29, 29, 34, 34, 34, 29,
+	29, 29, 27, 27, 29, 29, 32, 32,
+	34, 34, 37, 38, 37, 35, 35, 34,
+	35, 38, 38, 40, 40, 40, 48, 48,
+	46, 46, 56, 56, 58, 69, 69, 83
+};
+
+#define m_iq(i) (((64 + i) << 8) | mpeg_default_intra_quant[i])
+
+static const u8 mpeg_default_non_intra_quant[64] = {
+	16, 16, 16, 16, 16, 16, 16, 16,
+	16, 16, 16, 16, 16, 16, 16, 16,
+	16, 16, 16, 16, 16, 16, 16, 16,
+	16, 16, 16, 16, 16, 16, 16, 16,
+	16, 16, 16, 16, 16, 16, 16, 16,
+	16, 16, 16, 16, 16, 16, 16, 16,
+	16, 16, 16, 16, 16, 16, 16, 16,
+	16, 16, 16, 16, 16, 16, 16, 16
+};
+
+#define m_niq(i) ((i << 8) | mpeg_default_non_intra_quant[i])
+
+static enum cedrus_irq_status cedrus_mpeg2_irq_status(struct cedrus_ctx *ctx)
+{
+	struct cedrus_dev *dev = ctx->dev;
+	u32 reg = cedrus_read(dev, VE_MPEG_STATUS) & 0x7;
+
+	if (!reg)
+		return CEDRUS_IRQ_NONE;
+
+	if (reg & (BIT(1) | BIT(2)))
+		return CEDRUS_IRQ_ERROR;
+
+	return CEDRUS_IRQ_OK;
+}
+
+static void cedrus_mpeg2_irq_clear(struct cedrus_ctx *ctx)
+{
+	struct cedrus_dev *dev = ctx->dev;
+
+	cedrus_write(dev, VE_MPEG_STATUS, GENMASK(2, 0));
+}
+
+static void cedrus_mpeg2_irq_disable(struct cedrus_ctx *ctx)
+{
+	struct cedrus_dev *dev = ctx->dev;
+	u32 reg = cedrus_read(dev, VE_MPEG_CTRL) & ~BIT(3);
+
+	cedrus_write(dev, VE_MPEG_CTRL, reg);
+}
+
+static void cedrus_mpeg2_setup(struct cedrus_ctx *ctx, struct cedrus_run *run)
+{
+	struct cedrus_dev *dev = ctx->dev;
+	const struct v4l2_ctrl_mpeg2_slice_params *slice_params =
+		run->mpeg2.slice_params;
+
+	u16 width = DIV_ROUND_UP(slice_params->width, 16);
+	u16 height = DIV_ROUND_UP(slice_params->height, 16);
+
+	u32 pic_header = 0;
+	u32 vld_len = slice_params->slice_len - slice_params->slice_pos;
+	int i;
+
+	dma_addr_t src_buf_addr, dst_luma_addr, dst_chroma_addr;
+	dma_addr_t fwd_luma = 0, fwd_chroma = 0, bwd_luma = 0, bwd_chroma = 0;
+
+	fwd_luma = cedrus_dst_buf_addr(ctx, slice_params->forward_ref_index, 0);
+	fwd_chroma = cedrus_dst_buf_addr(ctx, slice_params->forward_ref_index, 1);
+
+	bwd_luma = cedrus_dst_buf_addr(ctx, slice_params->backward_ref_index, 0);
+	bwd_chroma = cedrus_dst_buf_addr(ctx, slice_params->backward_ref_index, 1);
+
+	/* Activate MPEG engine. */
+	cedrus_engine_enable(dev, CEDRUS_CODEC_MPEG2);
+
+	/* Set quantization matrices. */
+	for (i = 0; i < 64; i++) {
+		cedrus_write(dev, VE_MPEG_IQ_MIN_INPUT, m_iq(i));
+		cedrus_write(dev, VE_MPEG_IQ_MIN_INPUT, m_niq(i));
+	}
+
+	/* Set frame dimensions. */
+	cedrus_write(dev, VE_MPEG_SIZE, width << 8 | height);
+	cedrus_write(dev, VE_MPEG_FRAME_SIZE, width << 20 | height << 4);
+
+	/* Set MPEG picture header. */
+	pic_header |= (slice_params->slice_type & 0xf) << 28;
+	pic_header |= (slice_params->f_code[0][0] & 0xf) << 24;
+	pic_header |= (slice_params->f_code[0][1] & 0xf) << 20;
+	pic_header |= (slice_params->f_code[1][0] & 0xf) << 16;
+	pic_header |= (slice_params->f_code[1][1] & 0xf) << 12;
+	pic_header |= (slice_params->intra_dc_precision & 0x3) << 10;
+	pic_header |= (slice_params->picture_structure & 0x3) << 8;
+	pic_header |= (slice_params->top_field_first & 0x1) << 7;
+	pic_header |= (slice_params->frame_pred_frame_dct & 0x1) << 6;
+	pic_header |= (slice_params->concealment_motion_vectors & 0x1) << 5;
+	pic_header |= (slice_params->q_scale_type & 0x1) << 4;
+	pic_header |= (slice_params->intra_vlc_format & 0x1) << 3;
+	pic_header |= (slice_params->alternate_scan & 0x1) << 2;
+	cedrus_write(dev, VE_MPEG_PIC_HDR, pic_header);
+
+	/* Enable interrupt and an unknown control flag. */
+	cedrus_write(dev, VE_MPEG_CTRL, VE_MPEG_CTRL_MPEG2);
+
+	/* Macroblock address. */
+	cedrus_write(dev, VE_MPEG_MBA, 0);
+
+	/* Clear previous errors. */
+	cedrus_write(dev, VE_MPEG_ERROR, 0);
+
+	/* Clear correct macroblocks register. */
+	cedrus_write(dev, VE_MPEG_CTR_MB, 0);
+
+	/* Forward and backward prediction reference buffers. */
+	cedrus_write(dev, VE_MPEG_FWD_LUMA, fwd_luma);
+	cedrus_write(dev, VE_MPEG_FWD_CHROMA, fwd_chroma);
+	cedrus_write(dev, VE_MPEG_BACK_LUMA, bwd_luma);
+	cedrus_write(dev, VE_MPEG_BACK_CHROMA, bwd_chroma);
+
+	/* Destination luma and chroma buffers. */
+	dst_luma_addr = cedrus_dst_buf_addr(ctx, run->dst->vb2_buf.index, 0);
+	dst_chroma_addr = cedrus_dst_buf_addr(ctx, run->dst->vb2_buf.index, 1);
+
+	cedrus_write(dev, VE_MPEG_REC_LUMA, dst_luma_addr);
+	cedrus_write(dev, VE_MPEG_REC_CHROMA, dst_chroma_addr);
+	cedrus_write(dev, VE_MPEG_ROT_LUMA, dst_luma_addr);
+	cedrus_write(dev, VE_MPEG_ROT_CHROMA, dst_chroma_addr);
+
+	/* Source offset and length in bits. */
+	cedrus_write(dev, VE_MPEG_VLD_OFFSET, slice_params->slice_pos);
+	cedrus_write(dev, VE_MPEG_VLD_LEN, vld_len);
+
+	/* Source beginning and end addresses. */
+	src_buf_addr = vb2_dma_contig_plane_dma_addr(&run->src->vb2_buf, 0);
+	cedrus_write(dev, VE_MPEG_VLD_ADDR, VE_MPEG_VLD_ADDR_VAL(src_buf_addr));
+	cedrus_write(dev, VE_MPEG_VLD_END, src_buf_addr + VBV_SIZE - 1);
+}
+
+static void cedrus_mpeg2_trigger(struct cedrus_ctx *ctx)
+{
+	struct cedrus_dev *dev = ctx->dev;
+
+	/* Trigger MPEG engine. */
+	cedrus_write(dev, VE_MPEG_TRIGGER, VE_TRIG_MPEG2);
+}
+
+struct cedrus_dec_ops cedrus_dec_ops_mpeg2 = {
+	.irq_clear	= cedrus_mpeg2_irq_clear,
+	.irq_disable	= cedrus_mpeg2_irq_disable,
+	.irq_status	= cedrus_mpeg2_irq_status,
+	.setup		= cedrus_mpeg2_setup,
+	.trigger	= cedrus_mpeg2_trigger,
+};
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus_regs.h b/drivers/media/platform/sunxi/cedrus/cedrus_regs.h
new file mode 100644
index 000000000000..15edc5b13d65
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus_regs.h
@@ -0,0 +1,195 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#ifndef _CEDRUS_REGS_H_
+#define _CEDRUS_REGS_H_
+
+/*
+ * For more information, consult http://linux-sunxi.org/VE_Register_guide
+ */
+
+/* VE_MPEG_CTRL:
+ * The bit 3 (0x8) is used to enable IRQs
+ * The other bits are unknown but needed
+ */
+#define VE_MPEG_CTRL_MPEG2	0x800001b8
+#define VE_MPEG_CTRL_MPEG4	(0x80084118 | BIT(7))
+#define VE_MPEG_CTRL_MPEG4_P	(VE_MPEG_CTRL_MPEG4 | BIT(12))
+
+/* VE_MPEG_VLD_ADDR:
+ * The bits 27 to 4 are used for the address
+ * The bits 31 to 28 (0x7) are used to select the MPEG or JPEG engine
+ */
+#define VE_MPEG_VLD_ADDR_VAL(x)	((x & 0x0ffffff0) | (x >> 28) | (0x7 << 28))
+
+/* VE_MPEG_TRIGGER:
+ * The first three bits are used to trigger the engine
+ * The bits 24 to 26 are used to select the input format (1 for MPEG1, 2 for
+ *                           MPEG2, 4 for MPEG4)
+ * The bit 21 (0x8) is used to disable bitstream error handling
+ *
+ * In MPEG4 the w*h value is somehow used for an offset, unknown but needed
+ */
+#define VE_TRIG_MPEG1		0x8100000f
+#define VE_TRIG_MPEG2		0x8200000f
+#define VE_TRIG_MPEG4(w, h)	(0x8400000d | ((w * h) << 8))
+
+/* VE_MPEG_SDROT_CTRL:
+ * The bit 8 at zero is used to disable x downscaling
+ * The bit 10 at 0 is used to disable y downscaling
+ * The other bits are unknown but needed
+ */
+#define VE_NO_SDROT_CTRL	0x40620000
+
+/* Decent size fo video buffering verifier */
+#define VBV_SIZE		(1024 * 1024)
+
+/* Registers addresses */
+#define VE_CTRL				0x000
+/*
+ * The datasheet states that this should be set to 2MB on a 32bits
+ * DDR-3.
+ */
+#define VE_CTRL_REC_WR_MODE_2MB			(1 << 20)
+#define VE_CTRL_REC_WR_MODE_1MB			(0 << 20)
+
+#define VE_CTRL_CACHE_BUS_BW_128		(3 << 16)
+#define VE_CTRL_CACHE_BUS_BW_256		(2 << 16)
+
+#define VE_CTRL_DEC_MODE_DISABLED		(7 << 0)
+#define VE_CTRL_DEC_MODE_H265			(4 << 0)
+#define VE_CTRL_DEC_MODE_H264			(1 << 0)
+#define VE_CTRL_DEC_MODE_MPEG			(0 << 0)
+
+#define VE_PRIMARY_OUT_FMT_MB32_NV12		(0 << 4)
+#define VE_PRIMARY_OUT_FMT_MB128_NV12		(1 << 4)
+#define VE_PRIMARY_OUT_FMT_YU12			(2 << 4)
+#define VE_PRIMARY_OUT_FMT_YV12			(3 << 4)
+#define VE_PRIMARY_OUT_FMT_NV12			(4 << 4)
+#define VE_PRIMARY_OUT_FMT_NV21			(5 << 4)
+
+#define VE_SECONDARY_SPECIAL_OUT_FMT_MB32_NV12	(0 << 0)
+#define VE_SECONDARY_SPECIAL_OUT_FMT_MB128_NV12	(1 << 0)
+#define VE_SECONDARY_SPECIAL_OUT_FMT_YU12	(2 << 0)
+#define VE_SECONDARY_SPECIAL_OUT_FMT_YV12	(3 << 0)
+#define VE_SECONDARY_SPECIAL_OUT_FMT_NV12	(4 << 0)
+#define VE_SECONDARY_SPECIAL_OUT_FMT_NV21	(5 << 0)
+
+#define VE_SECONDARY_OUT_FMT_MB32_NV12		(0 << 30)
+#define VE_SECONDARY_OUT_FMT_SPECIAL		(1 << 30)
+#define VE_SECONDARY_OUT_FMT_YU12		(2 << 30)
+#define VE_SECONDARY_OUT_FMT_YV12		(3 << 30)
+
+#define VE_LUMA_LINE_STRIDE_SHIFT		0
+#define VE_CHROMA_LINE_STRIDE_SHIFT		16
+
+#define VE_VERSION_SHIFT			16
+
+#define VE_PRIMARY_CHROMA_BUF_LEN	0x0c4
+#define VE_PRIMARY_FB_LINE_STRIDE	0x0c8
+#define VE_CHROMA_BUF_LEN		0x0e8
+#define VE_PRIMARY_OUT_FMT		0x0ec
+#define VE_VERSION			0x0f0
+
+#define VE_MPEG_PIC_HDR			0x100
+#define VE_MPEG_VOP_HDR			0x104
+#define VE_MPEG_SIZE			0x108
+#define VE_MPEG_FRAME_SIZE		0x10c
+#define VE_MPEG_MBA			0x110
+#define VE_MPEG_CTRL			0x114
+#define VE_MPEG_TRIGGER			0x118
+#define VE_MPEG_STATUS			0x11c
+#define VE_MPEG_TRBTRD_FIELD		0x120
+#define VE_MPEG_TRBTRD_FRAME		0x124
+#define VE_MPEG_VLD_ADDR		0x128
+#define VE_MPEG_VLD_OFFSET		0x12c
+#define VE_MPEG_VLD_LEN			0x130
+#define VE_MPEG_VLD_END			0x134
+#define VE_MPEG_MBH_ADDR		0x138
+#define VE_MPEG_DCAC_ADDR		0x13c
+#define VE_MPEG_NCF_ADDR		0x144
+#define VE_MPEG_REC_LUMA		0x148
+#define VE_MPEG_REC_CHROMA		0x14c
+#define VE_MPEG_FWD_LUMA		0x150
+#define VE_MPEG_FWD_CHROMA		0x154
+#define VE_MPEG_BACK_LUMA		0x158
+#define VE_MPEG_BACK_CHROMA		0x15c
+#define VE_MPEG_IQ_MIN_INPUT		0x180
+#define VE_MPEG_QP_INPUT		0x184
+#define VE_MPEG_JPEG_SIZE		0x1b8
+#define VE_MPEG_JPEG_RES_INT		0x1c0
+#define VE_MPEG_ERROR			0x1c4
+#define VE_MPEG_CTR_MB			0x1c8
+#define VE_MPEG_ROT_LUMA		0x1cc
+#define VE_MPEG_ROT_CHROMA		0x1d0
+#define VE_MPEG_SDROT_CTRL		0x1d4
+#define VE_MPEG_RAM_WRITE_PTR		0x1e0
+#define VE_MPEG_RAM_WRITE_DATA		0x1e4
+
+#define VE_H264_FRAME_SIZE		0x200
+#define VE_H264_PIC_HDR			0x204
+#define VE_H264_SLICE_HDR		0x208
+#define VE_H264_SLICE_HDR2		0x20c
+#define VE_H264_PRED_WEIGHT		0x210
+#define VE_H264_QP_PARAM		0x21c
+#define VE_H264_CTRL			0x220
+#define VE_H264_TRIGGER			0x224
+#define VE_H264_STATUS			0x228
+#define VE_H264_CUR_MB_NUM		0x22c
+#define VE_H264_VLD_ADDR		0x230
+#define VE_H264_VLD_OFFSET		0x234
+#define VE_H264_VLD_LEN			0x238
+#define VE_H264_VLD_END			0x23c
+#define VE_H264_SDROT_CTRL		0x240
+#define VE_H264_OUTPUT_FRAME_IDX	0x24c
+#define VE_H264_EXTRA_BUFFER1		0x250
+#define VE_H264_EXTRA_BUFFER2		0x254
+#define VE_H264_BASIC_BITS		0x2dc
+#define VE_H264_RAM_WRITE_PTR		0x2e0
+#define VE_H264_RAM_WRITE_DATA		0x2e4
+
+#define VE_SRAM_H264_PRED_WEIGHT_TABLE	0x000
+#define VE_SRAM_H264_FRAMEBUFFER_LIST	0x400
+#define VE_SRAM_H264_REF_LIST0		0x640
+#define VE_SRAM_H264_REF_LIST1		0x664
+#define VE_SRAM_H264_SCALING_LISTS	0x800
+
+#define VE_ISP_INPUT_SIZE		0xa00
+#define VE_ISP_INPUT_STRIDE		0xa04
+#define VE_ISP_CTRL			0xa08
+#define VE_ISP_INPUT_LUMA		0xa78
+#define VE_ISP_INPUT_CHROMA		0xa7c
+
+#define VE_AVC_PARAM			0xb04
+#define VE_AVC_QP			0xb08
+#define VE_AVC_MOTION_EST		0xb10
+#define VE_AVC_CTRL			0xb14
+#define VE_AVC_TRIGGER			0xb18
+#define VE_AVC_STATUS			0xb1c
+#define VE_AVC_BASIC_BITS		0xb20
+#define VE_AVC_UNK_BUF			0xb60
+#define VE_AVC_VLE_ADDR			0xb80
+#define VE_AVC_VLE_END			0xb84
+#define VE_AVC_VLE_OFFSET		0xb88
+#define VE_AVC_VLE_MAX			0xb8c
+#define VE_AVC_VLE_LENGTH		0xb90
+#define VE_AVC_REF_LUMA			0xba0
+#define VE_AVC_REF_CHROMA		0xba4
+#define VE_AVC_REC_LUMA			0xbb0
+#define VE_AVC_REC_CHROMA		0xbb4
+#define VE_AVC_REF_SLUMA		0xbb8
+#define VE_AVC_REC_SLUMA		0xbbc
+#define VE_AVC_MB_INFO			0xbc0
+
+#endif
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus_video.c b/drivers/media/platform/sunxi/cedrus/cedrus_video.c
new file mode 100644
index 000000000000..0a9420b1c827
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus_video.c
@@ -0,0 +1,556 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#include <media/videobuf2-dma-contig.h>
+#include <media/v4l2-device.h>
+#include <media/v4l2-ioctl.h>
+#include <media/v4l2-event.h>
+#include <media/v4l2-mem2mem.h>
+
+#include "cedrus.h"
+#include "cedrus_video.h"
+#include "cedrus_dec.h"
+#include "cedrus_hw.h"
+
+#define CEDRUS_DECODE_SRC	BIT(0)
+#define CEDRUS_DECODE_DST	BIT(1)
+
+#define CEDRUS_MIN_WIDTH	16U
+#define CEDRUS_MIN_HEIGHT	16U
+#define CEDRUS_MAX_WIDTH	3840U
+#define CEDRUS_MAX_HEIGHT	2160U
+
+static struct cedrus_format cedrus_formats[] = {
+	{
+		.pixelformat	= V4L2_PIX_FMT_MPEG2_SLICE,
+		.directions	= CEDRUS_DECODE_SRC,
+		.num_planes	= 1,
+		.num_buffers	= 1,
+	},
+	{
+		.pixelformat	= V4L2_PIX_FMT_MB32_NV12,
+		.directions	= CEDRUS_DECODE_DST,
+		.num_planes	= 2,
+		.num_buffers	= 1,
+	},
+	{
+		.pixelformat	= V4L2_PIX_FMT_NV12,
+		.directions	= CEDRUS_DECODE_DST,
+		.num_planes	= 2,
+		.num_buffers	= 1,
+		.capabilities	= CEDRUS_CAPABILITY_UNTILED,
+	},
+};
+
+#define CEDRUS_FORMATS_COUNT	ARRAY_SIZE(cedrus_formats)
+
+static inline struct cedrus_ctx *cedrus_file2ctx(struct file *file)
+{
+	return container_of(file->private_data, struct cedrus_ctx, fh);
+}
+
+static struct cedrus_format *cedrus_find_format(u32 pixelformat, u32 directions,
+						unsigned int capabilities)
+{
+	struct cedrus_format *fmt;
+	unsigned int i;
+
+	for (i = 0; i < CEDRUS_FORMATS_COUNT; i++) {
+		fmt = &cedrus_formats[i];
+
+		if (fmt->capabilities && (fmt->capabilities & capabilities) !=
+		    fmt->capabilities)
+			continue;
+
+		if (fmt->pixelformat == pixelformat &&
+		    (fmt->directions & directions) != 0)
+			break;
+	}
+
+	if (i == CEDRUS_FORMATS_COUNT)
+		return NULL;
+
+	return &cedrus_formats[i];
+}
+
+static void cedrus_prepare_plane_format(struct cedrus_format *fmt,
+					struct v4l2_format *f,
+					unsigned int i)
+{
+	struct v4l2_plane_pix_format *plane_fmt = &f->fmt.pix_mp.plane_fmt[i];
+	unsigned int width = f->fmt.pix_mp.width;
+	unsigned int height = f->fmt.pix_mp.height;
+	unsigned int sizeimage = plane_fmt->sizeimage;
+	unsigned int bytesperline = plane_fmt->bytesperline;
+
+	switch (fmt->pixelformat) {
+	case V4L2_PIX_FMT_MPEG2_SLICE:
+		/* Zero bytes per line. */
+		bytesperline = 0;
+		break;
+
+	case V4L2_PIX_FMT_MB32_NV12:
+		/* 32-aligned stride. */
+		bytesperline = ALIGN(width, 32);
+
+		/* 32-aligned (luma) height. */
+		height = ALIGN(height, 32);
+
+		if (i == 0)
+			/* 32-aligned luma size. */
+			sizeimage = bytesperline * height;
+		else if (i == 1)
+			/* 32-aligned chroma size with 2x2 sub-sampling. */
+			sizeimage = bytesperline * ALIGN(height / 2, 32);
+
+		break;
+
+	case V4L2_PIX_FMT_NV12:
+		/* 32-aligned stride. */
+		bytesperline = ALIGN(width, 32);
+
+		if (i == 0)
+			/* Regular luma size. */
+			sizeimage = bytesperline * height;
+		else if (i == 1)
+			/* Regular chroma size with 2x2 sub-sampling. */
+			sizeimage = bytesperline * height / 2;
+
+		break;
+	}
+
+	f->fmt.pix_mp.width = width;
+	f->fmt.pix_mp.height = height;
+
+	plane_fmt->bytesperline = bytesperline;
+	plane_fmt->sizeimage = sizeimage;
+}
+
+static void cedrus_prepare_format(struct cedrus_format *fmt,
+				  struct v4l2_format *f)
+{
+	unsigned int i;
+
+	f->fmt.pix_mp.field = V4L2_FIELD_NONE;
+	f->fmt.pix_mp.num_planes = fmt->num_planes;
+
+	for (i = 0; i < fmt->num_planes; i++)
+		cedrus_prepare_plane_format(fmt, f, i);
+}
+
+static int cedrus_querycap(struct file *file, void *priv,
+			   struct v4l2_capability *cap)
+{
+	strncpy(cap->driver, CEDRUS_NAME, sizeof(cap->driver) - 1);
+	strncpy(cap->card, CEDRUS_NAME, sizeof(cap->card) - 1);
+	snprintf(cap->bus_info, sizeof(cap->bus_info),
+		 "platform:%s", CEDRUS_NAME);
+
+	cap->device_caps = V4L2_CAP_VIDEO_M2M_MPLANE | V4L2_CAP_STREAMING;
+	cap->capabilities = cap->device_caps | V4L2_CAP_DEVICE_CAPS;
+
+	return 0;
+}
+
+static int cedrus_enum_fmt(struct v4l2_fmtdesc *f, u32 direction)
+{
+	struct cedrus_format *fmt;
+	unsigned int i, index;
+
+	/* Index among formats that match the requested direction. */
+	index = 0;
+
+	for (i = 0; i < CEDRUS_FORMATS_COUNT; i++) {
+		if (cedrus_formats[i].directions & direction) {
+			if (index == f->index)
+				break;
+
+			index++;
+		}
+	}
+
+	/* Matched format. */
+	if (i < CEDRUS_FORMATS_COUNT) {
+		fmt = &cedrus_formats[i];
+		f->pixelformat = fmt->pixelformat;
+
+		return 0;
+	}
+
+	return -EINVAL;
+}
+
+static int cedrus_enum_fmt_vid_cap(struct file *file, void *priv,
+				   struct v4l2_fmtdesc *f)
+{
+	return cedrus_enum_fmt(f, CEDRUS_DECODE_DST);
+}
+
+static int cedrus_enum_fmt_vid_out(struct file *file, void *priv,
+				   struct v4l2_fmtdesc *f)
+{
+	return cedrus_enum_fmt(f, CEDRUS_DECODE_SRC);
+}
+
+static int cedrus_g_fmt_vid_cap(struct file *file, void *priv,
+				struct v4l2_format *f)
+{
+	struct cedrus_ctx *ctx = cedrus_file2ctx(file);
+
+	if (f->type != V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
+		return -EINVAL;
+
+	f->fmt.pix_mp = ctx->dst_fmt;
+
+	return 0;
+}
+
+static int cedrus_g_fmt_vid_out(struct file *file, void *priv,
+				struct v4l2_format *f)
+{
+	struct cedrus_ctx *ctx = cedrus_file2ctx(file);
+
+	if (f->type != V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
+		return -EINVAL;
+
+	f->fmt.pix_mp = ctx->src_fmt;
+
+	return 0;
+}
+
+static int cedrus_try_fmt_vid_cap(struct file *file, void *priv,
+				  struct v4l2_format *f)
+{
+	struct cedrus_ctx *ctx = cedrus_file2ctx(file);
+	struct cedrus_dev *dev = ctx->dev;
+	struct cedrus_format *fmt;
+
+	fmt = cedrus_find_format(f->fmt.pix_mp.pixelformat, CEDRUS_DECODE_DST,
+				 dev->capabilities);
+	if (!fmt)
+		return -EINVAL;
+
+	cedrus_prepare_format(fmt, f);
+
+	/* Limit to hardware min/max. */
+	f->fmt.pix_mp.width = clamp(f->fmt.pix_mp.width, CEDRUS_MIN_WIDTH,
+				    CEDRUS_MAX_WIDTH);
+	f->fmt.pix_mp.height = clamp(f->fmt.pix_mp.height, CEDRUS_MIN_HEIGHT,
+				    CEDRUS_MAX_HEIGHT);
+
+	return 0;
+}
+
+static int cedrus_try_fmt_vid_out(struct file *file, void *priv,
+				  struct v4l2_format *f)
+{
+	struct cedrus_ctx *ctx = cedrus_file2ctx(file);
+	struct cedrus_dev *dev = ctx->dev;
+	struct cedrus_format *fmt;
+	struct v4l2_plane_pix_format *plane_fmt;
+	unsigned int i;
+
+	fmt = cedrus_find_format(f->fmt.pix_mp.pixelformat, CEDRUS_DECODE_SRC,
+				 dev->capabilities);
+	if (!fmt)
+		return -EINVAL;
+
+	cedrus_prepare_format(fmt, f);
+
+	for (i = 0; i < f->fmt.pix_mp.num_planes; i++) {
+		plane_fmt = &f->fmt.pix_mp.plane_fmt[i];
+
+		/* Source image size has to be given by userspace. */
+		if (plane_fmt->sizeimage == 0)
+			return -EINVAL;
+	}
+
+	return 0;
+}
+
+static int cedrus_s_fmt_vid_cap(struct file *file, void *priv,
+				struct v4l2_format *f)
+{
+	struct cedrus_ctx *ctx = cedrus_file2ctx(file);
+	struct cedrus_dev *dev = ctx->dev;
+	int ret;
+
+	ret = cedrus_try_fmt_vid_cap(file, priv, f);
+	if (ret)
+		return ret;
+
+	ctx->dst_fmt = f->fmt.pix_mp;
+
+	cedrus_dst_format_set(dev, &ctx->dst_fmt);
+
+	return 0;
+}
+
+static int cedrus_s_fmt_vid_out(struct file *file, void *priv,
+				struct v4l2_format *f)
+{
+	struct cedrus_ctx *ctx = cedrus_file2ctx(file);
+	int ret;
+
+	ret = cedrus_try_fmt_vid_out(file, priv, f);
+	if (ret)
+		return ret;
+
+	ctx->src_fmt = f->fmt.pix_mp;
+
+	return 0;
+}
+
+const struct v4l2_ioctl_ops cedrus_ioctl_ops = {
+	.vidioc_querycap		= cedrus_querycap,
+
+	.vidioc_enum_fmt_vid_cap	= cedrus_enum_fmt_vid_cap,
+	.vidioc_g_fmt_vid_cap_mplane	= cedrus_g_fmt_vid_cap,
+	.vidioc_try_fmt_vid_cap_mplane	= cedrus_try_fmt_vid_cap,
+	.vidioc_s_fmt_vid_cap_mplane	= cedrus_s_fmt_vid_cap,
+
+	.vidioc_enum_fmt_vid_out_mplane = cedrus_enum_fmt_vid_out,
+	.vidioc_g_fmt_vid_out_mplane	= cedrus_g_fmt_vid_out,
+	.vidioc_try_fmt_vid_out_mplane	= cedrus_try_fmt_vid_out,
+	.vidioc_s_fmt_vid_out_mplane	= cedrus_s_fmt_vid_out,
+
+	.vidioc_reqbufs			= v4l2_m2m_ioctl_reqbufs,
+	.vidioc_querybuf		= v4l2_m2m_ioctl_querybuf,
+	.vidioc_qbuf			= v4l2_m2m_ioctl_qbuf,
+	.vidioc_dqbuf			= v4l2_m2m_ioctl_dqbuf,
+	.vidioc_prepare_buf		= v4l2_m2m_ioctl_prepare_buf,
+	.vidioc_create_bufs		= v4l2_m2m_ioctl_create_bufs,
+	.vidioc_expbuf			= v4l2_m2m_ioctl_expbuf,
+
+	.vidioc_streamon		= v4l2_m2m_ioctl_streamon,
+	.vidioc_streamoff		= v4l2_m2m_ioctl_streamoff,
+
+	.vidioc_subscribe_event		= v4l2_ctrl_subscribe_event,
+	.vidioc_unsubscribe_event	= v4l2_event_unsubscribe,
+};
+
+static int cedrus_queue_setup(struct vb2_queue *vq, unsigned int *nbufs,
+			      unsigned int *nplanes, unsigned int sizes[],
+			      struct device *alloc_devs[])
+{
+	struct cedrus_ctx *ctx = vb2_get_drv_priv(vq);
+	struct cedrus_dev *dev = ctx->dev;
+	struct v4l2_pix_format_mplane *mplane_fmt;
+	struct cedrus_format *fmt;
+	unsigned int i;
+
+	switch (vq->type) {
+	case V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE:
+		mplane_fmt = &ctx->src_fmt;
+		fmt = cedrus_find_format(mplane_fmt->pixelformat,
+					 CEDRUS_DECODE_SRC,
+					 dev->capabilities);
+		break;
+
+	case V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE:
+		mplane_fmt = &ctx->dst_fmt;
+		fmt = cedrus_find_format(mplane_fmt->pixelformat,
+					 CEDRUS_DECODE_DST,
+					 dev->capabilities);
+		break;
+
+	default:
+		return -EINVAL;
+	}
+
+	if (!fmt)
+		return -EINVAL;
+
+	if (fmt->num_buffers == 1) {
+		sizes[0] = 0;
+
+		for (i = 0; i < fmt->num_planes; i++)
+			sizes[0] += mplane_fmt->plane_fmt[i].sizeimage;
+	} else if (fmt->num_buffers == fmt->num_planes) {
+		for (i = 0; i < fmt->num_planes; i++)
+			sizes[i] = mplane_fmt->plane_fmt[i].sizeimage;
+	} else {
+		return -EINVAL;
+	}
+
+	*nplanes = fmt->num_buffers;
+
+	return 0;
+}
+
+static int cedrus_buf_init(struct vb2_buffer *vb)
+{
+	struct vb2_queue *vq = vb->vb2_queue;
+	struct cedrus_ctx *ctx = vb2_get_drv_priv(vq);
+
+	if (vq->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
+		ctx->dst_bufs[vb->index] = vb;
+
+	return 0;
+}
+
+static void cedrus_buf_cleanup(struct vb2_buffer *vb)
+{
+	struct vb2_queue *vq = vb->vb2_queue;
+	struct cedrus_ctx *ctx = vb2_get_drv_priv(vq);
+
+	if (vq->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
+		ctx->dst_bufs[vb->index] = NULL;
+}
+
+static int cedrus_buf_prepare(struct vb2_buffer *vb)
+{
+	struct vb2_queue *vq = vb->vb2_queue;
+	struct cedrus_ctx *ctx = vb2_get_drv_priv(vq);
+	struct v4l2_pix_format_mplane *fmt;
+	unsigned int buffer_size = 0;
+	unsigned int format_size = 0;
+	unsigned int i;
+
+	if (vq->type == V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE)
+		fmt = &ctx->src_fmt;
+	else if (vq->type == V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE)
+		fmt = &ctx->dst_fmt;
+	else
+		return -EINVAL;
+
+	for (i = 0; i < vb->num_planes; i++)
+		buffer_size += vb2_plane_size(vb, i);
+
+	for (i = 0; i < fmt->num_planes; i++)
+		format_size += fmt->plane_fmt[i].sizeimage;
+
+	if (buffer_size < format_size)
+		return -EINVAL;
+
+	return 0;
+}
+
+static int cedrus_start_streaming(struct vb2_queue *q, unsigned int count)
+{
+	struct cedrus_ctx *ctx = vb2_get_drv_priv(q);
+	struct cedrus_dev *dev = ctx->dev;
+	int ret = 0;
+
+	switch (ctx->src_fmt.pixelformat) {
+	case V4L2_PIX_FMT_MPEG2_SLICE:
+		ctx->current_codec = CEDRUS_CODEC_MPEG2;
+		break;
+	default:
+		return -EINVAL;
+	}
+
+	if (V4L2_TYPE_IS_OUTPUT(q->type) &&
+	    dev->dec_ops[ctx->current_codec]->start)
+		ret = dev->dec_ops[ctx->current_codec]->start(ctx);
+
+	return ret;
+}
+
+static void cedrus_stop_streaming(struct vb2_queue *q)
+{
+	struct cedrus_ctx *ctx = vb2_get_drv_priv(q);
+	struct cedrus_dev *dev = ctx->dev;
+	struct vb2_v4l2_buffer *vbuf;
+	unsigned long flags;
+
+	flush_scheduled_work();
+
+	if (V4L2_TYPE_IS_OUTPUT(q->type) &&
+	    dev->dec_ops[ctx->current_codec]->stop)
+		dev->dec_ops[ctx->current_codec]->stop(ctx);
+
+	for (;;) {
+		spin_lock_irqsave(&ctx->dev->irq_lock, flags);
+
+		if (V4L2_TYPE_IS_OUTPUT(q->type))
+			vbuf = v4l2_m2m_src_buf_remove(ctx->fh.m2m_ctx);
+		else
+			vbuf = v4l2_m2m_dst_buf_remove(ctx->fh.m2m_ctx);
+
+		spin_unlock_irqrestore(&ctx->dev->irq_lock, flags);
+
+		if (!vbuf)
+			return;
+
+		v4l2_ctrl_request_complete(vbuf->vb2_buf.req_obj.req,
+					   &ctx->hdl);
+		v4l2_m2m_buf_done(vbuf, VB2_BUF_STATE_ERROR);
+	}
+}
+
+static void cedrus_buf_queue(struct vb2_buffer *vb)
+{
+	struct vb2_v4l2_buffer *vbuf = to_vb2_v4l2_buffer(vb);
+	struct cedrus_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
+
+	v4l2_m2m_buf_queue(ctx->fh.m2m_ctx, vbuf);
+}
+
+static void cedrus_buf_request_complete(struct vb2_buffer *vb)
+{
+	struct cedrus_ctx *ctx = vb2_get_drv_priv(vb->vb2_queue);
+
+	v4l2_ctrl_request_complete(vb->req_obj.req, &ctx->hdl);
+}
+
+static struct vb2_ops cedrus_qops = {
+	.queue_setup		= cedrus_queue_setup,
+	.buf_prepare		= cedrus_buf_prepare,
+	.buf_init		= cedrus_buf_init,
+	.buf_cleanup		= cedrus_buf_cleanup,
+	.buf_queue		= cedrus_buf_queue,
+	.buf_request_complete	= cedrus_buf_request_complete,
+	.start_streaming	= cedrus_start_streaming,
+	.stop_streaming		= cedrus_stop_streaming,
+	.wait_prepare		= vb2_ops_wait_prepare,
+	.wait_finish		= vb2_ops_wait_finish,
+};
+
+int cedrus_queue_init(void *priv, struct vb2_queue *src_vq,
+		      struct vb2_queue *dst_vq)
+{
+	struct cedrus_ctx *ctx = priv;
+	int ret;
+
+	src_vq->type = V4L2_BUF_TYPE_VIDEO_OUTPUT_MPLANE;
+	src_vq->io_modes = VB2_MMAP | VB2_DMABUF;
+	src_vq->drv_priv = ctx;
+	src_vq->buf_struct_size = sizeof(struct cedrus_buffer);
+	src_vq->allow_zero_bytesused = 1;
+	src_vq->min_buffers_needed = 1;
+	src_vq->ops = &cedrus_qops;
+	src_vq->mem_ops = &vb2_dma_contig_memops;
+	src_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
+	src_vq->lock = &ctx->dev->dev_mutex;
+	src_vq->dev = ctx->dev->dev;
+
+	ret = vb2_queue_init(src_vq);
+	if (ret)
+		return ret;
+
+	dst_vq->type = V4L2_BUF_TYPE_VIDEO_CAPTURE_MPLANE;
+	dst_vq->io_modes = VB2_MMAP | VB2_DMABUF;
+	dst_vq->drv_priv = ctx;
+	dst_vq->buf_struct_size = sizeof(struct cedrus_buffer);
+	dst_vq->allow_zero_bytesused = 1;
+	dst_vq->min_buffers_needed = 1;
+	dst_vq->ops = &cedrus_qops;
+	dst_vq->mem_ops = &vb2_dma_contig_memops;
+	dst_vq->timestamp_flags = V4L2_BUF_FLAG_TIMESTAMP_COPY;
+	dst_vq->lock = &ctx->dev->dev_mutex;
+	dst_vq->dev = ctx->dev->dev;
+
+	return vb2_queue_init(dst_vq);
+}
diff --git a/drivers/media/platform/sunxi/cedrus/cedrus_video.h b/drivers/media/platform/sunxi/cedrus/cedrus_video.h
new file mode 100644
index 000000000000..56afcc8c02ba
--- /dev/null
+++ b/drivers/media/platform/sunxi/cedrus/cedrus_video.h
@@ -0,0 +1,31 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Sunxi-Cedrus VPU driver
+ *
+ * Copyright (C) 2018 Paul Kocialkowski <paul.kocialkowski@bootlin.com>
+ * Copyright (C) 2016 Florent Revest <florent.revest@free-electrons.com>
+ *
+ * Based on the vim2m driver, that is:
+ *
+ * Copyright (c) 2009-2010 Samsung Electronics Co., Ltd.
+ * Pawel Osciak, <pawel@osciak.com>
+ * Marek Szyprowski, <m.szyprowski@samsung.com>
+ */
+
+#ifndef _CEDRUS_VIDEO_H_
+#define _CEDRUS_VIDEO_H_
+
+struct cedrus_format {
+	u32		pixelformat;
+	u32		directions;
+	unsigned int	num_planes;
+	unsigned int	num_buffers;
+	unsigned int	capabilities;
+};
+
+extern const struct v4l2_ioctl_ops cedrus_ioctl_ops;
+
+int cedrus_queue_init(void *priv, struct vb2_queue *src_vq,
+		      struct vb2_queue *dst_vq);
+
+#endif
-- 
2.17.1


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

* [PATCH v5 19/22] ARM: dts: sun5i: Add Video Engine and reserved memory nodes
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (17 preceding siblings ...)
  2018-07-10  8:01 ` [PATCH v5 18/22] media: platform: Add Sunxi-Cedrus VPU decoder driver Paul Kocialkowski
@ 2018-07-10  8:01 ` Paul Kocialkowski
  2018-07-10  8:01 ` [PATCH v5 20/22] ARM: dts: sun7i-a20: " Paul Kocialkowski
                   ` (2 subsequent siblings)
  21 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 adds nodes for the Video Engine and the associated reserved memory
for sun5i-based platforms. Up to 96 MiB of memory are dedicated to the
CMA pool.

The VPU can only map the first 256 MiB of DRAM, so the reserved memory
pool has to be located in that area. Following Allwinner's decision in
downstream software, the last 96 MiB of the first 256 MiB of RAM are
reserved for this purpose.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun5i.dtsi | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/arch/arm/boot/dts/sun5i.dtsi b/arch/arm/boot/dts/sun5i.dtsi
index 51dcefc76c12..1dafcfd99da8 100644
--- a/arch/arm/boot/dts/sun5i.dtsi
+++ b/arch/arm/boot/dts/sun5i.dtsi
@@ -108,6 +108,21 @@
 		};
 	};
 
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		/* Address must be kept in the lower 256 MiBs of DRAM for VE. */
+		cma_pool: cma@4a000000 {
+			compatible = "shared-dma-pool";
+			size = <0x6000000>;
+			alloc-ranges = <0x4a000000 0x6000000>;
+			reusable;
+			linux,cma-default;
+		};
+	};
+
 	soc@1c00000 {
 		compatible = "simple-bus";
 		#address-cells = <1>;
@@ -295,6 +310,19 @@
 			};
 		};
 
+		vpu: video-codec@1c0e000 {
+			compatible = "allwinner,sun5i-a13-video-engine";
+			reg = <0x01c0e000 0x1000>;
+
+			clocks = <&ccu CLK_AHB_VE>, <&ccu CLK_VE>,
+				 <&ccu CLK_DRAM_VE>;
+			clock-names = "ahb", "mod", "ram";
+
+			resets = <&ccu RST_VE>;
+			interrupts = <53>;
+			allwinner,sram = <&ve_sram 1>;
+		};
+
 		mmc0: mmc@1c0f000 {
 			compatible = "allwinner,sun5i-a13-mmc";
 			reg = <0x01c0f000 0x1000>;
-- 
2.17.1


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

* [PATCH v5 20/22] ARM: dts: sun7i-a20: Add Video Engine and reserved memory nodes
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (18 preceding siblings ...)
  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 ` Paul Kocialkowski
  2018-07-10  9:23   ` Maxime Ripard
  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
  21 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 adds nodes for the Video Engine and the associated reserved memory
for the A20. Up to 96 MiB of memory are dedicated to the CMA pool.

The VPU can only map the first 256 MiB of DRAM, so the reserved memory
pool has to be located in that area. Following Allwinner's decision in
downstream software, the last 96 MiB of the first 256 MiB of RAM are
reserved for this purpose.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun7i-a20.dtsi | 28 ++++++++++++++++++++++++++++
 1 file changed, 28 insertions(+)

diff --git a/arch/arm/boot/dts/sun7i-a20.dtsi b/arch/arm/boot/dts/sun7i-a20.dtsi
index 38999d791cb5..cb6e10196118 100644
--- a/arch/arm/boot/dts/sun7i-a20.dtsi
+++ b/arch/arm/boot/dts/sun7i-a20.dtsi
@@ -161,6 +161,21 @@
 		reg = <0x40000000 0x80000000>;
 	};
 
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		/* Address must be kept in the lower 256 MiBs of DRAM for VE. */
+		cma_pool: cma@4a000000 {
+			compatible = "shared-dma-pool";
+			size = <0x6000000>;
+			alloc-ranges = <0x4a000000 0x6000000>;
+			reusable;
+			linux,cma-default;
+		};
+	};
+
 	timer {
 		compatible = "arm,armv7-timer";
 		interrupts = <GIC_PPI 13 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>,
@@ -466,6 +481,19 @@
 			};
 		};
 
+		vpu: video-codec@1c0e000 {
+			compatible = "allwinner,sun7i-a20-video-engine";
+			reg = <0x01c0e000 0x1000>;
+
+			clocks = <&ccu CLK_AHB_VE>, <&ccu CLK_VE>,
+				 <&ccu CLK_DRAM_VE>;
+			clock-names = "ahb", "mod", "ram";
+
+			resets = <&ccu RST_VE>;
+			interrupts = <GIC_SPI 53 IRQ_TYPE_LEVEL_HIGH>;
+			allwinner,sram = <&ve_sram 1>;
+		};
+
 		mmc0: mmc@1c0f000 {
 			compatible = "allwinner,sun7i-a20-mmc";
 			reg = <0x01c0f000 0x1000>;
-- 
2.17.1


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

* [PATCH v5 21/22] ARM: dts: sun8i-a33: Add Video Engine and reserved memory nodes
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (19 preceding siblings ...)
  2018-07-10  8:01 ` [PATCH v5 20/22] ARM: dts: sun7i-a20: " Paul Kocialkowski
@ 2018-07-10  8:01 ` Paul Kocialkowski
  2018-07-10  8:01 ` [PATCH v5 22/22] ARM: dts: sun8i-h3: " Paul Kocialkowski
  21 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 adds nodes for the Video Engine and the associated reserved memory
for the A33. Up to 96 MiB of memory are dedicated to the CMA pool.

The VPU can only map the first 256 MiB of DRAM, so the reserved memory
pool has to be located in that area. Following Allwinner's decision in
downstream software, the last 96 MiB of the first 256 MiB of RAM are
reserved for this purpose.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun8i-a33.dtsi | 29 +++++++++++++++++++++++++++++
 1 file changed, 29 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-a33.dtsi b/arch/arm/boot/dts/sun8i-a33.dtsi
index 8d278ee001e9..9485e0f5750c 100644
--- a/arch/arm/boot/dts/sun8i-a33.dtsi
+++ b/arch/arm/boot/dts/sun8i-a33.dtsi
@@ -181,6 +181,21 @@
 		reg = <0x40000000 0x80000000>;
 	};
 
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		/* Address must be kept in the lower 256 MiBs of DRAM for VE. */
+		cma_pool: cma@4a000000 {
+			compatible = "shared-dma-pool";
+			size = <0x6000000>;
+			alloc-ranges = <0x4a000000 0x6000000>;
+			reusable;
+			linux,cma-default;
+		};
+	};
+
 	sound: sound {
 		compatible = "simple-audio-card";
 		simple-audio-card,name = "sun8i-a33-audio";
@@ -245,6 +260,20 @@
 			};
 		};
 
+		vpu: video-codec@01c0e000 {
+			compatible = "allwinner,sun8i-a33-video-engine";
+			reg = <0x01c0e000 0x1000>;
+
+			clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
+				 <&ccu CLK_DRAM_VE>;
+			clock-names = "ahb", "mod", "ram";
+
+			resets = <&ccu RST_BUS_VE>;
+
+			interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
+			allwinner,sram = <&ve_sram 1>;
+		};
+
 		crypto: crypto-engine@1c15000 {
 			compatible = "allwinner,sun4i-a10-crypto";
 			reg = <0x01c15000 0x1000>;
-- 
2.17.1


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

* [PATCH v5 22/22] ARM: dts: sun8i-h3: Add Video Engine and reserved memory nodes
  2018-07-10  8:00 [PATCH v5 00/22] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Paul Kocialkowski
                   ` (20 preceding siblings ...)
  2018-07-10  8:01 ` [PATCH v5 21/22] ARM: dts: sun8i-a33: " Paul Kocialkowski
@ 2018-07-10  8:01 ` Paul Kocialkowski
  21 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:01 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 adds nodes for the Video Engine and the associated reserved memory
for the H3. Up to 96 MiB of memory are dedicated to the CMA pool.

Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
---
 arch/arm/boot/dts/sun8i-h3.dtsi | 27 +++++++++++++++++++++++++++
 1 file changed, 27 insertions(+)

diff --git a/arch/arm/boot/dts/sun8i-h3.dtsi b/arch/arm/boot/dts/sun8i-h3.dtsi
index c93f6be40533..02ed77b311e5 100644
--- a/arch/arm/boot/dts/sun8i-h3.dtsi
+++ b/arch/arm/boot/dts/sun8i-h3.dtsi
@@ -110,6 +110,20 @@
 			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(4) | IRQ_TYPE_LEVEL_LOW)>;
 	};
 
+	reserved-memory {
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges;
+
+		cma_pool: cma@4a000000 {
+			compatible = "shared-dma-pool";
+			size = <0x6000000>;
+			alloc-ranges = <0x4a000000 0x6000000>;
+			reusable;
+			linux,cma-default;
+		};
+	};
+
 	soc {
 		system-control@1c00000 {
 			compatible = "allwinner,sun8i-h3-system-control",
@@ -134,6 +148,19 @@
 			};
 		};
 
+		vpu: video-codec@01c0e000 {
+			compatible = "allwinner,sun8i-h3-video-engine";
+			reg = <0x01c0e000 0x1000>;
+
+			clocks = <&ccu CLK_BUS_VE>, <&ccu CLK_VE>,
+				 <&ccu CLK_DRAM_VE>;
+			clock-names = "ahb", "mod", "ram";
+
+			resets = <&ccu RST_BUS_VE>;
+			interrupts = <GIC_SPI 58 IRQ_TYPE_LEVEL_HIGH>;
+			allwinner,sram = <&ve_sram 1>;
+		};
+
 		mali: gpu@1c40000 {
 			compatible = "allwinner,sun8i-h3-mali", "arm,mali-400";
 			reg = <0x01c40000 0x10000>;
-- 
2.17.1


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

* Re: [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
  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
  0 siblings, 1 reply; 52+ messages in thread
From: Geert Uytterhoeven @ 2018-07-10  8:07 UTC (permalink / raw)
  To: paul.kocialkowski
  Cc: Linux Media Mailing List,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	Linux ARM, Linux Kernel Mailing List, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai,
	marco.franchi, icenowy, Hans Verkuil, keiichiw, Jonathan Corbet,
	smitha.t, tom.saeger, Andrzej Hajda, David S. Miller, Greg KH,
	Andrew Morton, Randy Dunlap, Arnd Bergmann, Laurent Pinchart,
	jacob-chen, Neil Armstrong, Benoit Parrot, Todor Tomov, acourbot,
	Sakari Ailus, Andy Shevchenko, posciak, Ricardo Ribalda Delgado,
	Hans de Goede, samitolvanen, Niklas Söderlund, linux-sunxi,
	Thomas Petazzoni, hugues.fruchet, ayaka

On Tue, Jul 10, 2018 at 10:02 AM Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions

git rebase -i ;-)

Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

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

* Re: [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
  2018-07-10  8:07   ` Geert Uytterhoeven
@ 2018-07-10  8:13     ` Paul Kocialkowski
  2018-07-10  8:17       ` Hans Verkuil
  0 siblings, 1 reply; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:13 UTC (permalink / raw)
  To: Geert Uytterhoeven
  Cc: Linux Media Mailing List,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	Linux ARM, Linux Kernel Mailing List, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai,
	marco.franchi, icenowy, Hans Verkuil, keiichiw, Jonathan Corbet,
	smitha.t, tom.saeger, Andrzej Hajda, David S. Miller, Greg KH,
	Andrew Morton, Randy Dunlap, Arnd Bergmann, Laurent Pinchart,
	jacob-chen, Neil Armstrong, Benoit Parrot, Todor Tomov, acourbot,
	Sakari Ailus, Andy Shevchenko, posciak, Ricardo Ribalda Delgado,
	Hans de Goede, samitolvanen, Niklas Söderlund, linux-sunxi,
	Thomas Petazzoni, hugues.fruchet, ayaka

[-- Attachment #1: Type: text/plain, Size: 970 bytes --]

Hi,

On Tue, 2018-07-10 at 10:07 +0200, Geert Uytterhoeven wrote:
> On Tue, Jul 10, 2018 at 10:02 AM Paul Kocialkowski
> <paul.kocialkowski@bootlin.com> wrote:
> > [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
> 
> git rebase -i ;-)

Although I should have mentionned it (and did not), this is totally
intentional! The first patch (from Hans Verkuil) requires said fixup to
work properly. I didn't want to squash that change into the commit to
make the diff obvious.

Ultimately, this framework patch is not really part of the series but is
one of its underlying requirements, that should be merged separately (as
part of the requests API series).

I hope this clears up some of the confusion about this patch :)

Cheers!

> Gr{oetje,eeting}s,
> 
>                         Geert
> 
-- 
Paul Kocialkowski, Bootlin (formerly Free Electrons)
Embedded Linux and kernel engineering
https://bootlin.com

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
  2018-07-10  8:13     ` Paul Kocialkowski
@ 2018-07-10  8:17       ` Hans Verkuil
  2018-07-10  8:21         ` Paul Kocialkowski
  0 siblings, 1 reply; 52+ messages in thread
From: Hans Verkuil @ 2018-07-10  8:17 UTC (permalink / raw)
  To: Paul Kocialkowski, Geert Uytterhoeven
  Cc: Linux Media Mailing List,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	Linux ARM, Linux Kernel Mailing List, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai,
	marco.franchi, icenowy, keiichiw, Jonathan Corbet, smitha.t,
	tom.saeger, Andrzej Hajda, David S. Miller, Greg KH,
	Andrew Morton, Randy Dunlap, Arnd Bergmann, Laurent Pinchart,
	jacob-chen, Neil Armstrong, Benoit Parrot, Todor Tomov, acourbot,
	Sakari Ailus, Andy Shevchenko, posciak, Ricardo Ribalda Delgado,
	Hans de Goede, samitolvanen, Niklas Söderlund, linux-sunxi,
	Thomas Petazzoni, hugues.fruchet, ayaka

On 10/07/18 10:13, Paul Kocialkowski wrote:
> Hi,
> 
> On Tue, 2018-07-10 at 10:07 +0200, Geert Uytterhoeven wrote:
>> On Tue, Jul 10, 2018 at 10:02 AM Paul Kocialkowski
>> <paul.kocialkowski@bootlin.com> wrote:
>>> [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
>>
>> git rebase -i ;-)
> 
> Although I should have mentionned it (and did not), this is totally
> intentional! The first patch (from Hans Verkuil) requires said fixup to
> work properly. I didn't want to squash that change into the commit to
> make the diff obvious.

Just squash the two for the next version you post.

> Ultimately, this framework patch is not really part of the series but is
> one of its underlying requirements, that should be merged separately (as
> part of the requests API series).

There is a good chance that this patch will go in via your series anyway
since it is not needed by vivid or vim2m.

Regards,

	Hans

> 
> I hope this clears up some of the confusion about this patch :)
> 
> Cheers!
> 
>> Gr{oetje,eeting}s,
>>
>>                         Geert
>>


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

* Re: [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
  2018-07-10  8:17       ` Hans Verkuil
@ 2018-07-10  8:21         ` Paul Kocialkowski
  0 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-10  8:21 UTC (permalink / raw)
  To: Hans Verkuil, Geert Uytterhoeven
  Cc: Linux Media Mailing List,
	open list:OPEN FIRMWARE AND FLATTENED DEVICE TREE BINDINGS,
	Linux ARM, Linux Kernel Mailing List, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, Maxime Ripard, Chen-Yu Tsai,
	marco.franchi, icenowy, keiichiw, Jonathan Corbet, smitha.t,
	tom.saeger, Andrzej Hajda, David S. Miller, Greg KH,
	Andrew Morton, Randy Dunlap, Arnd Bergmann, Laurent Pinchart,
	jacob-chen, Neil Armstrong, Benoit Parrot, Todor Tomov, acourbot,
	Sakari Ailus, Andy Shevchenko, posciak, Ricardo Ribalda Delgado,
	Hans de Goede, samitolvanen, Niklas Söderlund, linux-sunxi,
	Thomas Petazzoni, hugues.fruchet, ayaka

[-- Attachment #1: Type: text/plain, Size: 1555 bytes --]

Hi,

On Tue, 2018-07-10 at 10:17 +0200, Hans Verkuil wrote:
> On 10/07/18 10:13, Paul Kocialkowski wrote:
> > Hi,
> > 
> > On Tue, 2018-07-10 at 10:07 +0200, Geert Uytterhoeven wrote:
> > > On Tue, Jul 10, 2018 at 10:02 AM Paul Kocialkowski
> > > <paul.kocialkowski@bootlin.com> wrote:
> > > > [PATCH v5 02/22] fixup! v4l2-ctrls: add v4l2_ctrl_request_hdl_find/put/ctrl_find functions
> > > 
> > > git rebase -i ;-)
> > 
> > Although I should have mentionned it (and did not), this is totally
> > intentional! The first patch (from Hans Verkuil) requires said fixup to
> > work properly. I didn't want to squash that change into the commit to
> > make the diff obvious.
> 
> Just squash the two for the next version you post.

That works for me! I must admit I was rather unsure this was a sensible
way to do things.

> > Ultimately, this framework patch is not really part of the series but is
> > one of its underlying requirements, that should be merged separately (as
> > part of the requests API series).
> 
> There is a good chance that this patch will go in via your series anyway
> since it is not needed by vivid or vim2m.

Alright, I will keep it around then.

Cheers,

Paul

> Regards,
> 
> 	Hans
> 
> > 
> > I hope this clears up some of the confusion about this patch :)
> > 
> > Cheers!
> > 
> > > Gr{oetje,eeting}s,
> > > 
> > >                         Geert
> > > 
> 
> 
-- 
Paul Kocialkowski, Bootlin (formerly Free Electrons)
Embedded Linux and kernel engineering
https://bootlin.com

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH v5 18/22] media: platform: Add Sunxi-Cedrus VPU decoder driver
  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
  1 sibling, 1 reply; 52+ messages in thread
From: Maxime Ripard @ 2018-07-10  8:42 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 3837 bytes --]

On Tue, Jul 10, 2018 at 10:01:10AM +0200, Paul Kocialkowski wrote:
> +static int cedrus_remove(struct platform_device *pdev)
> +{
> +       struct cedrus_dev *dev = platform_get_drvdata(pdev);
> +
> +       v4l2_info(&dev->v4l2_dev, "Removing " CEDRUS_NAME);

That log is kind of pointless.

> +static void cedrus_hw_set_capabilities(struct cedrus_dev *dev)
> +{
> +	unsigned int engine_version;
> +
> +	engine_version = cedrus_read(dev, VE_VERSION) >> VE_VERSION_SHIFT;
> +
> +	if (engine_version >= 0x1667)
> +		dev->capabilities |= CEDRUS_CAPABILITY_UNTILED;

The version used here would need a define, but I'm wondering if this
is the right solution here. You are using at the same time the version
ID returned by the register and the compatible in various places, and
they are both redundant. If you want to base the capabilities on the
compatible, then you can do it for all of those properties and
capabilities, and if you want to use the version register, then you
don't need all those compatibles but just one.

I think that basing all our capabilities on the compatible makes more
sense, since you need to have access to the registers in order to read
the version register, and this changes from one SoC generation to the
other (for example, keeping the reset line asserted would prevent you
from reading it, and the fact that there is a reset line depends on
the SoC).

> +int cedrus_hw_probe(struct cedrus_dev *dev)
> +{
> +	struct resource *res;
> +	int irq_dec;
> +	int ret;
> +
> +	irq_dec = platform_get_irq(dev->pdev, 0);
> +	if (irq_dec <= 0) {
> +		v4l2_err(&dev->v4l2_dev, "Failed to get IRQ\n");
> +		return -ENXIO;
> +	}

You already have an error code returned by platform_get_irq, there's
no point in masking it and returning -ENXIO. This can even lead to
some bugs, for example when the error code is EPROBE_DEFER.

(and please add a new line there).

> +	ret = devm_request_threaded_irq(dev->dev, irq_dec, cedrus_irq,
> +					cedrus_bh, 0, dev_name(dev->dev),
> +					dev);
> +	if (ret) {
> +		v4l2_err(&dev->v4l2_dev, "Failed to request IRQ\n");
> +		return -ENXIO;
> +	}

Same thing here, you're masking the actual error code.

> +	res = platform_get_resource(dev->pdev, IORESOURCE_MEM, 0);
> +	dev->base = devm_ioremap_resource(dev->dev, res);
> +	if (!dev->base) {
> +		v4l2_err(&dev->v4l2_dev, "Failed to map registers\n");
> +
> +		ret = -EFAULT;

ENOMEM is usually returned in such a case.

> +		goto err_sram;
> +	}
> +
> +	ret = clk_set_rate(dev->mod_clk, CEDRUS_CLOCK_RATE_DEFAULT);
> +	if (ret) {
> +		v4l2_err(&dev->v4l2_dev, "Failed to set clock rate\n");
> +		goto err_sram;
> +	}
> +
> +	ret = clk_prepare_enable(dev->ahb_clk);
> +	if (ret) {
> +		v4l2_err(&dev->v4l2_dev, "Failed to enable AHB clock\n");
> +
> +		ret = -EFAULT;
> +		goto err_sram;

Same thing for the error code.

> +	}
> +
> +	ret = clk_prepare_enable(dev->mod_clk);
> +	if (ret) {
> +		v4l2_err(&dev->v4l2_dev, "Failed to enable MOD clock\n");
> +
> +		ret = -EFAULT;
> +		goto err_ahb_clk;

Ditto.

> +	}
> +
> +	ret = clk_prepare_enable(dev->ram_clk);
> +	if (ret) {
> +		v4l2_err(&dev->v4l2_dev, "Failed to enable RAM clock\n");
> +
> +		ret = -EFAULT;
> +		goto err_mod_clk;

Ditto.

> +	}
> +
> +	ret = reset_control_reset(dev->rstc);
> +	if (ret) {
> +		v4l2_err(&dev->v4l2_dev, "Failed to apply reset\n");
> +
> +		ret = -EFAULT;

Ditto.

There's also a bunch of warnings/checks reported by checkpatch that
should be fixed in the next iteration: the spaces after a cast, the
NULL comparison, macros arguments precedence, parenthesis alignments
issues, etc.)

Thanks!
Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 20/22] ARM: dts: sun7i-a20: Add Video Engine and reserved memory nodes
  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
  0 siblings, 1 reply; 52+ messages in thread
From: Maxime Ripard @ 2018-07-10  9:23 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 427 bytes --]

On Tue, Jul 10, 2018 at 10:01:12AM +0200, Paul Kocialkowski wrote:
> +		vpu: video-codec@1c0e000 {
> +			compatible = "allwinner,sun7i-a20-video-engine";
> +			reg = <0x01c0e000 0x1000>;
> +

The issue is here with all your patches, but you should drop the node
label and the extra new line.

Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 03/22] dt-bindings: sram: sunxi: Introduce new A10 binding for system-control
  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
  1 sibling, 0 replies; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:02 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:00 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> Following-up on the introduction of a new binding for the A64, this
> introduces a system-control binding for the A10 as a replacement of
> the sram-controller binding.
>
> This change is motivated by consistency with the Allwinner literature,
> that mentions system control over SRAM controller. Moreover, the system
> control block is sometimes used for more than SRAM (e.g. for muxing
> related to the ethernet PHY).
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Reviewed-by: Chen-Yu Tsai <wens@csie.org>

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

* Re: [PATCH v5 04/22] dt-bindings: sram: sunxi: Add A13, A20, A23 and H3 dedicated bindings
  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
  0 siblings, 1 reply; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:36 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:00 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> This introduces dedicated bindings for the system control blocks found
> on the A13, A20, A23 and H3 sunxi platforms.
>
> Since the controllers on the A33 are the very same as those on the A23,
> no specific compatible is introduced for it.
>
> These bindings are introduced to allow reflecting the differences that
> exist between these controllers, that may become significant to driver
> implementations.
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Not sure if there's a difference between A10 and A20, if you don't count
the NMI that we have a separate node for. But anyway,

Reviewed-by: Chen-Yu Tsai <wens@csie.org>

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

* Re: [PATCH v5 05/22] dt-bindings: sram: sunxi: Populate valid sections compatibles
  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
  0 siblings, 1 reply; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:47 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:00 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> This adds a list of valid SRAM sections compatibles for the A13, A20,
> A23 and H3 platforms. Per-platform compatibles are introduced for the
> SRAM sections of these platforms, with the A10 compatibles also listed
> as valid when applicable.
>
> In particular, compatibles for the C1 SRAM section are introduced.

You should probably mention that this is not an exhaustive list. In
particular, the C2 and C3 (sun5i) mappings are still missing.

>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> ---
>  .../devicetree/bindings/sram/sunxi-sram.txt   | 25 +++++++++++++++++++
>  1 file changed, 25 insertions(+)
>
> diff --git a/Documentation/devicetree/bindings/sram/sunxi-sram.txt b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
> index 156a02ab6b54..07c53c5214a0 100644
> --- a/Documentation/devicetree/bindings/sram/sunxi-sram.txt
> +++ b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
> @@ -32,8 +32,33 @@ once again the representation described in the mmio-sram binding.
>
>  The valid sections compatible for A10 are:
>      - allwinner,sun4i-a10-sram-a3-a4
> +    - allwinner,sun4i-a10-sram-c1
>      - allwinner,sun4i-a10-sram-d
>
> +The valid sections compatible for A13 are:
> +    - allwinner,sun5i-a13-sram-a3-a4
> +    - allwinner,sun4i-a10-sram-a3-a4
> +    - allwinner,sun5i-a13-sram-c1
> +    - allwinner,sun4i-a10-sram-c1
> +    - allwinner,sun5i-a13-sram-d
> +    - allwinner,sun4i-a10-sram-d
> +
> +The valid sections compatible for A20 are:
> +    - allwinner,sun7i-a20-sram-a3-a4
> +    - allwinner,sun4i-a10-sram-a3-a4
> +    - allwinner,sun7i-a20-sram-c1
> +    - allwinner,sun4i-a10-sram-c1
> +    - allwinner,sun7i-a20-sram-d
> +    - allwinner,sun4i-a10-sram-d
> +
> +The valid sections compatible for A23/A33 are:
> +    - allwinner,sun8i-a23-sram-c1
> +    - allwinner,sun4i-a10-sram-c1
> +
> +The valid sections compatible for H3 are:
> +    - allwinner,sun8i-h3-sram-c1
> +    - allwinner,sun4i-a10-sram-c1

I'm not quite sure why we want to list these... I think it makes more sense
to just have the SoC specific compatible. They are tied to the controls
after all. Maybe Rob has a different opinion?

ChenYu

> +
>  The valid sections compatible for A64 are:
>      - allwinner,sun50i-a64-sram-c
>
> --
> 2.17.1
>

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

* Re: [PATCH v5 06/22] soc: sunxi: sram: Add dt match for the A10 system-control compatible
  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
  1 sibling, 0 replies; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:48 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:00 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> This binds the new A10 system-control compatible to the associated
> driver, with the same driver data as the previous compatible.
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Reviewed-by: Chen-Yu Tsai <wens@csie.org>

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

* Re: [PATCH v5 07/22] drivers: soc: sunxi: Add support for the C1 SRAM region
  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
  0 siblings, 0 replies; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:49 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:00 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> From: Maxime Ripard <maxime.ripard@bootlin.com>
>
> This introduces support for the SRAM C1 section, that is controlled by
> the system controller. This SRAM area can be muxed either to the CPU
> or the Video Engine, that needs this area to store various tables (e.g.
> the Huffman VLD decoding tables).
>
> This only supports devices with the same layout as the A10 (which also
> includes the A13, A20, A33 and other SoCs).
>
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Reviewed-by: Chen-Yu Tsai <wens@csie.org>

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

* Re: [PATCH v5 08/22] ARM: dts: sun4i-a10: Use system-control compatible
  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
  0 siblings, 1 reply; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:52 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:01 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:

Subject prefix should be "ARM: dts: sun4i:"

We don't need the "a10" part since the A10 owns into this category
all by itself.

Also, it doesn't say what the system control compatible is for.
"Switch to new system control compatible string" would be slightly
better.

> This switches the sun4i-a10 dtsi to use the new compatible for the
> system-control block (previously named SRAM controller) instead of
> the deprecated one.
>
> The phandle is also updated to reflect the fact that the controller

The label actually.

ChenYu

> described is really about system control rather than SRAM control.
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> ---
>  arch/arm/boot/dts/sun4i-a10.dtsi | 4 ++--
>  1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/arch/arm/boot/dts/sun4i-a10.dtsi b/arch/arm/boot/dts/sun4i-a10.dtsi
> index 3a1c6b45c9a1..82f81f06f201 100644
> --- a/arch/arm/boot/dts/sun4i-a10.dtsi
> +++ b/arch/arm/boot/dts/sun4i-a10.dtsi
> @@ -190,8 +190,8 @@
>                 #size-cells = <1>;
>                 ranges;
>
> -               sram-controller@1c00000 {
> -                       compatible = "allwinner,sun4i-a10-sram-controller";
> +               system-control@1c00000 {
> +                       compatible = "allwinner,sun4i-a10-system-control";
>                         reg = <0x01c00000 0x30>;
>                         #address-cells = <1>;
>                         #size-cells = <1>;
> --
> 2.17.1
>

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

* Re: [linux-sunxi] [PATCH v5 09/22] ARM: dts: sun5i: Use most-qualified system control compatibles
  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   ` Chen-Yu Tsai
  2018-07-11  9:01     ` Maxime Ripard
  0 siblings, 1 reply; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:53 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:01 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> This switches the sun5i dtsi to use the most qualified compatibles for
> the system-control block (previously named SRAM controller) as well as
> the SRAM blocks. The sun4i-a10 compatibles are kept since these hardware
> blocks are backward-compatible.

Not quite sure why they are backward-compatible. The A13 has less SRAM
mapping controls than the A10.

ChenYu

> The phandle for system control is also updated to reflect the fact that
> the controller described is really about system control rather than SRAM
> control.
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> ---
>  arch/arm/boot/dts/sun5i.dtsi | 11 +++++++----
>  1 file changed, 7 insertions(+), 4 deletions(-)
>
> diff --git a/arch/arm/boot/dts/sun5i.dtsi b/arch/arm/boot/dts/sun5i.dtsi
> index 07f2248ed5f8..68711954c293 100644
> --- a/arch/arm/boot/dts/sun5i.dtsi
> +++ b/arch/arm/boot/dts/sun5i.dtsi
> @@ -114,8 +114,9 @@
>                 #size-cells = <1>;
>                 ranges;
>
> -               sram-controller@1c00000 {
> -                       compatible = "allwinner,sun4i-a10-sram-controller";
> +               system-control@1c00000 {
> +                       compatible = "allwinner,sun5i-a13-system-control",
> +                                    "allwinner,sun4i-a10-system-control";
>                         reg = <0x01c00000 0x30>;
>                         #address-cells = <1>;
>                         #size-cells = <1>;
> @@ -130,7 +131,8 @@
>                         };
>
>                         emac_sram: sram-section@8000 {
> -                               compatible = "allwinner,sun4i-a10-sram-a3-a4";
> +                               compatible = "allwinner,sun5i-a13-sram-a3-a4",
> +                                            "allwinner,sun4i-a10-sram-a3-a4";
>                                 reg = <0x8000 0x4000>;
>                                 status = "disabled";
>                         };
> @@ -143,7 +145,8 @@
>                                 ranges = <0 0x00010000 0x1000>;
>
>                                 otg_sram: sram-section@0 {
> -                                       compatible = "allwinner,sun4i-a10-sram-d";
> +                                       compatible = "allwinner,sun5i-a13-sram-d",
> +                                                    "allwinner,sun4i-a10-sram-d";
>                                         reg = <0x0000 0x1000>;
>                                         status = "disabled";
>                                 };
> --
> 2.17.1
>
> --
> You received this message because you are subscribed to the Google Groups "linux-sunxi" group.
> To unsubscribe from this group and stop receiving emails from it, send an email to linux-sunxi+unsubscribe@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

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

* Re: [linux-sunxi] [PATCH v5 10/22] ARM: dts: sun7i-a20: Use most-qualified system control compatibles
  2018-07-10  8:01 ` [PATCH v5 10/22] ARM: dts: sun7i-a20: " Paul Kocialkowski
@ 2018-07-10 14:54   ` Chen-Yu Tsai
  0 siblings, 0 replies; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:54 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:01 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> This switches the sun7i-a20 dtsi to use the most qualified compatibles
> for the system-control block (previously named SRAM controller) as well
> as the SRAM blocks. The sun4i-a10 compatibles are kept since these
> hardware blocks are backward-compatible.
>
> The phandle for system control is also updated to reflect the fact that
> the controller described is really about system control rather than SRAM
> control.
>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Reviewed-by: Chen-Yu Tsai <wens@csie.org>

But see discussion about the SRAM mapping compatibles.

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

* Re: [PATCH v5 11/22] ARM: sun5i: Add support for the C1 SRAM region with the SRAM controller
  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
  0 siblings, 1 reply; 52+ messages in thread
From: Chen-Yu Tsai @ 2018-07-10 14:56 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: Linux Media Mailing List, devicetree, linux-arm-kernel,
	linux-kernel, Mauro Carvalho Chehab, Rob Herring, Mark Rutland,
	Maxime Ripard, 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

On Tue, Jul 10, 2018 at 4:01 PM, Paul Kocialkowski
<paul.kocialkowski@bootlin.com> wrote:
> From: Maxime Ripard <maxime.ripard@bootlin.com>
>
> This adds support for the C1 SRAM region (to be used with the SRAM
> controller driver) for sun5i-based platforms. The region is shared
> between the Video Engine and the CPU.
>
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Reviewed-by: Chen-Yu Tsai <wens@csie.org>

But again, see discussion about SRAM compatibles.

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

* Re: [PATCH v5 08/22] ARM: dts: sun4i-a10: Use system-control compatible
  2018-07-10 14:52   ` Chen-Yu Tsai
@ 2018-07-10 14:58     ` Maxime Ripard
  0 siblings, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-10 14:58 UTC (permalink / raw)
  To: Chen-Yu Tsai
  Cc: Paul Kocialkowski, Linux Media Mailing List, devicetree,
	linux-arm-kernel, linux-kernel, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, 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

[-- Attachment #1: Type: text/plain, Size: 885 bytes --]

On Tue, Jul 10, 2018 at 10:52:39PM +0800, Chen-Yu Tsai wrote:
> On Tue, Jul 10, 2018 at 4:01 PM, Paul Kocialkowski
> <paul.kocialkowski@bootlin.com> wrote:
> 
> Subject prefix should be "ARM: dts: sun4i:"
> 
> We don't need the "a10" part since the A10 owns into this category
> all by itself.
> 
> Also, it doesn't say what the system control compatible is for.
> "Switch to new system control compatible string" would be slightly
> better.
> 
> > This switches the sun4i-a10 dtsi to use the new compatible for the
> > system-control block (previously named SRAM controller) instead of
> > the deprecated one.
> >
> > The phandle is also updated to reflect the fact that the controller
> 
> The label actually.

Node name, actually :)

Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 18/22] media: platform: Add Sunxi-Cedrus VPU decoder driver
  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-10 19:57   ` Ezequiel Garcia
  2018-07-13  8:40     ` Paul Kocialkowski
  1 sibling, 1 reply; 52+ messages in thread
From: Ezequiel Garcia @ 2018-07-10 19:57 UTC (permalink / raw)
  To: Paul Kocialkowski, 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

Hey Paul,

My comments on v4 of course apply here as well.

One other thing...

On Tue, 2018-07-10 at 10:01 +0200, Paul Kocialkowski wrote:
> This introduces the Sunxi-Cedrus VPU driver that supports the VPU
> found
> in Allwinner SoCs, also known as Video Engine. It is implemented
> through
> a v4l2 m2m decoder device and a media device (used for media
> requests).
> So far, it only supports MPEG2 decoding.
> 
> Since this VPU is stateless, synchronization with media requests is
> required in order to ensure consistency between frame headers that
> contain metadata about the frame to process and the raw slice data
> that
> is used to generate the frame.
> 
> This driver was made possible thanks to the long-standing effort
> carried out by the linux-sunxi community in the interest of reverse
> engineering, documenting and implementing support for Allwinner VPU.
> 
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> 
[..]
> +
> +static irqreturn_t cedrus_bh(int irq, void *data)
> +{
> +	struct cedrus_dev *dev = data;
> +	struct cedrus_ctx *ctx;
> +
> +	ctx = v4l2_m2m_get_curr_priv(dev->m2m_dev);
> +	if (!ctx) {
> +		v4l2_err(&dev->v4l2_dev,
> +			 "Instance released before the end of
> transaction\n");
> +		return IRQ_HANDLED;
> +	}
> +
> +	v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
> +

I don't like the fact that v4l2_m2m_job_finish calls .device_run
reentrantly. Let me try to make v4l2_m2m_job_finish() safe to be called
in atomic context, so hopefully drivers can just call it in the top-
half.

You are returning the buffers in the top-half, so this is just a matter
or better design, not a performance improvement.

Thanks,
Eze

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

* Re: [PATCH v5 03/22] dt-bindings: sram: sunxi: Introduce new A10 binding for system-control
  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
  1 sibling, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  8:34 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 716 bytes --]

On Tue, Jul 10, 2018 at 10:00:55AM +0200, Paul Kocialkowski wrote:
> Following-up on the introduction of a new binding for the A64, this
> introduces a system-control binding for the A10 as a replacement of
> the sram-controller binding.
> 
> This change is motivated by consistency with the Allwinner literature,
> that mentions system control over SRAM controller. Moreover, the system
> control block is sometimes used for more than SRAM (e.g. for muxing
> related to the ethernet PHY).
> 
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Applied, thanks!
Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 06/22] soc: sunxi: sram: Add dt match for the A10 system-control compatible
  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
  1 sibling, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  8:35 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 420 bytes --]

On Tue, Jul 10, 2018 at 10:00:58AM +0200, Paul Kocialkowski wrote:
> This binds the new A10 system-control compatible to the associated
> driver, with the same driver data as the previous compatible.
> 
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Applied, thanks!
Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 04/22] dt-bindings: sram: sunxi: Add A13, A20, A23 and H3 dedicated bindings
  2018-07-10 14:36   ` Chen-Yu Tsai
@ 2018-07-11  8:46     ` Maxime Ripard
  0 siblings, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  8:46 UTC (permalink / raw)
  To: Chen-Yu Tsai
  Cc: Paul Kocialkowski, Linux Media Mailing List, devicetree,
	linux-arm-kernel, linux-kernel, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, 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

[-- Attachment #1: Type: text/plain, Size: 1052 bytes --]

On Tue, Jul 10, 2018 at 10:36:19PM +0800, Chen-Yu Tsai wrote:
> On Tue, Jul 10, 2018 at 4:00 PM, Paul Kocialkowski
> <paul.kocialkowski@bootlin.com> wrote:
> > This introduces dedicated bindings for the system control blocks found
> > on the A13, A20, A23 and H3 sunxi platforms.
> >
> > Since the controllers on the A33 are the very same as those on the A23,
> > no specific compatible is introduced for it.
> >
> > These bindings are introduced to allow reflecting the differences that
> > exist between these controllers, that may become significant to driver
> > implementations.
> >
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> 
> Not sure if there's a difference between A10 and A20, if you don't count
> the NMI that we have a separate node for. But anyway,
> 
> Reviewed-by: Chen-Yu Tsai <wens@csie.org>

I've applied it, adding the A10 fallback compatible for the A20.

Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 05/22] dt-bindings: sram: sunxi: Populate valid sections compatibles
  2018-07-10 14:47   ` Chen-Yu Tsai
@ 2018-07-11  8:55     ` Maxime Ripard
  0 siblings, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  8:55 UTC (permalink / raw)
  To: Chen-Yu Tsai
  Cc: Paul Kocialkowski, Linux Media Mailing List, devicetree,
	linux-arm-kernel, linux-kernel, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, 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

[-- Attachment #1: Type: text/plain, Size: 2866 bytes --]

On Tue, Jul 10, 2018 at 10:47:07PM +0800, Chen-Yu Tsai wrote:
> On Tue, Jul 10, 2018 at 4:00 PM, Paul Kocialkowski
> <paul.kocialkowski@bootlin.com> wrote:
> > This adds a list of valid SRAM sections compatibles for the A13, A20,
> > A23 and H3 platforms. Per-platform compatibles are introduced for the
> > SRAM sections of these platforms, with the A10 compatibles also listed
> > as valid when applicable.
> >
> > In particular, compatibles for the C1 SRAM section are introduced.
> 
> You should probably mention that this is not an exhaustive list. In
> particular, the C2 and C3 (sun5i) mappings are still missing.
> 
> >
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> > ---
> >  .../devicetree/bindings/sram/sunxi-sram.txt   | 25 +++++++++++++++++++
> >  1 file changed, 25 insertions(+)
> >
> > diff --git a/Documentation/devicetree/bindings/sram/sunxi-sram.txt b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
> > index 156a02ab6b54..07c53c5214a0 100644
> > --- a/Documentation/devicetree/bindings/sram/sunxi-sram.txt
> > +++ b/Documentation/devicetree/bindings/sram/sunxi-sram.txt
> > @@ -32,8 +32,33 @@ once again the representation described in the mmio-sram binding.
> >
> >  The valid sections compatible for A10 are:
> >      - allwinner,sun4i-a10-sram-a3-a4
> > +    - allwinner,sun4i-a10-sram-c1
> >      - allwinner,sun4i-a10-sram-d
> >
> > +The valid sections compatible for A13 are:
> > +    - allwinner,sun5i-a13-sram-a3-a4
> > +    - allwinner,sun4i-a10-sram-a3-a4
> > +    - allwinner,sun5i-a13-sram-c1
> > +    - allwinner,sun4i-a10-sram-c1
> > +    - allwinner,sun5i-a13-sram-d
> > +    - allwinner,sun4i-a10-sram-d
> > +
> > +The valid sections compatible for A20 are:
> > +    - allwinner,sun7i-a20-sram-a3-a4
> > +    - allwinner,sun4i-a10-sram-a3-a4
> > +    - allwinner,sun7i-a20-sram-c1
> > +    - allwinner,sun4i-a10-sram-c1
> > +    - allwinner,sun7i-a20-sram-d
> > +    - allwinner,sun4i-a10-sram-d
> > +
> > +The valid sections compatible for A23/A33 are:
> > +    - allwinner,sun8i-a23-sram-c1
> > +    - allwinner,sun4i-a10-sram-c1
> > +
> > +The valid sections compatible for H3 are:
> > +    - allwinner,sun8i-h3-sram-c1
> > +    - allwinner,sun4i-a10-sram-c1
> 
> I'm not quite sure why we want to list these... I think it makes more sense
> to just have the SoC specific compatible. They are tied to the controls
> after all. Maybe Rob has a different opinion?

We had that discussion not so long ago, and the outcome was to list
the SoC specific and the fallback compatibles on the same line. I've
amended the patch to do so and applied.

(and added the mention of the C2 and C3 SRAMs as you suggested)

Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [linux-sunxi] [PATCH v5 09/22] ARM: dts: sun5i: Use most-qualified system control compatibles
  2018-07-10 14:53   ` [linux-sunxi] " Chen-Yu Tsai
@ 2018-07-11  9:01     ` Maxime Ripard
  0 siblings, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  9:01 UTC (permalink / raw)
  To: Chen-Yu Tsai
  Cc: Paul Kocialkowski, Linux Media Mailing List, devicetree,
	linux-arm-kernel, linux-kernel, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, 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

[-- Attachment #1: Type: text/plain, Size: 749 bytes --]

On Tue, Jul 10, 2018 at 10:53:44PM +0800, Chen-Yu Tsai wrote:
> On Tue, Jul 10, 2018 at 4:01 PM, Paul Kocialkowski
> <paul.kocialkowski@bootlin.com> wrote:
> > This switches the sun5i dtsi to use the most qualified compatibles for
> > the system-control block (previously named SRAM controller) as well as
> > the SRAM blocks. The sun4i-a10 compatibles are kept since these hardware
> > blocks are backward-compatible.
> 
> Not quite sure why they are backward-compatible. The A13 has less SRAM
> mapping controls than the A10.

I've applied this patch, and removed that compatible (and its mention
in the commit log).

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 11/22] ARM: sun5i: Add support for the C1 SRAM region with the SRAM controller
  2018-07-10 14:56   ` Chen-Yu Tsai
@ 2018-07-11  9:08     ` Maxime Ripard
  0 siblings, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  9:08 UTC (permalink / raw)
  To: Chen-Yu Tsai
  Cc: Paul Kocialkowski, Linux Media Mailing List, devicetree,
	linux-arm-kernel, linux-kernel, Mauro Carvalho Chehab,
	Rob Herring, Mark Rutland, 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

[-- Attachment #1: Type: text/plain, Size: 859 bytes --]

On Tue, Jul 10, 2018 at 10:56:23PM +0800, Chen-Yu Tsai wrote:
> On Tue, Jul 10, 2018 at 4:01 PM, Paul Kocialkowski
> <paul.kocialkowski@bootlin.com> wrote:
> > From: Maxime Ripard <maxime.ripard@bootlin.com>
> >
> > This adds support for the C1 SRAM region (to be used with the SRAM
> > controller driver) for sun5i-based platforms. The region is shared
> > between the Video Engine and the CPU.
> >
> > Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> 
> Reviewed-by: Chen-Yu Tsai <wens@csie.org>
> 
> But again, see discussion about SRAM compatibles.

I've fixed the SRAM C size (which is 0xd0000 and not 0x80000) and
applied, thanks!
Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 12/22] ARM: sun7i-a20: Add support for the C1 SRAM region with the SRAM controller
  2018-07-10  8:01 ` [PATCH v5 12/22] ARM: sun7i-a20: " Paul Kocialkowski
@ 2018-07-11  9:11   ` Maxime Ripard
  0 siblings, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  9:11 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 594 bytes --]

On Tue, Jul 10, 2018 at 10:01:04AM +0200, Paul Kocialkowski wrote:
> From: Maxime Ripard <maxime.ripard@bootlin.com>
> 
> This adds support for the C1 SRAM region (to be used with the SRAM
> controller driver) for the A20 platform. The region is shared
> between the Video Engine and the CPU.
> 
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Fixed the SRAM size and applied.

Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 13/22] ARM: sun8i-a23-a33: Add SRAM controller node and C1 SRAM region
  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
  0 siblings, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  9:14 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 590 bytes --]

On Tue, Jul 10, 2018 at 10:01:05AM +0200, Paul Kocialkowski wrote:
> From: Maxime Ripard <maxime.ripard@bootlin.com>
> 
> This adds a SRAM controller node for the A23 and A33, with support for
> the C1 SRAM region that is shared between the Video Engine and the CPU.
> 
> Signed-off-by: Maxime Ripard <maxime.ripard@bootlin.com>
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Fixed the compatible and the commit prefix and applied.

Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 14/22] ARM: sun8i-h3: Add SRAM controller node and C1 SRAM region
  2018-07-10  8:01 ` [PATCH v5 14/22] ARM: sun8i-h3: " Paul Kocialkowski
@ 2018-07-11  9:15   ` Maxime Ripard
  0 siblings, 0 replies; 52+ messages in thread
From: Maxime Ripard @ 2018-07-11  9:15 UTC (permalink / raw)
  To: Paul Kocialkowski
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 472 bytes --]

On Tue, Jul 10, 2018 at 10:01:06AM +0200, Paul Kocialkowski wrote:
> This adds a SRAM controller node for the H3, with support for the C1
> SRAM region that is shared between the Video Engine and the CPU.
> 
> Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>

Fixed the commit prefix and the compatible and applied, thanks!
Maxime

-- 
Maxime Ripard, Bootlin (formerly Free Electrons)
Embedded Linux and Kernel engineering
https://bootlin.com

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

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

* Re: [PATCH v5 20/22] ARM: dts: sun7i-a20: Add Video Engine and reserved memory nodes
  2018-07-10  9:23   ` Maxime Ripard
@ 2018-07-13  8:28     ` Paul Kocialkowski
  0 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-13  8:28 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 569 bytes --]

Hi,

On Tue, 2018-07-10 at 11:23 +0200, Maxime Ripard wrote:
> On Tue, Jul 10, 2018 at 10:01:12AM +0200, Paul Kocialkowski wrote:
> > +		vpu: video-codec@1c0e000 {
> > +			compatible = "allwinner,sun7i-a20-video-engine";
> > +			reg = <0x01c0e000 0x1000>;
> > +
> 
> The issue is here with all your patches, but you should drop the node
> label and the extra new line.

Noted, this will be fixed in the next revision.

Cheers,

Paul

-- 
Paul Kocialkowski, Bootlin (formerly Free Electrons)
Embedded Linux and kernel engineering
https://bootlin.com

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH v5 18/22] media: platform: Add Sunxi-Cedrus VPU decoder driver
  2018-07-10 19:57   ` Ezequiel Garcia
@ 2018-07-13  8:40     ` Paul Kocialkowski
  0 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-13  8:40 UTC (permalink / raw)
  To: Ezequiel Garcia, linux-media, devicetree, linux-arm-kernel, linux-kernel
  Cc: Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Maxime Ripard,
	Chen-Yu Tsai, 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

[-- Attachment #1: Type: text/plain, Size: 2854 bytes --]

Hi,

On Tue, 2018-07-10 at 16:57 -0300, Ezequiel Garcia wrote:
> Hey Paul,
> 
> My comments on v4 of course apply here as well.

Yes, it seems that most of your comments were not already adressed by
this v5. I will answer your remarks and suggestions on the v4 thread.

> One other thing...
> 
> On Tue, 2018-07-10 at 10:01 +0200, Paul Kocialkowski wrote:
> > This introduces the Sunxi-Cedrus VPU driver that supports the VPU
> > found
> > in Allwinner SoCs, also known as Video Engine. It is implemented
> > through
> > a v4l2 m2m decoder device and a media device (used for media
> > requests).
> > So far, it only supports MPEG2 decoding.
> > 
> > Since this VPU is stateless, synchronization with media requests is
> > required in order to ensure consistency between frame headers that
> > contain metadata about the frame to process and the raw slice data
> > that
> > is used to generate the frame.
> > 
> > This driver was made possible thanks to the long-standing effort
> > carried out by the linux-sunxi community in the interest of reverse
> > engineering, documenting and implementing support for Allwinner VPU.
> > 
> > Signed-off-by: Paul Kocialkowski <paul.kocialkowski@bootlin.com>
> > 
> 
> [..]
> > +
> > +static irqreturn_t cedrus_bh(int irq, void *data)
> > +{
> > +	struct cedrus_dev *dev = data;
> > +	struct cedrus_ctx *ctx;
> > +
> > +	ctx = v4l2_m2m_get_curr_priv(dev->m2m_dev);
> > +	if (!ctx) {
> > +		v4l2_err(&dev->v4l2_dev,
> > +			 "Instance released before the end of
> > transaction\n");
> > +		return IRQ_HANDLED;
> > +	}
> > +
> > +	v4l2_m2m_job_finish(ctx->dev->m2m_dev, ctx->fh.m2m_ctx);
> > +
> 
> I don't like the fact that v4l2_m2m_job_finish calls .device_run
> reentrantly. Let me try to make v4l2_m2m_job_finish() safe to be called
> in atomic context, so hopefully drivers can just call it in the top-
> half.

Thanks for your patches in this direction, I will try them and hopefully
base our next Sunxi-Cedrus version on them, if it seems that this
framework change will be picked-up by maintainers.

> You are returning the buffers in the top-half, so this is just a matter
> or better design, not a performance improvement.

This is definitely a nice design improvement IMO (if not only for
avoiding reentrancy)! 

And this reduces our code path between starting decoding and userspace
notification that decoding finished. Starting the worker thread is no
longer required before notifying userspace, so I think we are going to
see performance improvements from this. Hopefully, the worker thread
will run while userspace is busy preparing the next frame, so this
should work a lot better for us!

Cheers,

Paul

-- 
Paul Kocialkowski, Bootlin (formerly Free Electrons)
Embedded Linux and kernel engineering
https://bootlin.com

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

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

* Re: [PATCH v5 18/22] media: platform: Add Sunxi-Cedrus VPU decoder driver
  2018-07-10  8:42   ` Maxime Ripard
@ 2018-07-24 14:56     ` Paul Kocialkowski
  0 siblings, 0 replies; 52+ messages in thread
From: Paul Kocialkowski @ 2018-07-24 14:56 UTC (permalink / raw)
  To: Maxime Ripard
  Cc: linux-media, devicetree, linux-arm-kernel, linux-kernel,
	Mauro Carvalho Chehab, Rob Herring, Mark Rutland, Chen-Yu Tsai,
	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

[-- Attachment #1: Type: text/plain, Size: 2649 bytes --]

Hi,

On Tue, 2018-07-10 at 10:42 +0200, Maxime Ripard wrote:
> On Tue, Jul 10, 2018 at 10:01:10AM +0200, Paul Kocialkowski wrote:
> > +static int cedrus_remove(struct platform_device *pdev)
> > +{
> > +       struct cedrus_dev *dev = platform_get_drvdata(pdev);
> > +
> > +       v4l2_info(&dev->v4l2_dev, "Removing " CEDRUS_NAME);
> 
> That log is kind of pointless.

Fair enough, I'll get rid of it.

> > +static void cedrus_hw_set_capabilities(struct cedrus_dev *dev)
> > +{
> > +	unsigned int engine_version;
> > +
> > +	engine_version = cedrus_read(dev, VE_VERSION) >> VE_VERSION_SHIFT;
> > +
> > +	if (engine_version >= 0x1667)
> > +		dev->capabilities |= CEDRUS_CAPABILITY_UNTILED;
> 
> The version used here would need a define, but I'm wondering if this
> is the right solution here. You are using at the same time the version
> ID returned by the register and the compatible in various places, and
> they are both redundant. If you want to base the capabilities on the
> compatible, then you can do it for all of those properties and
> capabilities, and if you want to use the version register, then you
> don't need all those compatibles but just one.
> 
> I think that basing all our capabilities on the compatible makes more
> sense, since you need to have access to the registers in order to read
> the version register, and this changes from one SoC generation to the
> other (for example, keeping the reset line asserted would prevent you
> from reading it, and the fact that there is a reset line depends on
> the SoC).

I concur, let's move this to a compatible-based logic instead!

> > +int cedrus_hw_probe(struct cedrus_dev *dev)
> > +{
> > +	struct resource *res;
> > +	int irq_dec;
> > +	int ret;
> > +
> > +	irq_dec = platform_get_irq(dev->pdev, 0);
> > +	if (irq_dec <= 0) {
> > +		v4l2_err(&dev->v4l2_dev, "Failed to get IRQ\n");
> > +		return -ENXIO;
> > +	}
> 
> You already have an error code returned by platform_get_irq, there's
> no point in masking it and returning -ENXIO. This can even lead to
> some bugs, for example when the error code is EPROBE_DEFER.

Right, I'll fix this and all the similar issues you mentionned.

[...]

> There's also a bunch of warnings/checks reported by checkpatch that
> should be fixed in the next iteration: the spaces after a cast, the
> NULL comparison, macros arguments precedence, parenthesis alignments
> issues, etc.)

Thanks, I'll look into that for the next revision.

Cheers,

Paul

-- 
Paul Kocialkowski, Bootlin (formerly Free Electrons)
Embedded Linux and kernel engineering
https://bootlin.com

[-- Attachment #2: This is a digitally signed message part --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ 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).