From mboxrd@z Thu Jan 1 00:00:00 1970 Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.remote-ip=210.118.77.12 ARC-Seal: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; cv=none; t=1793262475; b=oIUPaYyj89O8Ndb3s2ZHCZsCYFP8z+pXV4rWboY6nqcarjiAHYiARoHh7W8t+gG4SkCE Mm6T96vrFALb+z2MU4AL/coH+qdDdFVYpSI4U4a+GKfOV0UJLxbc1hqwEBANEVFC77+zN bhHgXs1H5sFl3R2Sg/8k8vOmyt2ca5tKLDUURAokc0+Mk9gjsaXCUWeUxLRBQLO6NT0bz 2uYp2e4tO7yHPH0SrOim0m6YxHQx0piQJbbF5JHx8+gkq/eML9GXNZVnGLHc4BUP4YpX9 hSoxWd+pG5Q5UvsWJUdcN4i0P/iLxXOfaUvxqywOrUsWiqIPnUfIogw9cnwNddfWRUw== ARC-Message-Signature: i=1; d=subspace.kernel.org; s=arc20261015; a=rsa-sha256; c=relaxed/relaxed; t=1793262475; h=DMARC-Filter:Received:DKIM-Filter:DKIM-Signature:Received:Received: Message-ID:Date:MIME-Version:User-Agent:Subject:To:Cc: Content-Language:From:In-Reply-To:Content-Transfer-Encoding: X-CMS-MailID:X-Msg-Generator:Content-Type:X-RootMTR:X-EPHeader: X-CMS-RootMailID:References; bh=gtkThhp7HAR2Inex6AHRIVWwfpvzSe5F6c2HI/CDFLI=; b=JsCzm4MpCdcPma1D1Lncc4gAERvOMfjuYuyyON6pTkRU8oNHGwrmD+TQkiPB3Sfe4G1I Xk2Y7iQFZ/Y4gCHZX2oFtLVYoCKHOMUGLDG35F1uYBQY//2Zc/jGO5DrLLhhb8TpcoPny vY/5PSXMft5/bVT1Ss/7qgbMYzoaityVdnf/W5Mz9ShVB9xCl3NHkoLMW3q5e1gpLQ+Qx 7fXPjbIVeF2yNP0NVAFO1h4bZYy7TAStwxb7zT0+gfI1Wr/y56tLaT6AlCCmGrpht4Wba 3wcxn7I0BqPg2eubvcs+qEfsGMqZHAQ5Ky449xFJXaX9DVF5Mtwm9h902IN0qUvDuGg== ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass header.from=samsung.com; spf=pass smtp.mailfrom=samsung.com; dkim=pass header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=FIGBN9fR; arc=none smtp.remote-ip=210.118.77.12 Received: from mailout2.w1.samsung.com (mailout2.w1.samsung.com [210.118.77.12]) (using TLSv1.2 with cipher ECDHE-ECDSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2CC6E606A31A for ; Thu, 29 Oct 2026 08:27:54 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.4.2 smtp.subspace.kernel.org 2CC6E606A31A Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=samsung.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=samsung.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key, unprotected) header.d=samsung.com header.i=@samsung.com header.a=rsa-sha256 header.s=mail20170921 header.b=FIGBN9fR Received: from eucas1p2.samsung.com (unknown [182.198.249.207]) by mailout2.w1.samsung.com (KnoxPortal) with ESMTP id 20261029082752euoutp02f8da8e1bbe96d05e87878fdc6286a80c~i8ret3QOv2653326533euoutp02Z for ; Thu, 29 Oct 2026 08:27:52 +0000 (GMT) DKIM-Filter: OpenDKIM Filter v2.11.0 mailout2.w1.samsung.com 20261029082752euoutp02f8da8e1bbe96d05e87878fdc6286a80c~i8ret3QOv2653326533euoutp02Z DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=samsung.com; s=mail20170921; t=1793262472; bh=gtkThhp7HAR2Inex6AHRIVWwfpvzSe5F6c2HI/CDFLI=; h=Date:Subject:To:Cc:From:In-Reply-To:References:From; b=FIGBN9fReDJodzfMzBXaOENYqA6b4tTsue6GFNMj62QZ5y3M+Nw4b3DLcC0qOklA2 IZcAIk+OEP4qtBJ4ZqoEKPvu5V8q1vWtmxRYj63v60IHrWc8EWtrQFjuh209vGUaE2 mbLDKIybckrKXXv1l/Uex5TI7ki9ZhULmmnTFtd0= Received: from eusmtip1.samsung.com (unknown [203.254.199.221]) by eucas1p2.samsung.com (KnoxPortal) with ESMTPA id 20261029082751eucas1p2453c151aaaaf4dc156fecaa44b339ef2~i8reQdPDF1008610086eucas1p2d; Thu, 29 Oct 2026 08:27:51 +0000 (GMT) Received: from [106.210.134.192] (unknown [106.210.134.192]) by eusmtip1.samsung.com (KnoxPortal) with ESMTPA id 20261029082750eusmtip168d8b64350b4dc54d7804c97473cdeee~i8rdAMflV3276632766eusmtip1K; Thu, 29 Oct 2026 08:27:50 +0000 (GMT) Message-ID: Date: Thu, 29 Oct 2026 09:27:49 +0100 X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Post: List-Help: List-Subscribe: List-Unsubscribe: List-Owner: Precedence: list MIME-Version: 1.0 User-Agent: Betterbird (Windows) Subject: Re: [PATCH 1/3] drm/bridge: analogix_dp: deassert DP_PHY_PD on power-on for exynos To: tb@a-marquet.fr, Andrzej Hajda , Neil Armstrong , Robert Foss , Laurent Pinchart , Jonas Karlman , Jernej Skrabec , Luca Ceresoli , Maarten Lankhorst , Maxime Ripard , Thomas Zimmermann , David Airlie , Simona Vetter , Jingoo Han , Inki Dae , Seung-Woo Kim , Kyungmin Park , Krzysztof Kozlowski , Peter Griffin , Alim Akhtar , Douglas Anderson , Jessica Zhang Cc: dri-devel@lists.freedesktop.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, linux-samsung-soc@vger.kernel.org, Lukas Timmermann , Henrik Grimler , Hendrik Noack Content-Language: en-US From: Marek Szyprowski In-Reply-To: <20261027-drm-misc-next-manta-auxbus-v1-1-3a45c3cf531d@a-marquet.fr> Content-Transfer-Encoding: 7bit X-CMS-MailID: 20261029082751eucas1p2453c151aaaaf4dc156fecaa44b339ef2 X-Msg-Generator: CA Content-Type: text/plain; charset="utf-8" X-RootMTR: 20261027120921eucas1p2af4aec7a911cbb07018a91fcf82a8c32 X-EPHeader: CA X-CMS-RootMailID: 20261027120921eucas1p2af4aec7a911cbb07018a91fcf82a8c32 References: <20261027-drm-misc-next-manta-auxbus-v1-0-3a45c3cf531d@a-marquet.fr> <20261027-drm-misc-next-manta-auxbus-v1-1-3a45c3cf531d@a-marquet.fr> On 27.10.2026 13:01, Alexandre Marquet via B4 Relay wrote: > From: Alexandre Marquet > > On exynos platforms at least, calling > analogix_dp_set_analog_power_down() to power on (with enable=false) CH0 > to CH3 or the AUX bus currently produces no effect, unless the function > is first called to power on everything (by setting block to POWER_ALL or > ANALOG_TOTAL). The reason for this is that DP_PHY_PD being asserted > (which is its default state) renders every other register bit > ineffective. > > This is particularly an issue for AUX bus initialization, that tends to > happen before anything else (e.g., to request EDID), and thus, before > anything has any chance to request a power on of the whole analog > section of the chip. > > This commit allows analogix_dp_set_analog_power_down() to power on any > block, by deasserting DP_PHY_PD if needed. > > Signed-off-by: Alexandre Marquet Tested-by: Marek Szyprowski Snow, Peach-Pit and Peach-Pi Chromebooks work fine with this change. > --- > drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c | 19 +++++++++++++------ > 1 file changed, 13 insertions(+), 6 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c > index c1344a3f013a..9f634d4e4793 100644 > --- a/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c > +++ b/drivers/gpu/drm/bridge/analogix/analogix_dp_reg.c > @@ -256,6 +256,19 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp, > if (dp->plat_data && analogix_dp_is_rockchip(dp->plat_data->dev_type)) > phy_pd_addr = ANALOGIX_DP_PD; > > + reg = readl(dp->reg_base + phy_pd_addr); > + > + if (dp->plat_data && (dp->plat_data->dev_type == EXYNOS_DP)) { > + /* On exynos, register AUX_PD and CH[0-3]_PD have no effect if > + * DP_PHY_PD is asserted. So, when powering any of them up, we > + * need to deassert DP_PHY_PD first. > + */ > + if (!enable && (reg & DP_PHY_PD)) { > + reg &= ~DP_PHY_PD; > + reg |= AUX_PD | CH0_PD | CH1_PD | CH2_PD | CH3_PD; > + } > + } > + > switch (block) { > case AUX_BLOCK: > if (dp->plat_data && analogix_dp_is_rockchip(dp->plat_data->dev_type)) > @@ -263,7 +276,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp, > else > mask = AUX_PD; > > - reg = readl(dp->reg_base + phy_pd_addr); > if (enable) > reg |= mask; > else > @@ -272,7 +284,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp, > break; > case CH0_BLOCK: > mask = CH0_PD; > - reg = readl(dp->reg_base + phy_pd_addr); > > if (enable) > reg |= mask; > @@ -282,7 +293,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp, > break; > case CH1_BLOCK: > mask = CH1_PD; > - reg = readl(dp->reg_base + phy_pd_addr); > > if (enable) > reg |= mask; > @@ -292,7 +302,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp, > break; > case CH2_BLOCK: > mask = CH2_PD; > - reg = readl(dp->reg_base + phy_pd_addr); > > if (enable) > reg |= mask; > @@ -302,7 +311,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp, > break; > case CH3_BLOCK: > mask = CH3_PD; > - reg = readl(dp->reg_base + phy_pd_addr); > > if (enable) > reg |= mask; > @@ -321,7 +329,6 @@ void analogix_dp_set_analog_power_down(struct analogix_dp_device *dp, > else > mask = DP_PHY_PD; > > - reg = readl(dp->reg_base + phy_pd_addr); > if (enable) > reg |= mask; > else > Best regards -- Marek Szyprowski, PhD Samsung R&D Institute Poland