Hi, On Wed, Mar 30, 2022 at 9:04 AM Sankeerth Billakanti <quic_sbillaka@xxxxxxxxxxx> wrote: > > Some eDP sinks or platform boards will not support hpd. > This patch adds support for those cases. You could say more, like: If we're not using HPD then _both_ the panel node and the eDP controller node will have "no-hpd". This tells the eDP panel code to hardcode the maximum possible delay for a panel to power up and tells the eDP driver that it should continue to do transfers even if HPD isn't asserted. > Signed-off-by: Sankeerth Billakanti <quic_sbillaka@xxxxxxxxxxx> > --- > drivers/gpu/drm/msm/dp/dp_catalog.c | 15 ++++++++++++--- > 1 file changed, 12 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/msm/dp/dp_catalog.c b/drivers/gpu/drm/msm/dp/dp_catalog.c > index 1809ce2..8f1fc71 100644 > --- a/drivers/gpu/drm/msm/dp/dp_catalog.c > +++ b/drivers/gpu/drm/msm/dp/dp_catalog.c > @@ -244,10 +244,17 @@ void dp_catalog_aux_update_cfg(struct dp_catalog *dp_catalog) > > int dp_catalog_aux_wait_for_hpd_connect_state(struct dp_catalog *dp_catalog) > { > - u32 state; > + u32 state, hpd_en; > struct dp_catalog_private *catalog = container_of(dp_catalog, > struct dp_catalog_private, dp_catalog); > > + hpd_en = dp_read_aux(catalog, REG_DP_DP_HPD_CTRL); > + hpd_en &= DP_DP_HPD_CTRL_HPD_EN; > + > + /* no-hpd case */ > + if (!hpd_en) > + return 0; > + > /* poll for hpd connected status every 2ms and timeout after 500ms */ > return readl_poll_timeout(catalog->io->dp_controller.aux.base + > REG_DP_DP_HPD_INT_STATUS, > @@ -586,8 +593,10 @@ void dp_catalog_ctrl_hpd_config(struct dp_catalog *dp_catalog) > reftimer |= DP_DP_HPD_REFTIMER_ENABLE; > dp_write_aux(catalog, REG_DP_DP_HPD_REFTIMER, reftimer); > > - /* Enable HPD */ > - dp_write_aux(catalog, REG_DP_DP_HPD_CTRL, DP_DP_HPD_CTRL_HPD_EN); > + /* Enable HPD if supported*/ > + if (!of_property_read_bool(catalog->dev->of_node, "no-hpd")) I don't think this is a particularly lightweight operation. It's literally iterating through all of our device tree properties and doing string compares on them. ...but this function is called somewhat often, isn't it? It feels like the kind of thing that should happen at probe time and be stored in a boolean. ...and then you can use that same boolean in dp_catalog_aux_wait_for_hpd_connect_state() rather than reading the register value, right? -Doug