All of lore.kernel.org
 help / color / mirror / Atom feed
From: khsieh@codeaurora.org
To: Stephen Boyd <swboyd@chromium.org>
Cc: agross@kernel.org, bjorn.andersson@linaro.org,
	robdclark@gmail.com, sean@poorly.run, vkoul@kernel.org,
	abhinavk@codeaurora.org, aravindh@codeaurora.org,
	linux-arm-msm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v3 1/2] drm/msm/dp: handle irq_hpd with sink_count = 0 correctly
Date: Fri, 14 May 2021 10:12:03 -0700	[thread overview]
Message-ID: <07028c64a5683626300ee271bed3a621@codeaurora.org> (raw)
In-Reply-To: <CAE-0n53V661ir2hTpPYA2CAq3HLgXQYL+O-nnJy8vHYKPzynzw@mail.gmail.com>

On 2021-05-14 00:03, Stephen Boyd wrote:
> Quoting Kuogee Hsieh (2021-05-12 16:29:59)
>> irq_hpd interrupt should be handled after dongle plugged in and
>> before dongle unplugged. Hence irq_hpd interrupt is enabled at
>> the end of the plugin handle and disabled at the beginning of
>> unplugged handle. Current irq_hpd with sink_count = 0 is wrongly
>> handled same as the dongle unplugged which tears down the mainlink
>> and disables the phy. This patch fixes this problem by only tearing
>> down the mainlink but keeping phy enabled at irq_hpd with
>> sink_count = 0 handle so that next irq_hpe with sink_count =1 can be
> 
> s/irq_hpe/irq/hpd/
> 
>> handled by setup mainlink only.
>> 
>> Changes in v2:
>> -- add ctrl->phy_Power_count
>> 
>> Changes in v3:
>> -- del ctrl->phy_Power_count
>> -- add phy_power_off to dp_ctrl_off_link_stream()
>> 
>> Signed-off-by: Kuogee Hsieh <khsieh@codeaurora.org>
>> ---
>>  drivers/gpu/drm/msm/dp/dp_catalog.c |  5 ++--
>>  drivers/gpu/drm/msm/dp/dp_ctrl.c    | 54 
>> +++++++++++++++++++++++++++++++++++++
>>  drivers/gpu/drm/msm/dp/dp_ctrl.h    |  2 ++
>>  drivers/gpu/drm/msm/dp/dp_display.c | 46 
>> ++++++++++++++++++++++++-------
>>  4 files changed, 94 insertions(+), 13 deletions(-)
>> 
>> diff --git a/drivers/gpu/drm/msm/dp/dp_catalog.c 
>> b/drivers/gpu/drm/msm/dp/dp_catalog.c
>> index b1a9b1b..f4f53f2 100644
>> --- a/drivers/gpu/drm/msm/dp/dp_catalog.c
>> +++ b/drivers/gpu/drm/msm/dp/dp_catalog.c
>> @@ -582,10 +582,9 @@ void dp_catalog_ctrl_hpd_config(struct dp_catalog 
>> *dp_catalog)
>> 
>>         u32 reftimer = dp_read_aux(catalog, REG_DP_DP_HPD_REFTIMER);
>> 
>> -       /* enable HPD interrupts */
>> +       /* enable HPD plug and unplug interrupts */
>>         dp_catalog_hpd_config_intr(dp_catalog,
>> -               DP_DP_HPD_PLUG_INT_MASK | DP_DP_IRQ_HPD_INT_MASK
>> -               | DP_DP_HPD_UNPLUG_INT_MASK | 
>> DP_DP_HPD_REPLUG_INT_MASK, true);
>> +               DP_DP_HPD_PLUG_INT_MASK | DP_DP_HPD_UNPLUG_INT_MASK, 
>> true);
>> 
>>         /* Configure REFTIMER and enable it */
>>         reftimer |= DP_DP_HPD_REFTIMER_ENABLE;
>> diff --git a/drivers/gpu/drm/msm/dp/dp_ctrl.c 
>> b/drivers/gpu/drm/msm/dp/dp_ctrl.c
>> index 8d59eb9..41c122c 100644
>> --- a/drivers/gpu/drm/msm/dp/dp_ctrl.c
>> +++ b/drivers/gpu/drm/msm/dp/dp_ctrl.c
>> @@ -1811,6 +1811,60 @@ int dp_ctrl_on_stream(struct dp_ctrl *dp_ctrl)
>>         return ret;
>>  }
>> 
>> +int dp_ctrl_off_link_stream(struct dp_ctrl *dp_ctrl)
>> +{
>> +       struct dp_ctrl_private *ctrl;
>> +       struct dp_io *dp_io;
>> +       struct phy *phy;
>> +       int ret = 0;
> 
> Please don't assign ret and then reassign it without testing it first.
> 
>> +
>> +       if (!dp_ctrl)
> 
> Does this ever happen?
> 
>> +               return -EINVAL;
>> +
>> +       ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl);
>> +       dp_io = &ctrl->parser->io;
>> +       phy = dp_io->phy;
>> +
>> +       dp_catalog_ctrl_mainlink_ctrl(ctrl->catalog, false);
>> +
>> +       ret = dp_power_clk_enable(ctrl->power, DP_STREAM_PM, false);
>> +       if (ret)
>> +               DRM_ERROR("Failed to disable pixel clocks. ret=%d\n", 
>> ret);
> 
> Why do we continue instead of returning with a failure?
> 
>> +
>> +       ret = dp_power_clk_enable(ctrl->power, DP_CTRL_PM, false);
>> +       if (ret)
>> +               DRM_ERROR("Failed to disable link clocks. ret=%d\n", 
>> ret);
> 
> Same, why do we continue?
> 
>> +
>> +       phy_power_off(phy);
>> +       phy_exit(phy);
>> +
>> +       /* aux channel down, reinit phy */
> 
> So we need to call exit/init to reinitialize the phy? I wonder if there
> could be some phy_reinit() function that combines those.
there is no phy_reinit() function existing currently.
we can add phy_reinit() to combine phy_exit/phy_init as long as ther is 
no changed to phy->init_count.




> 
>> +       phy_init(phy);
>> +
>> +       DRM_DEBUG_DP("DP off link/stream done\n");
>> +       return ret;
> 
> Except here we return with a failure.
> 
>> +}
>> +
>> +void dp_ctrl_off_phy(struct dp_ctrl *dp_ctrl)
>> +{
>> +       struct dp_ctrl_private *ctrl;
>> +       struct dp_io *dp_io;
>> +       struct phy *phy;
>> +
>> +       if (!dp_ctrl)
> 
> Does this ever happen?
> 
>> +               return;
>> +
>> +       ctrl = container_of(dp_ctrl, struct dp_ctrl_private, dp_ctrl);
>> +       dp_io = &ctrl->parser->io;
>> +       phy = dp_io->phy;
>> +
>> +       dp_catalog_ctrl_reset(ctrl->catalog);
>> +
>> +       phy_exit(phy);
>> +
>> +       DRM_DEBUG_DP("DP off phy done\n");
>> +}
>> +
>>  int dp_ctrl_off(struct dp_ctrl *dp_ctrl)
>>  {
>>         struct dp_ctrl_private *ctrl;

      reply	other threads:[~2021-05-14 17:12 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-05-12 23:29 [PATCH v3 1/2] drm/msm/dp: handle irq_hpd with sink_count = 0 correctly Kuogee Hsieh
2021-05-14  7:03 ` Stephen Boyd
2021-05-14 17:12   ` khsieh [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=07028c64a5683626300ee271bed3a621@codeaurora.org \
    --to=khsieh@codeaurora.org \
    --cc=abhinavk@codeaurora.org \
    --cc=agross@kernel.org \
    --cc=aravindh@codeaurora.org \
    --cc=bjorn.andersson@linaro.org \
    --cc=linux-arm-msm@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=robdclark@gmail.com \
    --cc=sean@poorly.run \
    --cc=swboyd@chromium.org \
    --cc=vkoul@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.