Received: by 2002:a25:8b91:0:0:0:0:0 with SMTP id j17csp5020595ybl; Tue, 14 Jan 2020 02:06:26 -0800 (PST) X-Google-Smtp-Source: APXvYqx8u1f73AOgHOPX5p42tN1DciWUFx9vDHtpec3Rha0tPiE+oRImXCeDzvgg+3ZaPwSu2AU9 X-Received: by 2002:aca:1012:: with SMTP id 18mr15328749oiq.151.1578996386509; Tue, 14 Jan 2020 02:06:26 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1578996386; cv=none; d=google.com; s=arc-20160816; b=M55L0q7qtAL+wICPKq9XlTytZmRswenf80Pg2eQKBmEooWmS79F77rxodZzN+xh0+F 3cZBofikBKZEoPHj5A5qQ6dWTp4B8q3utR70IKgQWkKwqGJBTiqwaqD5monhrxP4nPMq cgzMpvPETc5JnQQRiG/KrY8EGyiqOYjS4bpFaXIeFjfJjbfqaYajisGK8QunpklHuGGo SKFx9vp/57re30hmyO8TChQY4apcA9KfPTq5eL9F0pd3U9vY34RfCo355FkzewRMldlm EM658qXvoDQbalc/RH/VTLOKxsRStMrS+FwQdxYnIl08Z6K8a6dOuvGcwUXezxAeYgS7 kyPg== 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=BLeW4ke88BMmAD6ffF/eaCIns2WLRRHAZcCXAkJHuPA=; b=E7Anqwl3i5nZbM/3wqYAmUG4eHZf0DHkJQtYJ37y2dOE7BhrzDxXPOy5aS3i/f0w18 zWf5XkXkP+oU3S3jmNHHd220vEr3/8H91KeMiqMXs9GsSL4fVbGLDZqz1jzxER53iB2N lCnl3R/ZjRpjDHSd+oyV/TA9gDCn3ZaO2QZru1uIZSVtW+GOaw/EzvI8zHqZ7XeJae46 K96v/rWq7Ex7OVldi7Dj/eD5gprzna1MVRc8zxqxft4LFZcwUyjcIHj3EnJhzg0W5viS LhFAOJER5cn2gXHS3qlR5bL+OPC8pnuv9H7neHTU4kNltwC9lFisWCWlvhv/xFVcfI6i mDNQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Npc1d73t; 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 c10si8526688otr.88.2020.01.14.02.06.15; Tue, 14 Jan 2020 02:06:26 -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=Npc1d73t; 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 S1729991AbgANKE5 (ORCPT + 99 others); Tue, 14 Jan 2020 05:04:57 -0500 Received: from mail.kernel.org ([198.145.29.99]:60814 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729961AbgANKEx (ORCPT ); Tue, 14 Jan 2020 05:04:53 -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 0268824684; Tue, 14 Jan 2020 10:04:51 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1578996292; bh=fPvff8lqbwF7B9D9FjXp9TM/QjGIZzgMn+/M5kWPjTo=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Npc1d73tRf/vjX6NYInOYidFIQIKJvYIlZ5s+LhYxA4QNx6sdbMSOCoFYWaEJXWEb L8sLL0mae0/7UgZJwKSBEixeX2UgctCNzv1WCuXqBd2GfkipAmNGUSmVYE27XpWVcz SrqeSlQUCFSGZnJGECPKpaIWOoxBbbL2XiW66x54= 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 5.4 46/78] usb: musb: fix idling for suspend after disconnect interrupt Date: Tue, 14 Jan 2020 11:01:20 +0100 Message-Id: <20200114094359.717460015@linuxfoundation.org> X-Mailer: git-send-email 2.24.1 In-Reply-To: <20200114094352.428808181@linuxfoundation.org> References: <20200114094352.428808181@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 @@ -1840,6 +1840,9 @@ ATTRIBUTE_GROUPS(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) @@ -1862,6 +1865,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,