Received: by 2002:a05:6358:7058:b0:131:369:b2a3 with SMTP id 24csp945355rwp; Thu, 13 Jul 2023 03:53:32 -0700 (PDT) X-Google-Smtp-Source: APBJJlHCFctgtWyBwN8pJe/TjyXj3trcdP7v+r0kqGCWVOqxztJTOLnr80Mpkl/nfEbpvyX+rkuK X-Received: by 2002:a17:906:7a59:b0:973:cc48:f19c with SMTP id i25-20020a1709067a5900b00973cc48f19cmr1084581ejo.56.1689245612606; Thu, 13 Jul 2023 03:53:32 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1689245612; cv=none; d=google.com; s=arc-20160816; b=eXcUEpYiTjBzAgeLUfiC1Gn/3Elil3I6V0w7NQAujLCkeAigd5hcGDUCwDxxCtFLxG 10GxI+HQTL8H3rUQad3y8fCtjuMeFGVVf5wR65Fwqzp9QGUaBKuDKmd/MiR20YRzVBMv GOBzEB6m1fUAjKSK79c4PWQFrrBr6aAhVbWnCWxVNiJkqBCqcfAzcz9ASVjX2hZ42qKC RYeyLyd8LncNN/1MmiOhhYNkMLv/V0u7f5GusphIkXnZK8gE89cuA6cXB/S42uj9f1kK A5XkOvYE8T/WG+v7tRY4gHb5A1SE7TgFCkM5qrAj2G6IE7x0zoDr7cliaqseWPy/iVy4 Cd7Q== 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=fbr5P/iOV1YnDJmD38Ms/Qv1YcU51e/0SbtpdmzhniI=; fh=hTQrtCwMunqqOjFQ29qTH17VOvDhgHl2wuauRwD/TRA=; b=fahqMXF2ifCNzOswNTLBho55CpQNKVUagmBx5LrzBvWTZK0l7TBS9sMRdq81zJ77JE LlPleyHihriu9jhwjz8I5xSTVCBlhEndEh+HfsQtOo7028o/PLzSUCmg7Z50tK7KkuhC raEOIaMm9UtgBxZq4lYquBCsrszJVRM3uWhRJNEKCKlf0581IrnKoasduJlFRcKKzzSv fB7DeLGOaobA8eOKbMayC67lYQCI7HXT4V1BSoxjyzH9b2tAAJxCylOpTC9rARpUTSyw jq4d05lqnR0mybpDfsqJLEq925fMeQFrPdAfDOAdzepIXWliE+DsH35jz7EFSK+ufQ+0 /Xgg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=N4rq2N3U; 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=NONE dis=NONE) header.from=chromium.org Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id bs3-20020a170906d1c300b00977e0bdac8asi8259424ejb.583.2023.07.13.03.53.08; Thu, 13 Jul 2023 03:53:32 -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=@chromium.org header.s=google header.b=N4rq2N3U; 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=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234529AbjGMKDk (ORCPT + 99 others); Thu, 13 Jul 2023 06:03:40 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:44242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S234132AbjGMKD1 (ORCPT ); Thu, 13 Jul 2023 06:03:27 -0400 Received: from mail-vs1-xe2f.google.com (mail-vs1-xe2f.google.com [IPv6:2607:f8b0:4864:20::e2f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D51CC18E for ; Thu, 13 Jul 2023 03:03:21 -0700 (PDT) Received: by mail-vs1-xe2f.google.com with SMTP id ada2fe7eead31-440b53841a4so114516137.3 for ; Thu, 13 Jul 2023 03:03:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; t=1689242601; x=1691834601; 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=fbr5P/iOV1YnDJmD38Ms/Qv1YcU51e/0SbtpdmzhniI=; b=N4rq2N3URVjXBjVCI+PLQV79dBXcqUS9YRrsoiFGvTojgP/zZWUg1IkQFmywbx68su HYnAAmj22CKy/xLm0B4JFm6OZ3W3pDI3skWRWVriMfzrc5POD53fDieyjqpJmUKOHzd3 51lOP+06qvUTrhwnGi2xNysl+cnd2DkbLhI1U= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1689242601; x=1691834601; 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=fbr5P/iOV1YnDJmD38Ms/Qv1YcU51e/0SbtpdmzhniI=; b=bKLnZ7soT+OJ8M/FIwVGap3aTxHYj+8igkBNM7BT3sWj/aGVbe74ONB8Qpw1dsmol5 6Umlh5Fv41+IDs0C1vzfGjFzbCrIO/DHIts1ieZLGLUwEZ2kdHq7btg3qE9iNl9UED8I ebgMfCehjbip24W8IhsaUawq0zs9a9TpRWjG0ga7UrE9g9L4r4mPiVsE2ahJ0QhVhDza cq5eo8Zl2KkKB4l+o4ZiHoQkZ9GkwYMIxezJfsO/1pHR1lUnlPRRjT6+SLxUw7NJffXN A72utbKCxgzDJn4OBp8td//746SdHxsmXOG5apOarfpl/y3pPCJwvDNFU8WIM8W1ljOm IYWQ== X-Gm-Message-State: ABy/qLZMfKmzANcUWXfeMuti9vCeLZ6V00446bs0Vo7eS8uM3zRP55xT BqgoKN8R8ZvBMty+BSDoXywnPLPumFZmOxncd/K7aw== X-Received: by 2002:a05:6102:7b7:b0:444:bb70:db73 with SMTP id x23-20020a05610207b700b00444bb70db73mr148641vsg.28.1689242600881; Thu, 13 Jul 2023 03:03:20 -0700 (PDT) MIME-Version: 1.0 References: <20230713090152.140060-1-angelogioacchino.delregno@collabora.com> In-Reply-To: From: Chen-Yu Tsai Date: Thu, 13 Jul 2023 18:03:09 +0800 Message-ID: Subject: Re: [PATCH v5 00/10] MediaTek DisplayPort: support eDP and aux-bus To: AngeloGioacchino Del Regno Cc: chunkuang.hu@kernel.org, p.zabel@pengutronix.de, airlied@gmail.com, daniel@ffwll.ch, matthias.bgg@gmail.com, dri-devel@lists.freedesktop.org, linux-mediatek@lists.infradead.org, linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kernel@collabora.com, nfraprado@collabora.com Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF, 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 Thu, Jul 13, 2023 at 5:57=E2=80=AFPM AngeloGioacchino Del Regno wrote: > > Il 13/07/23 11:54, Chen-Yu Tsai ha scritto: > > On Thu, Jul 13, 2023 at 5:01=E2=80=AFPM AngeloGioacchino Del Regno > > wrote: > >> > >> Changes in v5: > >> - Added .wait_hpd_asserted() callback for aux-bus > >> - Avoid enabling and registering HPD interrupt + handlers for > >> eDP case only (keeps HPD interrupts enabled for full DP case) > >> - Support not always-on eDP panels (boot with regulator off, > >> suspend with regulator off) for power saving in PM suspend. > > > > This still doesn't work when the DRM driver is builtin, and the panel > > driver is a module. This is still with regulator-always-on. > > > > From what I can tell from the kernel logs, the DRM driver is not waiti= ng > > for eDP panel to probe (which sort of makes sense?), and simply uses > > the default EDID. When the panel does probe, nothing triggers the DRM > > driver to update its connector. > > > > [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:eDP-1] > > [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:32:eDP-1] > > status updated from unknown to connected > > [drm:drm_mode_debug_printmodeline] Modeline "640x480": 60 25175 640 > > 656 752 800 480 490 492 525 0x40 0xa > > [drm:drm_mode_prune_invalid] Not using 640x480 mode: CLOCK_HIGH > > [drm:drm_mode_debug_printmodeline] Modeline "800x600": 56 36000 800 > > 824 896 1024 600 601 603 625 0x40 0x5 > > [drm:drm_mode_prune_invalid] Not using 800x600 mode: CLOCK_HIGH > > [drm:drm_mode_debug_printmodeline] Modeline "800x600": 60 40000 800 > > 840 968 1056 600 601 605 628 0x40 0x5 > > [drm:drm_mode_prune_invalid] Not using 800x600 mode: CLOCK_HIGH > > [drm:drm_mode_debug_printmodeline] Modeline "848x480": 60 33750 848 > > 864 976 1088 480 486 494 517 0x40 0x5 > > [drm:drm_mode_prune_invalid] Not using 848x480 mode: CLOCK_HIGH > > [drm:drm_mode_debug_printmodeline] Modeline "1024x768": 60 65000 1024 > > 1048 1184 1344 768 771 777 806 0x40 0xa > > [drm:drm_mode_prune_invalid] Not using 1024x768 mode: CLOCK_HIGH > > [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:34:DP-1] > > [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:34:DP-1] > > status updated from unknown to disconnected > > [drm:drm_helper_probe_single_connector_modes] [CONNECTOR:34:DP-1] disco= nnected > > [drm:drm_client_modeset_probe] No connectors reported connected with mo= des > > [drm:drm_client_modeset_probe] connector 32 enabled? yes > > [drm:drm_client_modeset_probe] connector 34 enabled? no > > [drm:drm_client_firmware_config.constprop.0.isra.0] Not using firmware > > configuration > > [drm:drm_client_modeset_probe] looking for cmdline mode on connector 32 > > [drm:drm_client_modeset_probe] looking for preferred mode on connector = 32 0 > > [drm:drm_client_modeset_probe] found mode none > > [drm:drm_client_modeset_probe] picking CRTCs for 4096x4096 config > > mediatek-drm mediatek-drm.12.auto: > > [drm:__drm_fb_helper_initial_config_and_unlock] test CRTC 0 primary > > plane > > mediatek-drm mediatek-drm.12.auto: [drm] Cannot find any crtc or sizes > > mediatek-drm mediatek-drm.12.auto: [drm:drm_dp_dpcd_probe] aux_mtk_dp: > > 0x00000 AUX -> (ret=3D 1) 14 > > mediatek-drm mediatek-drm.12.auto: [drm:drm_dp_dpcd_read] aux_mtk_dp: > > 0x00000 AUX -> (ret=3D 15) 14 0a 84 41 00 00 01 80 02 00 00 00 0f 09 80 > > mediatek-drm mediatek-drm.12.auto: [drm:drm_dp_dpcd_probe] aux_mtk_dp: > > 0x00000 AUX -> (ret=3D 1) 14 > > mediatek-drm mediatek-drm.12.auto: [drm:drm_dp_dpcd_read] aux_mtk_dp: > > 0x02200 AUX -> (ret=3D 15) 14 0a 84 41 00 00 01 80 02 00 00 00 0f 01 80 > > mediatek-drm mediatek-drm.12.auto: [drm:drm_dp_read_dpcd_caps] > > aux_mtk_dp: Base DPCD: 14 0a 84 41 00 00 01 80 02 00 00 00 0f 09 80 > > mediatek-drm mediatek-drm.12.auto: [drm:drm_dp_read_dpcd_caps] > > aux_mtk_dp: DPCD: 14 0a 84 41 00 00 01 80 02 00 00 00 0f 01 80 > > mediatek-drm mediatek-drm.12.auto: [drm:drm_dp_dpcd_probe] aux_mtk_dp: > > 0x00000 AUX -> (ret=3D 1) 14 > > mediatek-drm mediatek-drm.12.auto: [drm:drm_dp_dpcd_read] aux_mtk_dp: > > 0x00021 AUX -> (ret=3D 1) 00 > > panel-simple-dp-aux aux-1c500000.edp-tx: Detected BOE NE135FBM-N41 v8.1= (0x095f) > > > > If the panel is also built-in, then the eDP panel probe happens between > > the drm driver adding components and binding to them, and everything se= ems > > to work OK. > > > > Argh. I actually forgot to test that case. Sorry about that. > > Anyway, you don't need regulator-always-on anymore, nor regulator-boot-on= ... Confirmed this case works now. > ...I'll recheck with panel-edp as module and fix. With the module case, I also get an devlink error: mediatek-drm-dp 1c500000.edp-tx: Failed to create device link (0x180) with regulator-pp3300-disp-x which doesn't happen with the builtin case. Not sure if it gets a retry or anything later. ChenYu > Cheers, > Angelo > > > > > ChenYu > > > >> Changes in v4: > >> - Set data lanes to idle to prevent stalls if bootloader didn't > >> properly close the eDP port > >> - Now using the .done_probing() callback for AUX bus to prevent > >> probe deferral loops in case the panel-edp driver is a module > >> as previously seen with another bridge driver (ANX7625) on > >> some other SoCs (MT8192 and others) > >> - Rebased over next-20230706 > >> - Dropped Chen-Yu's T-b tag on last patch as some logic changed > >> (before, I wasn't using the .done_probing() callback). > >> > >> Changes in v3: > >> - Added DPTX AUX block initialization before trying to communicate > >> to stop relying on the bootloader keeping it initialized before > >> booting Linux. > >> - Fixed commit description for patch [09/09] and removed commented > >> out code (that slipped from dev phase.. sorry!). > >> > >> This series adds "real" support for eDP in the mtk-dp DisplayPort driv= er. > >> > >> Explaining the "real": > >> Before this change, the DisplayPort driver did support eDP to some > >> extent, but it was treating it entirely like a regular DP interface > >> which is partially fine, after all, embedded DisplayPort *is* actually > >> DisplayPort, but there might be some differences to account for... and > >> this is for both small performance improvements and, more importantly, > >> for correct functionality in some systems. > >> > >> Functionality first: > >> > >> One of the common differences found in various boards implementing eDP > >> and machines using an eDP panel is that many times the HPD line is not > >> connected. This *must* be accounted for: at startup, this specific IP > >> will raise a HPD interrupt (which should maybe be ignored... as it doe= s > >> not appear to be a "real" event...) that will make the eDP panel to be > >> detected and to actually work but, after a suspend-resume cycle, there > >> will be no HPD interrupt (as there's no HPD line in my case!) producin= g > >> a functionality issue - specifically, the DP Link Training fails becau= se > >> the panel doesn't get powered up, then it stays black and won't work > >> until rebooting the machine (or removing and reinserting the module I > >> think, but I haven't tried that). > >> > >> Now for.. both: > >> eDP panels are *e*DP because they are *not* removable (in the sense th= at > >> you can't unplug the cable without disassembling the machine, in which > >> case, the machine shall be powered down..!): this (correct) assumption > >> makes us able to solve some issues and to also gain a little performan= ce > >> during PM operations. > >> > >> What was done here is: > >> - Caching the EDID if the panel is eDP: we're always going to read t= he > >> same data everytime, so we can just cache that (as it's small enou= gh) > >> shortening PM resume times for the eDP driver instance; > >> - Always return connector_status_connected if it's eDP: non-removabl= e > >> means connector_status_disconnected can't happen during runtime... > >> this also saves us some time and even power, as we won't have to > >> perform yet another power cycle of the HW; > >> - Added aux-bus support! > >> This makes us able to rely on panel autodetection from the EDID, > >> avoiding to add more and more panel timings to panel-edp and, even > >> better, allowing to use one panel node in devicetrees for multiple > >> variants of the same machine since, at that point, it's not import= ant > >> to "preventively know" what panel we have (eh, it's autodetected..= .!). > >> > >> This was tested on a MT8195 Cherry Tomato Chromebook (panel-edp on aux= -bus) > >> > >> > >> P.S.: For your own testing commodity, here's a reference devicetree: > >> > >> pp3300_disp_x: regulator-pp3300-disp-x { > >> compatible =3D "regulator-fixed"; > >> regulator-name =3D "pp3300_disp_x"; > >> regulator-min-microvolt =3D <3300000>; > >> regulator-max-microvolt =3D <3300000>; > >> enable-active-high; > >> gpio =3D <&pio 55 GPIO_ACTIVE_HIGH>; > >> pinctrl-names =3D "default"; > >> pinctrl-0 =3D <&panel_fixed_pins>; > >> }; > >> > >> &edp_tx { > >> status =3D "okay"; > >> > >> pinctrl-names =3D "default"; > >> pinctrl-0 =3D <&edptx_pins_default>; > >> > >> ports { > >> #address-cells =3D <1>; > >> #size-cells =3D <0>; > >> > >> port@0 { > >> reg =3D <0>; > >> edp_in: endpoint { > >> remote-endpoint =3D <&dp_intf0_out>; > >> }; > >> }; > >> > >> port@1 { > >> reg =3D <1>; > >> edp_out: endpoint { > >> data-lanes =3D <0 1 2 3>; > >> remote-endpoint =3D <&panel_in>; > >> }; > >> }; > >> }; > >> > >> aux-bus { > >> panel: panel { > >> compatible =3D "edp-panel"; > >> power-supply =3D <&pp3300_disp_x>; > >> backlight =3D <&backlight_lcd0>; > >> port { > >> panel_in: endpoint { > >> remote-endpoint =3D <&edp_out= >; > >> }; > >> }; > >> }; > >> }; > >> }; > >> > >> AngeloGioacchino Del Regno (10): > >> drm/mediatek: dp: Move AUX and panel poweron/off sequence to functi= on > >> drm/mediatek: dp: Change logging to dev for mtk_dp_aux_transfer() > >> drm/mediatek: dp: Use devm variant of drm_bridge_add() > >> drm/mediatek: dp: Move AUX_P0 setting to > >> mtk_dp_initialize_aux_settings() > >> drm/mediatek: dp: Enable event interrupt only when bridge attached > >> drm/mediatek: dp: Avoid mutex locks if audio is not supported/enabl= ed > >> drm/mediatek: dp: Move PHY registration to new function > >> drm/mediatek: dp: Add support for embedded DisplayPort aux-bus > >> drm/mediatek: dp: Add .wait_hpd_asserted() for AUX bus > >> drm/mediatek: dp: Don't register HPD interrupt handler for eDP case > >> > >> drivers/gpu/drm/mediatek/Kconfig | 1 + > >> drivers/gpu/drm/mediatek/mtk_dp.c | 335 ++++++++++++++++++++--------= -- > >> 2 files changed, 224 insertions(+), 112 deletions(-) > >> > >> -- > >> 2.40.1 > >> > > >