On Wed, 12 Jan 2022 at 20:41, Kuogee Hsieh <quic_khsieh@xxxxxxxxxxx> wrote: > > > On 1/6/2022 6:01 PM, Dmitry Baryshkov wrote: > > In commit 8a3b4c17f863 ("drm/msm/dp: employ bridge mechanism for display > > enable and disable") the DP driver received a drm_bridge instance, which > > is always attached to the encoder as a root bridge. However it conflicts > > with the panel_bridge support for eDP panels. Change panel_bridge > > attachment to come after dp_bridge attachment. > > > > Fixes: 8a3b4c17f863 ("drm/msm/dp: employ bridge mechanism for display enable and disable") > > Cc: Kuogee Hsieh <quic_khsieh@xxxxxxxxxxx> > > Signed-off-by: Dmitry Baryshkov <dmitry.baryshkov@xxxxxxxxxx> > > --- > > drivers/gpu/drm/msm/dp/dp_drm.c | 21 +++++++++++---------- > > 1 file changed, 11 insertions(+), 10 deletions(-) > > > > diff --git a/drivers/gpu/drm/msm/dp/dp_drm.c b/drivers/gpu/drm/msm/dp/dp_drm.c > > index d4d360d19eba..26ef41a4c1b6 100644 > > --- a/drivers/gpu/drm/msm/dp/dp_drm.c > > +++ b/drivers/gpu/drm/msm/dp/dp_drm.c > > @@ -169,16 +169,6 @@ struct drm_connector *dp_drm_connector_init(struct msm_dp *dp_display) > > > > drm_connector_attach_encoder(connector, dp_display->encoder); > > > > - if (dp_display->panel_bridge) { > > - ret = drm_bridge_attach(dp_display->encoder, > > - dp_display->panel_bridge, NULL, > > - DRM_BRIDGE_ATTACH_NO_CONNECTOR); > > - if (ret < 0) { > > - DRM_ERROR("failed to attach panel bridge: %d\n", ret); > > - return ERR_PTR(ret); > > - } > > - } > > - > > return connector; > > } > > > > @@ -246,5 +236,16 @@ struct drm_bridge *msm_dp_bridge_init(struct msm_dp *dp_display, struct drm_devi > > return ERR_PTR(rc); > > } > > > > can check connector_type here and if connector_type == > DRM_MODE_CONNECTOR_eDP then no drm_bridge add to eDP? So that eDP only > has panel_bridge and DP only has drm_bridge? No, we still need the DP bridge for the eDP. It handles modesetting, enabling and disabling of the DP controller, etc. > > is this fix all your concerns? > > > > + if (dp_display->panel_bridge) { > > + rc = drm_bridge_attach(dp_display->encoder, > > + dp_display->panel_bridge, bridge, > > + DRM_BRIDGE_ATTACH_NO_CONNECTOR); > > + if (rc < 0) { > > + DRM_ERROR("failed to attach panel bridge: %d\n", rc); > > + drm_bridge_remove(bridge); > > + return ERR_PTR(rc); > > + } > > + } > > + > > return bridge; > > } -- With best wishes Dmitry