Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp5025990ybl; Tue, 14 Jan 2020 02:11:46 -0800 (PST) X-Google-Smtp-Source: APXvYqxelzmgca2Yb0FqZxl2UJYjtSkW8+85ry1f6vMX0uUZMHRY0Spv4EiuNti7VmcrQKa8in36 X-Received: by 2002:a9d:7851:: with SMTP id c17mr16891697otm.58.1578996706235; Tue, 14 Jan 2020 02:11:46 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578996706; cv=none; d=google.com; s=arc-20160816; b=YxHWjdhLm+kpzbJohWBQHeBQ4ddTilTdTBN9NvoQ/ablYkn0GKZLmcZOl2l7IkgGeU u3X5Wo6cppq2KBotumyqOK93lzTtLla3T6PKVRf8GYehqLkLOvkl01ex9/E1ZCx/xQDx LvP3QXHr3XYf6aLylgtzH9ItzQpAs84xFNKSR6bhBAqdaVSgNVyU4xglyQaQ510M/QiN B4ESS7w8TJb2xkeNq0owOltJk1/9TLl/D0rOBy4HqZNvTv7yhuLU835X+Hn9c7tZRWP/ C5ObjRLvBowUBZp6ajMhKYO4RjNaXQ8f60Zin5AthliuIvLDmqQlYhxArvI16mrt3GGI sYbQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=VK6FLpHLqGf9/s7u1bELiSM/zwjXKl3GZcxdMofSjR8=; b=Jp3PYaygf5LhbCl1B2Hy7U2XP2WdxIXxDXC6jala2y4ttlP0ZurnbVYZ39IoG87/IN VyqD8NIyNFSK15y9O9rjSZu2qJOQtmtks9VrUnLjuT1Dw1sTAVavZh8siC2ankNaRCG0 krGMFcpuWRiXM5YxdJGTKANLlcZMNLVzTQhiWeje++ziWojxak6ai+OlF6nb9R/GNXDE TIjYkan8YpUjJZ2pz1uCb4NAkRdLI0MKADFh78Ke+IO3pbI9HYKZmBdFJFy5kYydslac FXUEzXohtWvpx5XA4cSaZnEj/V6vYm7rwHfrkKtmE6vcA9EaDJBs234OeqEbd0DEvZaA 72zA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=KRqc+x7R; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id h138si7279812oib.6.2020.01.14.02.11.35; Tue, 14 Jan 2020 02:11:46 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=KRqc+x7R; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730977AbgANKJi (ORCPT + 99 others); Tue, 14 Jan 2020 05:09:38 -0500 Received: from mail.kernel.org ([198.145.29.99]:42568 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1730959AbgANKJf (ORCPT ); Tue, 14 Jan 2020 05:09:35 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 5D6C420678; Tue, 14 Jan 2020 10:09:34 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578996574; bh=6gMgYgNup4LJZQuitzR0G50qK037Pw1jaNZCu8WO2uc=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=KRqc+x7RdYJhJ4YaArH0jaKMEDFP9/ZLxS1UUIGlNj4bfJs5gdURRZLWXB/zDD7Fc rgTA1W5iNf0Y84+wbm268Cgx94KnAv6UpcqhS9XDm/gpV59YpYdwjtb+m+8ADvd0Nr bBI1ffJyoh3g61tEHA5uCX5zpGz/51Z2I3QkVGOA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Merlijn Wajer , Pavel Machek , Sebastian Reichel , Tony Lindgren , Bin Liu Subject: [PATCH 4.14 17/39] usb: musb: fix idling for suspend after disconnect interrupt Date: Tue, 14 Jan 2020 11:01:51 +0100 Message-Id: <20200114094343.002075674@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200114094336.210038037@linuxfoundation.org> References: <20200114094336.210038037@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Tony Lindgren commit 5fbf7a2534703fd71159d3d71504b0ad01b43394 upstream. When disconnected as USB B-device, suspend interrupt should come before diconnect interrupt, because the DP/DM pins are shorter than the VBUS/GND pins on the USB connectors. But we sometimes get a suspend interrupt after disconnect interrupt. In that case we have devctl set to 99 with VBUS still valid and musb_pm_runtime_check_session() wrongly thinks we have an active session. We have no other interrupts after disconnect coming in this case at least with the omap2430 glue. Let's fix the issue by checking the interrupt status again with delayed work for the devctl 99 case. In the suspend after disconnect case the devctl session bit has cleared by then and musb can idle. For a typical USB B-device connect case we just continue with normal interrupts. Fixes: 467d5c980709 ("usb: musb: Implement session bit based runtime PM for musb-core") Cc: Merlijn Wajer Cc: Pavel Machek Cc: Sebastian Reichel Cc: stable@vger.kernel.org Signed-off-by: Tony Lindgren Signed-off-by: Bin Liu Link: https://lore.kernel.org/r/20200107152625.857-2-b-liu@ti.com Signed-off-by: Greg Kroah-Hartman --- drivers/usb/musb/musb_core.c | 8 ++++++++ 1 file changed, 8 insertions(+) --- a/drivers/usb/musb/musb_core.c +++ b/drivers/usb/musb/musb_core.c @@ -1838,6 +1838,9 @@ static const struct attribute_group musb #define MUSB_QUIRK_B_INVALID_VBUS_91 (MUSB_DEVCTL_BDEVICE | \ (2 << MUSB_DEVCTL_VBUS_SHIFT) | \ MUSB_DEVCTL_SESSION) +#define MUSB_QUIRK_B_DISCONNECT_99 (MUSB_DEVCTL_BDEVICE | \ + (3 << MUSB_DEVCTL_VBUS_SHIFT) | \ + MUSB_DEVCTL_SESSION) #define MUSB_QUIRK_A_DISCONNECT_19 ((3 << MUSB_DEVCTL_VBUS_SHIFT) | \ MUSB_DEVCTL_SESSION) @@ -1860,6 +1863,11 @@ static void musb_pm_runtime_check_sessio s = MUSB_DEVCTL_FSDEV | MUSB_DEVCTL_LSDEV | MUSB_DEVCTL_HR; switch (devctl & ~s) { + case MUSB_QUIRK_B_DISCONNECT_99: + musb_dbg(musb, "Poll devctl in case of suspend after disconnect\n"); + schedule_delayed_work(&musb->irq_work, + msecs_to_jiffies(1000)); + break; case MUSB_QUIRK_B_INVALID_VBUS_91: if (musb->quirk_retries && !musb->flush_irq_work) { musb_dbg(musb,