Received: by 2002:a05:6358:7058:b0:131:369:b2a3 with SMTP id 24csp8430510rwp; Wed, 19 Jul 2023 09:38:58 -0700 (PDT) X-Google-Smtp-Source: APBJJlG91oFkrVHeElXhQQmqEJgvcwK8SnTVujulJw61GZ+ld7SN68pO6f3XQ1e1jsVb0ZqVQ3Ei X-Received: by 2002:a17:907:7f13:b0:98e:738c:6d39 with SMTP id qf19-20020a1709077f1300b0098e738c6d39mr2743003ejc.36.1689784737906; Wed, 19 Jul 2023 09:38:57 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689784737; cv=none; d=google.com; s=arc-20160816; b=FxQP0oSY0E/ZldUfewm2+VHEMiSO8hT8ziYJJZDvy3SlwPwtmT0MG9HtyagSoEmGtJ FxGNF31gvnfA8JBXdh1gh48xkA4joqs43FTZi9QkCG9iuAZtEwn7V0Xfsl4cvSQbct0R 7Vh0RB73B8zFvXqzjH9znRkRGGDa6fbRWmfUAsBeq4oCzY+z6zJN6GCGUW0MFAUaWVCm ohdL+bgVU6b7bt6BymEScMXMQuQbZPUOs253O4hTWMJhsQrTzmB3IyW/WfBgnO3m/8Jm I0gN9e6ICdJMtPUeWSCG8BxxmGHOGfmneKHqZTWQizWZVGJfDNjJFkm7sxoeIZYjle2d dVTQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:cc:to:subject :message-id:date:from:in-reply-to:references:mime-version :dkim-signature; bh=rY626uYekdcI/2JZDKpmPtCyOmOx8df+pfUdozN9YOI=; fh=TH06bXiH7qZWr/2z7tTXQOMfGE4rJ1HmPW7I2ScGmRY=; b=sxE5YALhn5YFxkGJP9XgOoo0XtyeE27E8N2lUm2X87MaUSgxtkvsEOQT0GuVHxP0cU +d8Nw4wq8hWA2BXaXmvOTk49tNBZLMhygmDX2MP6/a18vhU29TawXRmkqpRfxn0AJ7cw AO7ucbwppFRCN2mBjollzInKllgqyLvKP2SbRQa/mvRwHHAkVamxMCZJVMQF6Ydz9R7J Kx/HkQlw/WvrY8Nao8kVXWpZQVZ6Uc+hJSSidE11q6GXiTI8KwSbSlEIkxqsdyy6mbsq 2cYODTlBSsn1fB66TZv/ajQ4EKfjZZOgDT3IWZJ5PdqPbLtBBD3d4Xqik44Xu9q3KrGo 0Z0A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gateworks-com.20221208.gappssmtp.com header.s=20221208 header.b=naAbmlqj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id lg8-20020a170906f88800b0099325282809si3027598ejb.572.2023.07.19.09.38.33; Wed, 19 Jul 2023 09:38:57 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gateworks-com.20221208.gappssmtp.com header.s=20221208 header.b=naAbmlqj; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229824AbjGSQf1 (ORCPT + 99 others); Wed, 19 Jul 2023 12:35:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:51354 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230025AbjGSQfZ (ORCPT ); Wed, 19 Jul 2023 12:35:25 -0400 Received: from mail-ej1-x62d.google.com (mail-ej1-x62d.google.com [IPv6:2a00:1450:4864:20::62d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id A5F16210B for ; Wed, 19 Jul 2023 09:35:09 -0700 (PDT) Received: by mail-ej1-x62d.google.com with SMTP id a640c23a62f3a-9891c73e0fbso216869766b.1 for ; Wed, 19 Jul 2023 09:35:09 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gateworks-com.20221208.gappssmtp.com; s=20221208; t=1689784507; x=1692376507; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=rY626uYekdcI/2JZDKpmPtCyOmOx8df+pfUdozN9YOI=; b=naAbmlqjBUiWZ8Jap5t0ahtP5WACC/i8ja+jjWv8wAkuvcMYhDZAv7sArKskbeXajc lwOzHiuc7pCvC5oG9QP+C9vP0V0az1IclMARkmx13WRP2R1d5NDBNvlEFqz1OMQQQAF0 qQcgrdpSvMgn4IVl0mgLJMoRUSv+GK53JefzHUK4Nxcij2wqeHLiIZyyqLgbKcD6i9eC ckOHZ7N4TFeC5QIuJpM46rV8J2jxwpn03BI0cOyzu028WXFJtgTviuF0YstvJIo7NFRr 9/t4Yvm/Q+WDr2JX4mlR+SDSjanU2NbsaKCJmQb6drv9dqbwD7CX3ZMXEqnGJU7RT6ST szxQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689784507; x=1692376507; h=content-transfer-encoding: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=rY626uYekdcI/2JZDKpmPtCyOmOx8df+pfUdozN9YOI=; b=dTmhX1S+0FYGOAPpTAm5a+T+jHAy6Oi9wHWG4aasxQVwHxbj/TV2V4lUpN1VnsoJdo cmwi4SF7Ky3njR7lzEXxEQM6S8ufKwXjUIeBvX2wetGKzomO93EHz6O100IK+S++o2aV 7ItNeAAM+qtCz01LBOjl6ZDJXg5NJKpPfzzSK34CkK3M1wjAE6WyKBbGNfICv5EuKeHA p3D8hdXMPv+P12yRlgoyAEeELiUOzUXWIB0ufGE8FoNMc8nboOTmenhX1mmaq5isvS5x n+gHSj7JMMKj7OW7iTvo7MKSsuWWsFlGcW0D2jzT6UEGxVpx1N6fhIExclSl0fz+ClpC BWLQ== X-Gm-Message-State: ABy/qLZ58Tjn7n2i897kE7DegFV3US2KbMN9SnbfcXU48Kj9fZu7QHq0 ww74LnVGxJaIprxUzBkpTVyMu3KRUh9rdOgxPPy8Kg== X-Received: by 2002:a17:906:209d:b0:992:2f67:cd34 with SMTP id 29-20020a170906209d00b009922f67cd34mr3242726ejq.22.1689784507480; Wed, 19 Jul 2023 09:35:07 -0700 (PDT) MIME-Version: 1.0 References: <20230503163313.2640898-1-frieder@fris.de> <20230503163313.2640898-2-frieder@fris.de> <5dc55bcf-abec-78cd-74b8-54fa67fd1fb2@kontron.de> <2a57622c-402b-5df6-73b3-9ba9aad9843d@kontron.de> In-Reply-To: <2a57622c-402b-5df6-73b3-9ba9aad9843d@kontron.de> From: Tim Harvey Date: Wed, 19 Jul 2023 09:34:54 -0700 Message-ID: Subject: Re: [PATCH v2 1/2] drm: bridge: samsung-dsim: Fix i.MX8M enable flow to meet spec To: Frieder Schrempf Cc: Marek Vasut , Frieder Schrempf , Alexander Stein , Jagan Teki , Adam Ford , Andrzej Hajda , Daniel Vetter , David Airlie , dri-devel@lists.freedesktop.org, Inki Dae , linux-kernel@vger.kernel.org, Marek Szyprowski , Neil Armstrong , Robert Foss , Laurent Pinchart , Jernej Skrabec , Jonas Karlman Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-1.9 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS, T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Wed, Jul 19, 2023 at 12:05=E2=80=AFAM Frieder Schrempf wrote: > > Hi Tim, > > On 19.07.23 01:03, Tim Harvey wrote: > > On Thu, Jul 13, 2023 at 3:01=E2=80=AFAM Frieder Schrempf > > wrote: > >> > >> Hi Tim, > >> > >> On 13.07.23 09:18, Frieder Schrempf wrote: > >>> Hi Tim, > >>> > >>> On 13.07.23 00:34, Tim Harvey wrote: > >>>> On Wed, May 3, 2023 at 9:33=E2=80=AFAM Frieder Schrempf wrote: > >>>>> > >>>>> From: Frieder Schrempf > >>>>> > >>>>> According to the documentation [1] the proper enable flow is: > >>>>> > >>>>> 1. Enable DSI link and keep data lanes in LP-11 (stop state) > >>>>> 2. Disable stop state to bring data lanes into HS mode > >>>>> > >>>>> Currently we do this all at once within enable(), which doesn't > >>>>> allow to meet the requirements of some downstream bridges. > >>>>> > >>>>> To fix this we now enable the DSI in pre_enable() and force it > >>>>> into stop state using the FORCE_STOP_STATE bit in the ESCMODE > >>>>> register until enable() is called where we reset the bit. > >>>>> > >>>>> We currently do this only for i.MX8M as Exynos uses a different > >>>>> init flow where samsung_dsim_init() is called from > >>>>> samsung_dsim_host_transfer(). > >>>>> > >>>>> [1] https://docs.kernel.org/gpu/drm-kms-helpers.html#mipi-dsi-bridg= e-operation > >>>>> > >>>>> Signed-off-by: Frieder Schrempf > >>>>> --- > >>>>> Changes for v2: > >>>>> * Drop RFC > >>>>> --- > >>>>> drivers/gpu/drm/bridge/samsung-dsim.c | 25 +++++++++++++++++++++++= -- > >>>>> 1 file changed, 23 insertions(+), 2 deletions(-) > >>>>> > >>>>> diff --git a/drivers/gpu/drm/bridge/samsung-dsim.c b/drivers/gpu/dr= m/bridge/samsung-dsim.c > >>>>> index e0a402a85787..9775779721d9 100644 > >>>>> --- a/drivers/gpu/drm/bridge/samsung-dsim.c > >>>>> +++ b/drivers/gpu/drm/bridge/samsung-dsim.c > >>>>> @@ -859,6 +859,10 @@ static int samsung_dsim_init_link(struct samsu= ng_dsim *dsi) > >>>>> reg =3D samsung_dsim_read(dsi, DSIM_ESCMODE_REG); > >>>>> reg &=3D ~DSIM_STOP_STATE_CNT_MASK; > >>>>> reg |=3D DSIM_STOP_STATE_CNT(driver_data->reg_values[STOP_S= TATE_CNT]); > >>>>> + > >>>>> + if (!samsung_dsim_hw_is_exynos(dsi->plat_data->hw_type)) > >>>>> + reg |=3D DSIM_FORCE_STOP_STATE; > >>>>> + > >>>>> samsung_dsim_write(dsi, DSIM_ESCMODE_REG, reg); > >>>>> > >>>>> reg =3D DSIM_BTA_TIMEOUT(0xff) | DSIM_LPDR_TIMEOUT(0xffff); > >>>>> @@ -1340,6 +1344,9 @@ static void samsung_dsim_atomic_pre_enable(st= ruct drm_bridge *bridge, > >>>>> ret =3D samsung_dsim_init(dsi); > >>>>> if (ret) > >>>>> return; > >>>>> + > >>>>> + samsung_dsim_set_display_mode(dsi); > >>>>> + samsung_dsim_set_display_enable(dsi, true); > >>>>> } > >>>>> } > >>>>> > >>>>> @@ -1347,9 +1354,16 @@ static void samsung_dsim_atomic_enable(struc= t drm_bridge *bridge, > >>>>> struct drm_bridge_state *old= _bridge_state) > >>>>> { > >>>>> struct samsung_dsim *dsi =3D bridge_to_dsi(bridge); > >>>>> + u32 reg; > >>>>> > >>>>> - samsung_dsim_set_display_mode(dsi); > >>>>> - samsung_dsim_set_display_enable(dsi, true); > >>>>> + if (samsung_dsim_hw_is_exynos(dsi->plat_data->hw_type)) { > >>>>> + samsung_dsim_set_display_mode(dsi); > >>>>> + samsung_dsim_set_display_enable(dsi, true); > >>>>> + } else { > >>>>> + reg =3D samsung_dsim_read(dsi, DSIM_ESCMODE_REG); > >>>>> + reg &=3D ~DSIM_FORCE_STOP_STATE; > >>>>> + samsung_dsim_write(dsi, DSIM_ESCMODE_REG, reg); > >>>>> + } > >>>>> > >>>>> dsi->state |=3D DSIM_STATE_VIDOUT_AVAILABLE; > >>>>> } > >>>>> @@ -1358,10 +1372,17 @@ static void samsung_dsim_atomic_disable(str= uct drm_bridge *bridge, > >>>>> struct drm_bridge_state *ol= d_bridge_state) > >>>>> { > >>>>> struct samsung_dsim *dsi =3D bridge_to_dsi(bridge); > >>>>> + u32 reg; > >>>>> > >>>>> if (!(dsi->state & DSIM_STATE_ENABLED)) > >>>>> return; > >>>>> > >>>>> + if (!samsung_dsim_hw_is_exynos(dsi->plat_data->hw_type)) { > >>>>> + reg =3D samsung_dsim_read(dsi, DSIM_ESCMODE_REG); > >>>>> + reg |=3D DSIM_FORCE_STOP_STATE; > >>>>> + samsung_dsim_write(dsi, DSIM_ESCMODE_REG, reg); > >>>>> + } > >>>>> + > >>>>> dsi->state &=3D ~DSIM_STATE_VIDOUT_AVAILABLE; > >>>>> } > >>>>> > >>>>> -- > >>>>> 2.40.0 > >>>>> > >>>> > >>>> Hi Frieder, > >>>> > >>>> I found this patch to break mipi-dsi display on my board which has: > >>>> - FocalTech FT5406 10pt touch controller (with no interrupt) > >>>> - Powertip PH800480T013-IDF02 compatible panel > >>>> - Toshiba TC358762 compatible DSI to DBI bridge > >>>> - ATTINY based regulator used for backlight controller and panel en= able > >>>> > >>>> I enable this via a dt overlay in a pending patch > >>>> imx8mm-venice-gw72xx-0x-rpidsi.dtso [1] which works on 6.4 but not > >>>> 6.5-rc1 which has this patch. > >>>> > >>>> The issue appears as: > >>>> [ 6.110585] samsung-dsim 32e60000.dsi: xfer timed out: 29 06 00 0= 0 > >>>> 64 01 05 00 00 00 > >>>> [ 6.326588] tc358762 32e60000.dsi.0: error initializing bridge (-= 110) > >>>> > >>>> Instead of > >>>> [ 1.011729] samsung-dsim 32e10000.dsi: supply vddcore not found, > >>>> using dummy regulator > >>>> [ 1.019829] samsung-dsim 32e10000.dsi: supply vddio not found, > >>>> using dummy regulator > >>>> [ 5.649928] samsung-dsim 32e10000.dsi: > >>>> [drm:samsung_dsim_host_attach] Attached tc358762 device > >>>> > >>>> I'm curious what board/panel were you needing this for and do you ha= ve > >>>> any ideas why it broke my setup? > >>>> > >>>> I'm also curious what board/panel Alexander tested this with and if > >>>> Adam or Jagan (or others) have tested this with their hardware? > >>> > >>> Sorry for breaking your setup. My test- and use-case is the same as > >>> Alexander's. I have the SN65DSI84 downstream bridge and without this > >>> patch it fails to come up in some cases. > >>> > >>> The failure is probably related to your downstream bridge being > >>> controlled by the DSI itself using command mode. The SN65DSI84 is > >>> instead controlled via I2C. > >>> > >>> Actually we should have tested this with a bridge that uses command m= ode > >>> before merging, now that I think of it. But I wasn't really aware of > >>> this until now. > >>> > >>> I'll have a closer look at the issue and then will get back to you. I= n > >>> the meantime if anyone can help analyze the problem or has proposals = how > >>> to fix it, please let us know. > >> > >> With my patch samsung_dsim_init() now initializes the DSIM to stop > >> state. When being called from samsung_dsim_atomic_pre_enable() this > >> works as the stop state is cleared later in samsung_dsim_atomic_enable= (). > >> > >> When being called from samsung_dsim_host_transfer() to handle transfer= s > >> before samsung_dsim_atomic_pre_enable() was called, the stop state is > >> never cleared and transfers will fail. > >> > >> This is the case in your setup as tc358762_init() is called in > >> tc358762_pre_enable(). > >> > >> I think that requiring to initialize the DSI host during transfer coul= d > >> be avoided in this case by moving tc358762_init() from > >> tc358762_pre_enable() to tc358762_enable(). > >> > >> But at the same time according to the docs at [1] this seems to be a > >> valid case that we need to support in the DSIM driver: > >> > >> Whilst it is valid to call host_transfer prior to pre_enable or > >> after post_disable, the exact state of the lanes is undefined at > >> this point. The DSI host should initialise the interface, transmit > >> the data, and then disable the interface again. > >> > >> Therefore I would propose to try a fix like in the attachement. If you > >> could test this, that would be great. > >> > >> Thanks > >> Frieder > >> > >> [1] > >> https://docs.kernel.org/gpu/drm-kms-helpers.html#mipi-dsi-bridge-opera= tion > > > > Hi Frieder, > > > > The patch does not resolve the issue. I still get the 'xfer timed out' > > from samsung-dsim but noticing today that this issue doesn't exist in > > linux-next I've found that its resolved by Marek's patch: > > commit 8a4b2fc9c91a ("drm/bridge: tc358762: Split register programming > > from pre-enable to enable") > > Thanks for testing. I didn't notice there already is a patch from Marek > for the tc358762 driver. This is exactly the change that I was > considering above as a fix on the downstream bridge side. > > > > > I'm not clear on how that patch is staged in linux-next. If we can get > > that pulled into 6.5 then it will resolve the breakage. > > Still the documentation says that the DSI host must be able to handle > this and there might be other drivers that are not yet fixed like this > or can't be changed to make DSI transfers only after the host's > pre_enable() was called. > > Therefore I would prefer to fix the DSIM driver and apply this fix to > 6.5-rc instead of backporting the tc358762 patch. I gave it another shot > and maybe you could do one more test with the attached patch and without > the fix in tc358762. > Frieder, This patch doesn't resolve the issue either. Let me know if there is some quick debugging you want to add somewhere. I don't have a lot of time to troubleshoot this week as I'm trying to wrap up some work before a 2-week vacation but it's quick for me to apply patches and do a quick boot test. best regards, Tim