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: 13747372 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 82B8EC52D1D for ; Tue, 30 Jul 2024 12:50:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=V+yvJYG89OW6EQaKw5q8hgMo2CQlgXbciDpelXeJ0Zk=; b=Yq4UZ+2TfmtnV3 vrXy/zm7wbKAIh5Y2BElFAo1FcPJPn9Ehh580XkOGf6wrd1nTPuil9aq2ZI/6l68f17miRoJk8fbz lgnujH9/YhhqebLvPlI/sOejuWhyUYKzIcsmyuA+ShjWJFYE1Mc0LlHV2hC9VDLuFIn99LzFaeiWa +x1OGc4v8lLaAxKF3DFvrQli75s5ov1lrm4OJeJXzi6ODmYGcxOtZgjWbB82XLj7lduRDbkDJs9WL Vvstz24SJxMUej7kZee7v/qv4SDT2qKMnuAfim1ue5KN74oBLfyQ0LDwtvrBjVBuwhejc4iRGixuL YfNzGeHNbLHNRT/2jmHA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJN-0000000F9w9-1n3W; Tue, 30 Jul 2024 12:50:41 +0000 Received: from mail-wm1-x32c.google.com ([2a00:1450:4864:20::32c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJI-0000000F9se-36Jp for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:39 +0000 Received: by mail-wm1-x32c.google.com with SMTP id 5b1f17b1804b1-4257d5fc9b7so34181835e9.2 for ; Tue, 30 Jul 2024 05:50:36 -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.infradead.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=zd32Crol3S2rYPGtPG7WLQFnCp92qqKlnEfbrb5940Oc5h7RM40yS06FJDhlC5STZ+ 41FjRRdAGUO/43aODnxwO3IKJdc8dEx2HX2qMQDb8iKqdz8iK1aN5RlaI8T9cu30FAb4 pWmHqGGsz+V+FTnWs6DRiPa3hcPSVt1QkQewbMHGDIb5odo2Cn4wLfDc36Yegw8QpsyB Bf1GfujGl4VdvMn+zRzEW3pYANp+T7S1KpFWq3j7FlI1pJ3I9YrJPbTsG9CCXv23WJC5 TOiIoioqp4jWU/3LLPYXsHxt0yHmuqtcRu4jgNGOystxA+haCXANr7WcN4zojbf8iY+/ ZSbg== 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=cNPZ+DdRB5yV8Lf9n8k0xn1dNQD9kUiV0Brj5WRELp550ecY4CYt5lN5b2jIwZbqO+ /YjjKNWcNaB96iT6qIqqE3XWtK5BmI63GdQg2muTyJMmvoR2XvKBuqH0Yc8fVHUAyGIl mZmThNNaczVtk3VcZ4jH/Zrlw0v+M36gBPawhPnVitaG2qicRj0GAgl4cQVyFAoW46uC LKiJqza29uPl8fgyemZLu7qKCEH6/EIMEogOEKS6zU8tVLeAGhHebnEt7dlvLmtwB6VX w0QLtsExrVM9nWHvjtS9vpkh/KvR9UvPiZQ75pAEIgzf4Qj22ogez1y8WDi6QyNHxzRU iaKg== X-Forwarded-Encrypted: i=1; AJvYcCVeQDM7pQL5i9fTqAqsDVjful06RmCjOrQIWS7hDp10Z1VuwVxcax92oH6RROT3e9kk7nCvYqUc/gymlWqqVTLEjuVX9a6dqj4wUb0Eom4B0iI= X-Gm-Message-State: AOJu0YxYJQO27rY8RGTN9Xfq2nrWy4JBfiqgS/SS/YBISQ5qbE1QBKq/ jThwztX67GMMaYuc1b6GixG3En3aKQAmliPsp6v16ccB0pi2dfwxhUzQut/aoec= 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055036_813629_8C807BB4 X-CRM114-Status: GOOD ( 14.60 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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: 13747369 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 2C24EC3DA7E for ; Tue, 30 Jul 2024 12:50:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=OhVwfoDlOJ3734Aunr/bOlGohPcDoXs5eT+3H3+kIT4=; b=DAcU3DTbdIz3Cv FDjmo8XJxfgk7ARLH44GaLt9dLJUdQH7mvmzdAQ3YLB5IuueQqfoBrYWSUDOPjNTUxaNQLTG0+xAz THgt5pjnavBfeGogncUJ3u8cGthJZKprCu5h7wnJOAvnn6TfGP2XW1HJ6+DzP8QIiCg9W/eeeTN2C BvG4o1zqg/4nyPcKzAqDY2zJlSHssTwtl/QzG2vREsXYbzijRy3lgPghRSifW+v69Sl2VGcJc2spm 0qZFY07WHQQLXK//KgiyyiYUxooVU5AOKCPkiNxUUhL0BqP8cVz+jNWojph+QcZS77Fz83d24Cswm PyHy21jrFfFsn81GqLbQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJQ-0000000F9ya-1aFZ; Tue, 30 Jul 2024 12:50:44 +0000 Received: from mail-wr1-x429.google.com ([2a00:1450:4864:20::429]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJK-0000000F9t8-0n0k for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:40 +0000 Received: by mail-wr1-x429.google.com with SMTP id ffacd0b85a97d-3684eb5be64so2294681f8f.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.infradead.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=MmpSVMc3ClWL06XmTtQmUQZoseohw9P6TtbZTf0IFRlEzcTv42PWb9m13Xid23fCWn Pip+6qOWHKzqvkxemVgFUUCrPUbQtPRbSXFcuae0Wvg+d6W6DZMMLQy04uGBxG+WxuH+ yPFBhRoTWAACSEq2KFHKBpT7KtZJt2Hty6lwEZ/IG51YgZqGL0Fots03HkKDy/CXTucI RYgRyBgSTLwSaH/HOVeY9mPJb3J+9H8MBhjK89J7GscWsqmGH28uK8aPvswxaWJ+ygC+ ApLp/t3asAWNH8ei4nLvVU2AUBO9efz98aGavaZ3YY4t3GjPKLoeYVNKK5I9fTe/qGg2 fLfw== 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=fG9ETSsoUsGb3zAxmd0TgJApABH4dS3+oRD4Z9S7buorpPShHTP0IACOns1lMG9DvH b8iQ9Y11zj0h0DzoyJR2HQkDbtHX1gBntHA/s1aVJHCzYGukXXDdvlh5c4SoZM7a/fYV dt1OXMuR98ap2KPFBKk7uTXdgXqc+PjaymKmo6KWk6dIfDuRG9y/k52P3Eakdv5pHBn1 hP+Wv1a/3oHrbUgZaEwYLbagrzESKXohBtK0tlIMNhuhFnwBCG9FEsCut+Ioufml+AZp i1uHE45GNfx6XbzFLnI0QBt//Ygcatb/agpjgSF2cs8u1rV3NtFLI2WLmyRj87OHzYXE lhkw== X-Forwarded-Encrypted: i=1; AJvYcCVsyKNuzZ+iRipljYXQjvQrsFJ+YHL6RwUFAQ34R2NPdCYSVCJOyOZtxfSBa0rtn2hEReHrpysBx/QTERw8rubspQe4J24R0GUSTw9gAW8oPU4= X-Gm-Message-State: AOJu0YywnL3VlXWSE7qG1WLaYvJYHzaSLKGQabdZe8jxWjWMBBr+l3yI qScpiVaGw5LdTg1SS8w4LJeSMeRVCD6zKnWsEn01WYieaNtwsnF7sbQgsJlIuUuV2qjlzOk+fht xaZmgTA== 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055038_245773_13D24E22 X-CRM114-Status: GOOD ( 10.93 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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: 13747368 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 37CBDC3DA49 for ; Tue, 30 Jul 2024 12:50:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=+4q3VJhnIjAh2Rwl7SWCkzDCPfGENqHJUBUAR5JFBjw=; b=i9logF/Zj0okuT ovyyOp6P9Jf8Ohy0hfvjNMmxSx6dJgcqf5nxai7HDeFpp4j8vfV9j5ehlccVCa7ATEMxrXlHyct6D nM5JZAlvsPADHI4kz7A22DM6gC32HUtlFm8Kg0OF3tF9ugFxmxlWG2kMeCmg6JlSfi9hDFF/F0PcH zxVzTOOeFPO3s24MxYOYIVreO1hpZj5kycV2Ok4X0AH8PRATorVo/O++pAmhwm+Glr7SqRZGdxIt5 S6mNDGkEGa+XAHdGeGS3D7rhMqmJgZmR8PI7/iinS/afaSLwQRCQTTBV2cYAaPQdqRv6ka0jZQdSc 9LaCCfxGbWwJtS72UEoQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJQ-0000000F9yi-46jc; Tue, 30 Jul 2024 12:50:44 +0000 Received: from mail-wm1-x32b.google.com ([2a00:1450:4864:20::32b]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJL-0000000F9tT-19en for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:40 +0000 Received: by mail-wm1-x32b.google.com with SMTP id 5b1f17b1804b1-42816ca782dso24812535e9.2 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.infradead.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=BMRN+FR1xdBczUxmHutwodYe5otzuj+3+pb80BDbopl0u/DjN5X/gWkkiHkIh6wfum dq/2hbD7fKMb+JQoCAjAbLnv4XYEAsgc2MM1xVSism+yiFmIJYohQLKMQhXMf25EJ4xV odqA0G5n2iDINtMjlPMIMFr8mkFNFICIut9OE/o8ltnE916hmsvo10o6OchHgvtazZ6A el2ah8l1BL1/AgnYX+ESbaY+e+UVtC5uRC6G9X7X9lg57y3jsjolf6vZxawBh73QiGG4 qSZmPMZ/j+5C9dTew2A2S3lOOgphzxImb7aKKzSg0y8yIVlV/ciD4/GpB23TGDZlX889 E4RQ== 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=OuviWmwVVGcZsnMLC2o1CnZqcu1nyaFCQtjiLXHKR7nLGM4UZWCjyl+ezjM9XUQLA4 RijnWnY2BRx7tJp3eSzeGqSIsXFmtFLVSc1/dcTISQc0EA/Lnuw1doDq6KxEASxsI/fM oQxMgDTcwxAKkOqDlNWDhk9tWIkzsJj3QQ2I0yrADexbe9Cmg2X/7JpwEoxt4TcpFcpJ fVf3gbIAw4d/98SNjCy1K/du9YiRQOvKO8GEe13vl+C01gtsCN5QxlvAcmWMpzAeF15m LDW9CDxZ0H48dauFLN2+t918mQtQuI6fo7lWGC5filFAv01gOfRHd+DJv9nWkf6kGdIR hXeg== X-Forwarded-Encrypted: i=1; AJvYcCWGj+/9XDY8t3o4C96tMiwHUymhvxrZXVa5a+ERRSuyG9C9rFOp9J04Tp8KLRqB1CO7ucUCsPFKY+fHMADpDlp0W2do3n1QhFIFWa3wi/68qqY= X-Gm-Message-State: AOJu0Ywn4PeFuvnCyx7mlx1n7wqJSpt7rDwZa5TFJRZClOlvmalLmTyq ONX1z/4qwPRXkWskaOiEPxTbfye8qBYupzfuO3lgwK6kLkkMv3pkHbyePGMgtYE= 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055039_344881_9065D6A9 X-CRM114-Status: GOOD ( 12.51 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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: 13747373 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 67A6AC52D6F for ; Tue, 30 Jul 2024 12:50:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=tbkY5SiNnJo7GA9pz4irFhGMOqxt2rl7qqHdhsOQa3k=; b=xZ6jX+JcqRHuL0 I4YoKxgMoQnGBcJ+sNV0s86uiZC7lrUNoL9CKnCsoQJ//OLAkHWDj/og4Gp44GxpZ6DdVYu08B7Kl lDEHgREaIG8f726RNv8FUItJCv+B/rrOJSWCa4+kUdi1VyH9c/pzSD9HX4CMqpDjg8agbAaCVSTFF vXG0Vwzvbs22rgP4nnfkYNQetxkX0elx6YliwK/lTdtS0SeTU6GiOxFIBLB6YexiHavpmgYk5Dd1n GKFB7Hh2K9Q625aenkI5IejE/9a17Ylf0R5JX/mCKbjFFUlDnrGOvkwPZelExr6JQ6np86xmH9Bu0 VzGfOQNkW65fP9/8mU+w==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJR-0000000FA0E-4A5V; Tue, 30 Jul 2024 12:50:46 +0000 Received: from mail-wr1-x431.google.com ([2a00:1450:4864:20::431]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJM-0000000F9tr-0EMt for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:41 +0000 Received: by mail-wr1-x431.google.com with SMTP id ffacd0b85a97d-3683f56b9bdso2055529f8f.1 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.infradead.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=PiBzlOhGBg9o3bRJqS+F7WAXWcdyF9gGDigiw4Xg4VCd7Zo9dPlhqg1ko2tk2eRZ1l fFy2B+0V3tjlHrKtQmvWYH7e8BOAn/nHpzc6Ztsn9VLqiHmrnIbe77LDbILM5dkBA2K3 bl89GIsns88Dt1kdyiwuLT0b92/pnWDjjkoJh5ODK+EUoirJcDnuadYolpWFDfkZ/ggv 0MSC0ieafZrK/+vqT7GibwZxhyaWwwfT7jPoEejuIKF+N5huc1a2EFWALEucvgGHGFau ftFnUwq4mAq5Bud+xIG1wJ8O1WfwXDgXymZcqjsGB8EOuJMtkJ/UucZG64iQuoSD+UhA iSFg== 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=ugWN16ds4uv3Nn1OLY4TdijlwCZgUMFSwMdulB2y+Dv7ZtzQfJhxuSE+vNXuol9tYY PGIsPZKjdaXVDUcq15P04QontKxvl3jAOQjPDkCwoHZEHhu76/owEci/ugH5qjjvTVdM f3Sk3isnq6AW4fjX9o+RjNZxIr/i6Sk+MeIK/jAoryahFrwCf5Tn2UPXl812yofVxzcU w/XaNtx3uZAbThhBobGUxT+7boASmn110UJEYPp+vVlin5v74RFDfp6Een3/c5MWsoIb RK42LZZZ5Ybi3FxPh681BD8eszUg6Prmx6YlvmH9i7HbjchVBkqZizVIHXyQNu5POKTp c7dQ== X-Forwarded-Encrypted: i=1; AJvYcCVlW/XO5XLFAphc6IyZ8OTTGlbfdokCBmSPKcpJbDqtgi8DcpqeM7+mEAjx/UbGOdy+ZypfuM5cepg5F7kLnPZC56dbgTXDN0MYonw9Sl01f0E= X-Gm-Message-State: AOJu0Yy0M4oQwf5n5N9/a+QU5FInqO4KAGI+klYkoAIRgolsJQw6QiDf OQ5fBXotkGI++hVMkSz4kooiKamviRg8KG+UhqyRiAwCfvGf7N0lEi1lcdcipRM= 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055040_113861_058FCD6A X-CRM114-Status: GOOD ( 13.06 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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: 13747371 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 44D3FC52D54 for ; Tue, 30 Jul 2024 12:50:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=1a95Eo6zepnVFpQ2MBoM24lS8bnqY3jUVs6+BoiQMwc=; b=ZDMogGuc+X/bLv xRBuR+Mtx+hJmugKH3tUxz23ltT4KL/K6kkhJvJ07DN562cVvy6yJuyhsT0y9ufcpcyEu3okK1UA9 P/q4sIM614d8AxU1ahfCgCRwcSBiAyYA0zFf3ovpUbvl6zWmr97hXYx8214nL6LghvJxT2gxeZRhr GyhxJIJBqBYIiSojL+X5n1jIBJxbquqExdrc3k/mRgh8HigwKPBofZaQxiAC49yJFXmNjPYq6HeHe YDHBSW7+ZdNC8iCzJarC4t4X81SMkRgKdCJN/jWxAZUGo3r1DNfKjYe8tnLV0GPYxMV2eTp9hO38b P8O1u7/tGXRyvZlLs9Pw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJS-0000000FA0w-3hTF; Tue, 30 Jul 2024 12:50:46 +0000 Received: from mail-wm1-x335.google.com ([2a00:1450:4864:20::335]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJM-0000000F9uJ-3Ywm for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:42 +0000 Received: by mail-wm1-x335.google.com with SMTP id 5b1f17b1804b1-42809d6e719so26935285e9.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.infradead.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=D3uPSOjXVoK7wKlkSwsWcVV9Nnq+WSqwESXZl/H8V5SM95SON3xDel8zFxTfxsaz5m tgnM2qm7wf9vHCMjbK7xdnf3Up5jqIgCVmgthRLmdTzFx/nU8AQ7z4N/NI2xaaIHjlfu dIzjz2lb09IiDTRbhyTkl50oaWnofC1n4EQVDdIGrRIGxRcChWEtz9D/Hf5lh5kMz5M3 jhr9FqQawqSD8Rbs0g3kM2rU7YMDIPzD1paY5J7DWkzXdeu/gEa3RHXfdw+FeB4L4Ng+ Hw8y5bU3/XjviezcXbn6ITz6WVsxHYcZ19mnfnyer43a2O60XQTmmR5a8AimM7kWXgKQ aWeg== 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=jFnQp/SzwOMRxL+gHgyuMOuZPNRlTLZmLgfl4fRu9zCxW/XdHcS6VjvzmSTZdDMPXt Z9PvrSkBdfnJo7EoNUD9/RYnosiD5fV9vUvR5/DFC8fD/kWpc2jKRqdXdSwe3PUc0r/7 aqQ4GZGbf/UzyeWiYhFrh6uCHUPJ+bAxh77nGo2Q9es5Ak7IbDTCNGXZawtIeJFTWEwS PJhFl+voUa43m+lykQTS6LtqWcQ2jZzuk4Y4+OflU2OC8TlQDZQy/uG2pxhqaO8UKEs2 4QK1dYAoUyaxdDJaxOM57tSGaneFdOjkADL8zMyymDPGfOUWBW2OlKZ2NCfWeW/fnFdW qGfw== X-Forwarded-Encrypted: i=1; AJvYcCVglIvEQczBY6o/yKDnGk2uvL6A9OhdSmq+X+GLk2ZTL4tGUoBkunpwqUnGmu/XGLxKrlOj0JDa+suQXXJ21u36PCFbRGkqZS9IZcFYDKEuF2U= X-Gm-Message-State: AOJu0YzhAQkzqGbsYwcdiXa/Pxrr3kYUS+QhmzecHOy/UJsRN5GJCx93 nQGW0bUrtjpS9RvCv30exeJ0AW5uGfywakSUNLooa7gqMXlYt65XS6Nri7Idal4= 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055041_057089_96350579 X-CRM114-Status: GOOD ( 13.00 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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: 13747377 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 19F2EC3DA49 for ; Tue, 30 Jul 2024 12:51:04 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=vVYGNRJkwIPbBRXEKtSJTM51FGlddWY4DcYxQy2C/YI=; b=D7eZfLHrotGZGE /AJ8FFO74a3D6lFGqEW+smrEo2Kf++4brGOB1fDfRhytbVHaaxgIip4CCO3PAoDXJzhzPPTn9KP+7 +LA526E0gAFZhB+KBWV3feDCBLvUfvu1cKYIUFbtqsbX3Q7ExT+PfLnTz/vuPmzWv4q9z8fQnvE+F NnIbe2THOcTg+qSfRwqEx2QlfeQcP1AvEiHcYV+/jaDgy0o00rNvBXLOkSV/iJqZpjFpvxWE4Ndk4 g8EuE5TuNVQpISRFdd3tJzlpUZR/n527MkG3c52TsBC944ql6RT7y1pA9rhT9y2g/xlSSn3c3K3XF 46wN9tj8DY3k9Bb4CHag==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJd-0000000FABI-3Q4X; Tue, 30 Jul 2024 12:50:58 +0000 Received: from mail-wr1-x433.google.com ([2a00:1450:4864:20::433]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJN-0000000F9vV-2w97 for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:48 +0000 Received: by mail-wr1-x433.google.com with SMTP id ffacd0b85a97d-368313809a4so1789060f8f.0 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.infradead.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=OTQBBeBpivsEvasNpXSWz7+9mwLxHW4R1fHxd+3SpUYcKWEyjkaZa01VcNImkYxGPB qHeZE6soOMz/ImvWs2YJ4j5UcZoE9aua0a4zVrnLUV0RlZaHQP45gWGkNvXpBEQBbrZm QJq7ywXH/Uk+QHsB/LxxjZfgPKTdunu0zAMSDEID/Xqx0OPmy85KClKiSLx8YRK/on3W xfy7K/3l3KXIFBLeBYJHwx7AYJmQzE7p084sPr0qnBfeTNVgWsq3VFrXNeYYC/AwUnh9 EKbUxGzri3mhwOmuo53Q2dujy8KTOTbhkgNV32eArYW8+lomn1tMsGlBN5hxILJCXhfg sQMw== 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=YN4+CfSRGRzs5GYdMnrrxvixPVkh1Ff4DIs+atTI6l6JjMPJ9uFAdtEHuIDQeCrHpZ qUNj2xysAVHdW8O6HT4o93M24eLeWNXrArR98/3Jj/zJn73sB+DudA08TnIXdzBd2ngX W3dp0YHjXmGPTB2+tmypYzy0tJja0RHnL6ut6L92+NR53br2kOjqRFEU4ipxgISYeMMh HlroTM9HZOZVoZYCOQ4RraKBoTTlPxMi6JfyiQWG4egcm++cjJKbHq/MewHTm0M0/qUw lSoYTSRalUyGm1HDMPULsRvxxi/XFVQEd2uPcvLZR2AO1UJ08JyIAdw9VHrzj5xOc2b+ jYCg== X-Forwarded-Encrypted: i=1; AJvYcCXNQm4xMahRuzypWgZ/+CIZpS7hBxkq6OSluZjaa83r4cBjyIFex8f/2cSXb109Fs7geCFmoUzUVQq2hzdIOnD9rhLnKSa+/VXigMBWv7Dt6fc= X-Gm-Message-State: AOJu0YyPrIMZBmjBIIgSr8kQaXzZU678RR69s8ooKQQoUS0itQOwOgDn VSyXeavj4G2I+pO+yLynbLIawoMcvs3u6HoYFzZmRb9h7OCJSy6VpZHFtt9VnYo= 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055042_009405_8877087F X-CRM114-Status: GOOD ( 24.13 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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: 13747375 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 16956C3DA7E for ; Tue, 30 Jul 2024 12:51:01 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=P5/U6SGpmrpMN9LWR3utjtIHuZ8nwIyNltgw0czdvVw=; b=FCzuz7yI30x6gE ArBGQZJJQT82HZ1ePnJrE5Dm7i46AP0K0FlkECLRA3ZdlOrLem0XgLY3e6lUXIor0VwI03k9KGE23 rRmYydNcA15F77yN/Q655Arjuf0FFuUvfN5vG+Y5AmfVkt7AnZ5hk79YTHMAwruvV0fhcHnfJTg4o 7rc7YiTvZrGq+MDM/4/tivZhGh9WnbTMr9OeHasbWAlTPEevWgtHeFW+0quLFezdqv4lzhTVLgFMe 5TmV7/PVUXk+cZHbrmhW2FXGjxAm0FYrjd4v2JJ3GxRi1+xnrW3pgoR9+J7iUrKxXZ+BYzyYg7qNy +WcLPk4myY6PAVbek3/A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJZ-0000000FA7c-3adT; Tue, 30 Jul 2024 12:50:53 +0000 Received: from mail-wr1-x435.google.com ([2a00:1450:4864:20::435]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJO-0000000F9w8-272U for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:45 +0000 Received: by mail-wr1-x435.google.com with SMTP id ffacd0b85a97d-368380828d6so2765034f8f.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=1722343841; x=1722948641; darn=lists.infradead.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=xWoAfbAYIEqziyyWz1RT4b2J9OxdDfM7y/MRaAUM4W4oaWouoo3KwZurONYjVu3Zfw XCiJYlEsE8gthEykZ+VyfpPkJK7i3rIgqlJpGRxaWRIEhZBCQ8V6MC753F+B375/Az1p 8wp4B8LwMYTzM7p3QpxQGDSj7QL54V2ZNu2lB0TDoitA6iYsKSnGag1CfIK6bS7u3uFl OiWnC0E1jXmgwf04R0dutFrPifBH8zsIFMZu5MQ/DUOvZDu/nuRuRXMJ6pUsMcu/l5oL oGcm2nFg3qaJed55KEQUA8psD12/2UZx9VN45t+A0Q6PSTghsEje3TSHuZ74AAMDzLqb ZIOA== 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=NgMjlBXAvcX2E24P47IZZGXJEPIjdN+2Dxehczy+0a3DKPOLgXuZWgjjMX7rKoJciB 2lZfJxhTsW3kvh7o6vzIhXswTC/bltcsHFalvcwM9Xn3t7P+KQ6ZmLZr7JgX+crElINj 5p6Tl22qUENKJLuHSjIbEfCFDaLKXN3IvTCcz9v543IVeyvVwI05NdOHO6S5J69WGfL7 RN+OooZwsAWXAIGaKMtYvSsm23eMNQV8AwgyhPV3OlYhZdSAVrfPgtXyX0Luc5hIYxDY SNMth6X/UMRnHbkmk1AF8HgG41o3NJvXPlVu/iLbD5ZlV+FFA0fU5TItULfra9hXU3fm 4Vsw== X-Forwarded-Encrypted: i=1; AJvYcCXmTS8igPgW6EQFW+FlCdx9uALYs7+nv07FhmbrdM3vZxkuoLuL4EHYMBY493Y7m0P5t8lhcRnO+8O6pcbIhj36l9HFbXomZiJKugSeWUq7/40= X-Gm-Message-State: AOJu0Yx9R31YmBrJ6k0vTRswiE/h860SHWXGGYCRtibcIhI+87v6RSkV kqkk+apiZK9HHh6x8zpjQfgPwX9q7NVYiPqioQAHoMzpO+217J680pjkYA27RI8= 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055042_945837_2B733D99 X-CRM114-Status: GOOD ( 19.77 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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: 13747374 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 613D2C3DA7F for ; Tue, 30 Jul 2024 12:51:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=BUY/1tzxDjG4rj0Vmri5Tb7RypV7p2edFd91QlH6uP0=; b=CH6uih5hYHk2I3 KHP0MDZKlGZBzU/iJPaA5dE7E01h/omizOMfkoRGnmU7FQnZTkDqKGMqCKvRUw8untIOMcE3Rkano VoYj/HVj8JOKRgdMjU9Qxjvj4OkRDP8MSOK8iivyVFx8mi4+/IM2BywGnv6f/JCgKZ2V42v3T+CAV xrhnrgBFW1J7CmaO2czloAnSWb0gvrMfVQiCrGdsj0+FMOHV3Zf3Td8nHFgP4qKwNsWi332NxWXkc Ge8deJ2nBPmIEbm72Mw70s0x5JywCcjjhF6h6v1l81fCuc88JfT/6JFYJm43LXXRD7hDXMQ0CXM5h ZUFpv2SDhVGv1jpnV2jg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJb-0000000FA8y-1UZA; Tue, 30 Jul 2024 12:50:55 +0000 Received: from mail-wm1-x333.google.com ([2a00:1450:4864:20::333]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJQ-0000000F9wn-00Wi for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:46 +0000 Received: by mail-wm1-x333.google.com with SMTP id 5b1f17b1804b1-4266f3e0df8so25844055e9.2 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.infradead.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=TZMd73lKDlXNxmmY+GmNRBiDW+9EKhcTVd+f5sgVvvkqAZvBOKAZsPBIfIT22rWrRW VFKM4tEyWclNuNaq+5o6SjBy1ddodbqSl/7hE34fHzOzQsl7Ot0qZCB9SQZ5OZ0wzQ4t mQyYOLhjTnjX79c4OJLW1GZp5YhmEom9JOshPwCgm9rupAaZvo9xWjMO6ZYsZw15HDHv Nj10mWMPQ3gJuqnaWYDtbsDXVWBvPtEayel3f543vL/HsRTNKk7yQMb2D8c1R4J2vaWi n3/3UGTS55lF+oIYvWZaqb1uSjBsNa9QA27XyOBCR/V+i7r1sRDMzUinMemXUyCTvDR9 v/cw== 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=o+cUcsIXMPPZGQt1lc6GNtBcLZBoco6dCj3XnBVlA+pobPu/utyb2JjWRic1nHWQx2 61zGposHfBMdaTC8TW97gK0Wy4Xghvksl1YYWeoCZhaF8ysMhrCar+6SK9DpGLgN8A++ xxNJwL9GPMJO0yLTSbS5nM7YdActgDsn/v5BN/isHjURP2JRmpoBeJW4oYgwP3W75OFH tGlhpt3TyPecEzUN9CQf2LRwCE4KWhJ4soQauAOukbsH4T/M6RxruJ2qPP5P6K+HYGUV 3DWQZRFOGxJtdto8V5pahGqBKJl3WFTZfsVW+KSqE+PTen5mYazklhTsx21VqbncZVe9 sgHQ== X-Forwarded-Encrypted: i=1; AJvYcCVX4DbhEagegyZJSLT2cblQyIB3wlBqTqTGHV604Xhj6JVe/pzEOXkjRNnAsifiwVnwTrc6la3jMV5lOZ8+RChD9vwfmh1hjH4ooI2BdgORgdc= X-Gm-Message-State: AOJu0Yxn6YPP1tK7arjDShfNg9pujTiwWIkV/VQKGn177YhnazC96aNg ilDjNK90thFmKu33kyArkA4iuD1q078J3BGXD9WcEyupxHSIfQFw0SUpAxMF4S8= 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055044_082405_3B87B5BD X-CRM114-Status: GOOD ( 12.45 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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: 13747376 X-Patchwork-Delegate: neil.armstrong@linaro.org 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 36D59C3DA7F for ; Tue, 30 Jul 2024 12:51:03 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-ID:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=4KhKb25F6SlmzQyevPx8WrZq52bwxanNsm+ZxHDTqRs=; b=v646rYnUXtTw0K MH3QCgUTqi3TiW5AQb482vDLJ3TbruvaZ3bm1mScj9CYV227NmLxWKGK50PJypuBgTqwZenREp1rC NA2J/U+uM51nfTfhsg2TxgDAvGjt8j/dchwtYCXtuzqQ9YU2L1yqgql3ffoswiwUeuWmnzg6Xgw78 FZyEEJOexhyqqyDFjJyyhLlLBQhzeh+ITuCYOfwPhMYWjasuKHi2DJQaN1n/Tjpzett3EOHKJYqab VaOELYT/o7CIJpIkt2gY1x+jHbY1kok5UoJrS0VWcJzSu/8RhMZUqT0PIB0Qpo/7UOsukivqNqNG6 MWo1XWCWNOVQm4XvTd6A==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJc-0000000FAA8-1r9W; Tue, 30 Jul 2024 12:50:56 +0000 Received: from mail-wm1-x32f.google.com ([2a00:1450:4864:20::32f]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sYmJQ-0000000F9xW-2uQH for linux-amlogic@lists.infradead.org; Tue, 30 Jul 2024 12:50:47 +0000 Received: by mail-wm1-x32f.google.com with SMTP id 5b1f17b1804b1-4281f00e70cso15242655e9.1 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.infradead.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=v3TgAPwogLbsTdaaS2Z4FdaudJLXVaTG0GdkwAPJPPw+dNNhWdu09JkEYCmLaZ2/DM dFEaEAmDLCly9JG97zRmZGzSxjrZ0avZWEQH+CTcDqD5h4hz3iUtTKvqki9eaq1BljaF 4wcCg1vFOFIPfoGCBZ0zOHkMcR8ZHYJEYykOItJUAxS8StwbaJ+S+YpRjEINQAXgnM7O 37E9tPZKFRO9y2ZtyXwtd1rRhaZThMTNwaatqMFeNb6QlzD87c3lpZqqwugE53J/dU8g TlD1bsebKv7KWyImQ8SNTE+s18uxTv9PcXHZR76sqDf5FKOpPRNuO9yKjdVmQCH323rn BXlQ== 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=iuCEfy2BJSHDeW2JaIOAio13aMstc9hexGef+JnXd0gXoG15GtyyRzbFuPpaEWhQ6R qoyzpxnzNErAajDN+UCV1J/30hH+eUwDtl6exbYHsM8ENHrEyb+uWn7jLWbUu/b6VUuJ WejMezYWWy009ke7EAWcXq+Pm5rqyCNiVVaZpfkImjMejYXSrXnQjwKqVyiEr2eggexi LC3gTrNquTJH5e5TULsuNbupT0PlwPqZAKMNLYlbBNyFAyXpF+jcsvDlO75bd8A6Z8Hu 7xUrK2ipEVSBmFtcXwcJO46i60HKw4lZXAx0PYwLhFhdxR7Gle7zR+JmJINXIpI3w+0b ck4Q== X-Forwarded-Encrypted: i=1; AJvYcCWZU8/zwCmwavwbMbcdujB3e+mbj7AZ0r2e/2BaHH+IEJiBoTSqUHV1aaX00pMX9sd66IGV3n76T8Ul8Rd7fInZ2tE/jRqSYpTqBLwaEnMD5gI= X-Gm-Message-State: AOJu0YyYt8GfqLZ8a+mDJ0d+S4l4P+x5h12DlV3qrm+1T8dscdRspfdW eVKi/ZTSOzm/KfSS4dmGJSTXgS7m5mH4tVaZJ6aOK2WhFaYv+QMJO54Ljd+7asg= 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-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240730_055044_924237_E6572443 X-CRM114-Status: GOOD ( 12.53 ) X-BeenThere: linux-amlogic@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-amlogic" Errors-To: linux-amlogic-bounces+linux-amlogic=archiver.kernel.org@lists.infradead.org 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);