Received: by 2002:a05:7412:40d:b0:e2:908c:2ebd with SMTP id 13csp1171094rdf; Wed, 22 Nov 2023 07:23:50 -0800 (PST) X-Google-Smtp-Source: AGHT+IH9AdZ7MZjW+Gkhtl7XBI9Wbmmkhyh1tp5Uebt7F9hSCY8YnMQizrJweBEHKJrt5MGrl/Xb X-Received: by 2002:a17:90b:3605:b0:285:569b:a0a5 with SMTP id ml5-20020a17090b360500b00285569ba0a5mr111580pjb.11.1700666630584; Wed, 22 Nov 2023 07:23:50 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700666630; cv=none; d=google.com; s=arc-20160816; b=vspoYd/b3S3oOwge2Eip0ZMFXxiwBnH2aipfSPQ9hGLkBqdT9qyZWmtcWzD9r/a7G2 H7d5TWdY0+6oGVq33eAQOKv6/Qu4kW8OQmI5tLjU4DgTzVwuGNDrOaiyFA5ObFUYsai3 /R6QSqpAmTe0qYZ+W5FJj/wASOuLZ7CYpUgiVVdjA5ac10hZ+6QFVpwLmAhnbdLRkUyA Z02TGIkptT4dJ9pKI9moDJ2PdifXyccupPR9EFDPn5fzUhReZPNbvrgM0Y62A5WarP5f llfWUk+XnoX+r1pIYZazQg/Ovp37NgpVVt1Lha02kC8ty4mKhqlCmZRDmbmilyd1GHmD jLOw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:in-reply-to:from :references:cc:to:content-language:subject:user-agent:mime-version :date:message-id; bh=zzlThW2y5qvFrD/qcLlgtcapv9PEA+3gWAzXv874zCc=; fh=YMQzr7K5SX9/LNjE2lR1CIAL65TrudVsvAJOccieWH4=; b=bhi5a2Rmeq7pEa2q//J8/84FFIcfUesKVJUNLVxYl4alolsnQNtVyxQ0QN79YUYcp8 N989vVvNvwB+bFhRNFIlxeotAKt+fJgp9WvHNd6nHJqUTxGOO6tvvfpTJJGhxhr+f1o/ ZyOK4R6tYFMrPDYPSm/K1uUzHzzuKvK46ONfu/2EH2bQvORqJ837zzgKjwFwdpyWQyeZ ewXplbIKvGDJ73IJFLWUlabwdtH4Njd+4Hm9hO8W6TI/xfk6IL6m4nXzXe1mV1ac3U89 AVpGIckmazJGOO9V17Cx0DKz4dl9NRLqROwpT2ycz8iyqTCkWUBXbIIUFXr4xYABsGSE SvSQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xs4all.nl Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id x33-20020a17090a38a400b0028399418057si1594667pjb.75.2023.11.22.07.23.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 22 Nov 2023 07:23:50 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=xs4all.nl Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 3AD35825EDA1; Wed, 22 Nov 2023 07:23:38 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1344236AbjKVPX2 (ORCPT + 99 others); Wed, 22 Nov 2023 10:23:28 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48014 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229634AbjKVPX1 (ORCPT ); Wed, 22 Nov 2023 10:23:27 -0500 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A7AF3F9 for ; Wed, 22 Nov 2023 07:23:21 -0800 (PST) Received: by smtp.kernel.org (Postfix) with ESMTPSA id E07ADC433C8; Wed, 22 Nov 2023 15:23:18 +0000 (UTC) Message-ID: <82f81f63-3dfa-42fe-8744-63f36d73bb77@xs4all.nl> Date: Wed, 22 Nov 2023 16:23:17 +0100 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 0/9] media: rkvdec: Add HEVC backend Content-Language: en-US, nl To: Jonas Karlman , Ezequiel Garcia , Mauro Carvalho Chehab Cc: Alex Bee , Nicolas Dufresne , Sebastian Fricke , Benjamin Gaignard , Christopher Obbard , linux-media@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-staging@lists.linux.dev, linux-kernel@vger.kernel.org References: <20231105233630.3927502-1-jonas@kwiboo.se> <39d991e9-6afd-4207-ad09-e342a6c02485@xs4all.nl> From: Hans Verkuil In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Wed, 22 Nov 2023 07:23:38 -0800 (PST) On 09/11/2023 18:44, Jonas Karlman wrote: > Hi Hans, > > On 2023-11-07 14:49, Hans Verkuil wrote: >> Hi Jonas, >> >> On 06/11/2023 00:36, Jonas Karlman wrote: >>> This series add a HEVC backend to the Rockchip Video Decoder driver. >>> >>> A version of this HEVC backend has been in use by the LibreELEC distro >>> for the past 3+ years [1]. It was initially created based on a copy of >>> the H264 backend, unstable HEVC uAPI controls and a cabac table + scaling >>> matrix functions shamelessly copied 1:1 from the Rockchip mpp library. >>> >>> It has since then been extended to use the stable HEVC uAPI controls and >>> improved opon e.g. to include support for rk3288 and fix decoding issues >>> by Alex Bee and Nicolas Dufresne. >>> >>> The version submitted in this series is based on the code currently used >>> by the LibreELEC distro, excluding hard/soft reset, and with cabac table >>> and scaling matrix functions picked from Sebastian Fricke prior series >>> to add a HEVC backend [2]. >>> >>> Big thanks to Alex Bee, Nicolas Dufresne and Sebastian Fricke for making >>> this series possible! >> >> I ran this series through smatch and found these two issues: >> >> drivers/staging/media/rkvdec/rkvdec-hevc.c: In function 'transpose_and_flatten_matrices': >> drivers/staging/media/rkvdec/rkvdec-hevc.c:429:83: warning: variable 'new_value' set but not used [-Wunused-but-set-variable] >> 429 | int i, j, row, x_offset, matrix_offset, rot_index, y_offset, matrix_size, new_value; >> | ^~~~~~~~~ >> drivers/staging/media/rkvdec/rkvdec-hevc.c:756 rkvdec_hevc_run_preamble() error: we previously assumed 'ctrl' could be null (see line 755) > > Thanks, will fix in v2. > >> >> Also, this series drops the HEVC part from the TODO file, but >> I wonder if the last remaining item is still valid: >> >> * Evaluate introducing a helper to consolidate duplicated >> code in rkvdec_request_validate and cedrus_request_validate. >> The helper needs to the driver private data associated with >> the videobuf2 queue, from a media request. >> >> It doesn't look like there is much duplicate code at all. It is certainly not >> something that prevents this driver from moving out of staging. > > I agree, if this is still valid it is not something that should prevent > this driver from moving out of staging. > > There is however one remaining feature/issue that is not listed in TODO. > > In certain situations the hw block may need a reset after there has been > a decoding error, especially after a hevc decoding error. Decoding can > typically be re-started with successful result after a short pm > autosuspend timeout. > > We do have a soft/hard reset implementation in LibreELEC-distro, > excluded it from this series because reset is typically not needed, and > I think the reset code need some rework to be upstream ready. > > Would missing hard reset support be a reason for keeping this driver > in staging? I think Nicolas would be better placed to comment on that. If it is not considered a blocker, shouldn't there at least be a patch adding comments at the relevant place describing this issue? That way it is at least documented as a known issue. Regards, Hans > > Regards, > Jonas > >> >> Regards, >> >> Hans >> >>> >>> Patch 1 add the new HEVC backend. >>> Patch 2-3 add variants support to the driver. >>> Patch 4 add support for a rk3288 variant. >>> Patch 5 add a rk3328 variant to work around hw quirks. >>> Patch 6-7 add device tree node for rk3288. >>> Patch 8-9 extend vdec node reg size to include cache/perf registers. >>> >>> This was tested on a ROCK Pi 4 (RK3399) and Rock64 (RK3328): >>> >>> v4l2-compliance 1.24.1, 64 bits, 64-bit time_t >>> ... >>> Total for rkvdec device /dev/video1: 46, Succeeded: 46, Failed: 0, Warnings: 0 >>> >>> Running test suite JCT-VC-HEVC_V1 with decoder FFmpeg-H.265-V4L2-request >>> ... >>> Ran 135/147 tests successfully >>> >>> Running test suite JCT-VC-MV-HEVC with decoder FFmpeg-H.265-V4L2-request >>> ... >>> Ran 9/9 tests successfully >>> >>> And on a TinkerBoard (RK3288): >>> >>> v4l2-compliance 1.24.1, 32 bits, 32-bit time_t >>> ... >>> Total for rkvdec device /dev/video3: 47, Succeeded: 47, Failed: 0, Warnings: 0 >>> >>> Running test suite JCT-VC-HEVC_V1 with decoder FFmpeg-H.265-V4L2-request >>> ... >>> Ran 137/147 tests successfully >>> >>> Running test suite JCT-VC-MV-HEVC with decoder FFmpeg-H.265-V4L2-request >>> ... >>> Ran 9/9 tests successfully >>> >>> This series depend on the following series: >>> - media: rkvdec: Add H.264 High 10 and 4:2:2 profile support [3] >>> >>> To fully runtime test this series you need above series and ffmpeg >>> patches from [4], this series and its depends is also available at [5]. >>> >>> Full summary of fluster run can be found at [6]. >>> >>> [1] https://github.com/LibreELEC/LibreELEC.tv/blob/master/projects/Rockchip/patches/linux/default/linux-2000-v4l2-wip-rkvdec-hevc.patch >>> [2] https://lore.kernel.org/linux-media/20230101-patch-series-v2-6-2-rc1-v2-0-fa1897efac14@collabora.com/ >>> [3] https://lore.kernel.org/linux-media/20231105165521.3592037-1-jonas@kwiboo.se/ >>> [4] https://github.com/Kwiboo/FFmpeg/commits/v4l2-request-n6.1-dev/ >>> [5] https://github.com/Kwiboo/linux-rockchip/commits/linuxtv-rkvdec-hevc-v1/ >>> [6] https://gist.github.com/Kwiboo/4c0ed87774dede44ce6838451a1ec93d >>> >>> Regards, >>> Jonas >>> >>> Alex Bee (5): >>> media: rkvdec: Add variants support >>> media: rkvdec: Add RK3288 variant >>> media: rkvdec: Disable QoS for HEVC and VP9 on RK3328 >>> ARM: dts: rockchip: Add vdec node for RK3288 >>> arm64: dts: rockchip: Expand reg size of vdec node for RK3399 >>> >>> Jonas Karlman (4): >>> media: rkvdec: Add HEVC backend >>> media: rkvdec: Implement capability filtering >>> media: dt-bindings: rockchip,vdec: Add RK3288 compatible >>> arm64: dts: rockchip: Expand reg size of vdec node for RK3328 >>> >>> .../bindings/media/rockchip,vdec.yaml | 4 +- >>> arch/arm/boot/dts/rockchip/rk3288.dtsi | 17 +- >>> arch/arm64/boot/dts/rockchip/rk3328.dtsi | 2 +- >>> arch/arm64/boot/dts/rockchip/rk3399.dtsi | 6 +- >>> drivers/staging/media/rkvdec/Makefile | 2 +- >>> drivers/staging/media/rkvdec/TODO | 7 - >>> .../staging/media/rkvdec/rkvdec-hevc-data.c | 1848 +++++++++++++++++ >>> drivers/staging/media/rkvdec/rkvdec-hevc.c | 823 ++++++++ >>> drivers/staging/media/rkvdec/rkvdec-regs.h | 3 + >>> drivers/staging/media/rkvdec/rkvdec-vp9.c | 10 + >>> drivers/staging/media/rkvdec/rkvdec.c | 180 +- >>> drivers/staging/media/rkvdec/rkvdec.h | 15 + >>> 12 files changed, 2886 insertions(+), 31 deletions(-) >>> create mode 100644 drivers/staging/media/rkvdec/rkvdec-hevc-data.c >>> create mode 100644 drivers/staging/media/rkvdec/rkvdec-hevc.c >>> >> >