Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp858493pxj; Fri, 21 May 2021 00:20:20 -0700 (PDT) X-Google-Smtp-Source: ABdhPJz5sqlFm13cnqgtE76KWyE9c41fDibxhLvj4G5V87DpDRa1UbAbElQwafMhcw0gCKkgSBiU X-Received: by 2002:a17:907:c19:: with SMTP id ga25mr8845349ejc.33.1621581620506; Fri, 21 May 2021 00:20:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621581620; cv=none; d=google.com; s=arc-20160816; b=fJNaLYc5SMsEy7xQycYFp6faMbBJhyki89VRIfDahJRoefL0ALvgCruhx64K0yoR+N kqjYQ4/47d0xSm4leBxa1IrYcKZdDxlxffBWe6Sl4pdyUJaaxDa77KCA0WAobe+ttHVH NZE2o+UpiJjeHaTkBe8rNF51p6Lg1jhhqEGUrqov03+np08WcYYwvKqGwuZouWIjbXth wsMeX8PowBM2syde4e7wLkJXz+PJRGiBcVLOn7GB0gQs9e80MnzMZjH2Zy4OwbR3vwzP Nvoq/9p00KSij/dY7cpItFyxQIyka54XFQh5tf+hdnzhSx84u/DXhgtZNs4T4AF5lV9O 8k8Q== 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=UkMIkgxAg1yDU50Q27zsSjPf6ATFEQhYvSl3BA7FZWs=; b=tqDYFAweNOfCHyN4QjYkVduTpmw+yrDNpDgrRy5ip+8KHsOkKTWsha5csBRot3oSwc yjglqeLxptVDzKrwpysNsWV9lURAJB41lME0+CoT0xTNAzVqJk0yWCg7Huc8Rrc92VI5 GuyXvAHsKPf/sk1z5HGWE8TCN5U8xKfhMgn9h6aUtbomD0FggwgVuaww0E8xTgNL7RZU iFQIov6QT3aZ/ohTBWkt8KtydmKTBcSkKWuknvqleFhD6f34YQ+Tt0vLyj08DwIANMYt /z8rn+a5GMuBrDRLXHiau87ruZ+ODsA+HK/+eoz6MeucrTiQf3oB61WXBbhkuAxEnVpu WKqg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="l/XwDaSM"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 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 vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id d22si4145624edx.557.2021.05.21.00.19.56; Fri, 21 May 2021 00:20:20 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@chromium.org header.s=google header.b="l/XwDaSM"; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=chromium.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S239310AbhETTaK (ORCPT + 99 others); Thu, 20 May 2021 15:30:10 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:39626 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237673AbhETTaK (ORCPT ); Thu, 20 May 2021 15:30:10 -0400 Received: from mail-oi1-x234.google.com (mail-oi1-x234.google.com [IPv6:2607:f8b0:4864:20::234]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5881DC061574 for ; Thu, 20 May 2021 12:28:47 -0700 (PDT) Received: by mail-oi1-x234.google.com with SMTP id c196so9262209oib.9 for ; Thu, 20 May 2021 12:28:47 -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=UkMIkgxAg1yDU50Q27zsSjPf6ATFEQhYvSl3BA7FZWs=; b=l/XwDaSM0eTBErOQdXx+pm5scDKjtceA9ooO6g22HuXH/gHozT+VeDSc8a2tyte9p0 b9f5CWu3gEBJvcercP9QoUkfrwDMZijoTSSUd38OmbgpPuhHFqOL5tDJZGwTjJp9qwck GrcmZFYMhDtuEDKyFQOapi+syhAzc086w32bM= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:mime-version:in-reply-to:references:from :user-agent:date:message-id:subject:to:cc; bh=UkMIkgxAg1yDU50Q27zsSjPf6ATFEQhYvSl3BA7FZWs=; b=AYOlbEhXgFykqRmCquxOTN8MgS26MMGQbbmXU4S8ZB+J96e4BJlEenES9vZ+SBQGno Aldwa/kYCMNnOmA8Y96ZxwZltgRq5v2JLb2NBr3ERGGR5heKcMH8vHDsBVZ+nqjXed3o 6oFHjGBy/W12d2VzgsefbCODOgBOBi09dsqngkPg/osZZX/spuu+p/JgbZMSJjtV+pXt MARE402/ySF++5EHXAbnwW1O5wtB2A1ZOOT1XEPp0Frk8DuBl2XzriR0sCBowFbmNV8F PtNNenB93kafD91IqlLvlRPzhuwqOfoGB7JKjODL/l8BguySh/fwl5d3hNeSfiPXgFFh 7jXw== X-Gm-Message-State: AOAM531wWOAtg3R0P4G8zREDjjRmhiFd3lahDhY2jJTOgApRPO1l9fVh EkcheGVnWHdGbITKu7mzifCkWLhX51aD1dDUycBHRg== X-Received: by 2002:a54:4501:: with SMTP id l1mr4373766oil.19.1621538926660; Thu, 20 May 2021 12:28:46 -0700 (PDT) Received: from 753933720722 named unknown by gmailapi.google.com with HTTPREST; Thu, 20 May 2021 12:28:46 -0700 MIME-Version: 1.0 In-Reply-To: References: <1621013713-6860-1-git-send-email-khsieh@codeaurora.org> From: Stephen Boyd User-Agent: alot/0.9.1 Date: Thu, 20 May 2021 12:28:46 -0700 Message-ID: Subject: Re: [PATCH v4 1/2] drm/msm/dp: handle irq_hpd with sink_count = 0 correctly To: khsieh@codeaurora.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 Content-Type: text/plain; charset="UTF-8" Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Quoting khsieh@codeaurora.org (2021-05-20 09:08:03) > On 2021-05-19 14:06, Stephen Boyd wrote: > > Quoting khsieh@codeaurora.org (2021-05-19 09:01:02) > >> On 2021-05-18 14:42, Stephen Boyd wrote: > >> > Quoting Kuogee Hsieh (2021-05-14 10:35:13) > >> >> 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_hpd with sink_count =1 can be > >> >> 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() > >> >> > >> >> Changes in v4: > >> >> -- return immediately if clock disable failed at > >> >> dp_ctrl_off_link_stream() > >> >> > >> >> Signed-off-by: Kuogee Hsieh > >> > > >> > I think we want some Fixes tag. Not sure what it would be though. > >> > > >> > I also noticed that if I plug and unplug the HDMI cable from my apple > >> > dongle that I see this error message > >> > > >> > [drm:dp_display_usbpd_attention_cb] *ERROR* Disconnected, no > >> > DP_LINK_STATUS_UPDATED > >> > >> > *ERROR* Disconnected, no DP_LINK_STATUS_UPDATED <== this is caused by > >> > dongle generate the second > >> irq_hpd with sink_count = 0 after first first irq_hpd with sink_count > >> = > >> 0. The fix is you have > >> set dongle to D3 (power off) state after first irq_pd with sink_count > >> =display_disable > >> 0 handled. > >> I have a patch fix this problem. I will merge and re submit for > >> review. > > > > That's good. I still don't understand how the kthread can't race with > > irq_hpd and hpd going low though. Userspace will have to disable > > thectrl_off_link_stream()). > > display and that could happen far later than the time that the hpd low > > interrupt fires and is processed. Can't hpd go high during that time > > and > > then blip before userspace notices and disables the display? > > > > Put another way, putting the dongle into D3 state may make the race > > window smaller, but it's not fixing the root cause of the problem which > > is that the kthread is running later and userspace is involved in the > > state of the dongle while irqs are firing. The three different contexts > > have to coordinate work, so it feels like a better approach would be to > > shut off the irq_hpd interrupt once hpd goes low for an unplug in > > hardirq context so that we don't have to consider the cable state or > > userspace changing the state after we notify it. > > There is no race condition here. > The interrupts are converted into event and stored at event q. > event thread service event sequentially and make sure transaction had > been completed before service next event. > The first irq_hpd with sink_count = 0 is handled and this transaction > will not completed until user space frame work turn off display > (msm_dp_display_disable()). > After that, the second irq_hpd with sink_count will be service which > found that display is off so it spill out DP_LINK_STATUS_UPDATED warning > message and do nothing. > > Put dongle to D3 state so that it will not issue the unnecessary second > irq_hpd with sink_count = 0. this will prevent the annoy but unharmful > DP_LINK_STATUS_UPDATED warning message. > Again, we can not disable hpd interrupt since dongle still attached and > hdmi cable can be plugged in at any instant. > Right I'm not suggesting to disable hpd interrupt, just the hpd_irq interrupt once an unplug irq comes in, and do that in hardirq context. Also, I'm suggesting that we consider unplug as a higher priority if the hard irq handler is delayed for some reason and both an unplug irq and an hpd irq are pending in the hardware when the hard irq handler is running. Putting the dongle into D3 state won't fix these problems.