Received: by 2002:a05:7412:419a:b0:f3:1519:9f41 with SMTP id i26csp3734244rdh; Tue, 28 Nov 2023 02:19:06 -0800 (PST) X-Google-Smtp-Source: AGHT+IEzGEONf/85CN2qT69iN5vvdtv1WjaRluSREvXy1VViCQBHzeojI49l+p5Pq5vsAQEZRA/1 X-Received: by 2002:a17:902:e88f:b0:1cf:6832:46c with SMTP id w15-20020a170902e88f00b001cf6832046cmr19183107plg.6.1701166746239; Tue, 28 Nov 2023 02:19:06 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1701166746; cv=none; d=google.com; s=arc-20160816; b=Hr5y0uooqywcCPsAHgn/ywL0B6vYZSNqQVMz9GM5e5jO1EGnbnXRJE2s6Lp4O9RpCE ZppRQNKgC7NbxcSBD+SEZaxDe0UPr45BDpGGgyTu2y9215WvcGqDBPPIWLeJAbuPOwpx lkWGxfEChHah6l8UdUL3ttT+QvGn0PFGrjyUX8pBO/6AShEX0EXZQtvHeYy7B5DWDlma +T2+YLeFhfsR/tiW8ZOp6Bvowrm27tFDhKsMWm9sfTicVdcIxyv0Eq4beU4iBXc9HuwI XfXShpythT082p3crTfyAxxHncCVfd05kl2f6psNPlf0QQGjpxorkyEXABcYtmjHbEuq Zacg== 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:dkim-signature; bh=7JTD2+HcWsQ2R6pCShDzTLWMGQXPh84DvuG0l3o9KdE=; fh=tTidFxz/GO4OS0sUh/KbESxt/kATu14sq43EhDEP0js=; b=PlGPpSIhqhdkentltp7RHkXishjpfTl/E6TyAH2DZS2kSIPxC0Fn9NexXe+XDGB6FJ 1WTfnlNMX/AoBTHrtYriO7LT/vRsxEIvJkI2f1gnRDGoA9kBCIoAiQr7ppP5Me3P8Y+N 7DrQHzyKLTHEY5m4Eu9iFMVdIvT/6DecANUh98BScrfLuI1yh99ixYgnQv6g8JUuteRc kT5JBJO1xKk0OT2EnfhMXavTh/Tl5V4J1EW3zijRHPITYrwphp5oHyqRLs+Yj1EzWwxs ZqimHgNmjTw0hJrLKXfllOGr8Sij2JLe97DyNfr+uit+QrBaAYs/Wq86Peir42ruax9m GVbQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@rock-chips.com header.s=default header.b=Kv4h4eza; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=rock-chips.com Return-Path: Received: from agentk.vger.email (agentk.vger.email. [2620:137:e000::3:2]) by mx.google.com with ESMTPS id s6-20020a170902ea0600b001cfe9c57396si2310091plg.289.2023.11.28.02.19.05 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 28 Nov 2023 02:19:06 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) client-ip=2620:137:e000::3:2; Authentication-Results: mx.google.com; dkim=pass header.i=@rock-chips.com header.s=default header.b=Kv4h4eza; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::3:2 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=rock-chips.com Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by agentk.vger.email (Postfix) with ESMTP id D67AF80947FA; Tue, 28 Nov 2023 02:19:02 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at agentk.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231656AbjK1KSn (ORCPT + 99 others); Tue, 28 Nov 2023 05:18:43 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S229714AbjK1KSm (ORCPT ); Tue, 28 Nov 2023 05:18:42 -0500 X-Greylist: delayed 389 seconds by postgrey-1.37 at lindbergh.monkeyblade.net; Tue, 28 Nov 2023 02:18:47 PST Received: from mail-m12829.netease.com (mail-m12829.netease.com [103.209.128.29]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 27403E1; Tue, 28 Nov 2023 02:18:46 -0800 (PST) DKIM-Signature: a=rsa-sha256; b=Kv4h4ezaY2IFPxMQ+PRFA0A72grSJmM3w9FxR0roZprWLmUgFKpm/R54b+N4A7P3UXL1BDBEAIoumNnhy3BSfMQHcC5IlOVVfibR78U7QcFV4n+X+t2l1sb+p8Pu6xfoyaahKOdYogpIhPfkJASrjlzP8R6qs3H4ma/pQsuMFT0=; s=default; c=relaxed/relaxed; d=rock-chips.com; v=1; bh=7JTD2+HcWsQ2R6pCShDzTLWMGQXPh84DvuG0l3o9KdE=; h=date:mime-version:subject:message-id:from; Received: from [172.16.12.141] (unknown [58.22.7.114]) by mail-m12762.qiye.163.com (Hmail) with ESMTPA id E7F885C0306; Tue, 28 Nov 2023 18:11:46 +0800 (CST) Message-ID: <16644455-d7a1-445e-8b48-ae22577a2627@rock-chips.com> Date: Tue, 28 Nov 2023 18:11:46 +0800 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 10/12] drm/rockchip: vop2: Add support for rk3588 Content-Language: en-US To: =?UTF-8?Q?Heiko_St=C3=BCbner?= , Andy Yan Cc: hjc@rock-chips.com, dri-devel@lists.freedesktop.org, linux-rockchip@lists.infradead.org, linux-kernel@vger.kernel.org, krzysztof.kozlowski+dt@linaro.org, robh+dt@kernel.org, devicetree@vger.kernel.org, sebastian.reichel@collabora.com, kever.yang@rock-chips.com, chris.obbard@collabora.com, s.hauer@pengutronix.de References: <20231122125316.3454268-1-andyshrk@163.com> <4788319.uZKlY2gecq@diego> <4339687.HovnAMPojK@diego> From: Andy Yan In-Reply-To: <4339687.HovnAMPojK@diego> Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 8bit X-HM-Spam-Status: e1kfGhgUHx5ZQUpXWQgPGg8OCBgUHx5ZQUlOS1dZFg8aDwILHllBWSg2Ly tZV1koWUFDSUNOT01LS0k3V1ktWUFJV1kPCRoVCBIfWUFZGhgdTFYaSkJMT0seGkNPSh9VEwETFh oSFyQUDg9ZV1kYEgtZQVlOQ1VJSVVMVUpKT1lXWRYaDxIVHRRZQVlPS0hVSk1PSU5JVUpLS1VKQl kG X-HM-Tid: 0a8c1569d7d1b229kuuue7f885c0306 X-HM-MType: 1 X-HM-Sender-Digest: e1kMHhlZQR0aFwgeV1kSHx4VD1lBWUc6M006Aww5Czw8Gh4WCCMOMioQ HwpPCipVSlVKTEtKSk1NSEtMQktJVTMWGhIXVRoVHwJVAhoVOwkUGBBWGBMSCwhVGBQWRVlXWRIL WUFZTkNVSUlVTFVKSk9ZV1kIAVlBQ0hKTDcG X-Spam-Status: No, score=0.6 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS,MAILING_LIST_MULTI, RCVD_IN_SORBS_WEB,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=no autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on agentk.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 (agentk.vger.email [0.0.0.0]); Tue, 28 Nov 2023 02:19:03 -0800 (PST) Hi Heiko: On 11/28/23 17:44, Heiko Stübner wrote: > Hi Andy, > > Am Dienstag, 28. November 2023, 10:32:55 CET schrieb Andy Yan: >> On 11/27/23 23:29, Heiko Stübner wrote: >>> Am Mittwoch, 22. November 2023, 13:55:44 CET schrieb Andy Yan: >>>> From: Andy Yan >>>> >>>> VOP2 on rk3588: >>>> >>>> Four video ports: >>>> VP0 Max 4096x2160 >>>> VP1 Max 4096x2160 >>>> VP2 Max 4096x2160 >>>> VP3 Max 2048x1080 >>>> >>>> 4 4K Cluster windows with AFBC/line RGB and AFBC-only YUV support >>>> 4 4K Esmart windows with line RGB/YUV support >>>> >>>> Signed-off-by: Andy Yan >>>> >>>> --- >>>> >>>> Changes in v2: >>>> - add rk3588_ prefix for functions which are rk3588 only >>>> - make some calculation as fixed value and keep calculation formula as >>>> comment >>>> - check return value for some cru calculation functions. >>>> - check return value for syscon_regmap_lookup_by_phandle >>>> - add NV20/NV30 for esmart plane >>>> >>>> drivers/gpu/drm/rockchip/rockchip_drm_vop2.c | 381 ++++++++++++++++++- >>>> drivers/gpu/drm/rockchip/rockchip_drm_vop2.h | 66 ++++ >>>> drivers/gpu/drm/rockchip/rockchip_vop2_reg.c | 221 +++++++++++ >>>> 3 files changed, 660 insertions(+), 8 deletions(-) >>>> >>>> diff --git a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> index 4bcc405bcf11..9eecbe1f71f9 100644 >>>> --- a/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> +++ b/drivers/gpu/drm/rockchip/rockchip_drm_vop2.c >>>> @@ -271,9 +282,12 @@ static bool vop2_cluster_window(const struct vop2_win *win) >>>> static void vop2_cfg_done(struct vop2_video_port *vp) >>>> { >>>> struct vop2 *vop2 = vp->vop2; >>>> + u32 val; >>>> + >>>> + val = BIT(vp->id) | (BIT(vp->id) << 16) | >>>> + RK3568_REG_CFG_DONE__GLB_CFG_DONE_EN; >>>> >>>> - regmap_set_bits(vop2->map, RK3568_REG_CFG_DONE, >>>> - BIT(vp->id) | RK3568_REG_CFG_DONE__GLB_CFG_DONE_EN); >>>> + regmap_set_bits(vop2->map, RK3568_REG_CFG_DONE, val); >>> I don't fully understand that code: >>> (1) the write mask is also present on the rk3568, so should this change >>> be a separate patch with a fixes tag? >> The write mask of VP config done on rk356x is missing, that means >> you can write the corresponding mask bit, but it has no effect. >> >> I once considered making it a separate patch, I can split it as a separate patch if >> you like. > I think I'd like it to be a separate patch please. > > >>> (2) RK3568_REG_CFG_DONE__GLB_CFG_DONE_EN does not contain the part for >>> the write-mask >>> >>> #define RK3568_REG_CFG_DONE__GLB_CFG_DONE_EN BIT(15) >>> >>> why is this working then? >> >> Actually this bit has no write-mask bit. ???? > when doing that separate patch mentioned above, could you also add a > comment to the code stating that RK3568_REG_CFG_DONE__GLB_CFG_DONE_EN > doesn't have a write mask bit please? > > Because the TRM is not clear and ideally I'd not forget this fact for > the future :-) . > Okay, will do both above. >>>> } >>>> >>>> static void vop2_win_disable(struct vop2_win *win) >>> [...] >>> >>>> @@ -1298,7 +1346,11 @@ static void vop2_plane_atomic_update(struct drm_plane *plane, >>>> vop2_win_write(win, VOP2_WIN_AFBC_ENABLE, 1); >>>> vop2_win_write(win, VOP2_WIN_AFBC_FORMAT, afbc_format); >>>> vop2_win_write(win, VOP2_WIN_AFBC_UV_SWAP, uv_swap); >>>> - vop2_win_write(win, VOP2_WIN_AFBC_AUTO_GATING_EN, 0); >>>> + if (vop2->data->soc_id == 3566 || vop2->data->soc_id == 3568) >>>> + vop2_win_write(win, VOP2_WIN_AFBC_AUTO_GATING_EN, 0); >>>> + else >>>> + vop2_win_write(win, VOP2_WIN_AFBC_AUTO_GATING_EN, 1); >>>> + >>> I think this at least warrants a comment, what is happening here. Also, >>> can you already see how future vop2-users are behaving - aka are all new >>> socs in the "else" part of the conditional, or would a switch-case better >>> represent future socs? >> >> On rk356x, this bit is auto gating enable, but this function is not work well so >> we need to disable this function. >> On rk3588, and the following new soc(rk3528/rk3576), this bit is gating disable, >> we should write 1 to disable gating when enable a cluster window. >> >> >> Maybe i add some comments in next version ? > Yep that comment would be helpful. And with your explanation the code > itself can stay as it is :-) will do. > Thanks > Heiko > > >>>> vop2_win_write(win, VOP2_WIN_AFBC_BLOCK_SPLIT_EN, 0); >>>> transform_offset = vop2_afbc_transform_offset(pstate, half_block_en); >>>> vop2_win_write(win, VOP2_WIN_AFBC_HDR_PTR, yrgb_mst); >>>> @@ -1627,9 +1937,17 @@ static void vop2_crtc_atomic_enable(struct drm_crtc *crtc, >>>> drm_for_each_encoder_mask(encoder, crtc->dev, crtc_state->encoder_mask) { >>>> struct rockchip_encoder *rkencoder = to_rockchip_encoder(encoder); >>>> >>>> - rk3568_set_intf_mux(vp, rkencoder->crtc_endpoint_id, polflags); >>>> + /* >>>> + * for drive a high resolution(4KP120, 8K), vop on rk3588/rk3576 need >>>> + * process multi(1/2/4/8) pixels per cycle, so the dclk feed by the >>>> + * system cru may be the 1/2 or 1/4 of mode->clock. >>>> + */ >>>> + clock = vop2_set_intf_mux(vp, rkencoder->crtc_endpoint_id, polflags); >>>> } >>>> >>>> + if (!clock) >>>> + return; >>>> + >>> hmm, shouldn't the check for the validity of a mode happen before >>> atomic_enable is run? So this shouldn't error out in the middle of the >>> function? Actually it is a check like the check of clk_prepares_enable at the beginning, maybe one place can do this is at crtc_atomic_check ? But we really don't need to do the calculate and enable the related interface at every frame commit. with a grep i can find many platforms do this kind of check in crtc_atomic_enable(ade/meson/vc4/omap/malidp/tidss_crtc_atomic_enable, etc...) so maybe just let it as it is now? >>> >>> >>>> if (vcstate->output_mode == ROCKCHIP_OUT_MODE_AAAA && >>>> !(vp_data->feature & VOP_FEATURE_OUTPUT_10BIT)) >>>> out_mode = ROCKCHIP_OUT_MODE_P888; >>> Thanks >>> Heiko >>> >>> >>> >>> _______________________________________________ >>> Linux-rockchip mailing list >>> Linux-rockchip@lists.infradead.org >>> http://lists.infradead.org/mailman/listinfo/linux-rockchip > > >