From patchwork Tue Jul 30 12:50:11 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747358 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 5A4C8C3DA7E for ; Tue, 30 Jul 2024 12:50:41 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id AB32C10E50D; Tue, 30 Jul 2024 12:50:39 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="E7ZrgN84"; dkim-atps=neutral Received: from mail-wm1-f42.google.com (mail-wm1-f42.google.com [209.85.128.42]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2035A10E22B for ; Tue, 30 Jul 2024 12:50:37 +0000 (UTC) Received: by mail-wm1-f42.google.com with SMTP id 5b1f17b1804b1-42803bbf842so34250845e9.1 for ; Tue, 30 Jul 2024 05:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343835; x=1722948635; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=+llf/AzXlKp78omF5xhKmy0SCTLK8xhdI8HSdAi9g1k=; b=E7ZrgN8437iZxGCYeBZBURBAEf8XZmzcyRHBN7uicBbz5wjx0LIE3ouPx2R852em+d wvYGJ+ln0n7FhHeQEwMhnWQkx7Tf0iorW1F31ZpUxbA3aFyl1DrPaGuVuGCoo765nr7a f801+LbjawNT9Y1/lE3rw9MwSBCMdoW11dgKSXGcY3+MrS/MZpGqyROorIILbZlfJiC5 z6XeOYvzNhNUrxRkPhpbxz/zlrKX6sZFazv2nvqw6ePUWbicBrkbWJXe9URTt3/o8B70 dlsC6/kIXencbd9mqco37Gt9h6vSiJ72J7Wh6P+CxpKBSn73hD4KdVz0gHqwK4aADvfc jehA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343835; x=1722948635; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=+llf/AzXlKp78omF5xhKmy0SCTLK8xhdI8HSdAi9g1k=; b=i8ZDpNa8UWyWwpsddIFIu02AdLpP8qlYECuXmc51bwuvVkvOKN7lz4QrsSPZsvLNVu VO+B7mdv1VOLi4dBxnbTpmoXTy0cTRl0cJfHPFYFE2UESjF6S5ErpOXhDaEIyof4z7gP V+RrKVyVZL2fGIPmctsqOk0gHy9ealNlX/7rVNBAuQJc+wRU7dxHPZFsrJ2g1jFA0f0y mRsxdxovl8Lm+iqT6zfK+qr0KEUfvgVNnDbDwjEHb556LX0qU/1Eu0f1KIJ4blDRK5gf w7i84gOBZ1Q1+lQYIkA/WH7YfUGIS8qkhSQmYbCyYK334HcEhfPeQE99POj5L9sRyNKQ xlEg== X-Forwarded-Encrypted: i=1; AJvYcCUToD8Md6aZLMhZ7nkIyv9lzQqhfZIGi6+Hde8cTytSuCTHnD0SD60sggtHZjNN1Ck7yPCsMUT9ERRY/4MPxVoR52GnAajxGYXvI7zDpEXR X-Gm-Message-State: AOJu0YyYeKgvQfdlV97AbjsEJ5Alj3Dc+MzLCSknx3PWYBK/y30A8p6h meWElPHeQXGoYuYDKv2Z0qJu6GlZNSPiFEmGcLXxQYSrQ1Bd8z9LvcyEdEKe8kY= X-Google-Smtp-Source: AGHT+IHNrX2bheZchsP7m4fuUtkC/sP1H3A6/6koS/47y+kuPZKBI5FQcJ6s4Qb6HTNFzzD3vSexkg== X-Received: by 2002:a05:600c:1c8f:b0:426:5269:982c with SMTP id 5b1f17b1804b1-42811dd3c2bmr85628895e9.28.1722343835329; Tue, 30 Jul 2024 05:50:35 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:34 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 1/9] drm/meson: hdmi: move encoder settings out of phy driver Date: Tue, 30 Jul 2024 14:50:11 +0200 Message-ID: <20240730125023.710237-2-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This relocates register pokes of the HDMI VPU encoder out of the HDMI phy driver. As far as HDMI is concerned, the sequence in which the setup is done remains mostly the same. This was tested with modetest, cycling through the following resolutions: #0 3840x2160 60.00 #1 3840x2160 59.94 #2 3840x2160 50.00 #3 3840x2160 30.00 #4 3840x2160 29.97 #5 3840x2160 25.00 #6 3840x2160 24.00 #7 3840x2160 23.98 #8 1920x1080 60.00 #9 1920x1080 60.00 #10 1920x1080 59.94 #11 1920x1080i 30.00 #12 1920x1080i 29.97 #13 1920x1080 50.00 #14 1920x1080i 25.00 #15 1920x1080 30.00 #16 1920x1080 29.97 #17 1920x1080 25.00 #18 1920x1080 24.00 #19 1920x1080 23.98 #20 1280x1024 60.02 #21 1152x864 59.97 #22 1280x720 60.00 #23 1280x720 59.94 #24 1280x720 50.00 #25 1024x768 60.00 #26 800x600 60.32 #27 720x576 50.00 #28 720x480 59.94 No regression to report. This is part of an effort to clean up Amlogic HDMI related drivers which should eventually allow to stop using the component API and HHI syscon. Signed-off-by: Jerome Brunet Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 38 ---------------------- drivers/gpu/drm/meson/meson_encoder_hdmi.c | 16 +++++++++ 2 files changed, 16 insertions(+), 38 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 5565f7777529..bcf4f83582f2 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -115,12 +115,6 @@ static DEFINE_SPINLOCK(reg_lock); -enum meson_venc_source { - MESON_VENC_SOURCE_NONE = 0, - MESON_VENC_SOURCE_ENCI = 1, - MESON_VENC_SOURCE_ENCP = 2, -}; - struct meson_dw_hdmi; struct meson_dw_hdmi_data { @@ -376,8 +370,6 @@ static int dw_hdmi_phy_init(struct dw_hdmi *hdmi, void *data, struct meson_dw_hdmi *dw_hdmi = (struct meson_dw_hdmi *)data; bool is_hdmi2_sink = display->hdmi.scdc.supported; struct meson_drm *priv = dw_hdmi->priv; - unsigned int wr_clk = - readl_relaxed(priv->io_base + _REG(VPU_HDMI_SETTING)); bool mode_is_420 = false; DRM_DEBUG_DRIVER("\"%s\" div%d\n", mode->name, @@ -421,36 +413,6 @@ static int dw_hdmi_phy_init(struct dw_hdmi *hdmi, void *data, meson_dw_hdmi_phy_reset(dw_hdmi); meson_dw_hdmi_phy_reset(dw_hdmi); - /* Temporary Disable VENC video stream */ - if (priv->venc.hdmi_use_enci) - writel_relaxed(0, priv->io_base + _REG(ENCI_VIDEO_EN)); - else - writel_relaxed(0, priv->io_base + _REG(ENCP_VIDEO_EN)); - - /* Temporary Disable HDMI video stream to HDMI-TX */ - writel_bits_relaxed(0x3, 0, - priv->io_base + _REG(VPU_HDMI_SETTING)); - writel_bits_relaxed(0xf << 8, 0, - priv->io_base + _REG(VPU_HDMI_SETTING)); - - /* Re-Enable VENC video stream */ - if (priv->venc.hdmi_use_enci) - writel_relaxed(1, priv->io_base + _REG(ENCI_VIDEO_EN)); - else - writel_relaxed(1, priv->io_base + _REG(ENCP_VIDEO_EN)); - - /* Push back HDMI clock settings */ - writel_bits_relaxed(0xf << 8, wr_clk & (0xf << 8), - priv->io_base + _REG(VPU_HDMI_SETTING)); - - /* Enable and Select HDMI video source for HDMI-TX */ - if (priv->venc.hdmi_use_enci) - writel_bits_relaxed(0x3, MESON_VENC_SOURCE_ENCI, - priv->io_base + _REG(VPU_HDMI_SETTING)); - else - writel_bits_relaxed(0x3, MESON_VENC_SOURCE_ENCP, - priv->io_base + _REG(VPU_HDMI_SETTING)); - return 0; } diff --git a/drivers/gpu/drm/meson/meson_encoder_hdmi.c b/drivers/gpu/drm/meson/meson_encoder_hdmi.c index 0593a1cde906..1c3e3e5526eb 100644 --- a/drivers/gpu/drm/meson/meson_encoder_hdmi.c +++ b/drivers/gpu/drm/meson/meson_encoder_hdmi.c @@ -45,6 +45,12 @@ struct meson_encoder_hdmi { struct cec_notifier *cec_notifier; }; +enum meson_venc_source { + MESON_VENC_SOURCE_NONE = 0, + MESON_VENC_SOURCE_ENCI = 1, + MESON_VENC_SOURCE_ENCP = 2, +}; + #define bridge_to_meson_encoder_hdmi(x) \ container_of(x, struct meson_encoder_hdmi, bridge) @@ -247,6 +253,14 @@ static void meson_encoder_hdmi_atomic_enable(struct drm_bridge *bridge, writel_relaxed(1, priv->io_base + _REG(ENCI_VIDEO_EN)); else writel_relaxed(1, priv->io_base + _REG(ENCP_VIDEO_EN)); + + /* Enable and Select HDMI video source for HDMI-TX */ + if (priv->venc.hdmi_use_enci) + writel_bits_relaxed(0x3, MESON_VENC_SOURCE_ENCI, + priv->io_base + _REG(VPU_HDMI_SETTING)); + else + writel_bits_relaxed(0x3, MESON_VENC_SOURCE_ENCP, + priv->io_base + _REG(VPU_HDMI_SETTING)); } static void meson_encoder_hdmi_atomic_disable(struct drm_bridge *bridge, @@ -257,6 +271,8 @@ static void meson_encoder_hdmi_atomic_disable(struct drm_bridge *bridge, writel_bits_relaxed(0x3, 0, priv->io_base + _REG(VPU_HDMI_SETTING)); + writel_bits_relaxed(0xf << 8, 0, + priv->io_base + _REG(VPU_HDMI_SETTING)); writel_relaxed(0, priv->io_base + _REG(ENCI_VIDEO_EN)); writel_relaxed(0, priv->io_base + _REG(ENCP_VIDEO_EN)); From patchwork Tue Jul 30 12:50:12 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747359 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 4EB32C3DA49 for ; Tue, 30 Jul 2024 12:50:43 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 28E5310E239; Tue, 30 Jul 2024 12:50:40 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="2UQiYWoS"; dkim-atps=neutral Received: from mail-wm1-f47.google.com (mail-wm1-f47.google.com [209.85.128.47]) by gabe.freedesktop.org (Postfix) with ESMTPS id E876210E22B for ; Tue, 30 Jul 2024 12:50:37 +0000 (UTC) Received: by mail-wm1-f47.google.com with SMTP id 5b1f17b1804b1-4280bca3960so27056315e9.3 for ; Tue, 30 Jul 2024 05:50:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343836; x=1722948636; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=KCAbjMiMPWRMzpCKATzPFm7RQ4gOtOLIXraRazPtH00=; b=2UQiYWoSgtZrZN/1rTxGYhnkvFtAbRx6EE1FnPY0dqaJnV1Z9vvdWivjtGkXFxK9qk wWQf6iUnVjTxPjDGJNb6t0k5hJ1oess21F6HNmZxB6vg0s3ylO3dtqA2FKKB7Pt9IbSJ pYkbzwNRwu8hBihyz8UjTTr2b1sX5RcrorMTzlPF9EkHrZBd2fOhnw7VZVUU42f3xe/1 fBGmEWv8Z5bZamZG1X3uBeG0V0aI5Fe8rbCzFmHP6mj5LtJ6gK/f279I5o1yD1uUkGhs BqTK0avcJ1zv6KFzTb2JWlD7MB+Ch+ftrWPG2t5/uKM9KCGF6JWwQmR+R4TGLpj5J21K Wyrg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343836; x=1722948636; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=KCAbjMiMPWRMzpCKATzPFm7RQ4gOtOLIXraRazPtH00=; b=Kj7LV7D8Ady9+it7E+cOOpBf3vbnMXGGSrbrCnEPtUFdyLXTTSsPqqzKIQYshaXqtq bbo+qryrEj/wwyu7mKY+WoSXNvbIQVWHB2WtQjpp2MW2JtXuP0m5hY5eqW/QSntTZzUp 5IYsTqJeIyZjvTlpyHSua9U9wP1sfFvk7hNShNWBlqf0sbKgeI9TwaxTDOkIZkx92wEw 0LYBTbtQ570HHhhpKW6PBSiR4bne4HehJffcS+w28pTTkIjolm0oAk7f3/rYji0Waqzo 2Mtg+nOZfCAxiug559pC7C+YXhOc7YlSAXglvRHdU/9WPkYvbwsBTW07xpRqPvR5zD7P 1DUw== X-Forwarded-Encrypted: i=1; AJvYcCUSGPgpeVtJv/3qH0xtOgdypp2xgffciPqhQATRQSXN/cntPyYsH87GptVTsQFHNIgSwRRxrwfzD+KUCQcAlUtSRMSLhIkQRIEzotm3cuUz X-Gm-Message-State: AOJu0YypKY4j3h38svFRAbKkJbl+zS+tFHX/RHNaChsu/+AyrejKL8Jn DltOSX2nqNMqG3DyEhicoraoG47E3GzENeI3x9IneM7rjoKDnGMSL63R+1Dxonw= X-Google-Smtp-Source: AGHT+IFrBziZT/58Vb7K/FmVwcAvFVRM7tFnePkyMs/HqsXtRR+PlZ++CrVSk74QOczD1bWAn9/67Q== X-Received: by 2002:a05:6000:11c7:b0:367:8a9e:6bed with SMTP id ffacd0b85a97d-36b5d0baf47mr7921610f8f.61.1722343836141; Tue, 30 Jul 2024 05:50:36 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:35 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 2/9] drm/meson: vclk: drop hdmi system clock setup Date: Tue, 30 Jul 2024 14:50:12 +0200 Message-ID: <20240730125023.710237-3-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Poking the HHI syscon is a way to setup clocks behind CCF's back. Also, 2 drm code paths, the encoder and the hdmi-phy, are racing to do the same setup of the HDMI system clock. This clock is used is used by the HDMI phy and should not be set by the encoder, so drop those HHI pokes from vclk. Signed-off-by: Jerome Brunet Reviewed-by: Martin Blumenstingl Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_vclk.c | 8 -------- 1 file changed, 8 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_vclk.c b/drivers/gpu/drm/meson/meson_vclk.c index 2a942dc6a6dc..bf5cc5d92346 100644 --- a/drivers/gpu/drm/meson/meson_vclk.c +++ b/drivers/gpu/drm/meson/meson_vclk.c @@ -813,14 +813,6 @@ static void meson_vclk_set(struct meson_drm *priv, unsigned int pll_base_freq, { unsigned int m = 0, frac = 0; - /* Set HDMI-TX sys clock */ - regmap_update_bits(priv->hhi, HHI_HDMI_CLK_CNTL, - CTS_HDMI_SYS_SEL_MASK, 0); - regmap_update_bits(priv->hhi, HHI_HDMI_CLK_CNTL, - CTS_HDMI_SYS_DIV_MASK, 0); - regmap_update_bits(priv->hhi, HHI_HDMI_CLK_CNTL, - CTS_HDMI_SYS_EN, CTS_HDMI_SYS_EN); - /* Set HDMI PLL rate */ if (!od1 && !od2 && !od3) { meson_hdmi_pll_generic_set(priv, pll_base_freq); From patchwork Tue Jul 30 12:50:13 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747360 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 9EBB2C3DA7F for ; Tue, 30 Jul 2024 12:50:44 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4755E10E50F; Tue, 30 Jul 2024 12:50:40 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="jdBcLdP+"; dkim-atps=neutral Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) by gabe.freedesktop.org (Postfix) with ESMTPS id C1B1D10E239 for ; Tue, 30 Jul 2024 12:50:38 +0000 (UTC) Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-42809d6e719so26934925e9.3 for ; Tue, 30 Jul 2024 05:50:38 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343837; x=1722948637; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=kFGOubNsNVn1OpgYJCvY0DMJojSWylMPMeeJsgWseOI=; b=jdBcLdP+wLEQSxg3BCJJzjQUAhT9EhOjvL7e3noaeniuQKsPal2+jT7i1Q9CKKIpqC N7UfInVrTUE9xOgefD5lk7rO+nC/MHwks5rxMRgWifaxOIr0zI0rWC7zdVTmTkxCxY1P jEiid4P88raam5UXQ42sjIayTl6/5/MtDQr5ItmcRYRe0OTH5crN7zkzQ59kGKmJh/Bb yCayrfbiq2DqnoC2k7IHUAhX6zw9Oo2yrvUhBMYj8qZhGdX6Hz9HFnV6j34hBHT3L4Zy C+G7SJgd0JdqVA7D/Uuxd0dNLnEhVWNUMpUBsgQDJ4SbT09Xtl4TJY91rmgupKfc+7Si qUhg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343837; x=1722948637; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kFGOubNsNVn1OpgYJCvY0DMJojSWylMPMeeJsgWseOI=; b=trHn8G+VRP3YqWI6R4OLH29sRBn+BK1qfrqZojnial/5fJCvzTV9x7IAR6f4kzb+l5 we92hWrQWsgZY4U+5URyx1OF2r0z0cml2ir7H60tVUDOvLZQFS9MdpSWXPAz16WCvCP6 TsrG6PRhUg4fnM9mOQTUZy6SS0YA7m75yZVC7IrSToLVlGAkNS1bPFqEiku6SB4H2VUk Sdaqpc7fTfD3yasjHq5SaugHY7a2uQM7Tk2EE7p/tTFcOjBH0Ds364sAq6/8ytzbQTEZ WXX9JxSuT67vXfFr/jsSSJJVVJ6x4hAMSIP0tGI8i+SutX4hu6OnV3gMUq8tpfef7rcR tqHQ== X-Forwarded-Encrypted: i=1; AJvYcCU3Kr6ZVcZay8EU0V90kmOKNeQXrzMQvHdXq/jrY8vhZ5+iP4ZJIZiQEblBOZ6EbCbK4lDl+BoyhfA+hEQoObPFTvV65U3Y3Y3/euRComFw X-Gm-Message-State: AOJu0YzRrRQ93WnMk7AoOQiADBf5GJdHFqTnmBvYSFGlPTlNg63nwxjJ 2Fj20uHf5lgNy8i7NLKKtvdkgK+cTXTuRg8IDTJbYx725GDfhkojNa4YnCI8Fhc= X-Google-Smtp-Source: AGHT+IFYy4B/g5w5Y3B19jbk4N8IBnPQwvEBCaNr6l0tavtJI1kbi8Yq6wQAsMTGuLdyiEwuv2pLaA== X-Received: by 2002:a05:600c:3b07:b0:426:4978:65f0 with SMTP id 5b1f17b1804b1-42811d9e0dcmr82301025e9.18.1722343837035; Tue, 30 Jul 2024 05:50:37 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.36 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:36 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 3/9] drm/meson: dw-hdmi: use generic clock helpers Date: Tue, 30 Jul 2024 14:50:13 +0200 Message-ID: <20240730125023.710237-4-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The Amlogic HDMI phy driver is not doing anything with the clocks besides enabling on probe. CCF provides generic helpers to do that. Use the generic clock helpers rather than using a custom one to get and enable clocks. Signed-off-by: Jerome Brunet Reviewed-by: Martin Blumenstingl Reviewed-by: Neil Armstrong --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 36 +++------------------------ 1 file changed, 3 insertions(+), 33 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index bcf4f83582f2..2890796f9d49 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -619,29 +619,6 @@ static void meson_dw_hdmi_init(struct meson_dw_hdmi *meson_dw_hdmi) } -static void meson_disable_clk(void *data) -{ - clk_disable_unprepare(data); -} - -static int meson_enable_clk(struct device *dev, char *name) -{ - struct clk *clk; - int ret; - - clk = devm_clk_get(dev, name); - if (IS_ERR(clk)) { - dev_err(dev, "Unable to get %s pclk\n", name); - return PTR_ERR(clk); - } - - ret = clk_prepare_enable(clk); - if (!ret) - ret = devm_add_action_or_reset(dev, meson_disable_clk, clk); - - return ret; -} - static int meson_dw_hdmi_bind(struct device *dev, struct device *master, void *data) { @@ -651,6 +628,7 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, struct drm_device *drm = data; struct meson_drm *priv = drm->dev_private; struct dw_hdmi_plat_data *dw_plat_data; + struct clk_bulk_data *clks; int irq; int ret; @@ -701,17 +679,9 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, if (IS_ERR(meson_dw_hdmi->hdmitx)) return PTR_ERR(meson_dw_hdmi->hdmitx); - ret = meson_enable_clk(dev, "isfr"); - if (ret) - return ret; - - ret = meson_enable_clk(dev, "iahb"); + ret = devm_clk_bulk_get_all_enable(dev, &clks); if (ret) - return ret; - - ret = meson_enable_clk(dev, "venci"); - if (ret) - return ret; + return dev_err_probe(dev, ret, "Failed to enable all clocks\n"); dw_plat_data->regm = devm_regmap_init(dev, NULL, meson_dw_hdmi, &meson_dw_hdmi_regmap_config); From patchwork Tue Jul 30 12:50:14 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747366 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 CE8FBC3DA49 for ; Tue, 30 Jul 2024 12:50:59 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 4939310E522; Tue, 30 Jul 2024 12:50:59 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="D+JpTJ5X"; dkim-atps=neutral Received: from mail-wr1-f54.google.com (mail-wr1-f54.google.com [209.85.221.54]) by gabe.freedesktop.org (Postfix) with ESMTPS id A35B110E239 for ; Tue, 30 Jul 2024 12:50:39 +0000 (UTC) Received: by mail-wr1-f54.google.com with SMTP id ffacd0b85a97d-367ab76d5e1so1501903f8f.3 for ; Tue, 30 Jul 2024 05:50:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343838; x=1722948638; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8FpQIo3/nECT6BJG3YrzIm131E/DRxLPrAjjYNTEWJA=; b=D+JpTJ5XE5gp2b4tavj9IgDqKvK4/Z7u1BXcW/EUkeE0rw1jkafHlTbWlOWhfPCZNH 6LTU5cuEHF/RUl7r2CWEgBQvkpIATl4lJMLRRIbAuqMy/H/1lqzD8jv0jJDf9raWeOeY +hUT0Nv4FIxZJSHIPqiC4ETLfaAF47t3lXpZNrTBaSNU32rMxEt9xMfVopP1nb7cfBwT Vs2DT/WBOnuw+5R8ueDumb3wyuc1CvinMPCuK9O5dDk0yXbwJZUFrnWVa70eczpoGu4j k77cROSJElairgXpY++G4MadgR5mmGwGNkq0xXq77a28Beatcb8KiWDAL1RgzpE7adm1 FwbA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343838; x=1722948638; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8FpQIo3/nECT6BJG3YrzIm131E/DRxLPrAjjYNTEWJA=; b=qxDOSF6qu1dmxh6fKOCbUly7xe/i1dSyXd7uM5r0GnHp2i6o2/DqTc5/3Lpm6ZHBNq UttYbuBYsUSNa/S4+x5jRf8O0AKTN3SIK9DoQWR+lV00YAX5GwKwXcpYqR+0Mj4c86Dl G2WboBzpTBrLBuWagOT9ksVa3o2Vfv+TY3oTfG1OI7fMTt9KQUziMajQdzIv+WpC1x+H puFq8XDYWYd5yR3n+rJc5KbQ/RU6P7f3ME1fq+LSeWD8FGllZuYXnNb/6sYITmG7kcQp 1vdzdtjhiC/k+jlJrNOuWC+/omya76Tu2wmtOFXGNKZZFyJTED0Cr3KJPgCOR6y7Zs0i m+eg== X-Forwarded-Encrypted: i=1; AJvYcCW6LdmPxu4xp6L5yERflbv8zOpHeqwmANIQLG3ygjd4oVG6yDTVQ+bpWqRwarS1TqIzijFUc7fNh+PSbZe2NIOLgXwDJzhYPqvk527/xPhV X-Gm-Message-State: AOJu0YyMdPzxk9FifrT5Wc5+/7XF+je9vIGY/HdLMhSCt0X2PybIl7zj EMVZIgl6jMnDMGCsv3gShtQ5DP638aBDv0LL2IFbIxRwjwQHRlt8n3bHSHC76RI= X-Google-Smtp-Source: AGHT+IFYKETa1maYsbR/lXJacP4Dulbw5t+LnfR9HzWYE5KbSp8mR/aHH1IRgvWxRpjGsQ/h6Ss4mQ== X-Received: by 2002:a05:6000:4029:b0:36b:63b5:ed64 with SMTP id ffacd0b85a97d-36b63b5f8e9mr8234742f8f.40.1722343837924; Tue, 30 Jul 2024 05:50:37 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:37 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 4/9] drm/meson: dw-hdmi: fix incorrect comment in suspend Date: Tue, 30 Jul 2024 14:50:14 +0200 Message-ID: <20240730125023.710237-5-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Comment in suspend says TOP is put in suspend, but the register poke following is actually de-asserting the reset, like in init. It is doing the opposite of what the comment says. Align the comment with what the code is doing for now and add a FIXME note to sort this out later Signed-off-by: Jerome Brunet Reviewed-by: Martin Blumenstingl --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 2890796f9d49..5cd3264ab874 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -751,7 +751,7 @@ static int __maybe_unused meson_dw_hdmi_pm_suspend(struct device *dev) if (!meson_dw_hdmi) return 0; - /* Reset TOP */ + /* FIXME: This actually bring top out reset on suspend, why ? */ meson_dw_hdmi->data->top_write(meson_dw_hdmi, HDMITX_TOP_SW_RESET, 0); From patchwork Tue Jul 30 12:50:15 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747365 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 BFB3DC3DA7F for ; Tue, 30 Jul 2024 12:50:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 41FDF10E515; Tue, 30 Jul 2024 12:50:54 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="UaZGouby"; dkim-atps=neutral Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id AC59210E515 for ; Tue, 30 Jul 2024 12:50:40 +0000 (UTC) Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-42809d6e719so26935295e9.3 for ; Tue, 30 Jul 2024 05:50:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343839; x=1722948639; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Nb/qSKjbB/ZuPlpTHCI0SwTZiwfEpxk2uiLYY2slQL4=; b=UaZGoubyZmzZdox2M8nJU31eupy7CyGv9XvZkKW8FMxABCLCCy7v0rSp+lDipArZcS gGgxcgnfGhHU9Ne8WbIvlevVa/b8DQN7f+0625gc9RhhkKh/HHY0qPWeO4V9oUOSYyYu 5E79sUDNs9Y8r9+u3fi+gtjkD425Ec2LwSxMfHohioyJZD9T9q8O5Rc1hZ8FgRu7TsKQ MkBzAVlvTUHQuptrF933jjw8nQ9zC6mf4CnF78iFsW8ZCTeItgpwaqqmFGwVBNXeIw7V JLEOBqIGOFoNDAs6ZriWSAPgrQwFwdtPtB7JVd6SmDlMgdXXX5QpNuhhKFNsXGIlca6o fQ8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343839; x=1722948639; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Nb/qSKjbB/ZuPlpTHCI0SwTZiwfEpxk2uiLYY2slQL4=; b=A58HrjtXRuFOeK1FUFLFkogkzwdEW3UXh24DzIfLWNl9VXDZF5NvSLQhBbn9+5rasr qVrFs7MtAcuu9pKrasRaZP1nT7nbSUC51i2n5KuFJps4R+hDYCCRffh7gNH1pj9JbY84 TkWVFIEuf6cP400eLP7k1OPf6zsbOv/gtdutOC4609NGlxOdEzVr7BLs4jk7NzN1Bxq1 JcOjaWnv8ZF+HEaVuVtDTSm5hUH2NqZsk1ptfWf9qz+QbU0Usk3ByM/nS8onaQ8B1h9Q gdn5Ux07VSgWcyeHBZqyodAG3D/n0hwQbdJ4cbt1WIfIPvjkXrHtRhdOp11b1Zd2AoRb Q8Mw== X-Forwarded-Encrypted: i=1; AJvYcCVovJITVMVWcdD3VAL5xwW0Klxt73mw5XHRyqFkbV7nSdDIPzDiUz4kXAQH5tLSnCLenFGgj6T9dbs+dJh0UAqcPVctliawoHxtdF/+yU06 X-Gm-Message-State: AOJu0YwIsbTzXx5fnkz6Jhh9TTRCX8bz0UnYvQjVKkxcKZsilG/mg/1l xTkGZXHrC9/Ee4FoZP4MvSysK3HHpnSIqD8RuImEoxWC1a/le5Zi2UgIpzbR7p8= X-Google-Smtp-Source: AGHT+IGtrN/qyndOtU5EbVTBBPgvlT3scXPmXKI31g3Y8pvJ2hEwbqVrraWIOB4B+x6XQNOoMWE1ow== X-Received: by 2002:a05:600c:1ca3:b0:427:dac4:d36 with SMTP id 5b1f17b1804b1-42811d73a0cmr67316145e9.7.1722343838742; Tue, 30 Jul 2024 05:50:38 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:38 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 5/9] drm/meson: dw-hdmi: split resets out of hw init. Date: Tue, 30 Jul 2024 14:50:15 +0200 Message-ID: <20240730125023.710237-6-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" This prepares the migration to regmap usage. To properly setup regmap, the APB needs to be in working order. This is easier handled if the resets are not mixed with hw init. More checks are required to determine if the resets are needed on resume or not. Add a note for this. Signed-off-by: Jerome Brunet --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 5cd3264ab874..47aa3e184e98 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -581,11 +581,6 @@ static void meson_dw_hdmi_init(struct meson_dw_hdmi *meson_dw_hdmi) /* Bring HDMITX MEM output of power down */ regmap_update_bits(priv->hhi, HHI_MEM_PD_REG0, 0xff << 8, 0); - /* Reset HDMITX APB & TX & PHY */ - reset_control_reset(meson_dw_hdmi->hdmitx_apb); - reset_control_reset(meson_dw_hdmi->hdmitx_ctrl); - reset_control_reset(meson_dw_hdmi->hdmitx_phy); - /* Enable APB3 fail on error */ if (!meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A)) { writel_bits_relaxed(BIT(15), BIT(15), @@ -675,6 +670,10 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, return PTR_ERR(meson_dw_hdmi->hdmitx_phy); } + reset_control_reset(meson_dw_hdmi->hdmitx_apb); + reset_control_reset(meson_dw_hdmi->hdmitx_ctrl); + reset_control_reset(meson_dw_hdmi->hdmitx_phy); + meson_dw_hdmi->hdmitx = devm_platform_ioremap_resource(pdev, 0); if (IS_ERR(meson_dw_hdmi->hdmitx)) return PTR_ERR(meson_dw_hdmi->hdmitx); @@ -765,6 +764,11 @@ static int __maybe_unused meson_dw_hdmi_pm_resume(struct device *dev) if (!meson_dw_hdmi) return 0; + /* TODO: Is this really necessary/desirable on resume ? */ + reset_control_reset(meson_dw_hdmi->hdmitx_apb); + reset_control_reset(meson_dw_hdmi->hdmitx_ctrl); + reset_control_reset(meson_dw_hdmi->hdmitx_phy); + meson_dw_hdmi_init(meson_dw_hdmi); dw_hdmi_resume(meson_dw_hdmi->hdmi); From patchwork Tue Jul 30 12:50:16 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747363 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 18D12C3DA7F for ; Tue, 30 Jul 2024 12:50:49 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 5310510E521; Tue, 30 Jul 2024 12:50:47 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="QU6KRrd0"; dkim-atps=neutral Received: from mail-wr1-f52.google.com (mail-wr1-f52.google.com [209.85.221.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8290410E51B for ; Tue, 30 Jul 2024 12:50:41 +0000 (UTC) Received: by mail-wr1-f52.google.com with SMTP id ffacd0b85a97d-368526b1333so1667611f8f.1 for ; Tue, 30 Jul 2024 05:50:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343840; x=1722948640; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=/f+lVqd8UY0SGhoCgvWNiHTKQlQIyc0ZQNcrf7jQ2Mk=; b=QU6KRrd0/ApnXm026iu9emSzdqIm9vF05t5iz+lR9qLcGEYaBx3S4T9oWK9hMbeph2 5wDTtiUvkiKh86hjpBiLLyeZBJyLlvcjTTMKoJ6gVi7UBz7uJ7qnLlmLnaW8KN/ydudF 2CO7nVNqnCCy5ktkTbJr66Izk7Hz+OqGXqAPpIacVt8LBzgY3wdmmabn4KdwznuhbVbs c1pRxHSEjog014dz4dM6Od/TLTmTJ2fP/B2Ar7NSUYub2uzu/q53GYr59OsisCiE4R6Q +gopIpmi8iSjQvmS44h3Xz98a9tpWQw+JyLBK6GMhYuKbXW8gApqQVRPIi0uHsEezr7g ChuQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343840; x=1722948640; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=/f+lVqd8UY0SGhoCgvWNiHTKQlQIyc0ZQNcrf7jQ2Mk=; b=LOcDbetPfb6QS70zcY2RNkkaqcavoeQmPFH6/trPcTTgiB3vwmPs/28M5AlZBS1tYu gOSMbe5jOZ6xSXf+QBo0HOOWub2w6Bc8a9yr4qUEEZJtHh8V9b3s0kKVIrzTedcEK+7E KzGUXzcZTKI83zhNIDtsqQYxHSika+2W82i+Ft4as0C2rVmEKQt6isAfeKNCgjuigXd/ hb5JEHLyEXnz3T/VDuRSkLts2S4/dfTQY5pJQdCBdknzePIbpF8zJqLL+FPWZe/1JINp FfIrRMp5+kQku0Y5I+fInRK0oYiiZmjskTZ/3ouzMgDReq5uH8vZ/e68RDdN36OGxp/l bz7A== X-Forwarded-Encrypted: i=1; AJvYcCVf/+ETdI7FpR2SkfescIARmLaQjO8FzJuWhcyU9pgj2qjrizml9KOfYugkpyhd3lw8PFB3iiJddAvrl+m+QNOKbqpmmyfoQIduju/jHwk/ X-Gm-Message-State: AOJu0Yxg9zR3TB2+418Aocq3r1svC4Jm5sOoQecHr9CIIXhSr7dWCoyJ p2rJu8odBxw2X+B9fYZyUagFbw1/5N38AsDq6BqFSxopZJBJlcqK8C+R23bx6vM= X-Google-Smtp-Source: AGHT+IF6vxjbgkclg5ZC9QnQ6REhjd6SUK21vpt51Ce1pEcuTWZe/cRJ6ofyHge18ELoIAEYRXo8Fw== X-Received: by 2002:adf:f7c8:0:b0:368:4488:66f8 with SMTP id ffacd0b85a97d-36b8c8fdc35mr1223161f8f.23.1722343839681; Tue, 30 Jul 2024 05:50:39 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:39 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 6/9] drm/meson: dw-hdmi: convert to regmap Date: Tue, 30 Jul 2024 14:50:16 +0200 Message-ID: <20240730125023.710237-7-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The Amlogic mixes direct register access and regmap ones, with several custom helpers. Using a single API makes rework and maintenance easier. Convert the Amlogic phy driver to regmap and use it to have more consistent access to the registers in the driver, with less custom helpers. Add register bit definitions when missing. Signed-off-by: Jerome Brunet --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 475 ++++++++++++-------------- drivers/gpu/drm/meson/meson_dw_hdmi.h | 49 +-- 2 files changed, 239 insertions(+), 285 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 47aa3e184e98..7c39e5c99043 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -90,16 +90,25 @@ * - CEC Management */ -/* TOP Block Communication Channel */ -#define HDMITX_TOP_ADDR_REG 0x0 -#define HDMITX_TOP_DATA_REG 0x4 -#define HDMITX_TOP_CTRL_REG 0x8 -#define HDMITX_TOP_G12A_OFFSET 0x8000 +/* Indirect channel definition for GX */ +#define HDMITX_TOP_REGS 0x0 +#define HDMITX_DWC_REGS 0x10 + +#define GX_ADDR_OFFSET 0x0 +#define GX_DATA_OFFSET 0x4 +#define GX_CTRL_OFFSET 0x8 +#define GX_CTRL_APB3_ERRFAIL BIT(15) -/* Controller Communication Channel */ -#define HDMITX_DWC_ADDR_REG 0x10 -#define HDMITX_DWC_DATA_REG 0x14 -#define HDMITX_DWC_CTRL_REG 0x18 +/* + * NOTE: G12 use direct addressing: + * Ideally it should receive one memory region for each of the top + * and dwc register regions but fixing this would require to change + * the DT bindings. Doing so is a pain. Keep the region as it and work + * around the problem, at least for now. + * Future supported SoCs should properly describe the regions in the + * DT bindings instead of using this trick. + */ +#define HDMITX_TOP_G12A_OFFSET 0x8000 /* HHI Registers */ #define HHI_MEM_PD_REG0 0x100 /* 0x40 */ @@ -108,28 +117,59 @@ #define HHI_HDMI_PHY_CNTL1 0x3a4 /* 0xe9 */ #define PHY_CNTL1_INIT 0x03900000 #define PHY_INVERT BIT(17) +#define PHY_FIFOS GENMASK(3, 2) +#define PHY_CLOCK_EN BIT(1) +#define PHY_SOFT_RST BIT(0) #define HHI_HDMI_PHY_CNTL2 0x3a8 /* 0xea */ #define HHI_HDMI_PHY_CNTL3 0x3ac /* 0xeb */ #define HHI_HDMI_PHY_CNTL4 0x3b0 /* 0xec */ #define HHI_HDMI_PHY_CNTL5 0x3b4 /* 0xed */ -static DEFINE_SPINLOCK(reg_lock); - -struct meson_dw_hdmi; - struct meson_dw_hdmi_data { - unsigned int (*top_read)(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr); - void (*top_write)(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr, unsigned int data); - unsigned int (*dwc_read)(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr); - void (*dwc_write)(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr, unsigned int data); + int (*reg_init)(struct device *dev); u32 cntl0_init; u32 cntl1_init; }; +static int hdmi_tx_indirect_reg_read(void *context, + unsigned int reg, + unsigned int *result) +{ + void __iomem *base = context; + + /* Must write the read address twice ... */ + writel(reg, base + GX_ADDR_OFFSET); + writel(reg, base + GX_ADDR_OFFSET); + + /* ... and read the data twice as well */ + *result = readl(base + GX_DATA_OFFSET); + *result = readl(base + GX_DATA_OFFSET); + + return 0; +} + +static int hdmi_tx_indirect_reg_write(void *context, + unsigned int reg, + unsigned int val) +{ + void __iomem *base = context; + + /* Must write the read address twice ... */ + writel(reg, base + GX_ADDR_OFFSET); + writel(reg, base + GX_ADDR_OFFSET); + + /* ... but write the data only once */ + writel(val, base + GX_DATA_OFFSET); + + return 0; +} + +static const struct regmap_bus hdmi_tx_indirect_mmio = { + .fast_io = true, + .reg_read = hdmi_tx_indirect_reg_read, + .reg_write = hdmi_tx_indirect_reg_write, +}; + struct meson_dw_hdmi { struct dw_hdmi_plat_data dw_plat_data; struct meson_drm *priv; @@ -139,9 +179,10 @@ struct meson_dw_hdmi { struct reset_control *hdmitx_apb; struct reset_control *hdmitx_ctrl; struct reset_control *hdmitx_phy; - u32 irq_stat; + unsigned int irq_stat; struct dw_hdmi *hdmi; struct drm_bridge *bridge; + struct regmap *top; }; static inline int dw_hdmi_is_compatible(struct meson_dw_hdmi *dw_hdmi, @@ -150,136 +191,6 @@ static inline int dw_hdmi_is_compatible(struct meson_dw_hdmi *dw_hdmi, return of_device_is_compatible(dw_hdmi->dev->of_node, compat); } -/* PHY (via TOP bridge) and Controller dedicated register interface */ - -static unsigned int dw_hdmi_top_read(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr) -{ - unsigned long flags; - unsigned int data; - - spin_lock_irqsave(®_lock, flags); - - /* ADDR must be written twice */ - writel(addr & 0xffff, dw_hdmi->hdmitx + HDMITX_TOP_ADDR_REG); - writel(addr & 0xffff, dw_hdmi->hdmitx + HDMITX_TOP_ADDR_REG); - - /* Read needs a second DATA read */ - data = readl(dw_hdmi->hdmitx + HDMITX_TOP_DATA_REG); - data = readl(dw_hdmi->hdmitx + HDMITX_TOP_DATA_REG); - - spin_unlock_irqrestore(®_lock, flags); - - return data; -} - -static unsigned int dw_hdmi_g12a_top_read(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr) -{ - return readl(dw_hdmi->hdmitx + HDMITX_TOP_G12A_OFFSET + (addr << 2)); -} - -static inline void dw_hdmi_top_write(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr, unsigned int data) -{ - unsigned long flags; - - spin_lock_irqsave(®_lock, flags); - - /* ADDR must be written twice */ - writel(addr & 0xffff, dw_hdmi->hdmitx + HDMITX_TOP_ADDR_REG); - writel(addr & 0xffff, dw_hdmi->hdmitx + HDMITX_TOP_ADDR_REG); - - /* Write needs single DATA write */ - writel(data, dw_hdmi->hdmitx + HDMITX_TOP_DATA_REG); - - spin_unlock_irqrestore(®_lock, flags); -} - -static inline void dw_hdmi_g12a_top_write(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr, unsigned int data) -{ - writel(data, dw_hdmi->hdmitx + HDMITX_TOP_G12A_OFFSET + (addr << 2)); -} - -/* Helper to change specific bits in PHY registers */ -static inline void dw_hdmi_top_write_bits(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr, - unsigned int mask, - unsigned int val) -{ - unsigned int data = dw_hdmi->data->top_read(dw_hdmi, addr); - - data &= ~mask; - data |= val; - - dw_hdmi->data->top_write(dw_hdmi, addr, data); -} - -static unsigned int dw_hdmi_dwc_read(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr) -{ - unsigned long flags; - unsigned int data; - - spin_lock_irqsave(®_lock, flags); - - /* ADDR must be written twice */ - writel(addr & 0xffff, dw_hdmi->hdmitx + HDMITX_DWC_ADDR_REG); - writel(addr & 0xffff, dw_hdmi->hdmitx + HDMITX_DWC_ADDR_REG); - - /* Read needs a second DATA read */ - data = readl(dw_hdmi->hdmitx + HDMITX_DWC_DATA_REG); - data = readl(dw_hdmi->hdmitx + HDMITX_DWC_DATA_REG); - - spin_unlock_irqrestore(®_lock, flags); - - return data; -} - -static unsigned int dw_hdmi_g12a_dwc_read(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr) -{ - return readb(dw_hdmi->hdmitx + addr); -} - -static inline void dw_hdmi_dwc_write(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr, unsigned int data) -{ - unsigned long flags; - - spin_lock_irqsave(®_lock, flags); - - /* ADDR must be written twice */ - writel(addr & 0xffff, dw_hdmi->hdmitx + HDMITX_DWC_ADDR_REG); - writel(addr & 0xffff, dw_hdmi->hdmitx + HDMITX_DWC_ADDR_REG); - - /* Write needs single DATA write */ - writel(data, dw_hdmi->hdmitx + HDMITX_DWC_DATA_REG); - - spin_unlock_irqrestore(®_lock, flags); -} - -static inline void dw_hdmi_g12a_dwc_write(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr, unsigned int data) -{ - writeb(data, dw_hdmi->hdmitx + addr); -} - -/* Helper to change specific bits in controller registers */ -static inline void dw_hdmi_dwc_write_bits(struct meson_dw_hdmi *dw_hdmi, - unsigned int addr, - unsigned int mask, - unsigned int val) -{ - unsigned int data = dw_hdmi->data->dwc_read(dw_hdmi, addr); - - data &= ~mask; - data |= val; - - dw_hdmi->data->dwc_write(dw_hdmi, addr, data); -} - /* Bridge */ /* Setup PHY bandwidth modes */ @@ -353,13 +264,15 @@ static inline void meson_dw_hdmi_phy_reset(struct meson_dw_hdmi *dw_hdmi) struct meson_drm *priv = dw_hdmi->priv; /* Enable and software reset */ - regmap_update_bits(priv->hhi, HHI_HDMI_PHY_CNTL1, 0xf, 0xf); - + regmap_update_bits(priv->hhi, HHI_HDMI_PHY_CNTL1, + PHY_FIFOS | PHY_CLOCK_EN | PHY_SOFT_RST, + PHY_FIFOS | PHY_CLOCK_EN | PHY_SOFT_RST); mdelay(2); /* Enable and unreset */ - regmap_update_bits(priv->hhi, HHI_HDMI_PHY_CNTL1, 0xf, 0xe); - + regmap_update_bits(priv->hhi, HHI_HDMI_PHY_CNTL1, + PHY_FIFOS | PHY_CLOCK_EN | PHY_SOFT_RST, + PHY_FIFOS | PHY_CLOCK_EN); mdelay(2); } @@ -382,27 +295,30 @@ static int dw_hdmi_phy_init(struct dw_hdmi *hdmi, void *data, /* TMDS pattern setup */ if (mode->clock > 340000 && !mode_is_420) { - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_TMDS_CLK_PTTN_01, - 0); - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_TMDS_CLK_PTTN_23, - 0x03ff03ff); + regmap_write(dw_hdmi->top, HDMITX_TOP_TMDS_CLK_PTTN_01, + 0); + regmap_write(dw_hdmi->top, HDMITX_TOP_TMDS_CLK_PTTN_23, + 0x03ff03ff); } else { - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_TMDS_CLK_PTTN_01, - 0x001f001f); - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_TMDS_CLK_PTTN_23, - 0x001f001f); + regmap_write(dw_hdmi->top, HDMITX_TOP_TMDS_CLK_PTTN_01, + 0x001f001f); + regmap_write(dw_hdmi->top, HDMITX_TOP_TMDS_CLK_PTTN_23, + 0x001f001f); } /* Load TMDS pattern */ - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_TMDS_CLK_PTTN_CNTL, 0x1); + regmap_write(dw_hdmi->top, HDMITX_TOP_TMDS_CLK_PTTN_CNTL, + TOP_TDMS_CLK_PTTN_LOAD); msleep(20); - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_TMDS_CLK_PTTN_CNTL, 0x2); + regmap_write(dw_hdmi->top, HDMITX_TOP_TMDS_CLK_PTTN_CNTL, + TOP_TDMS_CLK_PTTN_SHFT); /* Setup PHY parameters */ meson_hdmi_phy_setup_mode(dw_hdmi, mode, mode_is_420); /* Disable clock, fifo, fifo_wr */ - regmap_update_bits(priv->hhi, HHI_HDMI_PHY_CNTL1, 0xf, 0); + regmap_update_bits(priv->hhi, HHI_HDMI_PHY_CNTL1, + PHY_FIFOS | PHY_CLOCK_EN | PHY_SOFT_RST, 0); dw_hdmi_set_high_tmds_clock_ratio(hdmi, display); @@ -433,8 +349,11 @@ static enum drm_connector_status dw_hdmi_read_hpd(struct dw_hdmi *hdmi, void *data) { struct meson_dw_hdmi *dw_hdmi = (struct meson_dw_hdmi *)data; + unsigned int stat; - return !!dw_hdmi->data->top_read(dw_hdmi, HDMITX_TOP_STAT0) ? + regmap_read(dw_hdmi->top, HDMITX_TOP_STAT0, &stat); + + return !!stat ? connector_status_connected : connector_status_disconnected; } @@ -444,17 +363,18 @@ static void dw_hdmi_setup_hpd(struct dw_hdmi *hdmi, struct meson_dw_hdmi *dw_hdmi = (struct meson_dw_hdmi *)data; /* Setup HPD Filter */ - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_HPD_FILTER, - (0xa << 12) | 0xa0); + regmap_write(dw_hdmi->top, HDMITX_TOP_HPD_FILTER, + FIELD_PREP(TOP_HPD_GLITCH_WIDTH, 10) | + FIELD_PREP(TOP_HPD_VALID_WIDTH, 160)); /* Clear interrupts */ - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_INTR_STAT_CLR, - HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL); + regmap_write(dw_hdmi->top, HDMITX_TOP_INTR_STAT_CLR, + TOP_INTR_HPD_RISE | TOP_INTR_HPD_FALL); /* Unmask interrupts */ - dw_hdmi_top_write_bits(dw_hdmi, HDMITX_TOP_INTR_MASKN, - HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL, - HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL); + regmap_update_bits(dw_hdmi->top, HDMITX_TOP_INTR_MASKN, + TOP_INTR_HPD_RISE | TOP_INTR_HPD_FALL, + TOP_INTR_HPD_RISE | TOP_INTR_HPD_FALL); } static const struct dw_hdmi_phy_ops meson_dw_hdmi_phy_ops = { @@ -467,23 +387,22 @@ static const struct dw_hdmi_phy_ops meson_dw_hdmi_phy_ops = { static irqreturn_t dw_hdmi_top_irq(int irq, void *dev_id) { struct meson_dw_hdmi *dw_hdmi = dev_id; - u32 stat; + unsigned int stat; - stat = dw_hdmi->data->top_read(dw_hdmi, HDMITX_TOP_INTR_STAT); - dw_hdmi->data->top_write(dw_hdmi, HDMITX_TOP_INTR_STAT_CLR, stat); + regmap_read(dw_hdmi->top, HDMITX_TOP_INTR_STAT, &stat); + regmap_write(dw_hdmi->top, HDMITX_TOP_INTR_STAT_CLR, stat); /* HPD Events, handle in the threaded interrupt handler */ - if (stat & (HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL)) { + if (stat & (TOP_INTR_HPD_RISE | TOP_INTR_HPD_FALL)) { dw_hdmi->irq_stat = stat; return IRQ_WAKE_THREAD; } /* HDMI Controller Interrupt */ - if (stat & 1) + if (stat & TOP_INTR_CORE) return IRQ_NONE; /* TOFIX Handle HDCP Interrupts */ - return IRQ_HANDLED; } @@ -494,10 +413,10 @@ static irqreturn_t dw_hdmi_top_thread_irq(int irq, void *dev_id) u32 stat = dw_hdmi->irq_stat; /* HPD Events */ - if (stat & (HDMITX_TOP_INTR_HPD_RISE | HDMITX_TOP_INTR_HPD_FALL)) { + if (stat & (TOP_INTR_HPD_RISE | TOP_INTR_HPD_FALL)) { bool hpd_connected = false; - if (stat & HDMITX_TOP_INTR_HPD_RISE) + if (stat & TOP_INTR_HPD_RISE) hpd_connected = true; dw_hdmi_setup_rx_sense(dw_hdmi->hdmi, hpd_connected, @@ -512,63 +431,25 @@ static irqreturn_t dw_hdmi_top_thread_irq(int irq, void *dev_id) return IRQ_HANDLED; } -/* DW HDMI Regmap */ - -static int meson_dw_hdmi_reg_read(void *context, unsigned int reg, - unsigned int *result) -{ - struct meson_dw_hdmi *dw_hdmi = context; - - *result = dw_hdmi->data->dwc_read(dw_hdmi, reg); - - return 0; - -} - -static int meson_dw_hdmi_reg_write(void *context, unsigned int reg, - unsigned int val) -{ - struct meson_dw_hdmi *dw_hdmi = context; - - dw_hdmi->data->dwc_write(dw_hdmi, reg, val); - - return 0; -} - -static const struct regmap_config meson_dw_hdmi_regmap_config = { - .reg_bits = 32, - .val_bits = 8, - .reg_read = meson_dw_hdmi_reg_read, - .reg_write = meson_dw_hdmi_reg_write, - .max_register = 0x10000, - .fast_io = true, -}; - -static const struct meson_dw_hdmi_data meson_dw_hdmi_gxbb_data = { - .top_read = dw_hdmi_top_read, - .top_write = dw_hdmi_top_write, - .dwc_read = dw_hdmi_dwc_read, - .dwc_write = dw_hdmi_dwc_write, - .cntl0_init = 0x0, - .cntl1_init = PHY_CNTL1_INIT | PHY_INVERT, +static const struct regmap_config top_gx_regmap_cfg = { + .reg_bits = 32, + .reg_stride = 4, + .reg_shift = -2, + .val_bits = 32, + .max_register = 0x40, }; -static const struct meson_dw_hdmi_data meson_dw_hdmi_gxl_data = { - .top_read = dw_hdmi_top_read, - .top_write = dw_hdmi_top_write, - .dwc_read = dw_hdmi_dwc_read, - .dwc_write = dw_hdmi_dwc_write, - .cntl0_init = 0x0, - .cntl1_init = PHY_CNTL1_INIT, +static const struct regmap_config top_g12_regmap_cfg = { + .reg_bits = 32, + .reg_stride = 4, + .val_bits = 32, + .max_register = 0x40, }; -static const struct meson_dw_hdmi_data meson_dw_hdmi_g12a_data = { - .top_read = dw_hdmi_g12a_top_read, - .top_write = dw_hdmi_g12a_top_write, - .dwc_read = dw_hdmi_g12a_dwc_read, - .dwc_write = dw_hdmi_g12a_dwc_write, - .cntl0_init = 0x000b4242, /* Bandgap */ - .cntl1_init = PHY_CNTL1_INIT, +static const struct regmap_config dwc_regmap_cfg = { + .reg_bits = 32, + .val_bits = 8, + .max_register = 0x8000, }; static void meson_dw_hdmi_init(struct meson_dw_hdmi *meson_dw_hdmi) @@ -581,41 +462,107 @@ static void meson_dw_hdmi_init(struct meson_dw_hdmi *meson_dw_hdmi) /* Bring HDMITX MEM output of power down */ regmap_update_bits(priv->hhi, HHI_MEM_PD_REG0, 0xff << 8, 0); - /* Enable APB3 fail on error */ - if (!meson_vpu_is_compatible(priv, VPU_COMPATIBLE_G12A)) { - writel_bits_relaxed(BIT(15), BIT(15), - meson_dw_hdmi->hdmitx + HDMITX_TOP_CTRL_REG); - writel_bits_relaxed(BIT(15), BIT(15), - meson_dw_hdmi->hdmitx + HDMITX_DWC_CTRL_REG); - } - /* Bring out of reset */ - meson_dw_hdmi->data->top_write(meson_dw_hdmi, - HDMITX_TOP_SW_RESET, 0); - + regmap_write(meson_dw_hdmi->top, HDMITX_TOP_SW_RESET, 0); msleep(20); - meson_dw_hdmi->data->top_write(meson_dw_hdmi, - HDMITX_TOP_CLK_CNTL, 0xff); + /* Enable clocks */ + regmap_write(meson_dw_hdmi->top, HDMITX_TOP_CLK_CNTL, + TOP_CLK_EN); /* Enable normal output to PHY */ - meson_dw_hdmi->data->top_write(meson_dw_hdmi, HDMITX_TOP_BIST_CNTL, BIT(12)); + regmap_write(meson_dw_hdmi->top, HDMITX_TOP_BIST_CNTL, + TOP_BIST_TMDS_EN); /* Setup PHY */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL1, meson_dw_hdmi->data->cntl1_init); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, meson_dw_hdmi->data->cntl0_init); + regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL1, + meson_dw_hdmi->data->cntl1_init); + regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, + meson_dw_hdmi->data->cntl0_init); /* Enable HDMI-TX Interrupt */ - meson_dw_hdmi->data->top_write(meson_dw_hdmi, HDMITX_TOP_INTR_STAT_CLR, - HDMITX_TOP_INTR_CORE); + regmap_write(meson_dw_hdmi->top, HDMITX_TOP_INTR_STAT_CLR, + GENMASK(31, 0)); + regmap_write(meson_dw_hdmi->top, HDMITX_TOP_INTR_MASKN, + TOP_INTR_CORE); +} + +static int meson_dw_init_regmap_gx(struct device *dev) +{ + struct meson_dw_hdmi *meson_dw_hdmi = dev_get_drvdata(dev); + struct regmap *map; - meson_dw_hdmi->data->top_write(meson_dw_hdmi, HDMITX_TOP_INTR_MASKN, - HDMITX_TOP_INTR_CORE); + /* Register TOP glue zone */ + writel_bits_relaxed(GX_CTRL_APB3_ERRFAIL, GX_CTRL_APB3_ERRFAIL, + meson_dw_hdmi->hdmitx + HDMITX_TOP_REGS + GX_CTRL_OFFSET); + map = devm_regmap_init(dev, &hdmi_tx_indirect_mmio, + meson_dw_hdmi->hdmitx + HDMITX_TOP_REGS, + &top_gx_regmap_cfg); + if (IS_ERR(map)) + return dev_err_probe(dev, PTR_ERR(map), "failed to init top regmap\n"); + + meson_dw_hdmi->top = map; + + /* Register DWC zone */ + writel_bits_relaxed(GX_CTRL_APB3_ERRFAIL, GX_CTRL_APB3_ERRFAIL, + meson_dw_hdmi->hdmitx + HDMITX_DWC_REGS + GX_CTRL_OFFSET); + + map = devm_regmap_init(dev, &hdmi_tx_indirect_mmio, + meson_dw_hdmi->hdmitx + HDMITX_DWC_REGS, + &dwc_regmap_cfg); + if (IS_ERR(map)) + return dev_err_probe(dev, PTR_ERR(map), "failed to init dwc regmap\n"); + + meson_dw_hdmi->dw_plat_data.regm = map; + + return 0; +} + +static int meson_dw_init_regmap_g12(struct device *dev) +{ + struct meson_dw_hdmi *meson_dw_hdmi = dev_get_drvdata(dev); + struct regmap *map; + + /* Register TOP glue zone with the offset */ + map = devm_regmap_init_mmio(dev, meson_dw_hdmi->hdmitx + HDMITX_TOP_G12A_OFFSET, + &top_g12_regmap_cfg); + if (IS_ERR(map)) + dev_err_probe(dev, PTR_ERR(map), "failed to init top regmap\n"); + + meson_dw_hdmi->top = map; + + /* Register DWC zone */ + map = devm_regmap_init_mmio(dev, meson_dw_hdmi->hdmitx, + &dwc_regmap_cfg); + if (IS_ERR(map)) + dev_err_probe(dev, PTR_ERR(map), "failed to init dwc regmap\n"); + + meson_dw_hdmi->dw_plat_data.regm = map; + + return 0; } +static const struct meson_dw_hdmi_data meson_dw_hdmi_gxbb_data = { + .reg_init = meson_dw_init_regmap_gx, + .cntl0_init = 0x0, + .cntl1_init = PHY_CNTL1_INIT | PHY_INVERT, +}; + +static const struct meson_dw_hdmi_data meson_dw_hdmi_gxl_data = { + .reg_init = meson_dw_init_regmap_gx, + .cntl0_init = 0x0, + .cntl1_init = PHY_CNTL1_INIT, +}; + +static const struct meson_dw_hdmi_data meson_dw_hdmi_g12a_data = { + .reg_init = meson_dw_init_regmap_g12, + .cntl0_init = 0x000b4242, /* Bandgap */ + .cntl1_init = PHY_CNTL1_INIT, +}; + static int meson_dw_hdmi_bind(struct device *dev, struct device *master, - void *data) + void *data) { struct platform_device *pdev = to_platform_device(dev); const struct meson_dw_hdmi_data *match; @@ -640,6 +587,8 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, if (!meson_dw_hdmi) return -ENOMEM; + platform_set_drvdata(pdev, meson_dw_hdmi); + meson_dw_hdmi->priv = priv; meson_dw_hdmi->dev = dev; meson_dw_hdmi->data = match; @@ -682,10 +631,9 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, if (ret) return dev_err_probe(dev, ret, "Failed to enable all clocks\n"); - dw_plat_data->regm = devm_regmap_init(dev, NULL, meson_dw_hdmi, - &meson_dw_hdmi_regmap_config); - if (IS_ERR(dw_plat_data->regm)) - return PTR_ERR(dw_plat_data->regm); + ret = meson_dw_hdmi->data->reg_init(dev); + if (ret) + return ret; irq = platform_get_irq(pdev, 0); if (irq < 0) @@ -717,8 +665,6 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-g12a-dw-hdmi")) dw_plat_data->use_drm_infoframe = true; - platform_set_drvdata(pdev, meson_dw_hdmi); - meson_dw_hdmi->hdmi = dw_hdmi_probe(pdev, &meson_dw_hdmi->dw_plat_data); if (IS_ERR(meson_dw_hdmi->hdmi)) return PTR_ERR(meson_dw_hdmi->hdmi); @@ -751,8 +697,7 @@ static int __maybe_unused meson_dw_hdmi_pm_suspend(struct device *dev) return 0; /* FIXME: This actually bring top out reset on suspend, why ? */ - meson_dw_hdmi->data->top_write(meson_dw_hdmi, - HDMITX_TOP_SW_RESET, 0); + regmap_write(meson_dw_hdmi->top, HDMITX_TOP_SW_RESET, 0); return 0; } diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.h b/drivers/gpu/drm/meson/meson_dw_hdmi.h index 08e1c14e4ea0..3ab8c56d5fe1 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.h +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.h @@ -28,6 +28,7 @@ * 0=Release from reset. Default 1. */ #define HDMITX_TOP_SW_RESET (0x000) +#define TOP_RST_EN GENMASK(4, 0) /* * Bit 31 RW free_clk_en: 0=Enable clock gating for power saving; 1= Disable @@ -45,7 +46,8 @@ * Bit 1 RW tmds_clk_en: 1=enable tmds_clk; 0=disable. Default 0. * Bit 0 RW pixel_clk_en: 1=enable pixel_clk; 0=disable. Default 0. */ -#define HDMITX_TOP_CLK_CNTL (0x001) +#define HDMITX_TOP_CLK_CNTL (0x004) +#define TOP_CLK_EN GENMASK(7, 0) /* * Bit 31:28 RW rxsense_glitch_width: starting from G12A @@ -53,7 +55,9 @@ * Bit 11: 0 RW hpd_valid_width: filter out width <= M*1024. Default 0. * Bit 15:12 RW hpd_glitch_width: filter out glitch <= N. Default 0. */ -#define HDMITX_TOP_HPD_FILTER (0x002) +#define HDMITX_TOP_HPD_FILTER (0x008) +#define TOP_HPD_GLITCH_WIDTH GENMASK(15, 12) +#define TOP_HPD_VALID_WIDTH GENMASK(11, 0) /* * intr_maskn: MASK_N, one bit per interrupt source. @@ -67,7 +71,7 @@ * [ 1] hpd_rise_intr * [ 0] core_intr */ -#define HDMITX_TOP_INTR_MASKN (0x003) +#define HDMITX_TOP_INTR_MASKN (0x00c) /* * Bit 30: 0 RW intr_stat: For each bit, write 1 to manually set the interrupt @@ -80,7 +84,7 @@ * Bit 1 RW hpd_rise * Bit 0 RW IP interrupt */ -#define HDMITX_TOP_INTR_STAT (0x004) +#define HDMITX_TOP_INTR_STAT (0x010) /* * [7] rxsense_fall starting from G12A @@ -92,13 +96,12 @@ * [1] hpd_rise * [0] core_intr_rise */ -#define HDMITX_TOP_INTR_STAT_CLR (0x005) - -#define HDMITX_TOP_INTR_CORE BIT(0) -#define HDMITX_TOP_INTR_HPD_RISE BIT(1) -#define HDMITX_TOP_INTR_HPD_FALL BIT(2) -#define HDMITX_TOP_INTR_RXSENSE_RISE BIT(6) -#define HDMITX_TOP_INTR_RXSENSE_FALL BIT(7) +#define HDMITX_TOP_INTR_STAT_CLR (0x014) +#define TOP_INTR_CORE BIT(0) +#define TOP_INTR_HPD_RISE BIT(1) +#define TOP_INTR_HPD_FALL BIT(2) +#define TOP_INTR_RXSENSE_RISE BIT(6) +#define TOP_INTR_RXSENSE_FALL BIT(7) /* * Bit 14:12 RW tmds_sel: 3'b000=Output zero; 3'b001=Output normal TMDS data; @@ -112,29 +115,31 @@ * 2=Output 1-bit pattern; 3=output 10-bit pattern. Default 0. * Bit 0 RW prbs_pttn_en: 1=Enable PRBS generator; 0=Disable. Default 0. */ -#define HDMITX_TOP_BIST_CNTL (0x006) +#define HDMITX_TOP_BIST_CNTL (0x018) +#define TOP_BIST_OUT_MASK GENMASK(14, 12) +#define TOP_BIST_TMDS_EN BIT(12) /* Bit 29:20 RW shift_pttn_data[59:50]. Default 0. */ /* Bit 19:10 RW shift_pttn_data[69:60]. Default 0. */ /* Bit 9: 0 RW shift_pttn_data[79:70]. Default 0. */ -#define HDMITX_TOP_SHIFT_PTTN_012 (0x007) +#define HDMITX_TOP_SHIFT_PTTN_012 (0x01c) /* Bit 29:20 RW shift_pttn_data[29:20]. Default 0. */ /* Bit 19:10 RW shift_pttn_data[39:30]. Default 0. */ /* Bit 9: 0 RW shift_pttn_data[49:40]. Default 0. */ -#define HDMITX_TOP_SHIFT_PTTN_345 (0x008) +#define HDMITX_TOP_SHIFT_PTTN_345 (0x020) /* Bit 19:10 RW shift_pttn_data[ 9: 0]. Default 0. */ /* Bit 9: 0 RW shift_pttn_data[19:10]. Default 0. */ -#define HDMITX_TOP_SHIFT_PTTN_67 (0x009) +#define HDMITX_TOP_SHIFT_PTTN_67 (0x024) /* Bit 25:16 RW tmds_clk_pttn[19:10]. Default 0. */ /* Bit 9: 0 RW tmds_clk_pttn[ 9: 0]. Default 0. */ -#define HDMITX_TOP_TMDS_CLK_PTTN_01 (0x00A) +#define HDMITX_TOP_TMDS_CLK_PTTN_01 (0x028) /* Bit 25:16 RW tmds_clk_pttn[39:30]. Default 0. */ /* Bit 9: 0 RW tmds_clk_pttn[29:20]. Default 0. */ -#define HDMITX_TOP_TMDS_CLK_PTTN_23 (0x00B) +#define HDMITX_TOP_TMDS_CLK_PTTN_23 (0x02c) /* * Bit 1 RW shift_tmds_clk_pttn:1=Enable shifting clk pattern, @@ -143,18 +148,22 @@ * [ 1] shift_tmds_clk_pttn * [ 0] load_tmds_clk_pttn */ -#define HDMITX_TOP_TMDS_CLK_PTTN_CNTL (0x00C) +#define HDMITX_TOP_TMDS_CLK_PTTN_CNTL (0x030) +#define TOP_TDMS_CLK_PTTN_LOAD BIT(0) +#define TOP_TDMS_CLK_PTTN_SHFT BIT(1) /* * Bit 0 RW revocmem_wr_fail: Read back 1 to indicate Host write REVOC MEM * failure, write 1 to clear the failure flag. Default 0. */ -#define HDMITX_TOP_REVOCMEM_STAT (0x00D) +#define HDMITX_TOP_REVOCMEM_STAT (0x034) /* * Bit 1 R filtered RxSense status * Bit 0 R filtered HPD status. */ -#define HDMITX_TOP_STAT0 (0x00E) +#define HDMITX_TOP_STAT0 (0x038) +#define TOP_STAT0_HPD BIT(0) +#define TOP_STAT0_RXSENSE BIT(1) #endif /* __MESON_DW_HDMI_H */ From patchwork Tue Jul 30 12:50:17 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747362 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 BDF6DC3DA7E for ; Tue, 30 Jul 2024 12:50:47 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 2810B10E51B; Tue, 30 Jul 2024 12:50:47 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="xeEDY0TI"; dkim-atps=neutral Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) by gabe.freedesktop.org (Postfix) with ESMTPS id 4D54210E51B for ; Tue, 30 Jul 2024 12:50:42 +0000 (UTC) Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-3684bea9728so2426679f8f.3 for ; Tue, 30 Jul 2024 05:50:42 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343841; x=1722948641; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=mASIbGHgicNkpjEZJDVQTMm2DP0XPbvH1Sd0GVs1rHs=; b=xeEDY0TIWawOOlejTHDHg722XmyaM39g/pFQuYQDxyMqyUSKPtR2mPt/9Etk0QHjMY iCuZxvkfm8Wn0xnGakI460ZY/aQfY6gme0MKplAFlBMNgEaCidmoBQqXo+9/l5J/NbD7 RUN4upPZgA7BIb6bmpgOUwCKH61nwNFquxNuXKBOm8ObIo0db16h/Gzn5h7bwCFrm1cv IZmnVqxt7yXYoXybeZZKeEdFzXYiHXpswPnIm2WOz/T2XtNZ16hT4A23MGxsYL+Tic+7 1XL8RrYG4BbCDwXv3QrPBupgSTtZ4mgilmEdN+6DfXoPoxBl6Xl08sVDPOj9cAevSmUx Xg2w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343841; x=1722948641; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=mASIbGHgicNkpjEZJDVQTMm2DP0XPbvH1Sd0GVs1rHs=; b=dXqKaFKx8Uyg2mZsA4xYM9hdxAZjoDrxVdyG+Rm0pGNGOMwy0RVlidR89JFwEYKBYp FNwtDDgyTS6eGJ1FJlsB5Efd86WTaB3n/IelQSKl1tw28piBhhfZHoZw9UyicVcMYXyD HWPp4Mn1T6k8gr3ey0MqH4j69fvMqeNBfr8h/9TAHuRegC4PmhjJb0zITL8BGL1RaRIL 1jvJAOCc6LsrNv5mLydjxBwx/yHIvKAaiTLl9gJG4XOgpgSsoXUSG0FqN0SvoJhw7KrC 4iGGkA53iOejKl4au/VXmMOOurpaGxh+XIu+xROwVAjk8sFOrHM1U8u++LzoiK/qjQKt TheA== X-Forwarded-Encrypted: i=1; AJvYcCXir1eaDZP3rM+/3azuYZwWO/gDdrW8kSR3ws8YmxzaV54zG0Ylor/MCLcw+8X5HRVofFrWTfZDjXWanmZKiqV3JPmJrCJbiqcIqcAsa1hn X-Gm-Message-State: AOJu0YyENOpd7oLBuPGXNJYM3qEoGO+N3qP8I+1ASlZBa4W70dLNnd36 PyIpY45kPdERsr+0Grp3HJmhi9N5rcDQwX43gUx+9TNrVstZys8yv+Q32c4RCmA= X-Google-Smtp-Source: AGHT+IGgAowgwPOjeaL86WpoU9wRwRtqxrk1rp/DYm6nll47JN9ogSrFK3ue1xuiQZz1zSdyf7rnBg== X-Received: by 2002:a05:6000:11cb:b0:368:3194:8a85 with SMTP id ffacd0b85a97d-36b5cee9bfdmr7815247f8f.7.1722343840573; Tue, 30 Jul 2024 05:50:40 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:40 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 7/9] drm/meson: dw-hdmi: use matched data Date: Tue, 30 Jul 2024 14:50:17 +0200 Message-ID: <20240730125023.710237-8-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Using several string comparisons with if/else if/else clauses is fairly inefficient and does not scale well. Use matched data to tweak the driver depending on the matched SoC instead. Signed-off-by: Jerome Brunet --- drivers/gpu/drm/meson/meson_dw_hdmi.c | 209 +++++++++++++++++--------- 1 file changed, 139 insertions(+), 70 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 7c39e5c99043..ef059c5ef520 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -125,8 +125,17 @@ #define HHI_HDMI_PHY_CNTL4 0x3b0 /* 0xec */ #define HHI_HDMI_PHY_CNTL5 0x3b4 /* 0xed */ +struct meson_dw_hdmi_speed { + const struct reg_sequence *regs; + unsigned int reg_num; + unsigned int limit; +}; + struct meson_dw_hdmi_data { int (*reg_init)(struct device *dev); + const struct meson_dw_hdmi_speed *speeds; + unsigned int speed_num; + bool use_drm_infoframe; u32 cntl0_init; u32 cntl1_init; }; @@ -185,78 +194,33 @@ struct meson_dw_hdmi { struct regmap *top; }; -static inline int dw_hdmi_is_compatible(struct meson_dw_hdmi *dw_hdmi, - const char *compat) -{ - return of_device_is_compatible(dw_hdmi->dev->of_node, compat); -} - -/* Bridge */ - /* Setup PHY bandwidth modes */ -static void meson_hdmi_phy_setup_mode(struct meson_dw_hdmi *dw_hdmi, +static int meson_hdmi_phy_setup_mode(struct meson_dw_hdmi *dw_hdmi, const struct drm_display_mode *mode, bool mode_is_420) { struct meson_drm *priv = dw_hdmi->priv; unsigned int pixel_clock = mode->clock; + int i; /* For 420, pixel clock is half unlike venc clock */ - if (mode_is_420) pixel_clock /= 2; - - if (dw_hdmi_is_compatible(dw_hdmi, "amlogic,meson-gxl-dw-hdmi") || - dw_hdmi_is_compatible(dw_hdmi, "amlogic,meson-gxm-dw-hdmi")) { - if (pixel_clock >= 371250) { - /* 5.94Gbps, 3.7125Gbps */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x333d3282); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x2136315b); - } else if (pixel_clock >= 297000) { - /* 2.97Gbps */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x33303382); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x2036315b); - } else if (pixel_clock >= 148500) { - /* 1.485Gbps */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x33303362); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x2016315b); - } else { - /* 742.5Mbps, and below */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x33604142); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x0016315b); - } - } else if (dw_hdmi_is_compatible(dw_hdmi, - "amlogic,meson-gxbb-dw-hdmi")) { - if (pixel_clock >= 371250) { - /* 5.94Gbps, 3.7125Gbps */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x33353245); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x2100115b); - } else if (pixel_clock >= 297000) { - /* 2.97Gbps */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x33634283); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0xb000115b); - } else { - /* 1.485Gbps, and below */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x33632122); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x2000115b); - } - } else if (dw_hdmi_is_compatible(dw_hdmi, - "amlogic,meson-g12a-dw-hdmi")) { - if (pixel_clock >= 371250) { - /* 5.94Gbps, 3.7125Gbps */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x37eb65c4); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x2ab0ff3b); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL5, 0x0000080b); - } else if (pixel_clock >= 297000) { - /* 2.97Gbps */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x33eb6262); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x2ab0ff3b); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL5, 0x00000003); - } else { - /* 1.485Gbps, and below */ - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL0, 0x33eb4242); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL3, 0x2ab0ff3b); - regmap_write(priv->hhi, HHI_HDMI_PHY_CNTL5, 0x00000003); - } + if (mode_is_420) + pixel_clock /= 2; + + for (i = 0; i < dw_hdmi->data->speed_num; i++) { + if (pixel_clock >= dw_hdmi->data->speeds[i].limit) + break; } + + /* No match found - Last entry should have a 0 limit */ + if (WARN_ON(i == dw_hdmi->data->speed_num)) + return -EINVAL; + + regmap_multi_reg_write(priv->hhi, + dw_hdmi->data->speeds[i].regs, + dw_hdmi->data->speeds[i].reg_num); + + return 0; } static inline void meson_dw_hdmi_phy_reset(struct meson_dw_hdmi *dw_hdmi) @@ -543,22 +507,133 @@ static int meson_dw_init_regmap_g12(struct device *dev) return 0; } +static const struct reg_sequence gxbb_3g7_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x33353245 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x2100115b }, +}; + +static const struct reg_sequence gxbb_3g_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x33634283 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0xb000115b }, +}; + +static const struct reg_sequence gxbb_def_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x33632122 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x2000115b }, +}; + +static const struct meson_dw_hdmi_speed gxbb_speeds[] = { + { + .limit = 371250, + .regs = gxbb_3g7_regs, + .reg_num = ARRAY_SIZE(gxbb_3g7_regs) + }, { + .limit = 297000, + .regs = gxbb_3g_regs, + .reg_num = ARRAY_SIZE(gxbb_3g_regs) + }, { + .regs = gxbb_def_regs, + .reg_num = ARRAY_SIZE(gxbb_def_regs) + } +}; + static const struct meson_dw_hdmi_data meson_dw_hdmi_gxbb_data = { .reg_init = meson_dw_init_regmap_gx, .cntl0_init = 0x0, .cntl1_init = PHY_CNTL1_INIT | PHY_INVERT, + .use_drm_infoframe = false, + .speeds = gxbb_speeds, + .speed_num = ARRAY_SIZE(gxbb_speeds), +}; + +static const struct reg_sequence gxl_3g7_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x333d3282 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x2136315b }, +}; + +static const struct reg_sequence gxl_3g_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x33303382 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x2036315b }, +}; + +static const struct reg_sequence gxl_def_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x33303362 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x2016315b }, +}; + +static const struct reg_sequence gxl_270m_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x33604142 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x0016315b }, +}; + +static const struct meson_dw_hdmi_speed gxl_speeds[] = { + { + .limit = 371250, + .regs = gxl_3g7_regs, + .reg_num = ARRAY_SIZE(gxl_3g7_regs) + }, { + .limit = 297000, + .regs = gxl_3g_regs, + .reg_num = ARRAY_SIZE(gxl_3g_regs) + }, { + .limit = 148500, + .regs = gxl_def_regs, + .reg_num = ARRAY_SIZE(gxl_def_regs) + }, { + .regs = gxl_270m_regs, + .reg_num = ARRAY_SIZE(gxl_270m_regs) + } }; static const struct meson_dw_hdmi_data meson_dw_hdmi_gxl_data = { .reg_init = meson_dw_init_regmap_gx, .cntl0_init = 0x0, .cntl1_init = PHY_CNTL1_INIT, + .use_drm_infoframe = true, + .speeds = gxl_speeds, + .speed_num = ARRAY_SIZE(gxl_speeds), +}; + +static const struct reg_sequence g12a_3g7_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x37eb65c4 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x2ab0ff3b }, + { .reg = HHI_HDMI_PHY_CNTL5, .def = 0x0000080b }, +}; + +static const struct reg_sequence g12a_3g_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x33eb6262 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x2ab0ff3b }, + { .reg = HHI_HDMI_PHY_CNTL5, .def = 0x00000003 }, +}; + +static const struct reg_sequence g12a_def_regs[] = { + { .reg = HHI_HDMI_PHY_CNTL0, .def = 0x33eb4242 }, + { .reg = HHI_HDMI_PHY_CNTL3, .def = 0x2ab0ff3b }, + { .reg = HHI_HDMI_PHY_CNTL5, .def = 0x00000003 }, +}; + +static const struct meson_dw_hdmi_speed g12a_speeds[] = { + { + .limit = 371250, + .regs = g12a_3g7_regs, + .reg_num = ARRAY_SIZE(g12a_3g7_regs) + }, { + .limit = 297000, + .regs = g12a_3g_regs, + .reg_num = ARRAY_SIZE(g12a_3g_regs) + }, { + .regs = g12a_def_regs, + .reg_num = ARRAY_SIZE(g12a_def_regs) + } }; static const struct meson_dw_hdmi_data meson_dw_hdmi_g12a_data = { .reg_init = meson_dw_init_regmap_g12, .cntl0_init = 0x000b4242, /* Bandgap */ .cntl1_init = PHY_CNTL1_INIT, + .use_drm_infoframe = true, + .speeds = g12a_speeds, + .speed_num = ARRAY_SIZE(g12a_speeds), }; static int meson_dw_hdmi_bind(struct device *dev, struct device *master, @@ -590,7 +665,6 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, platform_set_drvdata(pdev, meson_dw_hdmi); meson_dw_hdmi->priv = priv; - meson_dw_hdmi->dev = dev; meson_dw_hdmi->data = match; dw_plat_data = &meson_dw_hdmi->dw_plat_data; @@ -650,7 +724,6 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, meson_dw_hdmi_init(meson_dw_hdmi); /* Bridge / Connector */ - dw_plat_data->priv_data = meson_dw_hdmi; dw_plat_data->phy_ops = &meson_dw_hdmi_phy_ops; dw_plat_data->phy_name = "meson_dw_hdmi_phy"; @@ -659,11 +732,7 @@ static int meson_dw_hdmi_bind(struct device *dev, struct device *master, dw_plat_data->ycbcr_420_allowed = true; dw_plat_data->disable_cec = true; dw_plat_data->output_port = 1; - - if (dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-gxl-dw-hdmi") || - dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-gxm-dw-hdmi") || - dw_hdmi_is_compatible(meson_dw_hdmi, "amlogic,meson-g12a-dw-hdmi")) - dw_plat_data->use_drm_infoframe = true; + dw_plat_data->use_drm_infoframe = meson_dw_hdmi->data->use_drm_infoframe; meson_dw_hdmi->hdmi = dw_hdmi_probe(pdev, &meson_dw_hdmi->dw_plat_data); if (IS_ERR(meson_dw_hdmi->hdmi)) From patchwork Tue Jul 30 12:50:18 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747361 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 E7704C3DA49 for ; Tue, 30 Jul 2024 12:50:47 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 37C4C10E51C; Tue, 30 Jul 2024 12:50:47 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="gUs9Q2vF"; dkim-atps=neutral Received: from mail-wm1-f52.google.com (mail-wm1-f52.google.com [209.85.128.52]) by gabe.freedesktop.org (Postfix) with ESMTPS id 2B34710E51B for ; Tue, 30 Jul 2024 12:50:43 +0000 (UTC) Received: by mail-wm1-f52.google.com with SMTP id 5b1f17b1804b1-428119da952so25961965e9.0 for ; Tue, 30 Jul 2024 05:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343841; x=1722948641; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=3moEF5UgUPlJrvGfGCZqAdn43td07ni9TXGHevs5IwU=; b=gUs9Q2vFjqZbjx2vDSRZcy8Was9Sc1mJ+XMWk2PIfgIkwiPJCvnNcDXsjduK0b4h5M hRfns1T7vArINWpbog+QZEq3t6xPRnHyEsePxZnfXwBsEfSz6RyHDSBD7YboU5JlxgLy v2zNtkS1W12WK+FETgkxtSCg3mU3WD6vVzdDzG/8IGKh4NmAyBDtT2nXP6oWsTRSXzyC 9/wu2LEAnGMbAK2DdTPR0x2wlWPKtT20zhGg8TGuxRmxD1CkfDDHQcULittpvzbCWuxL LcnV/sP6i8qsDsW26Lyl5z7iu46BluhNYn9DkEoHpYUDdvJDIAXhD3oLeb8TMRhEd/i/ 8QJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343841; x=1722948641; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=3moEF5UgUPlJrvGfGCZqAdn43td07ni9TXGHevs5IwU=; b=DSiXEQrqZ8dm6JCROp/D+weMIkGOYjKkT+w847kPIvTr0mf41enJdUh64y2qbLdcej 7JNxlGE+0hIGQn8P/DFxrlmocQra2tAGAazdF2ERoRHgwgprCeVaJRiids0vNpeZ6+oz Ft2Ezm/TtROks2ZA2VfkV1v/NkZ/Ayxd+ajqhS3FuSr2pMB1NyhpsKm/jUtP+cPqxg8T G5LeN7n/LgcPNDhcZqp8aAr6NazhaBntKmK4Q+dfGIei/XreLScxS4+STPUz8YUn1ucy sAb31j5sAWqDA8ZTwVOjKJ/PlmdqzQs/ELCn2jpRO/Tg5RBNW6mJ4+L0X0Ie5Ib6VdC2 bHkg== X-Forwarded-Encrypted: i=1; AJvYcCW9PhJbfQnaCDfCzCjEBVGZvFWWS/XqGwpcZnGGidm6LzeB9ShPm9afCLdgPF4qNwxC0ztf3vQx/sWyACH5vU0s2Ti6R0HRwj3rHHDBIMyr X-Gm-Message-State: AOJu0Yxqyb7DKWTjqJ6qGiIDvbpVUu1dUBabMxBPjF4W861EbTmHJZ34 ZtUr0Bq/DMxzUqVb+UoGMM0Q0AkxtDyBw73T1bP/bFPAWTYP9gBsKmy/LRtQc6k= X-Google-Smtp-Source: AGHT+IE4w+wikVhp2vCBwTP2wSRMRyso4c+p6a52Ji4CPU43wbv4hy3g2InI/NLX3kHSQY2Kj2YIpA== X-Received: by 2002:a05:600c:4ec6:b0:428:1eff:78ec with SMTP id 5b1f17b1804b1-4281eff7a44mr41585485e9.18.1722343841397; Tue, 30 Jul 2024 05:50:41 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.40 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:41 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH LATER 8/9] drm/meson: dw-hdmi: don't write power controller registers Date: Tue, 30 Jul 2024 14:50:18 +0200 Message-ID: <20240730125023.710237-9-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" The HDMI phy has a power domain properly set in DT. Writing the power controller register directly from the hdmi driver is incorrect. The power domain framework should be used for that. HHI is a collection of Amlogic devices, such as clocks, reset, power domains and phys. This is another step to get rid of HHI access in Amlogic display drivers and possibly stop using the component API. Signed-off-by: Jerome Brunet --- This change depends on: * f1ab099d6591 ("arm64: dts: amlogic: add power domain to hdmitx") Time is needed for these changes to sink in u-boot and distros, making this change safe to apply. drivers/gpu/drm/meson/meson_dw_hdmi.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index ef059c5ef520..6c18d97b8b16 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -111,7 +111,6 @@ #define HDMITX_TOP_G12A_OFFSET 0x8000 /* HHI Registers */ -#define HHI_MEM_PD_REG0 0x100 /* 0x40 */ #define HHI_HDMI_CLK_CNTL 0x1cc /* 0x73 */ #define HHI_HDMI_PHY_CNTL0 0x3a0 /* 0xe8 */ #define HHI_HDMI_PHY_CNTL1 0x3a4 /* 0xe9 */ @@ -423,9 +422,6 @@ static void meson_dw_hdmi_init(struct meson_dw_hdmi *meson_dw_hdmi) /* Enable clocks */ regmap_update_bits(priv->hhi, HHI_HDMI_CLK_CNTL, 0xffff, 0x100); - /* Bring HDMITX MEM output of power down */ - regmap_update_bits(priv->hhi, HHI_MEM_PD_REG0, 0xff << 8, 0); - /* Bring out of reset */ regmap_write(meson_dw_hdmi->top, HDMITX_TOP_SW_RESET, 0); msleep(20); From patchwork Tue Jul 30 12:50:19 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Jerome Brunet X-Patchwork-Id: 13747364 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 gabe.freedesktop.org (gabe.freedesktop.org [131.252.210.177]) (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 180A5C3DA7E for ; Tue, 30 Jul 2024 12:50:54 +0000 (UTC) Received: from gabe.freedesktop.org (localhost [127.0.0.1]) by gabe.freedesktop.org (Postfix) with ESMTP id 6171E10E51D; Tue, 30 Jul 2024 12:50:54 +0000 (UTC) Authentication-Results: gabe.freedesktop.org; dkim=pass (2048-bit key; unprotected) header.d=baylibre-com.20230601.gappssmtp.com header.i=@baylibre-com.20230601.gappssmtp.com header.b="KjGbttCw"; dkim-atps=neutral Received: from mail-wm1-f49.google.com (mail-wm1-f49.google.com [209.85.128.49]) by gabe.freedesktop.org (Postfix) with ESMTPS id 0452310E51B for ; Tue, 30 Jul 2024 12:50:44 +0000 (UTC) Received: by mail-wm1-f49.google.com with SMTP id 5b1f17b1804b1-4281abc65daso20068235e9.2 for ; Tue, 30 Jul 2024 05:50:43 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=baylibre-com.20230601.gappssmtp.com; s=20230601; t=1722343842; x=1722948642; darn=lists.freedesktop.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=v0bww741v4ESlaOBOd/IxNqqLNy/KYkDWPizVqdvx9s=; b=KjGbttCwO1Oe671tqveLF1bolnvgW9XBLiKPVjpRTqLtuxQ8MAFw/Z8jRKHhC+SqHy BegTMlhRsbsyFSLQ6G0n4w/tnMuzNLuxyUnZno1GvX7THUQkYx4xcmW97H6R74SEdmcq 5sy7OnD6nTKUbiidT0mctk5sF1A62hRbxsnRKLMUHww8ZzeuRD6tdqANagkTe7pk5vYL MSn4eV4MqweKAZu2L5iAjEUoHNCTK4nE9zzdZCC5h/Fvuv6s0pa5Fw3VH93XkFWZocCA X9BMijJXDe2mfbOSw6VlfcVB2CYnr0FsomJ8Fq6QucxHB5znjrLgYPbiBt0IC+wy3zTv 133w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1722343842; x=1722948642; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=v0bww741v4ESlaOBOd/IxNqqLNy/KYkDWPizVqdvx9s=; b=M++M7d8aJwm3MN1r69r1H5JFJO/1JKfK5/B7rrjuGlVk2ah8CcsNE6mzu3uuuahr3F Yofl7J4fb8XMaZBps5vUnljDw4GMCAvkDKw6Qehu1C0E55csgI2a7vtmaZaGpYxFaz7m HGqK0epqaD0MHdU7lR/hHX1ac8Em985l1ObdrRqHpo8ri4g03Gc8ZRA+g+pfdjWqJdow Eenxhf68VIPjPiEz7mtvBpoJY+ZCceQy1/1vN1ELBvkxao39JCYH19mSwSYXi+FsXeSR JiHguNyesnbgGhWa24zWcDEMw8b06DlXm2X+Km69803pDiz64Rh5//m+uP3R2VcdeuUH k9VQ== X-Forwarded-Encrypted: i=1; AJvYcCX7pOHnfpIJLMFHFva4P3DJYjcTh8ZfYtFbsefcWowvkd4ozrV6tzKyFp5LifqwLLpV+U1T+wK5RD6EdOcatUim2pHSDSZ5X9/1yjv0G2Ls X-Gm-Message-State: AOJu0Yx1jsGvhWUJ8Xgi8WgnXIjvbD/1pUzMA4ebHBzXca8hjcGrinJS BBaWsPV+kjVHKrddDTLMqzxdkAugQmeM+AUuEde2LUP7xO6Ng+TNozJNtrYNXLo= X-Google-Smtp-Source: AGHT+IFLDFq9LHqnUG6FBRbdJiqK71bxJQkIPCuJCS1JXepzU3MHqB97SQW7gMPpjbviNnFl2fKRWg== X-Received: by 2002:a05:600c:1c93:b0:426:64a2:5362 with SMTP id 5b1f17b1804b1-42811d71586mr72986835e9.8.1722343842261; Tue, 30 Jul 2024 05:50:42 -0700 (PDT) Received: from toaster.lan ([2a01:e0a:3c5:5fb1:291e:4a48:358e:6f49]) by smtp.googlemail.com with ESMTPSA id 5b1f17b1804b1-42805730e68sm216521405e9.9.2024.07.30.05.50.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 30 Jul 2024 05:50:41 -0700 (PDT) From: Jerome Brunet To: Neil Armstrong , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Daniel Vetter Cc: Jerome Brunet , Kevin Hilman , Martin Blumenstingl , dri-devel@lists.freedesktop.org, linux-amlogic@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH LATER 9/9] drm/meson: dw-hdmi: drop hdmi system clock setup Date: Tue, 30 Jul 2024 14:50:19 +0200 Message-ID: <20240730125023.710237-10-jbrunet@baylibre.com> X-Mailer: git-send-email 2.43.0 In-Reply-To: <20240730125023.710237-1-jbrunet@baylibre.com> References: <20240730125023.710237-1-jbrunet@baylibre.com> MIME-Version: 1.0 X-Patchwork-Bot: notify X-BeenThere: dri-devel@lists.freedesktop.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Direct Rendering Infrastructure - Development List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" Poking the HHI syscon is a way to setup clocks behind CCF's back. Drop these poke and let CCF handle this using DT assigned-clocks. HHI is a collection of Amlogic devices, such as clocks, reset, power domains and phys. This is another step to get rid of HHI access in Amlogic display drivers and possibly stop using the component API. Signed-off-by: Jerome Brunet --- This change depends on: * 0602ba0dcd0e ("arm64: dts: amlogic: gx: correct hdmi clocks") * 1443b6ea806d ("arm64: dts: amlogic: setup hdmi system clock") Time is needed for these changes to sink in u-boot and distros, making this change safe to apply. drivers/gpu/drm/meson/meson_dw_hdmi.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/drivers/gpu/drm/meson/meson_dw_hdmi.c b/drivers/gpu/drm/meson/meson_dw_hdmi.c index 6c18d97b8b16..b54c1e3093e9 100644 --- a/drivers/gpu/drm/meson/meson_dw_hdmi.c +++ b/drivers/gpu/drm/meson/meson_dw_hdmi.c @@ -111,7 +111,6 @@ #define HDMITX_TOP_G12A_OFFSET 0x8000 /* HHI Registers */ -#define HHI_HDMI_CLK_CNTL 0x1cc /* 0x73 */ #define HHI_HDMI_PHY_CNTL0 0x3a0 /* 0xe8 */ #define HHI_HDMI_PHY_CNTL1 0x3a4 /* 0xe9 */ #define PHY_CNTL1_INIT 0x03900000 @@ -419,9 +418,6 @@ static void meson_dw_hdmi_init(struct meson_dw_hdmi *meson_dw_hdmi) { struct meson_drm *priv = meson_dw_hdmi->priv; - /* Enable clocks */ - regmap_update_bits(priv->hhi, HHI_HDMI_CLK_CNTL, 0xffff, 0x100); - /* Bring out of reset */ regmap_write(meson_dw_hdmi->top, HDMITX_TOP_SW_RESET, 0); msleep(20);