[PATCH] usb: quirks: Add DELAY_INIT and NO_LPM for Prolific PL2303 Serial Port

Miao Li posted 1 patch 11 months, 1 week ago
drivers/usb/core/quirks.c | 4 ++++
1 file changed, 4 insertions(+)
[PATCH] usb: quirks: Add DELAY_INIT and NO_LPM for Prolific PL2303 Serial Port
Posted by Miao Li 11 months, 1 week ago
From: Miao Li <limiao@kylinos.cn>

When used on Huawei hisi platforms, Prolific PL2303 Serial Port which
the VID:PID is in 067b:2731 might fail to enumerate at boot time and
doesn't work well with LPM enabled, combination quirks:
USB_QUIRK_DELAY_INIT + USB_QUIRK_NO_LPM
fixed the problems.

Signed-off-by: Miao Li <limiao@kylinos.cn>
---
 drivers/usb/core/quirks.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index dfcfc142bd5e..8aca5518e003 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -341,6 +341,10 @@ static const struct usb_device_id usb_quirk_list[] = {
 	{ USB_DEVICE(0x0638, 0x0a13), .driver_info =
 	  USB_QUIRK_STRING_FETCH_255 },
 
+	/* Prolific PL2303 Serial Port */
+	{ USB_DEVICE(0x067b, 0x2731), .driver_info = USB_QUIRK_DELAY_INIT |
+	  USB_QUIRK_NO_LPM },
+
 	/* Saitek Cyborg Gold Joystick */
 	{ USB_DEVICE(0x06a3, 0x0006), .driver_info =
 			USB_QUIRK_CONFIG_INTF_STRINGS },
-- 
2.25.1
Re: [PATCH] usb: quirks: Add DELAY_INIT and NO_LPM for Prolific PL2303 Serial Port
Posted by Greg KH 11 months, 1 week ago
On Mon, Mar 03, 2025 at 03:00:47PM +0800, Miao Li wrote:
> From: Miao Li <limiao@kylinos.cn>
> 
> When used on Huawei hisi platforms, Prolific PL2303 Serial Port which
> the VID:PID is in 067b:2731 might fail to enumerate at boot time and
> doesn't work well with LPM enabled, combination quirks:
> USB_QUIRK_DELAY_INIT + USB_QUIRK_NO_LPM
> fixed the problems.
> 
> Signed-off-by: Miao Li <limiao@kylinos.cn>
> ---
>  drivers/usb/core/quirks.c | 4 ++++
>  1 file changed, 4 insertions(+)
> 
> diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
> index dfcfc142bd5e..8aca5518e003 100644
> --- a/drivers/usb/core/quirks.c
> +++ b/drivers/usb/core/quirks.c
> @@ -341,6 +341,10 @@ static const struct usb_device_id usb_quirk_list[] = {
>  	{ USB_DEVICE(0x0638, 0x0a13), .driver_info =
>  	  USB_QUIRK_STRING_FETCH_255 },
>  
> +	/* Prolific PL2303 Serial Port */
> +	{ USB_DEVICE(0x067b, 0x2731), .driver_info = USB_QUIRK_DELAY_INIT |
> +	  USB_QUIRK_NO_LPM },

But this is not the device id for a pl2303 device (or at least one that
Linux supports), so how was this tested?

And why would this device suddenly stop working?  This chipset has been
working with Linux for decades now, what is new about this device that
requires this change?

thanks,

greg k-h
Re: Re: [PATCH] usb: quirks: Add DELAY_INIT and NO_LPM for Prolific PL2303 Serial Port
Posted by Miao Li 11 months, 1 week ago
>On Mon, Mar 03, 2025 at 03:00:47PM +0800, Miao Li wrote:
>> From: Miao Li <limiao@kylinos.cn>
>> 
>> When used on Huawei hisi platforms, Prolific PL2303 Serial Port which
>> the VID:PID is in 067b:2731 might fail to enumerate at boot time and
>> doesn't work well with LPM enabled, combination quirks:
>> USB_QUIRK_DELAY_INIT + USB_QUIRK_NO_LPM
>> fixed the problems.
>> 
>> Signed-off-by: Miao Li <limiao@kylinos.cn>
>> ---
>>  drivers/usb/core/quirks.c | 4 ++++
>>  1 file changed, 4 insertions(+)
>> 
>> diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
>> index dfcfc142bd5e..8aca5518e003 100644
>> --- a/drivers/usb/core/quirks.c
>> +++ b/drivers/usb/core/quirks.c
>> @@ -341,6 +341,10 @@ static const struct usb_device_id usb_quirk_list[] = {
>>  	{ USB_DEVICE(0x0638, 0x0a13), .driver_info =
>>  	  USB_QUIRK_STRING_FETCH_255 },
>>  
>> +	/* Prolific PL2303 Serial Port */
>> +	{ USB_DEVICE(0x067b, 0x2731), .driver_info = USB_QUIRK_DELAY_INIT |
>> +	  USB_QUIRK_NO_LPM },
>
>But this is not the device id for a pl2303 device (or at least one that
>Linux supports), so how was this tested?
>
>And why would this device suddenly stop working?  This chipset has been
>working with Linux for decades now, what is new about this device that
>requires this change?

Hi greg k-h,
we received this patch from Huawei hisi, but without device info,
I use deepseek to search device info for 067b:2731,  
but got the incorrect answer,I'm sorry for making this mistake,
then I visit Prolific official website for device 067b:2731,
https://www.prolific.com.tw/US/ShowProduct.aspx?p_id=326&pcid=153,
067b:2731 is a USB 3.0 Single-LUN Mass Storage Card Reader.
Hisi tested the related device on kirin990/9a0/9000c/9006c platforms
with reboot/suspend/hibernation circles more than two thousand times,
they found the device might fail to enumerate or experiences intermittent disconnections on reboot test,
and this patch has been practically applied to the mentioned platforms to resolve the problems.
I've modified the device description information in patch V2.

Best Regards,
Miao Li
[PATCH V2] usb: quirks: Add DELAY_INIT and NO_LPM for Prolific Mass Storage Card Reader
Posted by Miao Li 11 months, 1 week ago
From: Miao Li <limiao@kylinos.cn>

When used on Huawei hisi platforms, Prolific Mass Storage Card Reader
which the VID:PID is in 067b:2731 might fail to enumerate at boot time
and doesn't work well with LPM enabled, combination quirks:
USB_QUIRK_DELAY_INIT + USB_QUIRK_NO_LPM
fixed the problems.

Signed-off-by: Miao Li <limiao@kylinos.cn>
---
V1 -> V2: Change device description information
---
 drivers/usb/core/quirks.c | 4 ++++
 1 file changed, 4 insertions(+)

diff --git a/drivers/usb/core/quirks.c b/drivers/usb/core/quirks.c
index dfcfc142bd5e..8efbacc5bc34 100644
--- a/drivers/usb/core/quirks.c
+++ b/drivers/usb/core/quirks.c
@@ -341,6 +341,10 @@ static const struct usb_device_id usb_quirk_list[] = {
 	{ USB_DEVICE(0x0638, 0x0a13), .driver_info =
 	  USB_QUIRK_STRING_FETCH_255 },
 
+	/* Prolific Single-LUN Mass Storage Card Reader */
+	{ USB_DEVICE(0x067b, 0x2731), .driver_info = USB_QUIRK_DELAY_INIT |
+	  USB_QUIRK_NO_LPM },
+
 	/* Saitek Cyborg Gold Joystick */
 	{ USB_DEVICE(0x06a3, 0x0006), .driver_info =
 			USB_QUIRK_CONFIG_INTF_STRINGS },
-- 
2.25.1