All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout
@ 2021-05-14  4:54 chris.chiu
  2021-05-14  4:54 ` [PATCH v4 1/2] USB: Verify the port status when timeout happens during port suspend chris.chiu
                   ` (2 more replies)
  0 siblings, 3 replies; 4+ messages in thread
From: chris.chiu @ 2021-05-14  4:54 UTC (permalink / raw)
  To: stern, gregkh, m.v.b, hadess; +Cc: linux-usb, linux-kernel, Chris Chiu

From: Chris Chiu <chris.chiu@canonical.com>

For the Realtek Hub which fails to resume the port which has wakeup
enable descendants, trying to propose a more generic and better fix
to have the runtime suspend/resume work instead of a reset-resume quirk.

Chris Chiu (2):
  USB: Verify the port status when timeout happens during port suspend
  Revert "USB: Add reset-resume quirk for WD19's Realtek Hub"

 drivers/usb/core/hub.c    | 21 +++++++++++++++++++++
 drivers/usb/core/quirks.c |  1 -
 2 files changed, 21 insertions(+), 1 deletion(-)

-- 
2.20.1


^ permalink raw reply	[flat|nested] 4+ messages in thread

* [PATCH v4 1/2] USB: Verify the port status when timeout happens during port suspend
  2021-05-14  4:54 [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout chris.chiu
@ 2021-05-14  4:54 ` chris.chiu
  2021-05-14  4:54 ` [PATCH v4 2/2] Revert "USB: Add reset-resume quirk for WD19's Realtek Hub" chris.chiu
  2021-05-14 15:33 ` [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout Alan Stern
  2 siblings, 0 replies; 4+ messages in thread
From: chris.chiu @ 2021-05-14  4:54 UTC (permalink / raw)
  To: stern, gregkh, m.v.b, hadess; +Cc: linux-usb, linux-kernel, Chris Chiu

From: Chris Chiu <chris.chiu@canonical.com>

On the Realtek high-speed Hub(0bda:5487), the port which has wakeup
enabled_descendants will sometimes timeout when setting PORT_SUSPEND
feature. After checking the PORT_SUSPEND bit in wPortStatus, it is
already set which means the port has been suspended. We should treat
it suspended to make sure it will be resumed correctly.

Signed-off-by: Chris Chiu <chris.chiu@canonical.com>
---

Changelog:
  v4:
    - add comment for the timeout handling
    - intialize the portstatus and portchange
    - revise the commit message to reflect the change
  v3:
    - create a new goto target for the timeout case instead of
      reset_resume
    - Revise the commit title/message because reset_resume is not
      required.
  v2:
    - create a new variable to keep the result of hub_port_status
      when suspend timeout.

 drivers/usb/core/hub.c | 21 +++++++++++++++++++++
 1 file changed, 21 insertions(+)

diff --git a/drivers/usb/core/hub.c b/drivers/usb/core/hub.c
index b2bc4b7c4289..e739f7b5991a 100644
--- a/drivers/usb/core/hub.c
+++ b/drivers/usb/core/hub.c
@@ -3385,6 +3385,26 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
 		status = 0;
 	}
 	if (status) {
+		/* Check if the port has been suspended for the timeout case
+		 * to prevent the suspended port from incorrect handling.
+		 */
+		if (status == -ETIMEDOUT) {
+			int ret;
+			u16 portstatus, portchange;
+
+			portstatus = portchange = 0;
+			ret = hub_port_status(hub, port1, &portstatus,
+					&portchange);
+
+			dev_dbg(&port_dev->dev,
+				"suspend timeout, status %04x\n", portstatus);
+
+			if (ret == 0 && port_is_suspended(hub, portstatus)) {
+				status = 0;
+				goto suspend_done;
+			}
+		}
+
 		dev_dbg(&port_dev->dev, "can't suspend, status %d\n", status);
 
 		/* Try to enable USB3 LTM again */
@@ -3401,6 +3421,7 @@ int usb_port_suspend(struct usb_device *udev, pm_message_t msg)
 		if (!PMSG_IS_AUTO(msg))
 			status = 0;
 	} else {
+ suspend_done:
 		dev_dbg(&udev->dev, "usb %ssuspend, wakeup %d\n",
 				(PMSG_IS_AUTO(msg) ? "auto-" : ""),
 				udev->do_remote_wakeup);
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* [PATCH v4 2/2] Revert "USB: Add reset-resume quirk for WD19's Realtek Hub"
  2021-05-14  4:54 [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout chris.chiu
  2021-05-14  4:54 ` [PATCH v4 1/2] USB: Verify the port status when timeout happens during port suspend chris.chiu
@ 2021-05-14  4:54 ` chris.chiu
  2021-05-14 15:33 ` [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout Alan Stern
  2 siblings, 0 replies; 4+ messages in thread
From: chris.chiu @ 2021-05-14  4:54 UTC (permalink / raw)
  To: stern, gregkh, m.v.b, hadess; +Cc: linux-usb, linux-kernel, Chris Chiu

From: Chris Chiu <chris.chiu@canonical.com>

This reverts commit ca91fd8c7643 ("USB: Add reset-resume quirk for
WD19's Realtek Hub"). The previous patch in the series now handles
the problematic hubs by checking the port status and handling it
accordingly when PORT_SUSPEND timeout occurs. We don't need to use
reset-resume all the time.

Signed-off-by: Chris Chiu <chris.chiu@canonical.com>
---

Changelog:
  v4:
    - correct the format of commit reference in the commit message
    - rephrase the commit message properly

 drivers/usb/core/quirks.c | 1 -
 1 file changed, 1 deletion(-)

diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index 21e7522655ac..6114cf83bb44 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -406,7 +406,6 @@ static const struct usb_device_id usb_quirk_list[] = {
 
 	/* Realtek hub in Dell WD19 (Type-C) */
 	{ USB_DEVICE(0x0bda, 0x0487), .driver_info = USB_QUIRK_NO_LPM },
-	{ USB_DEVICE(0x0bda, 0x5487), .driver_info = USB_QUIRK_RESET_RESUME },
 
 	/* Generic RTL8153 based ethernet adapters */
 	{ USB_DEVICE(0x0bda, 0x8153), .driver_info = USB_QUIRK_NO_LPM },
-- 
2.20.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout
  2021-05-14  4:54 [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout chris.chiu
  2021-05-14  4:54 ` [PATCH v4 1/2] USB: Verify the port status when timeout happens during port suspend chris.chiu
  2021-05-14  4:54 ` [PATCH v4 2/2] Revert "USB: Add reset-resume quirk for WD19's Realtek Hub" chris.chiu
@ 2021-05-14 15:33 ` Alan Stern
  2 siblings, 0 replies; 4+ messages in thread
From: Alan Stern @ 2021-05-14 15:33 UTC (permalink / raw)
  To: chris.chiu; +Cc: gregkh, m.v.b, hadess, linux-usb, linux-kernel

On Fri, May 14, 2021 at 12:54:03PM +0800, chris.chiu@canonical.com wrote:
> From: Chris Chiu <chris.chiu@canonical.com>
> 
> For the Realtek Hub which fails to resume the port which has wakeup
> enable descendants, trying to propose a more generic and better fix
> to have the runtime suspend/resume work instead of a reset-resume quirk.
> 
> Chris Chiu (2):
>   USB: Verify the port status when timeout happens during port suspend
>   Revert "USB: Add reset-resume quirk for WD19's Realtek Hub"
> 
>  drivers/usb/core/hub.c    | 21 +++++++++++++++++++++
>  drivers/usb/core/quirks.c |  1 -
>  2 files changed, 21 insertions(+), 1 deletion(-)

For both patches:

Acked-by: Alan Stern <stern@rowland.harvard.edu>


^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-05-14 15:33 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-14  4:54 [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout chris.chiu
2021-05-14  4:54 ` [PATCH v4 1/2] USB: Verify the port status when timeout happens during port suspend chris.chiu
2021-05-14  4:54 ` [PATCH v4 2/2] Revert "USB: Add reset-resume quirk for WD19's Realtek Hub" chris.chiu
2021-05-14 15:33 ` [PATCH v4 0/2] USB: propose a generic fix for PORT_SUSPEND set feature timeout Alan Stern

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.