Received: by 10.192.165.156 with SMTP id m28csp863358imm; Thu, 19 Apr 2018 08:46:36 -0700 (PDT) X-Google-Smtp-Source: AIpwx499G8ohQB2+indejgyx83HOFFS8j+zsQ1KJtd2r+ACh9W6MRaGLuU12X4AQQFJjxzLkV3ir X-Received: by 2002:a17:902:680e:: with SMTP id h14-v6mr6492509plk.90.1524152796363; Thu, 19 Apr 2018 08:46:36 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1524152796; cv=none; d=google.com; s=arc-20160816; b=sHi/4JcQ9eQ4xPx6e27yS5GlhKvYgvgCvTriViv5/nqvBIxp0pTQzD5Ty1HeiJIO4a EPfr4AZnYysXBQC0B7gACY5I0ltYw2UN4AAEpPuDeKcce2BLNUobmX2928FjSKlx3jbL AmnCZ++hrrXk6H/vfG3jy/kmB3MWdWwdUxDK27goWfcXynUgOJADg5oDEJPEpGqrrmIQ sO2MdhgW07eqVnnrA4G3veIeZBJOHqRyBI7p7xTKJI44Ypsff031bmJox2vfQw20/eMN R5ZHQ8Ii7Q3MoNgpmQE5pMA5xqPebCDMpzD5r5epsRi9wmkV3H7scTNxa8e962dYad/d OnPA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:message-id:date:subject:cc:to:from :arc-authentication-results; bh=bolufojRUc74kUyvxiax0pmvkmoweqQxS3i2b9Z1NuQ=; b=Oj6pCnu3+1qlYwB8ZrLimIi9sq6jUJu0zxStjGY890grLADDFyuPaDwUmlHOeazf8q 42w3fTcqkziqV8gV3972DyMzokex2t2lQsVkEX+XJgCuzpq4w92Qdej2Cz48L2g+voXE 1O8D6kwR0we3Xl5pSNxF0a4vu5446S8bq9iLvz0V85rscYKEtr4jaLfB3kRABdHR6MlJ INTDE7GicVVNbJIrrXh/QnseF2Ukr7sdaESofFou6Q/gjRXhWwnxzoTRIA3jg9zt9lcS ar3baKxvuVgVyASqe/w8ggY4bo0VlZAte+zhvqnEIzmieLB9TL7tLQ+y2o5XPBjP2VqS +wFw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id bj11-v6si3614588plb.480.2018.04.19.08.46.21; Thu, 19 Apr 2018 08:46:36 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753330AbeDSPnx (ORCPT + 99 others); Thu, 19 Apr 2018 11:43:53 -0400 Received: from mail.bootlin.com ([62.4.15.54]:42461 "EHLO mail.bootlin.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752385AbeDSPnv (ORCPT ); Thu, 19 Apr 2018 11:43:51 -0400 Received: by mail.bootlin.com (Postfix, from userid 110) id 40FF720710; Thu, 19 Apr 2018 17:43:49 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on mail.bootlin.com X-Spam-Level: X-Spam-Status: No, score=-1.0 required=5.0 tests=ALL_TRUSTED,SHORTCIRCUIT shortcircuit=ham autolearn=disabled version=3.4.0 Received: from localhost.localdomain (LStLambert-657-1-97-87.w90-63.abo.wanadoo.fr [90.63.216.87]) by mail.bootlin.com (Postfix) with ESMTPSA id BFFC620710; Thu, 19 Apr 2018 17:43:48 +0200 (CEST) From: Paul Kocialkowski To: linux-media@vger.kernel.org, devicetree@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-sunxi@googlegroups.com Cc: Mauro Carvalho Chehab , Rob Herring , Mark Rutland , Maxime Ripard , Chen-Yu Tsai , Pawel Osciak , Marek Szyprowski , Kyungmin Park , Hans Verkuil , Sakari Ailus , Philipp Zabel , Arnd Bergmann , Alexandre Courbot , Tomasz Figa , Paul Kocialkowski Subject: [PATCH v2 00/10] Sunxi-Cedrus driver for the Allwinner Video Engine, using media requests Date: Thu, 19 Apr 2018 17:41:14 +0200 Message-Id: <20180419154124.17512-1-paul.kocialkowski@bootlin.com> X-Mailer: git-send-email 2.16.3 Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This presents a second 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 both the A20 and the A33. 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. This series also contains fixes for issues encountered with the current version of the request API. If accepted, these should eventually be squashed into the request API series. 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. 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. Remaining tasks: * using the dedicated SRAM controller driver; * cleaning up registers description and documenting the fields used; * removing the assigned-clocks property and setting the clock rate in the driver directly; * testing on more platforms. Cheers! Paul Kocialkowski (10): media: v4l2-ctrls: Add missing v4l2 ctrl unlock media-request: Add a request complete operation to allow m2m scheduling videobuf2-core: Add helper to get buffer private data from media request media: vim2m: Implement media request complete op to schedule m2m run media: v4l: Add definitions for MPEG2 frame format and header metadata media: v4l: Add definition for Allwinner's MB32-tiled NV12 format media: platform: Add Sunxi-Cedrus VPU decoder driver dt-bindings: media: Document bindings for the Sunxi-Cedrus VPU driver ARM: dts: sun7i-a20: Add Video Engine and reserved memory nodes ARM: dts: sun8i-a33: Add Video Engine and reserved memory nodes .../devicetree/bindings/media/sunxi-cedrus.txt | 50 +++ arch/arm/boot/dts/sun7i-a20.dtsi | 31 ++ arch/arm/boot/dts/sun8i-a33.dtsi | 38 ++ drivers/media/common/videobuf2/videobuf2-core.c | 15 + drivers/media/media-request.c | 3 + drivers/media/platform/Kconfig | 15 + drivers/media/platform/Makefile | 1 + drivers/media/platform/sunxi/cedrus/Makefile | 4 + drivers/media/platform/sunxi/cedrus/sunxi_cedrus.c | 292 ++++++++++++ .../platform/sunxi/cedrus/sunxi_cedrus_common.h | 105 +++++ .../media/platform/sunxi/cedrus/sunxi_cedrus_dec.c | 228 ++++++++++ .../media/platform/sunxi/cedrus/sunxi_cedrus_dec.h | 36 ++ .../media/platform/sunxi/cedrus/sunxi_cedrus_hw.c | 201 +++++++++ .../media/platform/sunxi/cedrus/sunxi_cedrus_hw.h | 29 ++ .../platform/sunxi/cedrus/sunxi_cedrus_mpeg2.c | 157 +++++++ .../platform/sunxi/cedrus/sunxi_cedrus_mpeg2.h | 33 ++ .../platform/sunxi/cedrus/sunxi_cedrus_regs.h | 172 +++++++ .../platform/sunxi/cedrus/sunxi_cedrus_video.c | 497 +++++++++++++++++++++ .../platform/sunxi/cedrus/sunxi_cedrus_video.h | 31 ++ drivers/media/platform/vim2m.c | 12 + drivers/media/v4l2-core/v4l2-ctrls.c | 17 +- drivers/media/v4l2-core/v4l2-ioctl.c | 1 + include/media/media-device.h | 2 + include/media/videobuf2-core.h | 1 + include/uapi/linux/v4l2-controls.h | 26 ++ include/uapi/linux/videodev2.h | 4 + 26 files changed, 2000 insertions(+), 1 deletion(-) create mode 100644 Documentation/devicetree/bindings/media/sunxi-cedrus.txt create mode 100644 drivers/media/platform/sunxi/cedrus/Makefile create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus.c create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_common.h create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_dec.c create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_dec.h create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_hw.c create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_hw.h create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_mpeg2.c create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_mpeg2.h create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_regs.h create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_video.c create mode 100644 drivers/media/platform/sunxi/cedrus/sunxi_cedrus_video.h -- 2.16.3