From patchwork Fri Aug 31 08:52:01 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Maxime Jourdan X-Patchwork-Id: 10583391 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id E84FE112B for ; Fri, 31 Aug 2018 08:52:46 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id D59FF2A40B for ; Fri, 31 Aug 2018 08:52:46 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C9F312A593; Fri, 31 Aug 2018 08:52:46 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-2.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE autolearn=ham version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 200DA2A40B for ; Fri, 31 Aug 2018 08:52:46 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:Message-Id:Date: Subject:To:From:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To: References:List-Owner; bh=qi5YBwIa31SCV6QsrmLb2x9SPuXu8cu3zqDX45KrVeI=; b=Oxc OluP66KLzbNiujXOZOsQlhvcmr+xFE89KIfBKyENFkNGCiYBC0O+go0mjFbzQToSomoAxongb5K75 +yNq68Fbf5iPgXNMyT2yquk818jB+H5Tehpc6dvSvR5xSRsFF0UQuI54R1X7BRFZhToT+GQHzeu9B kv0VTw7JaNYvWwEtMkrthJJf5/JfEDO/aPUR+q9yl/Z4spTPEMmbWAc9VfJYWzYClxSuM3EsNGeoJ bGq71ytr314Jk/IZIaVCnaGvS31u3ilpWbeiFdI7LLs9IJp1ckofnHfpUq8OzZWd5gMiQZhTJajYo 9izYEyH7Au/oiLtXLKbIoTA71ZEMlRg==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.90_1 #2 (Red Hat Linux)) id 1fvfAO-0006Iz-Ax; Fri, 31 Aug 2018 08:52:32 +0000 Received: from mail-wm0-x241.google.com ([2a00:1450:400c:c09::241]) by bombadil.infradead.org with esmtps (Exim 4.90_1 #2 (Red Hat Linux)) id 1fvfAF-0006EL-9l for linux-arm-kernel@lists.infradead.org; Fri, 31 Aug 2018 08:52:25 +0000 Received: by mail-wm0-x241.google.com with SMTP id o18-v6so4578477wmc.0 for ; Fri, 31 Aug 2018 01:52:12 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20150623.gappssmtp.com; s=20150623; h=from:to:cc:subject:date:message-id; bh=aHUBPCg6mn+r9IA1mXSMikZybH8X2Mrx38ifsHP/M5o=; b=WJv7jZ5Fq9pbD0Kw6IBBltQkDRWL4M+aFRCRybBwVxVNyXbrHzhTguizfd+LzolSRJ 9ycTxc2g/DNrCpba0ezUfHg8FjEHEaj0us3S91jlyy242mZTw+oiJw2BaL1CEbuoFxFD gmzTAJQBdmplRhUlizDScq642tzs/G+4BXgI01TA+wimYFyqjApRGQP4TmGFNcrO0R/P uqAcbD4TmeMA1+Lh8Dwk/d5t2o64MfxRcEqPqzTr0cucOKcQBRaTMK0Msjgas93Ez9lI +Xxa9MVRV/n5BrGAG2YI/7p/DLlRroKlgYs91A5YgmWERn7Td3dxrwuBpmocwwIvnIv/ p44Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=aHUBPCg6mn+r9IA1mXSMikZybH8X2Mrx38ifsHP/M5o=; b=Jhkit6DnX10BA0sgocaxFzGgQ0J3r39uZkuXUCt2DtyQTPtOk6j0JLzH5DfvOsKU53 sHsc9gw5Jn00nwBUhC4RhsTW5w5kBwuFf/4shekT9laPYyO+iz0fvbIEKV0jVVJBX4qB h/H4Xit40xpah4/fP6kV5Su0QjIX1zv0kjiotgjtiFTiW8fVshCUxaGo3d3hejFCc91T oLjkF8joeBT+MavPqoBg0VYd4TZSErVIxTCT3tYcJ3SLODAoOgFonFtZ6rEToIUoprhJ QZhCY2Ueb1WYPQQf0WHYtl4d7wbK1223cZvcasjHcbWlrAwyKGO4gfxSSgQiKANW4rxV sRvQ== X-Gm-Message-State: APzg51Aa4bxJEcXJEPXVpNgykM2sDSrU4m/E21kZIcgupR4UGUUbm057 TTBxUfX5ffTzs3OgMCNKl/V+jg== X-Google-Smtp-Source: ANB0VdZy4LcWYdR5fHNys4zekh6124h0kTiexO7HSaTNmlStUTG4fsoDl+zABDRrQPl8eVpxLBSWxw== X-Received: by 2002:a1c:c345:: with SMTP id t66-v6mr4369006wmf.100.1535705530879; Fri, 31 Aug 2018 01:52:10 -0700 (PDT) Received: from localhost.localdomain (81-67-76-113.rev.numericable.fr. [81.67.76.113]) by smtp.gmail.com with ESMTPSA id v6-v6sm8920822wro.66.2018.08.31.01.52.09 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Fri, 31 Aug 2018 01:52:10 -0700 (PDT) From: Maxime Jourdan To: Mauro Carvalho Chehab , Kevin Hilman , Rob Herring Subject: [PATCH 0/4] Add Amlogic video decoder driver Date: Fri, 31 Aug 2018 10:52:01 +0200 Message-Id: <20180831085205.14760-1-mjourdan@baylibre.com> X-Mailer: git-send-email 2.18.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20180831_015223_363165_A0F98D32 X-CRM114-Status: GOOD ( 15.76 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Maxime Jourdan , devicetree@vger.kernel.org, Neil Armstrong , Martin Blumenstingl , linux-kernel@vger.kernel.org, Hans Verkuil , linux-amlogic@lists.infradead.org, Jerome Brunet , linux-arm-kernel@lists.infradead.org, linux-media@vger.kernel.org MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP Hi everyone, This patch series adds support for the Amlogic video decoder, as well as the corresponding dt bindings for GXBB/GXL/GXM chips. It features decoding for the following formats: - MPEG 1 - MPEG 2 The following formats will be added in future patches: - MJPEG - MPEG 4 (incl. Xvid, H.263) - H.264 - HEVC (incl. 10-bit) The following formats' development has still not started, but they are supported by the hardware: - VC1 - VP9 The code was made in such a way to allow easy inclusion of those formats in the future. The decoder is single instance. Files: - vdec.c handles the V4L2 M2M logic - esparser.c manages the hardware bitstream parser - vdec_helpers.c provides helpers to DONE the dst buffers as well as various common code used by the codecs - vdec_1.c manages the VDEC_1 block of the vdec IP - codec_mpeg12.c enables decoding for MPEG 1/2. - vdec_platform.c links codec units with vdec units (e.g vdec_1 with codec_mpeg12) and lists all the available src/dst formats and requirements (max width/height, etc.), per compatible chip. Firmwares are necessary to run the vdec. They can currently be found at: https://github.com/chewitt/meson-firmware It was tested primarily with ffmpeg's v4l2-m2m implementation. For instance: $ ffmpeg -c:v mpeg2_v4l2m2m -i sample_mpeg2.mkv -f null - Note: This patch series depends on "[PATCH v3 0/3] soc: amlogic: add meson-canvas" https://patchwork.kernel.org/cover/10573763/ The v4l2-compliance results are available below the patch diff. Maxime Jourdan (4): dt-bindings: media: add Amlogic Video Decoder Bindings media: meson: add v4l2 m2m video decoder driver ARM64: dts: meson-gx: add vdec entry ARM64: dts: meson: add vdec entries .../bindings/media/amlogic,vdec.txt | 63 ++ arch/arm64/boot/dts/amlogic/meson-gx.dtsi | 13 + arch/arm64/boot/dts/amlogic/meson-gxbb.dtsi | 11 + arch/arm64/boot/dts/amlogic/meson-gxl.dtsi | 11 + arch/arm64/boot/dts/amlogic/meson-gxm.dtsi | 4 + drivers/media/platform/Kconfig | 10 + drivers/media/platform/meson/Makefile | 1 + drivers/media/platform/meson/vdec/Makefile | 8 + .../media/platform/meson/vdec/codec_mpeg12.c | 169 +++ .../media/platform/meson/vdec/codec_mpeg12.h | 13 + drivers/media/platform/meson/vdec/dos_regs.h | 97 ++ drivers/media/platform/meson/vdec/esparser.c | 367 +++++++ drivers/media/platform/meson/vdec/esparser.h | 27 + drivers/media/platform/meson/vdec/vdec.c | 987 ++++++++++++++++++ drivers/media/platform/meson/vdec/vdec.h | 233 +++++ drivers/media/platform/meson/vdec/vdec_1.c | 227 ++++ drivers/media/platform/meson/vdec/vdec_1.h | 13 + .../media/platform/meson/vdec/vdec_helpers.c | 353 +++++++ .../media/platform/meson/vdec/vdec_helpers.h | 44 + .../media/platform/meson/vdec/vdec_platform.c | 100 ++ .../media/platform/meson/vdec/vdec_platform.h | 29 + 21 files changed, 2780 insertions(+) create mode 100644 Documentation/devicetree/bindings/media/amlogic,vdec.txt create mode 100644 drivers/media/platform/meson/vdec/Makefile create mode 100644 drivers/media/platform/meson/vdec/codec_mpeg12.c create mode 100644 drivers/media/platform/meson/vdec/codec_mpeg12.h create mode 100644 drivers/media/platform/meson/vdec/dos_regs.h create mode 100644 drivers/media/platform/meson/vdec/esparser.c create mode 100644 drivers/media/platform/meson/vdec/esparser.h create mode 100644 drivers/media/platform/meson/vdec/vdec.c create mode 100644 drivers/media/platform/meson/vdec/vdec.h create mode 100644 drivers/media/platform/meson/vdec/vdec_1.c create mode 100644 drivers/media/platform/meson/vdec/vdec_1.h create mode 100644 drivers/media/platform/meson/vdec/vdec_helpers.c create mode 100644 drivers/media/platform/meson/vdec/vdec_helpers.h create mode 100644 drivers/media/platform/meson/vdec/vdec_platform.c create mode 100644 drivers/media/platform/meson/vdec/vdec_platform.h root@libretech-cc:~/v4l-utils# v4l2-compliance -d /dev/video0 v4l2-compliance SHA: not available, 64 bits Compliance test for device /dev/video0: Driver Info: Driver name : meson-vdec Card type : Amlogic Video Decoder Bus info : platform:meson-vdec Driver version : 4.18.0 Capabilities : 0x84204000 Video Memory-to-Memory Multiplanar Streaming Extended Pix Format Device Capabilities Device Caps : 0x04204000 Video Memory-to-Memory Multiplanar Streaming Extended Pix Format Required ioctls: test VIDIOC_QUERYCAP: OK Allow for multiple opens: test second /dev/video0 open: OK test VIDIOC_QUERYCAP: OK test VIDIOC_G/S_PRIORITY: OK test for unlimited opens: OK Debug ioctls: test VIDIOC_DBG_G/S_REGISTER: OK (Not Supported) test VIDIOC_LOG_STATUS: OK (Not Supported) Input ioctls: test VIDIOC_G/S_TUNER/ENUM_FREQ_BANDS: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK (Not Supported) test VIDIOC_S_HW_FREQ_SEEK: OK (Not Supported) test VIDIOC_ENUMAUDIO: OK (Not Supported) test VIDIOC_G/S/ENUMINPUT: OK (Not Supported) test VIDIOC_G/S_AUDIO: OK (Not Supported) Inputs: 0 Audio Inputs: 0 Tuners: 0 Output ioctls: test VIDIOC_G/S_MODULATOR: OK (Not Supported) test VIDIOC_G/S_FREQUENCY: OK (Not Supported) test VIDIOC_ENUMAUDOUT: OK (Not Supported) test VIDIOC_G/S/ENUMOUTPUT: OK (Not Supported) test VIDIOC_G/S_AUDOUT: OK (Not Supported) Outputs: 0 Audio Outputs: 0 Modulators: 0 Input/Output configuration ioctls: test VIDIOC_ENUM/G/S/QUERY_STD: OK (Not Supported) test VIDIOC_ENUM/G/S/QUERY_DV_TIMINGS: OK (Not Supported) test VIDIOC_DV_TIMINGS_CAP: OK (Not Supported) test VIDIOC_G/S_EDID: OK (Not Supported) Control ioctls: test VIDIOC_QUERY_EXT_CTRL/QUERYMENU: OK (Not Supported) test VIDIOC_QUERYCTRL: OK (Not Supported) test VIDIOC_G/S_CTRL: OK (Not Supported) test VIDIOC_G/S/TRY_EXT_CTRLS: OK (Not Supported) test VIDIOC_(UN)SUBSCRIBE_EVENT/DQEVENT: OK (Not Supported) test VIDIOC_G/S_JPEGCOMP: OK (Not Supported) Standard Controls: 0 Private Controls: 0 Format ioctls: test VIDIOC_ENUM_FMT/FRAMESIZES/FRAMEINTERVALS: OK test VIDIOC_G/S_PARM: OK (Not Supported) test VIDIOC_G_FBUF: OK (Not Supported) test VIDIOC_G_FMT: OK test VIDIOC_TRY_FMT: OK test VIDIOC_S_FMT: OK test VIDIOC_G_SLICED_VBI_CAP: OK (Not Supported) test Cropping: OK (Not Supported) test Composing: OK (Not Supported) test Scaling: OK Codec ioctls: test VIDIOC_(TRY_)ENCODER_CMD: OK (Not Supported) test VIDIOC_G_ENC_INDEX: OK (Not Supported) test VIDIOC_(TRY_)DECODER_CMD: OK Buffer ioctls: test VIDIOC_REQBUFS/CREATE_BUFS/QUERYBUF: OK test VIDIOC_EXPBUF: OK Total: 43, Succeeded: 43, Failed: 0, Warnings: 0