[Freedreno] [PATCH v3 3/7] drm/msm/dp: use drm_bridge_hpd_notify() to report HPD status changes
Kuogee Hsieh
quic_khsieh at quicinc.com
Wed Sep 20 19:45:57 UTC 2023
On 9/19/2023 2:45 AM, Dmitry Baryshkov wrote:
> On Mon, 18 Sept 2023 at 23:16, Kuogee Hsieh <quic_khsieh at quicinc.com> wrote:
>>
>> On 9/15/2023 5:41 PM, Dmitry Baryshkov wrote:
>>> On Sat, 16 Sept 2023 at 00:38, Kuogee Hsieh <quic_khsieh at quicinc.com> wrote:
>>>> Currently DP driver use drm_helper_hpd_irq_event(), bypassing drm bridge
>>>> framework, to report HPD status changes to user space frame work.
>>>> Replace it with drm_bridge_hpd_notify() since DP driver is part of drm
>>>> bridge.
>>>>
>>>> Signed-off-by: Kuogee Hsieh <quic_khsieh at quicinc.com>
>>> Reviewed-by: Dmitry Baryshkov <dmitry.baryshkov at linaro.org>
>>>
>>> Also see the comment below.
>>>
>>>> ---
>>>> drivers/gpu/drm/msm/dp/dp_display.c | 20 ++------------------
>>>> 1 file changed, 2 insertions(+), 18 deletions(-)
>>>>
>>>> diff --git a/drivers/gpu/drm/msm/dp/dp_display.c b/drivers/gpu/drm/msm/dp/dp_display.c
>>>> index 18d16c7..59f9d85 100644
>>>> --- a/drivers/gpu/drm/msm/dp/dp_display.c
>>>> +++ b/drivers/gpu/drm/msm/dp/dp_display.c
>>>> @@ -356,26 +356,10 @@ static bool dp_display_is_sink_count_zero(struct dp_display_private *dp)
>>>> (dp->link->sink_count == 0);
>>>> }
>>>>
>>>> -static void dp_display_send_hpd_event(struct msm_dp *dp_display)
>>>> -{
>>>> - struct dp_display_private *dp;
>>>> - struct drm_connector *connector;
>>>> -
>>>> - dp = container_of(dp_display, struct dp_display_private, dp_display);
>>>> -
>>>> - connector = dp->dp_display.connector;
>>>> - drm_helper_hpd_irq_event(connector->dev);
>>>> -}
>>>> -
>>>> static int dp_display_send_hpd_notification(struct dp_display_private *dp,
>>>> bool hpd)
>>>> {
>>>> - if ((hpd && dp->dp_display.link_ready) ||
>>>> - (!hpd && !dp->dp_display.link_ready)) {
>>>> - drm_dbg_dp(dp->drm_dev, "HPD already %s\n",
>>>> - (hpd ? "on" : "off"));
>>>> - return 0;
>>>> - }
>>>> + struct drm_bridge *bridge = dp->dp_display.bridge;
>>>>
>>>> /* reset video pattern flag on disconnect */
>>>> if (!hpd)
>>> Note, this part (resetting the video_test and setting of is_connected)
>>> should be moved to the dp_bridge_hpd_notify() too. Please ignore this
>>> comment if this is handled later in the series.
>> I think keep them here is better since eDP does not populate hpd_enable,
>> hpd_disable and hpd_notify at edp_bridge_ops at drm_bridge_attach().
>>
>> Keep them here will work for both eDP and DP.
> Having them here doesn't work for DP-with-external-bridges, which will
> not use dp_display_send_hpd_notification.
DP-with-external-bridges?
Are you mean hpd through gpio case which only have hpd_notify without both hpd_enable and pd_disable at dp_bridge_ops?
it will use both EV_HPD_PLUG_INT and EV_HPD_UNPLUG_INT events for plug_in and unplug respectively.
Both will end up use dp_display_send_hpd_notification().
Therefore it will works too.
>>
>>>
>>>> @@ -385,7 +369,7 @@ static int dp_display_send_hpd_notification(struct dp_display_private *dp,
>>>>
>>>> drm_dbg_dp(dp->drm_dev, "type=%d hpd=%d\n",
>>>> dp->dp_display.connector_type, hpd);
>>>> - dp_display_send_hpd_event(&dp->dp_display);
>>>> + drm_bridge_hpd_notify(bridge, dp->dp_display.link_ready);
>>>>
>>>> return 0;
>>>> }
>>>> --
>>>> 2.7.4
>>>>
>
>
More information about the Freedreno
mailing list