From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4FB88CF6491 for ; Sat, 28 Sep 2024 23:18:35 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:In-Reply-To:From:References:Cc:To:Subject:MIME-Version:Date: Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=OZUy7Qjs5SRXEsC0PvjvkdyR+st/7RiwHG6BbPse5yQ=; b=IiHPzzrXGrgyYe/1fS7+IKQ4qr JhmuZKPnuSCjmK+NHmnAUL2LiNajfjz/P8bivNKkJTR0KnR7yQm424Yq1m2WsMR9DtHZy/pPQnLtI ZFcrjGQMc97IOvnN6pAH6UK/4EfL6KEZPKf1PjCUPyL9wRkkZ25HT4gOOG+WhC2fhgN2FUT+CybJ1 /03ZMzYSx79HFQCiCJ8bS4WPTgVX5cK0kHvMpUQksnAZlpNPUZgpFT504uZKJw8H4cp1n17drWnWh +1H6CZQ/bRHxuTYI4uzzGd5LTk7GsJTNbNxajox1zwUB/31wvR4x63+zwo3kElPxfApjhE95mYDw5 7/MtbXoA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.98 #2 (Red Hat Linux)) id 1sughf-0000000Dnnd-0dwx; Sat, 28 Sep 2024 23:18:19 +0000 Received: from bali.collaboradmins.com ([148.251.105.195]) by bombadil.infradead.org with esmtps (Exim 4.98 #2 (Red Hat Linux)) id 1suggT-0000000Dnhz-1q5G; Sat, 28 Sep 2024 23:17:07 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=collabora.com; s=mail; t=1727565422; bh=h4DKK5Kn1M8Ox46FJ7S1xsMtXvsnUtHHTW79/6gY6PQ=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=OK9Ev3TJu62sEB1hX8w0VTmYS5wD1p/8k5yBJFbo5RVvzjOIUc/+ndcoXopVezomn W91Rtc0fuGjgMc2PRPKtobg5wtdwyUjcQiqLPh3HUA2/oaUPL2R6aSPsKoqr+jCx3q XNRlyL0o6Mg+2HAT38PjbTV/WHMEUVnjjxPpdNv5hjTQFvJthwvXiZA2IwG15sbhTo L/2AnNKt+ZFacF4FlPOPnuYfmO31VmwN7b4S9twSwfL/imZz5C2tIJnOC1Yvz9Rju0 Deoe6P7m+nOXG2tj1pfWOvm09rtkaNOVrSbXmvk/s95v1K0q735K7kIhkGAg3IVmGO FPaCWwOb8Jguw== Received: from [192.168.1.207] (100.121.120.78.rev.sfr.net [78.120.121.100]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) (Authenticated sender: cristicc) by bali.collaboradmins.com (Postfix) with ESMTPSA id D4DA117E0DE9; Sun, 29 Sep 2024 01:17:01 +0200 (CEST) Message-ID: <60bd659a-08d3-4e87-abff-a127101dbc18@collabora.com> Date: Sun, 29 Sep 2024 02:17:01 +0300 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v7 3/3] drm/rockchip: Add basic RK3588 HDMI output support To: Maxime Ripard Cc: Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Maarten Lankhorst , Thomas Zimmermann , David Airlie , Sandy Huang , =?UTF-8?Q?Heiko_St=C3=BCbner?= , Andy Yan , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Mark Yao , Sascha Hauer , Simona Vetter , Simona Vetter , dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-rockchip@lists.infradead.org, devicetree@vger.kernel.org, kernel@collabora.com, Alexandre ARNOUD , Luis de Arquer , Algea Cao References: <20240914-b4-rk3588-bridge-upstream-v7-0-2b1348137123@collabora.com> <20240914-b4-rk3588-bridge-upstream-v7-3-2b1348137123@collabora.com> <20240924-ubiquitous-festive-rabbit-55cdb0@houat> Content-Language: en-US From: Cristian Ciocaltea In-Reply-To: <20240924-ubiquitous-festive-rabbit-55cdb0@houat> Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 7bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240928_161705_836558_648E1B32 X-CRM114-Status: GOOD ( 21.16 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Maxime, On 9/24/24 5:02 PM, Maxime Ripard wrote: > Hi, > > On Sat, Sep 14, 2024 at 09:56:53PM GMT, Cristian Ciocaltea wrote: >> The RK3588 SoC family integrates the newer Synopsys DesignWare HDMI 2.1 >> Quad-Pixel (QP) TX controller IP and a HDMI/eDP TX Combo PHY based on a >> Samsung IP block. >> >> Add just the basic support for now, i.e. RGB output up to 4K@60Hz, >> without audio, CEC or any of the HDMI 2.1 specific features. >> >> Co-developed-by: Algea Cao >> Signed-off-by: Algea Cao >> Tested-by: Heiko Stuebner >> Signed-off-by: Cristian Ciocaltea >> --- >> drivers/gpu/drm/rockchip/Kconfig | 9 + >> drivers/gpu/drm/rockchip/Makefile | 1 + >> drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c | 436 +++++++++++++++++++++++++ >> drivers/gpu/drm/rockchip/rockchip_drm_drv.c | 2 + >> drivers/gpu/drm/rockchip/rockchip_drm_drv.h | 1 + >> 5 files changed, 449 insertions(+) >> >> diff --git a/drivers/gpu/drm/rockchip/Kconfig b/drivers/gpu/drm/rockchip/Kconfig >> index 23c49e91f1cc..448fadd4ba15 100644 >> --- a/drivers/gpu/drm/rockchip/Kconfig >> +++ b/drivers/gpu/drm/rockchip/Kconfig >> @@ -8,6 +8,7 @@ config DRM_ROCKCHIP >> select VIDEOMODE_HELPERS >> select DRM_ANALOGIX_DP if ROCKCHIP_ANALOGIX_DP >> select DRM_DW_HDMI if ROCKCHIP_DW_HDMI >> + select DRM_DW_HDMI_QP if ROCKCHIP_DW_HDMI_QP >> select DRM_DW_MIPI_DSI if ROCKCHIP_DW_MIPI_DSI >> select GENERIC_PHY if ROCKCHIP_DW_MIPI_DSI >> select GENERIC_PHY_MIPI_DPHY if ROCKCHIP_DW_MIPI_DSI >> @@ -63,6 +64,14 @@ config ROCKCHIP_DW_HDMI >> enable HDMI on RK3288 or RK3399 based SoC, you should select >> this option. >> >> +config ROCKCHIP_DW_HDMI_QP >> + bool "Rockchip specific extensions for Synopsys DW HDMI QP" >> + select DRM_BRIDGE_CONNECTOR >> + help >> + This selects support for Rockchip SoC specific extensions >> + for the Synopsys DesignWare HDMI QP driver. If you want to >> + enable HDMI on RK3588 based SoC, you should select this option. >> + >> config ROCKCHIP_DW_MIPI_DSI >> bool "Rockchip specific extensions for Synopsys DW MIPI DSI" >> select GENERIC_PHY_MIPI_DPHY >> diff --git a/drivers/gpu/drm/rockchip/Makefile b/drivers/gpu/drm/rockchip/Makefile >> index 3ff7b21c0414..3eab662a5a1d 100644 >> --- a/drivers/gpu/drm/rockchip/Makefile >> +++ b/drivers/gpu/drm/rockchip/Makefile >> @@ -11,6 +11,7 @@ rockchipdrm-$(CONFIG_ROCKCHIP_VOP) += rockchip_drm_vop.o rockchip_vop_reg.o >> rockchipdrm-$(CONFIG_ROCKCHIP_ANALOGIX_DP) += analogix_dp-rockchip.o >> rockchipdrm-$(CONFIG_ROCKCHIP_CDN_DP) += cdn-dp-core.o cdn-dp-reg.o >> rockchipdrm-$(CONFIG_ROCKCHIP_DW_HDMI) += dw_hdmi-rockchip.o >> +rockchipdrm-$(CONFIG_ROCKCHIP_DW_HDMI_QP) += dw_hdmi_qp-rockchip.o >> rockchipdrm-$(CONFIG_ROCKCHIP_DW_MIPI_DSI) += dw-mipi-dsi-rockchip.o >> rockchipdrm-$(CONFIG_ROCKCHIP_INNO_HDMI) += inno_hdmi.o >> rockchipdrm-$(CONFIG_ROCKCHIP_LVDS) += rockchip_lvds.o >> diff --git a/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c >> new file mode 100644 >> index 000000000000..19d407c926bd >> --- /dev/null >> +++ b/drivers/gpu/drm/rockchip/dw_hdmi_qp-rockchip.c >> @@ -0,0 +1,436 @@ >> +// SPDX-License-Identifier: GPL-2.0-or-later >> +/* >> + * Copyright (c) 2021-2022 Rockchip Electronics Co., Ltd. >> + * Copyright (c) 2024 Collabora Ltd. >> + * >> + * Author: Algea Cao >> + * Author: Cristian Ciocaltea >> + */ >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#include >> +#include >> +#include >> +#include >> +#include >> + >> +#include "rockchip_drm_drv.h" >> + >> +#define RK3588_GRF_SOC_CON2 0x0308 >> +#define RK3588_HDMI0_HPD_INT_MSK BIT(13) >> +#define RK3588_HDMI0_HPD_INT_CLR BIT(12) >> +#define RK3588_GRF_SOC_CON7 0x031c >> +#define RK3588_SET_HPD_PATH_MASK GENMASK(13, 12) >> +#define RK3588_GRF_SOC_STATUS1 0x0384 >> +#define RK3588_HDMI0_LEVEL_INT BIT(16) >> +#define RK3588_GRF_VO1_CON3 0x000c >> +#define RK3588_SCLIN_MASK BIT(9) >> +#define RK3588_SDAIN_MASK BIT(10) >> +#define RK3588_MODE_MASK BIT(11) >> +#define RK3588_I2S_SEL_MASK BIT(13) >> +#define RK3588_GRF_VO1_CON9 0x0024 >> +#define RK3588_HDMI0_GRANT_SEL BIT(10) >> + >> +#define HIWORD_UPDATE(val, mask) ((val) | (mask) << 16) >> + >> +struct rockchip_hdmi_qp { >> + struct device *dev; >> + struct regmap *regmap; >> + struct regmap *vo_regmap; >> + struct rockchip_encoder encoder; >> + struct clk *ref_clk; >> + struct dw_hdmi_qp *hdmi; >> + struct phy *phy; >> + struct gpio_desc *enable_gpio; >> + struct delayed_work hpd_work; >> +}; >> + >> +static struct rockchip_hdmi_qp *to_rockchip_hdmi_qp(struct drm_encoder *encoder) >> +{ >> + struct rockchip_encoder *rkencoder = to_rockchip_encoder(encoder); >> + >> + return container_of(rkencoder, struct rockchip_hdmi_qp, encoder); >> +} >> + >> +static void >> +dw_hdmi_qp_rockchip_encoder_mode_set(struct drm_encoder *encoder, >> + struct drm_display_mode *mode, >> + struct drm_display_mode *adj_mode) >> +{ >> + struct rockchip_hdmi_qp *hdmi = to_rockchip_hdmi_qp(encoder); >> + >> + clk_set_rate(hdmi->ref_clk, adj_mode->clock * 1000); >> +} > > I'm not sure you can do that. mode_set can be called multiple times > while the connector is enabled. It would be better to drop the mode_set > implementation, and just put it in the encoder enable. I dropped this in v8 [1], as the ref_clk rate adjustment has been already handled via the encoder enable. Thanks for the review, Cristian [1] https://lore.kernel.org/all/20240929-b4-rk3588-bridge-upstream-v8-0-83538c2cc325@collabora.com/