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 E1E54C4332F for ; Wed, 23 Nov 2022 20:10: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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=GhZm0xUqIl1Opf6pgGUNBIRINWnhrYyWWyqBiRDNatA=; b=JHyFWYjz9oZFHD O7ZGa3cNzXs5oBfCLcIzr1MuemRsbgNhdBNtnRXA0YgJorKDtu0SugdsL3nzUgUw4Kv44zyXKjrWd Mg6gGGNjLqbHNM42qvBFYenYZwSkOb5ydIuVX7jKb9SFH8SDa91MD/B4bE+KPLQVHqVhHhHbjU5Se LG6xHPKwa8Vl5n8bA928iK5eDbhl4i+9a2CcCl8K0xAx7qD0GvaVL0ziEzkYWBd4B8p6mEVhBocKH yuNJ7q+hOd7alV2Vvm0U9S0xpUC8QwRLdo785GILg2F2jVaLdy/hdnLYtd5zZkNJKBigWaHEgzhwM 2IVGsqemORX+l5MyxohQ==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1oxw44-0029Oe-QI; Wed, 23 Nov 2022 20:09:48 +0000 Received: from mail-io1-xd2c.google.com ([2607:f8b0:4864:20::d2c]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1oxw40-0029LA-Sx for linux-arm-kernel@lists.infradead.org; Wed, 23 Nov 2022 20:09:46 +0000 Received: by mail-io1-xd2c.google.com with SMTP id z3so13972315iof.3 for ; Wed, 23 Nov 2022 12:09:38 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=amarulasolutions.com; s=google; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc:subject:date:message-id:reply-to; bh=+NmSKYTm+4EXQGx4rpOu3VMvA2Vnb2EyVYmIAKmYijI=; b=qG9uq1dHY6C4KsDJDBhv+jT482M2w4vT9U73QerpU0Vkz0g0q6FQVi738XhydqowE5 tD0Q+mn/Q8kPUoWMVZPN0+Bfep94lTkT5s2PAaiRcwhpGs6XrfQLpU7JNcWJIp5DSPDl gAFDS9Aq36461s5l87lEDes0XOKsI7PZDqCx8= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:x-gm-message-state:from:to:cc:subject:date:message-id :reply-to; bh=+NmSKYTm+4EXQGx4rpOu3VMvA2Vnb2EyVYmIAKmYijI=; b=55DvqyhThadeTeSju5DebS44LZJa584TUYijdShCRyyoEfZVSc0BfiewAGWlMYo+Xh S4vLVZOhslu6KrlaofC5iXBwTGyNNL2VEHJp2kURAOnYGsEPAXZLVt5M5xj8/cBbTsl2 /WAkxCYQ9dcyA/qssye88E7KT1SnAasaqaCAJNwKYpu9Lj+Raxk4sYTs3lWoL/3pO2l8 rWjyR78+MP88bAGrEGLmObOIU9cqJITV2DQUStWVXcS5ldIkh7P70qpDqXiT9IajKwwg gaBNkGEEFd8mKtyOsUq9zlKs3ZHEq6ZMe9uqG/M2p67JSU/CrGCVhC8VpooVBlBG46Z0 JmBA== X-Gm-Message-State: ANoB5pn8mhTH6cWgtS1HVew4ev+5Pfbzvgh75oV/vfr+ZP+hwOsW1Ee4 dqTLYiRk0jhA5aPvuIURiO9We1q/C7JzUyCgZzweQA== X-Google-Smtp-Source: AA0mqf7DmEM1Zp1a+678ACxDv6NMQTQuOR0LAfjZVPBj20palYUDVyDIB3pTU+suIuwtvZuc/4a8hjUP9vrNekqc7vw= X-Received: by 2002:a05:6638:1a98:b0:375:61b2:825a with SMTP id ce24-20020a0566381a9800b0037561b2825amr14188511jab.147.1669234177851; Wed, 23 Nov 2022 12:09:37 -0800 (PST) MIME-Version: 1.0 References: <20221110183853.3678209-1-jagan@amarulasolutions.com> <20221110183853.3678209-7-jagan@amarulasolutions.com> <04fb17e2-1b55-fbd9-d846-da3e3da4edb8@denx.de> In-Reply-To: From: Jagan Teki Date: Thu, 24 Nov 2022 01:39:26 +0530 Message-ID: Subject: Re: [PATCH v8 06/14] drm: bridge: samsung-dsim: Handle proper DSI host initialization To: Marek Vasut Cc: Marek Szyprowski , Andrzej Hajda , Inki Dae , 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 , Matteo Lisi , dri-devel@lists.freedesktop.org, linux-samsung-soc@vger.kernel.org, linux-arm-kernel@lists.infradead.org, NXP Linux Team , linux-amarula X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20221123_120944_971812_D186CB4A X-CRM114-Status: GOOD ( 32.22 ) 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-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Sat, Nov 19, 2022 at 7:45 PM Marek Vasut wrote: > > On 11/17/22 14:04, Marek Szyprowski wrote: > > On 17.11.2022 05:58, Marek Vasut wrote: > >> 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 ? > > > > Yes it is, otherwise the proper DSI panels doesn't work with Exynos DRM > > DSI. If this is a real issue for you, then maybe the driver could do the > > initialization conditionally, in prepare() callback in case of IMX and > > on the first transfer in case of Exynos? > > That's odd , it does actually break panel support for me, without this > double reset the panel works again. But I have to wonder, why would such > a full reset be necessary at all , even on the exynos ? Is it breaking samsung_dsim_reset from host_transfer? maybe checking whether a reset is required before calling it might fix the issue. I agree with double initialization is odd but it seems it is required on some panels in Exynos, I think tweaking them and adjusting the panel code might resolve this discrepancy. Jagan. _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel