From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 6C0EDC433FE for ; Thu, 17 Nov 2022 04:59:32 +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-Type: Content-Transfer-Encoding:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To:Subject: MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=mclis0TrTn0fAbH4iJ6EGYjOIMZMcWnb86vH0RcgpRA=; b=C1ZEUiU1y30Jmf 6kN1Efxn3G0X8/qPvF55/I2Wqsj/W9tdneG+Tx6m0oVOqJLqSSogEPY1yuPPa/hAfOK/Ib/JTTe+1 TgxNetgofHZZTfkjdys+ypqZQAN8LIBz+VRtWU1aybeILaiJ2C3XqAg6FOZp7ksABIZYE7s6c/1aa dTox6W5iJXEAMX8ggy6FzSIZClcCu1F82ApipYg/5KJyKydjJhvRdTuHLWde9F9sPJkDscPFc3q2o F8r3kGSHuQmIR7JFByGfzpp3BR6RYHAFgRTEJGm9ImXxPsN27eOh6LlHkDI0kDFVuISZr/Ylo72xI gS4ZWOCMgAOdiVqU2XJw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1ovWyj-00AIjd-CB; Thu, 17 Nov 2022 04:58:21 +0000 Received: from phobos.denx.de ([85.214.62.61]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1ovWyf-00AIhh-FV for linux-arm-kernel@lists.infradead.org; Thu, 17 Nov 2022 04:58:19 +0000 Received: from [127.0.0.1] (p578adb1c.dip0.t-ipconnect.de [87.138.219.28]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) (Authenticated sender: marex@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id DF00B851C0; Thu, 17 Nov 2022 05:58:09 +0100 (CET) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1668661091; bh=H75EdlqcmUQ++use3EJrvAxburWA1YNFKBN6VdzLs40=; h=Date:Subject:To:Cc:References:From:In-Reply-To:From; b=oY3SaVFCj7rrR8HBaKH/bz7jQ1FT5fF6hPm0rsNm4A8TSTtBGTCf85SL0eaQoeWeL o5blLz5/yLhw8wW7mSo51epgCuFi/sDc7bvqQC1D8NIZWwtYHuVFYLgtq5Hti0Yz6I 45Tc21agQDdO3AEMkJuDcWSZNnCkrUJJz14fKq+kgns0yfslVi9XLmWEGPwwVBL5MC R0ACna4JDbnyNNjtvja6GXagq/9zdFqOINbBNjhB3kQ7wDwHG9ElaCsP+5LrAf1wqK P/6phoZ95aonXCdaKAT3fxXvaQaTSfRtATYpZycQTVbk2J8WGmqmi/pry5NS0YQc4i TJGPZ5bU2mjig== Message-ID: <04fb17e2-1b55-fbd9-d846-da3e3da4edb8@denx.de> Date: Thu, 17 Nov 2022 05:58:09 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:102.0) Gecko/20100101 Thunderbird/102.4.1 Subject: Re: [PATCH v8 06/14] drm: bridge: samsung-dsim: Handle proper DSI host initialization To: Jagan Teki , Andrzej Hajda , Inki Dae , Marek Szyprowski , Joonyoung Shim , Seung-Woo Kim , Kyungmin Park , Frieder Schrempf , Fancy Fang , Tim Harvey , Michael Nazzareno Trimarchi , Adam Ford , Neil Armstrong , Robert Foss , Laurent Pinchart , Tommaso Merciai Cc: Matteo Lisi , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, NXP Linux Team , linux-amarula References: <20221110183853.3678209-1-jagan@amarulasolutions.com> <20221110183853.3678209-7-jagan@amarulasolutions.com> Content-Language: en-US From: Marek Vasut In-Reply-To: <20221110183853.3678209-7-jagan@amarulasolutions.com> X-Virus-Scanned: clamav-milter 0.103.6 at phobos.denx.de X-Virus-Status: Clean X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221116_205817_956456_135D0572 X-CRM114-Status: GOOD ( 24.85 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 11/10/22 19:38, Jagan Teki wrote: > DSI host initialization handling in previous exynos dsi driver has > some pitfalls. It initializes the host during host transfer() hook > that is indeed not the desired call flow for I2C and any other DSI > configured downstream bridges. > > Host transfer() is usually triggered for downstream DSI panels or > bridges and I2C-configured-DSI bridges miss these host initialization > as these downstream bridges use bridge operations hooks like pre_enable, > and enable in order to initialize or set up the host. > > This patch is trying to handle the host init handler to satisfy all > downstream panels and bridges. Added the DSIM_STATE_REINITIALIZED state > flag to ensure that host init is also done on first cmd transfer, this > helps existing DSI panels work on exynos platform (form Marek > Szyprowski). > > v8, v7, v6, v5: > * none > > v4: > * update init handling to ensure host init done on first cmd transfer > > v3: > * none > > v2: > * check initialized state in samsung_dsim_init > > v1: > * keep DSI init in host transfer > > Signed-off-by: Marek Szyprowski > Signed-off-by: Jagan Teki > --- > drivers/gpu/drm/bridge/samsung-dsim.c | 25 +++++++++++++++++-------- > include/drm/bridge/samsung-dsim.h | 5 +++-- > 2 files changed, 20 insertions(+), 10 deletions(-) > > diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/drm/bridge/samsung-dsim.c > index bb1f45fd5a88..ec7e01ae02ea 100644 > --- a/drivers/gpu/drm/bridge/samsung-dsim.c > +++ b/drivers/gpu/drm/bridge/samsung-dsim.c > @@ -1234,12 +1234,17 @@ static void samsung_dsim_disable_irq(struct samsung_dsim *dsi) > disable_irq(dsi->irq); > } > > -static int samsung_dsim_init(struct samsung_dsim *dsi) > +static int samsung_dsim_init(struct samsung_dsim *dsi, unsigned int flag) > { > const struct samsung_dsim_driver_data *driver_data = dsi->driver_data; > > + if (dsi->state & flag) > + return 0; > + > samsung_dsim_reset(dsi); > - samsung_dsim_enable_irq(dsi); > + > + if (!(dsi->state & DSIM_STATE_INITIALIZED)) > + samsung_dsim_enable_irq(dsi); > > if (driver_data->reg_values[RESET_TYPE] == DSIM_FUNCRST) > samsung_dsim_enable_lane(dsi, BIT(dsi->lanes) - 1); > @@ -1250,6 +1255,8 @@ static int samsung_dsim_init(struct samsung_dsim *dsi) > samsung_dsim_set_phy_ctrl(dsi); > samsung_dsim_init_link(dsi); > > + dsi->state |= flag; > + > return 0; > } > > @@ -1269,6 +1276,10 @@ static void samsung_dsim_atomic_pre_enable(struct drm_bridge *bridge, > } > > dsi->state |= DSIM_STATE_ENABLED; > + > + ret = samsung_dsim_init(dsi, DSIM_STATE_INITIALIZED); > + if (ret) > + return; > } > > static void samsung_dsim_atomic_enable(struct drm_bridge *bridge, > @@ -1458,12 +1469,9 @@ static ssize_t samsung_dsim_host_transfer(struct mipi_dsi_host *host, > if (!(dsi->state & DSIM_STATE_ENABLED)) > return -EINVAL; > > - if (!(dsi->state & DSIM_STATE_INITIALIZED)) { > - ret = samsung_dsim_init(dsi); > - if (ret) > - return ret; > - dsi->state |= DSIM_STATE_INITIALIZED; > - } > + ret = samsung_dsim_init(dsi, DSIM_STATE_REINITIALIZED); This triggers full controller reset and reprogramming upon first command transfer, is such heavy handed reload really necessary ? _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel