Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp206641pxj; Thu, 3 Jun 2021 04:52:19 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzoPd8pnC7IBNtsP0bzGCgGMhkr97kC6JQpfwvgE8rZcJF4+PAfItbM0/T2uURDvOIDGEcO X-Received: by 2002:a05:6402:34d2:: with SMTP id w18mr43509049edc.358.1622721138852; Thu, 03 Jun 2021 04:52:18 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1622721138; cv=none; d=google.com; s=arc-20160816; b=QChLE2dNYnSg36rH+gTAn4A2M53k+Yx6hhBH5FziDUcG8Ye/2Tt3yA0hTZ1+8J01vn uv7EL71Mnf1nBze2X+1ZdCdwrabV+JmJd8APs5tUPJcPrSKvczVpQeKLjlYvdK/PXFjN QeiGZOCKBk7gFkpdORFZWGYyPwIQF4gXSAfvEsFpy+67+POQD6kAD7ZsFgmlt8CJ8pp0 fCYv6lD1F94hILqbDkmcjfhXlNW7FhAXr11NxB7mw+m5q/pemtJYWo2FDSnwfxs+/u/g 9DCIrGUupvBnGSH4M2iaFK361YT3IKOwogv7M4cSwsmSEdicehrvegwv3XB0iZN+vzM+ JVpQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from; bh=PpRCt2s31F2/YqEX0Diut/g4DR3Rmk/F0/vUPyqduSM=; b=yg+E5JnzWOf2ifbQEC5zPCtQchEjyXToZjMxs1QBzhqjTjO9HHgRfiTS3HvTtdAdFt rA9S+ZiLiM9eviVlBWGpMwKuLZEUsnX+KyaLIVO8ScvaeIx5T/S8cVyMkZ4lfj9nWFMt tDBzgy6FQjH4kSt1eWido5JKVaHvo5aCnDwlzVutTk2kavB0pbRF5F0orTEzR1MV7Z8x dKnGgsjFCR0261ZC+Fwn5MRHXGo39bgGDhBFr2MLuB3BXslp+CyWQtb5Ea0b/leXrHMd wJAjda1HLQEPzxnTELM2vUdXlr7riOb27d8MnODx0CcZGW1c4ZyDnd3h+06WSJyJWcRH SQgw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id w7si2018899ejy.722.2021.06.03.04.51.55; Thu, 03 Jun 2021 04:52:18 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=collabora.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229936AbhFCLwE (ORCPT + 99 others); Thu, 3 Jun 2021 07:52:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36842 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229761AbhFCLwC (ORCPT ); Thu, 3 Jun 2021 07:52:02 -0400 Received: from bhuna.collabora.co.uk (bhuna.collabora.co.uk [IPv6:2a00:1098:0:82:1000:25:2eeb:e3e3]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 28419C06174A; Thu, 3 Jun 2021 04:50:16 -0700 (PDT) Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: benjamin.gaignard) with ESMTPSA id 5B9571F42FDC From: Benjamin Gaignard To: hverkuil@xs4all.nl, ezequiel@collabora.com, p.zabel@pengutronix.de, mchehab@kernel.org, shawnguo@kernel.org, s.hauer@pengutronix.de, festevam@gmail.com, gregkh@linuxfoundation.org, mripard@kernel.org, paul.kocialkowski@bootlin.com, wens@csie.org, jernej.skrabec@siol.net, emil.l.velikov@gmail.com, andrzej.p@collabora.com Cc: kernel@pengutronix.de, linux-imx@nxp.com, linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Benjamin Gaignard Subject: [PATCH v13 0/9] Add HANTRO G2/HEVC decoder support for IMX8MQ Date: Thu, 3 Jun 2021 13:49:55 +0200 Message-Id: <20210603115004.915294-1-benjamin.gaignard@collabora.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The IMX8MQ got two VPUs but until now only G1 has been enabled. This series aim to add the second VPU (aka G2) and provide basic HEVC decoding support. To be able to decode HEVC it is needed to add/update some of the structures in the uapi. In addition of them one HANTRO dedicated control is required to inform the driver of the number of bits to skip at the beginning of the slice header. The hardware require to allocate few auxiliary buffers to store the references frame or tile size data. The driver has been tested with fluster test suite stream. For example with this command: ./fluster.py run -ts JCT-VC-HEVC_V1 -d GStreamer-H.265-V4L2SL-Gst1.0 version 13: - fix warnings from check tools. - Rebased on media_stage. - Compiled with W=1 to find a maximum of warnings version 11: - Rebased on media_stage. - Fix minor typo/remarks. version 10: - Shorter version of the previous series without ctrl block patches and no DT modifications. The scope of this series is limited to HEVC support. version 9: - Corrections in commits messages. - Define the dedicated control in hevc-controls.h - Add note in documentation. - Change max value of the dedicated control. - Rebased on media_tree/master branch. version 8: - Add reviewed-by and ack-by tags - Fix the warnings reported by kernel test robot - Only patch 9 (adding dedicated control), patch 11 (HEVC support) and patch 13 (DT changes) are still missing of review/ack tag. version 7: - Remove 'q' from syscon phandle name to make usable for iMX8MM too. Update the bindings documentation. - Add review/ack tags. - Rebase on top of media_tree/master - Be more accurate when computing the size of the memory needed motion vectors. - Explain why the all clocks need to set in the both DT node. version 6: - fix the errors reported by kernel test robot version 5: - use syscon instead of VPU reset driver. - Do not break kernel/DT backward compatibility. - Add documentation for dedicated Hantro control. - Fix the remarks done by Ezequeil (typo, comments, unused function) - Run v4l2-compliance without errors (see below). - Do not add field to distinguish version, check postproc reg instead version 4: - Split the changes in hevc controls in 2 commits to make them easier to review. - Change hantro_codec_ops run() prototype to return errors - Hantro v4l2 dedicated control is now only an integer - rebase on top of VPU reset changes posted here: https://www.spinics.net/lists/arm-kernel/msg878440.html - Various fix from previous remarks - Limit the modifications in API to what the driver needs version 3: - Fix typo in Hantro v4l2 dedicated control - Add documentation for the new structures and fields - Rebased on top of media_tree for-linus-5.12-rc1 tag version 2: - remove all change related to scaling - squash commits to a coherent split - be more verbose about the added fields - fix the comments done by Ezequiel about dma_alloc_coherent usage - fix Dan's comments about control copy, reverse the test logic in tile_buffer_reallocate, rework some goto and return cases. - be more verbose about why I change the bindings - remove all sign-off expect mime since it is confusing - remove useless clocks in VPUs nodes Benjamin Gaignard (9): media: hevc: Add fields and flags for hevc PPS media: hevc: Add decode params control media: hantro: change hantro_codec_ops run prototype to return errors media: hantro: Define HEVC codec profiles and supported features media: hantro: Only use postproc when post processed formats are defined media: uapi: Add a control for HANTRO driver media: hantro: handle V4L2_PIX_FMT_HEVC_SLICE control media: hantro: Introduce G2/HEVC decoder media: hantro: IMX8M: add variant for G2/HEVC codec .../userspace-api/media/drivers/hantro.rst | 19 + .../userspace-api/media/drivers/index.rst | 1 + .../media/v4l/ext-ctrls-codec.rst | 108 +++- .../media/v4l/vidioc-queryctrl.rst | 6 + drivers/media/v4l2-core/v4l2-ctrls-core.c | 21 +- drivers/media/v4l2-core/v4l2-ctrls-defs.c | 4 + drivers/staging/media/hantro/Makefile | 2 + drivers/staging/media/hantro/hantro.h | 13 +- drivers/staging/media/hantro/hantro_drv.c | 99 ++- .../staging/media/hantro/hantro_g1_h264_dec.c | 10 +- .../media/hantro/hantro_g1_mpeg2_dec.c | 4 +- .../staging/media/hantro/hantro_g1_vp8_dec.c | 6 +- .../staging/media/hantro/hantro_g2_hevc_dec.c | 586 ++++++++++++++++++ drivers/staging/media/hantro/hantro_g2_regs.h | 198 ++++++ .../staging/media/hantro/hantro_h1_jpeg_enc.c | 4 +- drivers/staging/media/hantro/hantro_hevc.c | 333 ++++++++++ drivers/staging/media/hantro/hantro_hw.h | 71 ++- .../staging/media/hantro/hantro_postproc.c | 14 + drivers/staging/media/hantro/hantro_v4l2.c | 5 +- drivers/staging/media/hantro/imx8m_vpu_hw.c | 96 ++- .../media/hantro/rk3399_vpu_hw_jpeg_enc.c | 4 +- .../media/hantro/rk3399_vpu_hw_mpeg2_dec.c | 4 +- .../media/hantro/rk3399_vpu_hw_vp8_dec.c | 6 +- drivers/staging/media/sunxi/cedrus/cedrus.c | 6 + drivers/staging/media/sunxi/cedrus/cedrus.h | 1 + .../staging/media/sunxi/cedrus/cedrus_dec.c | 2 + .../staging/media/sunxi/cedrus/cedrus_h265.c | 12 +- include/media/hevc-ctrls.h | 46 +- 28 files changed, 1612 insertions(+), 69 deletions(-) create mode 100644 Documentation/userspace-api/media/drivers/hantro.rst create mode 100644 drivers/staging/media/hantro/hantro_g2_hevc_dec.c create mode 100644 drivers/staging/media/hantro/hantro_g2_regs.h create mode 100644 drivers/staging/media/hantro/hantro_hevc.c -- 2.25.1