Re: usb-c pd: PD_MAX_PAYLOAD too small

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Fri, Dec 27, 2019 at 12:18:11PM -0500, Douglas Gilbert wrote:
> Samsung have an optional USB-C charger for their 10+
> tablet ***. This optional unit is one of the first PPS
> capable PD power adapters on the mass market at a
> reasonable price (around $50). Its part number is
> EP-TA485 and is described as a 45 Watt "Travel Adapter".
> 
> I have a rig using an Acme Arietta and a NXP OM 13588 board
> which can do USB-C sink/source. And the EP-TA485 is plugged
> into the OM 13588 which pushes that latter into (power)
> sink mode.
> 
> From 'cat /sys/kernel/debug/usb/tcpm-1-0050' that adapter
> advertises these PDOs (and PDO[4] implies at 11 Volts it
> can supply 5 Amps which is worrying for a 45 Watt supply):
> 
> [   19.207338]  PDO 0: type 0, 5000 mV, 3000 mA [E]
> [   19.207361]  PDO 1: type 0, 9000 mV, 3000 mA []
> [   19.207383]  PDO 2: type 0, 15000 mV, 3000 mA []
> [   19.207428]  PDO 3: type 0, 20000 mV, 2250 mA []
> [   19.207448]  PDO 4: type 3, 3300-11000 mV, 5000 mA
> [   19.207466]  PDO 5: type 3, 3300-16000 mV, 3000 mA
> [   19.207484]  PDO 6: type 3, 3300-21000 mV, 2250 mA
> 
> And whenever drivers/usb/typec/tcpm/tcpci.c fetches those
> PDOs, it fires this warning at line 443 (lk 5.4.6):
> 
>            if (WARN_ON(cnt > sizeof(msg.payload)))

Thanks a lot for the report.

The question here is if cnt includes the header bytes, which would
make it too large for the check if there are indeed 7 PDOs.
I'll have to check in the specification after I am back from vacation
(early January).

Thanks,
Guenter

> 
> And that implies in include/linux/usb/pd.h
> 
> struct pd_message {
>         __le16 header;
>         union {
>                 __le32 payload[PD_MAX_PAYLOAD];
>                 struct pd_chunked_ext_message_data ext_msg;
>         };
> } __packed;
> 
> ... that PD_MAX_PAYLOAD is too small (or off by one). It is 7
> in lk 5.4.6 and linux-stable.
> 
> Doug Gilbert
> 
> 
> *** When 10+ tablet is purchased it comes with a less capable
>     (i.e. no PPS) 35 Watt adapter (I believe). Samsung say if
>     the owner wants "fast" charging to buy the EP-TA485.
>     If PPS catches one, it will effectively move power
>     electronics from the smartphone or tablet into the
>     power adapter. And that could be a win for laptops as well.
> 
> 
> ------------[ cut here ]------------
> WARNING: CPU: 0 PID: 1154 at drivers/usb/typec/tcpm/tcpci.c:443
> tcpci_irq+0x1b4/0x1e0 [tcpci]
> Modules linked in: tcpci tcpm roles typec asix usbnet mii
> CPU: 0 PID: 1154 Comm: irq/37-1-0050 Tainted: G        W         5.4.6-armv5-r0 #1
> Hardware name: Atmel AT91SAM9
> [<c000f9b4>] (unwind_backtrace) from [<c000d7e0>] (show_stack+0x10/0x14)
> [<c000d7e0>] (show_stack) from [<c00188b8>] (__warn+0xac/0xd0)
> [<c00188b8>] (__warn) from [<c0018984>] (warn_slowpath_fmt+0xa8/0xb8)
> [<c0018984>] (warn_slowpath_fmt) from [<bf053398>] (tcpci_irq+0x1b4/0x1e0 [tcpci])
> [<bf053398>] (tcpci_irq [tcpci]) from [<c0050e78>] (irq_thread_fn+0x1c/0x78)
> [<c0050e78>] (irq_thread_fn) from [<c00510f0>] (irq_thread+0x104/0x1ec)
> [<c00510f0>] (irq_thread) from [<c0034460>] (kthread+0x11c/0x130)
> [<c0034460>] (kthread) from [<c00090e0>] (ret_from_fork+0x14/0x34)
> Exception stack(0xc55dffb0 to 0xc55dfff8)
> ffa0:                                     00000000 00000000 00000000 00000000
> ffc0: 00000000 00000000 00000000 00000000 00000000 00000000 00000000 00000000
> ffe0: 00000000 00000000 00000000 00000000 00000013 00000000
> ---[ end trace 2ab4ab025e97eabd ]---
> 
> 
> Finally:
> From other (non-Linux) equipment I can tell that the EP-TA485 adapter is
> only advertising 7 PDOs, so there is no 8th PDO being truncated in Linux.



[Index of Archives]     [Linux Media]     [Linux Input]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]     [Old Linux USB Devel Archive]

  Powered by Linux