Received: by 2002:ac0:e350:0:0:0:0:0 with SMTP id g16csp327987imn; Wed, 3 Aug 2022 05:40:25 -0700 (PDT) X-Google-Smtp-Source: AA6agR41Y9gG+dh8A72CCy8szZ+KZyuX6wk8l0/voWUpvg+VWMO+e8Da/QV9dpKfzoRQiBYZIw7b X-Received: by 2002:a17:902:e5c3:b0:16e:d968:634e with SMTP id u3-20020a170902e5c300b0016ed968634emr18472608plf.80.1659530425333; Wed, 03 Aug 2022 05:40:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1659530425; cv=none; d=google.com; s=arc-20160816; b=J0mWKcSgMr+KbJCOm8UJ4orTclIc+4Indff/RTufp1CYg3bNlSpAldtA3Wb09WXfbV eRF7IZs2SyK5Q37MCnR9eF07hNcM4ocDIiXr/0yrd9bvHbqIfdl5PJONYaiBppP9fuWI ySNaYE1yA5AGm87SN9G1PmZy3aKOPDMcRiHaALg/tHfryRnXspcEsiQVNinhrb1gmdj7 2gLwlew3rLxcA6ZLKe2gqoIwVhkcO2BGnUMOHyA+G1pt0T1bs9ZiWVv2ywu2cf9oq5Qq osu9e8cGYKOQEZp1u3b8vdVC6xEruOChOLTWISTYeJUrmBALlBMR3StMWZjqegDBbbPf voeg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:cc:to:subject:message-id:date:from:in-reply-to :references:mime-version:dkim-signature; bh=19tc1pDjwoz0fp7CAqyx3HPiAbbNuHgLZ3/fjU9dHtY=; b=BnQkU0KJhLfCVtxqJlSTOgmVxB0A5LaW026ftJn6iTxif92HCw2+9szYV1/XmdRYX7 9sGopjtSRUY6/FzJ3yqht6bq6Cv0vxdgksqvfTDa/nMfCjWU4NEIZtja/hIyF7tweuzh /12BpBKaglxeJAhcHYgxU/YQyZmOlNBLCuPzS79Y/5AOllApG7a6DpJ+lR/wmxFadVE9 /u0S4mBhaLJFAnHfV1ShxBIx1C59dCadMNmPQS18puG3++1MRovQJbvkEH/bNOPVAD5c zbdBDoMaxTtgiEdhb1idbAoZ22xU86FxtwX5V9jk8P7MaqDHDS1aryEwfxkSn5FUbgnA Ma+g== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=QkFjntIw; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id o14-20020a17090a55ce00b001f2b7b60a12si1745188pjm.147.2022.08.03.05.40.07; Wed, 03 Aug 2022 05:40:25 -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=@gmail.com header.s=20210112 header.b=QkFjntIw; 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; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S238024AbiHCMb1 (ORCPT + 99 others); Wed, 3 Aug 2022 08:31:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:38556 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S236240AbiHCMbZ (ORCPT ); Wed, 3 Aug 2022 08:31:25 -0400 Received: from mail-ed1-x533.google.com (mail-ed1-x533.google.com [IPv6:2a00:1450:4864:20::533]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id B44041A074 for ; Wed, 3 Aug 2022 05:31:23 -0700 (PDT) Received: by mail-ed1-x533.google.com with SMTP id m8so21211346edd.9 for ; Wed, 03 Aug 2022 05:31:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=cc:to:subject:message-id:date:from:in-reply-to:references :mime-version:from:to:cc; bh=19tc1pDjwoz0fp7CAqyx3HPiAbbNuHgLZ3/fjU9dHtY=; b=QkFjntIwgTSHHWdW9aG25k/EtU2RR9jpwjxLbyQ0ksx64OX/BMuXKmNaZbgK15Il/E j/O64uvxcFUXdgzH0bxRDYBMpWdK45ZmIN7XDtZmIV2q+O5HmmRiPhBIhXinASVbpvXt 1b2dlCwACdI0m0mnUAPXs2l74Ga6u7BmHBoWMoIND3GmHj/NqB+aaPPRWfL6Mw31CxVj Kvwd4ZcgYGKZyf/9Gy69yAcPu0h20v/KyfYUc7DJiSptrcJORNssGz7rid2ylBGfeomL D8wWDQn9ZquS3xsLd9xPzH6mtmx5nhFdVtk/AbTTCexKQEJYe7HVVUb5CNDrjAx+yaUT CbQw== 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; bh=19tc1pDjwoz0fp7CAqyx3HPiAbbNuHgLZ3/fjU9dHtY=; b=CO+7WBuFgxepfy6MQvgPvvySuw5YMNcZdb0WasoBz28UfxR52aEftFwZzNKnQjauDd PKtr3oUPOcr0l5dN3oN0CLeHoZR83GqbvBHAuyncQ7TlFp8S6WT88BuIt2Ah8Z1/+//m jwqdbvsBmj4+VRBIgDZCUwuaDgUxwGPUleysJ5YS3tWJEx4uDAp4NzeEMor66TgEjL7G SsGuhFjsLEfNxk0c1SwDP+nD2hpDfpbb0jVpiMQlo3IQysMOFOSE7WYZ4V1bXge2P81e 44eRKB3AAFmMNK5c1mKqoPz6/aHm1T5qlu75D2PSmcWA6wSpSc3Eopw+ayxb6YYKgKqe Dl6A== X-Gm-Message-State: AJIora/sefEG/7ulLACgdz8cBVfNBrOQLVmWM4Dizm+GK4kJOEWAUjMo Sccty7GEf2FyBcuLAkktGlaqODJMpeVIOYMSaBA= X-Received: by 2002:aa7:da92:0:b0:43c:c5af:d5c9 with SMTP id q18-20020aa7da92000000b0043cc5afd5c9mr25624138eds.10.1659529882091; Wed, 03 Aug 2022 05:31:22 -0700 (PDT) MIME-Version: 1.0 References: <20220801225538.qtdb5zd66g6ipewz@pengutronix.de> <20220802080820.jyf3tfpgcj3pvbtp@pengutronix.de> <20220803062024.vn7awasmifkp5xow@pengutronix.de> In-Reply-To: From: Adam Ford Date: Wed, 3 Aug 2022 07:31:10 -0500 Message-ID: Subject: Re: imx8mm lcdif->dsi->adv7535 no video, no errors To: Dave Stevenson Cc: Marco Felsch , Neil Armstrong , David Airlie , dri-devel , Laurent Pinchart , Andrzej Hajda , Marek Szyprowski , Marek Vasut , Jernej Skrabec , Jagan Teki , robert.chiras@nxp.com, laurentiu.palcu@nxp.com, NXP Linux Team , Jonas Karlman , Sascha Hauer , arm-soc , Linux Kernel Mailing List , Robert Foss , Pengutronix Kernel Team , Shawn Guo Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-1.8 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_ENVFROM_END_DIGIT, FREEMAIL_FROM,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS 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, Aug 3, 2022 at 7:17 AM Dave Stevenson wrote: > > Hi Adam > > On Wed, 3 Aug 2022 at 12:03, Adam Ford wrote: > > > > On Wed, Aug 3, 2022 at 1:20 AM Marco Felsch wrote: > > > > > > On 22-08-02, Adam Ford wrote: > > > > > > ... > > > > > > > > I did some reading about the internal timing generator. It appears > > > > > that it's required when video formats use fractional bytes, and it's > > > > > preconfigured to run at 720p by default, but registers 28h through 37h > > > > > configure it for other video modes. > > > > > > > > I think there may still be some issues with the DSIM since some of the > > > > clock frequencies are set in the device tree. > > > > > > > > From what I can tell, the pixel rate is calculated based on the > > > > > > By pixel rate you mean the HDMI pixel rate from the ADV? If so then yes. > > > The ADV has an divider which is already configured by the driver but > > > meaningless since the driver is lacking of setting the "manual-divider" > > > bit within the same register. > > > > I was thinking about the pixel clock from the DSI to the ADV. I did > > see the manual-divider bit was missing. I tried enabling that bit, > > but it didn't appear to make much difference. > > > > > > > burst-clock-frequency and that generates a byte clock. For 891000000, > > > > the byte clock is 111375000. > > > > > > The burst-clock-frequency is the hs-clk and DDR. So the MIPI-DSI clock > > > is burst-clock-frequency/2 which is in your case: 891000000/2 = > > > 445500000. This clock is than divided by 3 within the ADV and you get > > > your 148500000 pixel clock. This divide by 3 is detected automatically > > > by the ADV due to the missing bit (see above). > > > > > > > Modetest timings for 1080p show: > > > > > > > > index name refresh (Hz) hdisp hss hse htot vdisp vss vse vtot > > > > #0 1920x1080 60.00 1920 2008 2052 2200 1080 1084 1089 1125 148500 > > > > flags: nhsync, nvsync; type: driver > > > > > > > > > > > > When looking at modetest, there is a clock for 1080p which appears to be 148500. > > > > 111375000/148500 = 750. > > > > > > Please see above. > > > > > > > The rest of the entries in my table do not divide evenly. I don;t > > > > know if that explains the lack of display, but it's something to note. > > > > It seems to me that instead of fixing the > > > > samsung,burst-clock-frequency to 891000000, we should make the desired > > > > PLL related to the desired pixel clock so it divides evenly. > > > > > > Please see above. > > > > > > > Looking at NXP's kernel, I also noticed that their esc_prescaler is > > > > based on the byte clock divided by 20MHz. With some small code > > > > changes to get the PLL based on the desired pixel clock instead of > > > > hard-coded, I was able to set > > > > > > > > samsung,burst-clock-frequency = <1500000000>; > > > > > > This is not correct since the burst-clock-freq. specifies the hs-clock > > > for the data lanes (see above). > > > > But I don't think the clock should be fixed. I think it should vary as > > the resolution changes. From what I can tell, NXP's DSI code doesn't > > hard code this value, but it does appear to cap it at 1.5G. I did > > soom looking into the NXP frequency calculation and it is capable of > > adjusting resolutions to some extent and from what I can see the > > 891MHz clock is only set when 1080p. At 720p, thier kernel shows the > > output frequency at 445.5 MHz. The way the DSIM is currently > > configured, it's fixed at 891MHz, so I don't expect the output feeding > > the adv7535 to be correct for the different resolutions. > > > > > > > > > > > samsung,esc-clock-frequency = <20000000>; > > > > > > This is correct, we also use a esc-clock of 20MHz. > > > > > > > With these settings and the above mentioned code changes, 1080p still > > > > appears, however when attempting other modes, the display still fails > > > > to load. I also noticed that the phy ref clock is set to 27MHz > > > > instead of NXP's 12MHz. > > > > > > That's interesting, I didn't noticed that NXP uses 12 MHz as refclock > > > but I don't think that this is the problem. Since we have other > > > converter chips using the bridge driver and they work fine. I still > > > think that the main problem is within the ADV driver. > > > > Do the other converter chips work fine at different resolutions? > > > > > > > > > I attempted to play with that setting, but I couldn't get 1080p to > > > > work again, so I backed it out. > > > > > > > > Maybe I am headed in the wrong direction, but I'm going to examine the > > > > P/M/S calculation of the timing on NXP's kernel to see how the DSIM in > > > > this code compares. > > > > > > I think the pms values are fine. > > > > I compared the P/M/S values between this driver and NXP's and they > > calculate different values of PMS when running at 1080P. > > NXP @ 1080p: > > fout = 891000, fin = 12000, m = 297, p = 2, s = 1, best_delta = 0 > > > > This kernel @ 1080p: > > > > PLL freq 891000000, (p 3, m 99, s 0) > > > > at 720P, the NXP Kernel > > fout = 445500, fin = 12000, m = 297, p = 2, s = 2, best_delta = 0 > > (working) > > > > at 720P, this kernel: > > PLL freq 891000000, (p 3, m 99, s 0) > > hs_clk = 891000000, byte_clk = 111375000, esc_clk = 18562500 > > (not working) > > > > > > > > > > > If someone who understands the interactions between these different > > > > components has suggestions, I'm willing to run some experiments. > > > > > > Did managed to get access to the ADV7535 programming guide? This is the > > > black box here. Let me check if I can provide you a link with our repo > > > so you can test our current DSIM state if you want. > > > > I do have access to the programming guide, but it's under NDA, but > > I'll try to answer questions if I can. > > Not meaning to butt in, but I have datasheets for ADV7533 and 7535 > from previously looking at these chips. Thanks for the feedback. > Mine fairly plainly states: > "The DSI receiver input supports DSI video mode operation only, and > specifically, only supports nonburst mode with sync pulses". > Non-burst mode meaning that the DSI pixel rate MUST be the same as the > HDMI pixel rate. Mine also states the DSI source needs to provide correct video timing with start and stop sync packets. If I remember correctly, it seemed like Marek V wanted the hard coded samsung,burst-clock-frequency to go away so the clock frequency could be set dynamically. I have attempted to do some of this work based on what I am seeing in the NXP kernel, and I get get my monitor to sync at some resolutions, but the screen is usually all green or all blue, so it's not really a success. The clock part appears to be good enough to make the monitor see some sort of signal, so I am going to investigate the calculation of the rest of the video timings to see if I can fix the color issue. > Section 6.1.1 "DSI Input Modes" of adv7533_hardware_user_s_guide is > even more explicit about the requirement of DSI timing matching > > The NXP kernel switching down to an hs_clk of 445.5MHz would therefore > be correct for 720p operation. > > If you do program the manual DSI divider register to allow a DSI pixel > rate of 148.5MHz vs HDMI pixel rate of 74.25MHz, you'd be relying on > the ADV753x having at least a half-line FIFO between DSI rx and HDMI > tx to compensate for the differing data rates. I see no reference to > such, and I'd be surprised if it was more than a half dozen pixels to > compensate for the jitter in the cases where the internal timing > generator is mandatory due to fractional bytes. Thanks Dave! adam > > Dave > > > adam > > > > > > Regards, > > > Marco