* [PATCH] usb: typec: ucsi: Handle incorrect num_connectors capability
@ 2025-08-21 18:53 Mark Pearson
2025-08-22 4:51 ` Greg KH
0 siblings, 1 reply; 3+ messages in thread
From: Mark Pearson @ 2025-08-21 18:53 UTC (permalink / raw)
To: mpearson-lenovo; +Cc: heikki.krogerus, gregkh, linux-usb, linux-kernel
The UCSI spec states that the num_connectors field is 7 bits, and the
8th bit is reserved and should be set to zero.
Some buggy FW has been known to set this bit, and it can lead to a
system not booting.
Flag that the FW is not behaving correctly, and auto-fix the value
so that the system boots correctly.
Found on Lenovo P1 G8 during Linux enablement program. The FW will
be fixed, but seemed worth addressing in case it hit platforms that
aren't officially Linux supported.
Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
---
drivers/usb/typec/ucsi/ucsi.c | 6 ++++++
1 file changed, 6 insertions(+)
diff --git a/drivers/usb/typec/ucsi/ucsi.c b/drivers/usb/typec/ucsi/ucsi.c
index 5739ea2abdd1..181351afe887 100644
--- a/drivers/usb/typec/ucsi/ucsi.c
+++ b/drivers/usb/typec/ucsi/ucsi.c
@@ -1790,6 +1790,12 @@ static int ucsi_init(struct ucsi *ucsi)
ret = -ENODEV;
goto err_reset;
}
+ /* Check if reserved bit set. This is out of spec but happens in buggy FW */
+ if (ucsi->cap.num_connectors & 0x80) {
+ dev_warn(ucsi->dev, "UCSI: Invalid num_connectors %d. Likely buggy FW\n",
+ ucsi->cap.num_connectors);
+ ucsi->cap.num_connectors &= 0x7f; // clear bit and carry on
+ }
/* Allocate the connectors. Released in ucsi_unregister() */
connector = kcalloc(ucsi->cap.num_connectors + 1, sizeof(*connector), GFP_KERNEL);
--
2.43.0
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] usb: typec: ucsi: Handle incorrect num_connectors capability
2025-08-21 18:53 [PATCH] usb: typec: ucsi: Handle incorrect num_connectors capability Mark Pearson
@ 2025-08-22 4:51 ` Greg KH
2025-08-22 12:54 ` Mark Pearson
0 siblings, 1 reply; 3+ messages in thread
From: Greg KH @ 2025-08-22 4:51 UTC (permalink / raw)
To: Mark Pearson; +Cc: heikki.krogerus, linux-usb, linux-kernel
On Thu, Aug 21, 2025 at 02:53:07PM -0400, Mark Pearson wrote:
> The UCSI spec states that the num_connectors field is 7 bits, and the
> 8th bit is reserved and should be set to zero.
> Some buggy FW has been known to set this bit, and it can lead to a
> system not booting.
> Flag that the FW is not behaving correctly, and auto-fix the value
> so that the system boots correctly.
>
> Found on Lenovo P1 G8 during Linux enablement program. The FW will
> be fixed, but seemed worth addressing in case it hit platforms that
> aren't officially Linux supported.
>
> Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
Any hints as to what commit id this fixes?
thanks,
greg k-h
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] usb: typec: ucsi: Handle incorrect num_connectors capability
2025-08-22 4:51 ` Greg KH
@ 2025-08-22 12:54 ` Mark Pearson
0 siblings, 0 replies; 3+ messages in thread
From: Mark Pearson @ 2025-08-22 12:54 UTC (permalink / raw)
To: Greg KH; +Cc: Heikki Krogerus, linux-usb, linux-kernel
Hi Greg,
On Fri, Aug 22, 2025, at 12:51 AM, Greg KH wrote:
> On Thu, Aug 21, 2025 at 02:53:07PM -0400, Mark Pearson wrote:
>> The UCSI spec states that the num_connectors field is 7 bits, and the
>> 8th bit is reserved and should be set to zero.
>> Some buggy FW has been known to set this bit, and it can lead to a
>> system not booting.
>> Flag that the FW is not behaving correctly, and auto-fix the value
>> so that the system boots correctly.
>>
>> Found on Lenovo P1 G8 during Linux enablement program. The FW will
>> be fixed, but seemed worth addressing in case it hit platforms that
>> aren't officially Linux supported.
>>
>> Signed-off-by: Mark Pearson <mpearson-lenovo@squebb.ca>
>
> Any hints as to what commit id this fixes?
>
> thanks,
>
> greg k-h
Maybe 3cf657f ('Remove all bit-fields')?
The commit there states that 'We can't use bit fields with data that is received or send
to/from the device.'
Not sure why that is, but I assumed this means we shouldn't change the structure to use 7 bits for num_connectors, which was my original plan.
After that, we go all the way back to the file creation (c1b0bc2) where it was defined as 8 bit.
Mark
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2025-08-22 12:54 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-08-21 18:53 [PATCH] usb: typec: ucsi: Handle incorrect num_connectors capability Mark Pearson
2025-08-22 4:51 ` Greg KH
2025-08-22 12:54 ` Mark Pearson
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).