Received: by 2002:a05:6a10:413:0:0:0:0 with SMTP id 19csp1703779pxp; Thu, 17 Mar 2022 15:00:37 -0700 (PDT) X-Google-Smtp-Source: ABdhPJzhwkHlnH5Sbb5duQuDkLOyNH4eTuX8ulskUOEki+vfY+auOJGUZyq0hDthr84R26RaRcfg X-Received: by 2002:a05:6870:c0cb:b0:da:2bcc:aa09 with SMTP id e11-20020a056870c0cb00b000da2bccaa09mr2737856oad.63.1647554437707; Thu, 17 Mar 2022 15:00:37 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1647554437; cv=none; d=google.com; s=arc-20160816; b=Ll03tt/sVAiD2CwHMdOmED5azPpjXUToSthycl0k5ryTnSkSi5Pg6L/xQ1AonHc6XX Fck33NhsuDd9hNmGqOixXia311BFV00q2XvWOs7+Xb68TQv9t+kJonnCbfGGt34e3Di0 0TQKbzS6tfdPKzYTGIty/sL9ayBJaF/lT6hBJiuT3ZSJ6ym6A9hN4DtCOrXA2sW8RdUA 8UO2gXrrTa8FXLidJFEd1GKgx34tCcb1mHO0KUfoDLBkX/MSWgQaH3edZamltqcr+7E3 960KlvhpvarRr2tz6SSW00SKU/Hi56KjJEFgo9Jozk3CAbbFts1G5HNq9a+bIapsagoJ bIBQ== 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:user-agent:from :references:in-reply-to:mime-version:dkim-signature; bh=mYahFg1u8AWNshIkG0ACNOEuY23IE74jTRUAFlXlZgs=; b=OV7ykNDhgTfujZ7FEG/NIkBKnPJUvYA18rCu+aIixnv91LXG2aJAm1zXBcIALjk9wd 3cRrqcLcBT4euKpGWFhAO/nCgHvF7H6yBQqOhyRulF4khvUbzbZSalUhhJdahPmjyGp7 XI/qmRluqHezV66CNVGknbrm457yDHV/2XyhHsu9/v8g6Q8/eAVVRmWDo936SBz9hBoC 7sf1coorA7FX+IqnmNdN5qa2JXHr/G7KhF/XXI1Iz1NYO8YXhXH/Qb+cU86ioE+QjUI6 X9Hvim8p53p1DV9gS6u/XUgFojVq7ydVhjZ8HZrubkWl5vcVYRItuui6JJX1IGz6B0GZ Li7A== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=LzAlpuAI; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 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 lindbergh.monkeyblade.net (lindbergh.monkeyblade.net. [23.128.96.19]) by mx.google.com with ESMTPS id d13-20020a05680813cd00b002ecd31c2974si3206681oiw.82.2022.03.17.15.00.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Thu, 17 Mar 2022 15:00:37 -0700 (PDT) Received-SPF: softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) client-ip=23.128.96.19; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b=LzAlpuAI; spf=softfail (google.com: domain of transitioning linux-kernel-owner@vger.kernel.org does not designate 23.128.96.19 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id A771AE0D9; Thu, 17 Mar 2022 14:37:58 -0700 (PDT) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230378AbiCQVjI (ORCPT + 99 others); Thu, 17 Mar 2022 17:39:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36668 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230372AbiCQVjH (ORCPT ); Thu, 17 Mar 2022 17:39:07 -0400 Received: from mail-oi1-x22d.google.com (mail-oi1-x22d.google.com [IPv6:2607:f8b0:4864:20::22d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1574F1B087E for ; Thu, 17 Mar 2022 14:37:50 -0700 (PDT) Received: by mail-oi1-x22d.google.com with SMTP id o64so7015406oib.7 for ; Thu, 17 Mar 2022 14:37:50 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=chromium.org; s=google; h=mime-version:in-reply-to:references:from:user-agent:date:message-id :subject:to:cc; bh=mYahFg1u8AWNshIkG0ACNOEuY23IE74jTRUAFlXlZgs=; b=LzAlpuAIvhSFB57UMk4TIVaAFjG+yZiFO7gvk21cjYrKKivdM394ahnLTPM1TB1S8x V4Rek+owRzgElF1h34+BD/zJItn/bmK9nvLvYkifZusOqMQOwrDCfSKepPe+k4Wgq1sf 6FamhJegmjo6xbuGqtZsF4IhIuI+2CtxU1p1Q= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:in-reply-to:references:from :user-agent:date:message-id:subject:to:cc; bh=mYahFg1u8AWNshIkG0ACNOEuY23IE74jTRUAFlXlZgs=; b=QGLL5CPb8z0jv/KDk1eaWXGc2VAGQCioBUy0ejTd4+OJ4oMc7lg5OkmXMOwD6hAZ93 BVwK+KP9iPxf7KNKxbuybSWvS/C4wcxCbMLgTG1f6nNoXNKpMYkvvcyEN1JlUnZfcNmk BcqRrBh7Rqot6rnryrW+SdVCoMU4oTfqjHSGmnoucYJIZ65O9o3HwSYbA+ucNqKE1BDF 4eTX0SCprrc5KKemCEwglDocaMGQQO7q/hMHnod4ss0TMjloSRdaFawHdN2lZcODF9Ny IkGsXMasOhz9Mn+033j0ZDhso6MPl8dWcYOQksZY6XVyqBl9upRL7yKoou9rn7lgYwnH uVfw== X-Gm-Message-State: AOAM531loKP2tjHryz6ntx5RMRduXoCdNFmM+ZzBuPSSLCHWHebcaAD5 8CdW5509hIpT8Zv5bCxMdytdZu9PS9dHl5afKFovSQ== X-Received: by 2002:aca:a9c8:0:b0:2da:45b6:b796 with SMTP id s191-20020acaa9c8000000b002da45b6b796mr2860328oie.193.1647553069283; Thu, 17 Mar 2022 14:37:49 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Thu, 17 Mar 2022 17:37:48 -0400 MIME-Version: 1.0 In-Reply-To: <1647452154-16361-6-git-send-email-quic_sbillaka@quicinc.com> References: <1647452154-16361-1-git-send-email-quic_sbillaka@quicinc.com> <1647452154-16361-6-git-send-email-quic_sbillaka@quicinc.com> From: Stephen Boyd User-Agent: alot/0.10 Date: Thu, 17 Mar 2022 17:37:48 -0400 Message-ID: Subject: Re: [PATCH v5 5/9] drm/msm/dp: Add eDP support via aux_bus To: Sankeerth Billakanti , devicetree@vger.kernel.org, dri-devel@lists.freedesktop.org, freedreno@lists.freedesktop.org, linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: robdclark@gmail.com, seanpaul@chromium.org, quic_kalyant@quicinc.com, quic_abhinavk@quicinc.com, dianders@chromium.org, quic_khsieh@quicinc.com, agross@kernel.org, bjorn.andersson@linaro.org, robh+dt@kernel.org, krzk+dt@kernel.org, sean@poorly.run, airlied@linux.ie, daniel@ffwll.ch, thierry.reding@gmail.com, sam@ravnborg.org, dmitry.baryshkov@linaro.org, quic_vproddut@quicinc.com Content-Type: text/plain; charset="UTF-8" X-Spam-Status: No, score=-3.5 required=5.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,DKIM_VALID_AU,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RDNS_NONE,SPF_HELO_NONE,T_SCC_BODY_TEXT_LINE autolearn=unavailable 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 Quoting Sankeerth Billakanti (2022-03-16 10:35:50) > This patch adds support for generic eDP sink through aux_bus. Please unindent commit text paragraphs. This isn't a book. > The eDP/DP controller driver should support aux transactions originating > from the panel-edp driver and hence should be initialized and ready. > > The panel bridge supporting the panel should be ready before > the bridge connector is initialized. The generic panel probe needs the > controller resources to be enabled to support aux tractions originating s/tractions/transactions/ > from it. So, the host_init and phy_init are moved to execute before the > panel probe. > > The host_init has to return early if the core is already > initialized so that the regulator and clock votes for the controller > resources are balanced. > > EV_HPD_INIT_SETUP needs to execute immediately to enable the > interrupts for the aux transactions from panel-edp to get the modes > supported. There are a lot of things going on in this patch. Can it be split up? > > Signed-off-by: Sankeerth Billakanti > --- > drivers/gpu/drm/msm/dp/dp_display.c | 65 +++++++++++++++++++++++++++++++++++-- > drivers/gpu/drm/msm/dp/dp_drm.c | 10 +++--- > drivers/gpu/drm/msm/dp/dp_parser.c | 21 +----------- > drivers/gpu/drm/msm/dp/dp_parser.h | 1 + > 4 files changed, 70 insertions(+), 27 deletions(-) > > diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c > index 382b3aa..688bbed 100644 > --- a/drivers/gpu/drm/msm/dp/dp_display.c > +++ b/drivers/gpu/drm/msm/dp/dp_display.c > @@ -10,6 +10,7 @@ > #include > #include > #include > +#include > > #include "msm_drv.h" > #include "msm_kms.h" > @@ -265,8 +266,6 @@ static int dp_display_bind(struct device *dev, struct device *master, > goto end; > } > > - dp->dp_display.next_bridge = dp->parser->next_bridge; > - > dp->aux->drm_dev = drm; > rc = dp_aux_register(dp->aux); > if (rc) { > @@ -421,6 +420,11 @@ static void dp_display_host_init(struct dp_display_private *dp) > dp->dp_display.connector_type, dp->core_initialized, > dp->phy_initialized); > > + if (dp->core_initialized) { > + DRM_DEBUG_DP("DP core already initialized\n"); > + return; > + } > + > dp_power_init(dp->power, false); > dp_ctrl_reset_irq_ctrl(dp->ctrl, true); > dp_aux_init(dp->aux); > @@ -433,6 +437,11 @@ static void dp_display_host_deinit(struct dp_display_private *dp) > dp->dp_display.connector_type, dp->core_initialized, > dp->phy_initialized); > > + if (!dp->core_initialized) { > + DRM_DEBUG_DP("DP core not initialized\n"); > + return; > + } > + > dp_ctrl_reset_irq_ctrl(dp->ctrl, false); > dp_aux_deinit(dp->aux); > dp_power_deinit(dp->power); > @@ -1502,7 +1511,7 @@ void msm_dp_irq_postinstall(struct msm_dp *dp_display) > > dp_hpd_event_setup(dp); > > - dp_add_event(dp, EV_HPD_INIT_SETUP, 0, 100); > + dp_add_event(dp, EV_HPD_INIT_SETUP, 0, 0); > } > > void msm_dp_debugfs_init(struct msm_dp *dp_display, struct drm_minor *minor) > @@ -1524,6 +1533,52 @@ void msm_dp_debugfs_init(struct msm_dp *dp_display, struct drm_minor *minor) > } > } > > +static int dp_display_get_next_bridge(struct msm_dp *dp) > +{ > + int rc = 0; Drop initialization. > + struct dp_display_private *dp_priv; > + struct device_node *aux_bus; > + struct device *dev; > + > + dp_priv = container_of(dp, struct dp_display_private, dp_display); > + dev = &dp_priv->pdev->dev; > + aux_bus = of_get_child_by_name(dev->of_node, "aux-bus"); > + > + if (aux_bus) { > + dp_display_host_init(dp_priv); > + dp_catalog_ctrl_hpd_config(dp_priv->catalog); > + enable_irq(dp_priv->irq); > + dp_display_host_phy_init(dp_priv); > + > + devm_of_dp_aux_populate_ep_devices(dp_priv->aux); > + > + disable_irq(dp_priv->irq); Why do we disable irq? > + } The aux_bus node leaked. > + > + /* > + * External bridges are mandatory for eDP interfaces: one has to > + * provide at least an eDP panel (which gets wrapped into panel-bridge). > + * > + * For DisplayPort interfaces external bridges are optional, so > + * silently ignore an error if one is not present (-ENODEV). > + */ > + rc = dp_parser_find_next_bridge(dp_priv->parser); > + if (rc == -ENODEV) { > + if (dp->connector_type == DRM_MODE_CONNECTOR_eDP) { > + DRM_ERROR("eDP: next bridge is not present\n"); > + return rc; > + } > + } else if (rc) { > + if (rc != -EPROBE_DEFER) > + DRM_ERROR("DP: error parsing next bridge: %d\n", rc); > + return rc; > + } > + > + dp->next_bridge = dp_priv->parser->next_bridge; > + > + return 0; > +} > + > int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev, > struct drm_encoder *encoder) > { > @@ -1547,6 +1602,10 @@ int msm_dp_modeset_init(struct msm_dp *dp_display, struct drm_device *dev, > > dp_display->encoder = encoder; > > + ret = dp_display_get_next_bridge(dp_display); Didn't we just move bridge attachment out of modeset? Why is it being done here? > + if (ret) > + return ret; > + > dp_display->bridge = dp_bridge_init(dp_display, dev, encoder); > if (IS_ERR(dp_display->bridge)) { > ret = PTR_ERR(dp_display->bridge); > diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c > index 7ce1aca..5254bd6 100644 > --- a/drivers/gpu/drm/msm/dp/dp_drm.c > +++ b/drivers/gpu/drm/msm/dp/dp_drm.c > @@ -114,10 +114,12 @@ struct drm_bridge *dp_bridge_init(struct msm_dp *dp_display, struct drm_device * > bridge->funcs = &dp_bridge_ops; > bridge->type = dp_display->connector_type; > > - bridge->ops = > - DRM_BRIDGE_OP_DETECT | > - DRM_BRIDGE_OP_HPD | > - DRM_BRIDGE_OP_MODES; > + if (bridge->type == DRM_MODE_CONNECTOR_DisplayPort) { Why can't eDP have bridge ops that are the same? > + bridge->ops = > + DRM_BRIDGE_OP_DETECT | > + DRM_BRIDGE_OP_HPD | > + DRM_BRIDGE_OP_MODES; > + } > > rc = drm_bridge_attach(encoder, bridge, NULL, DRM_BRIDGE_ATTACH_NO_CONNECTOR); > if (rc) {