Re: type-c subsystem is empty on Thinkpad T14 Gen 4 AMD

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

 



Hi,

On Tue, Dec 19, 2023, at 5:02 AM, Heikki Krogerus wrote:
> On Mon, Dec 18, 2023 at 06:45:05PM +0100, Yaroslav Isakov wrote:
>> пн, 18 дек. 2023 г. в 04:46, Douglas Gilbert <dgilbert@xxxxxxxxxxxx>:
>> >
>> > On 12/17/23 16:25, Yaroslav Isakov wrote:
>> > > вс, 17 дек. 2023 г. в 21:48, Yaroslav Isakov <yaroslav.isakov@xxxxxxxxx>:
>> > >>
>> > >> вс, 17 дек. 2023 г. в 20:15, Douglas Gilbert <dgilbert@xxxxxxxxxxxx>:
>> > >>>
>> > >>> On 12/17/23 12:24, Yaroslav Isakov wrote:
>> > >>>> вс, 17 дек. 2023 г. в 18:08, Douglas Gilbert <dgilbert@xxxxxxxxxxxx>:
>> > >>>>>
>> > >>>>> On 12/17/23 11:21, Yaroslav Isakov wrote:
>> > >>>>>> Hello! I recently bought Thinkpad T14 Gen 4 AMD laptop, and I
>> > >>>>>> installed Gentoo on it, with kernel 6.6.4.
>> > >>>>>>
>> > >>>>>> Even though type-c ports seems to be working (I checked usb3 flash
>> > >>>>>> stick, lenovo charger, Jabra headset, Yubikey), I cannot see any
>> > >>>>>> devices in /sys/class/(typec,typec_mux,usb_power_delivery).
>> > >>>>>>
>> > >>>>>> There are no messages in dmesg at all, mentioning typec. I can see
>> > >>>>>> that modules typec_ucsi, ucsi_acpi, thunderbolt are loaded. I can see
>> > >>>>>> that device TYPEC000 is present on acpi bus, there are files in
>> > >>>>>> /sys/bus/acpi/devices/USBC000:00, but, there is no driver linked in
>> > >>>>>> it.
>> > >>>>>>
>> > >>>>>> I tried to recompile module ucsi_acpi, with adding { "USBC000", 0 }
>> > >>>>>> to ucsi_acpi_match, but it did not change anything (except that in
>> > >>>>>> modinfo of this module, USBC000 is now seen.
>> > >>>>>>
>> > >>>>>> I tried to decompile SSDT1 table, which has definition of USBC, but
>> > >>>>>> there is nothing in it, which is supicious.
>> > >>>>>>
>> > >>>>>> What else can I check, to understand, why can't I see anything in
>> > >>>>>> typec/PD subsystems?
>> > >>>>>>
>> > >>>>>
>> > >>>>> I have a X13 Gen 3 [i5-1240P] which is about 18 months old. Everything you
>> > >>>>> mention is present plus the typec ports and the associated pd objects:
>> > >>>>>
>> > >>>>> $ lsucpd
>> > >>>>>     port0 [pd0]  <<====  partner [pd2]
>> > >>>>>     port1 [pd1]  <
>> > >>>>
>> > >>>> I guess, it makes no sense to install lsucpd, if it checks /sys/class/typec etc?
>> > >>>>
>> > >>>>>
>> > >>>>> A power adapter is connected to port0. Here are the modules loaded:
>> > >>>>>
>> > >>>>> $ lsmod | grep typec
>> > >>>>> typec_ucsi             57344  1 ucsi_acpi
>> > >>>>> roles                  16384  1 typec_ucsi
>> > >>>>> typec                 114688  1 typec_ucsi
>> > >>>>> usb_common             20480  4 xhci_hcd,usbcore,uvcvideo,typec_ucsi
>> > >>>>> $ lsmod | grep ucsi
>> > >>>>> ucsi_acpi              12288  0
>> > >>>>> typec_ucsi             57344  1 ucsi_acpi
>> > >>>>> roles                  16384  1 typec_ucsi
>> > >>>>> typec                 114688  1 typec_ucsi
>> > >>>>> usb_common             20480  4 xhci_hcd,usbcore,uvcvideo,typec_ucsi
>> > >>>>>
>> > >>>> I have exact same modules.
>> > >>>>
>> > >>>>> $ ls /sys/bus/acpi/devices/USBC000:00
>> > >>>>> device:ac  device:ad  hid  modalias  path  physical_node  power  status
>> > >>>>> subsystem  uevent  uid  wakeup
>> > >>>> Under /sys/bus/acpi/devices/USBC000:00 I have the similar files:
>> > >>>> adr  device:48  device:49  hid  modalias  path  physical_node  power
>> > >>>> status  subsystem  uevent  uid
>> > >>>> As you don't have driver symlink there, too, then it's a red herring,
>> > >>>> that lack of driver file is symptom of this issue.
>> > >>>>
>> > >>>>>
>> > >>>>> Strange that the Thunderbolt module is loaded since I thought only the Intel
>> > >>>>> variants supported Thunderbolt.
>> > >>>> thundebolt module is now shared with USB4 subsystem, and T14 started
>> > >>>> to have USB4 from Gen 3, for AMD variant.
>> > >>>>>
>> > >>>>> The only thing that I can think of is some BIOS setting. When I poked around
>> > >>>>> in the X13 BIOS I don't remember any setting that would cause what you are
>> > >>>>> seeing.]
>> > >>>> I checked BIOS settings, but I cannot find anything related
>> > >>>>
>> > >>>> Could you please show, what drivers are used for device:ac and
>> > >>>> device:ad, under /sys/bus/acpi/devices/USBC000:00? It seems that if I
>> > >>>> have such entries in my /sys/bus/acpi/devices/USBC000:00, at least
>> > >>>> ucsi_acpi works properly.
>> > >>>
>> > >>> dougg@treten:/sys/bus/acpi/devices/USBC000:00/device:ac$ ls -l
>> > >>> total 0
>> > >>> -r--r--r-- 1 root root 4096 Dec 16 19:11 adr
>> > >>> -r--r--r-- 1 root root 4096 Dec 16 19:11 path
>> > >>> lrwxrwxrwx 1 root root    0 Dec 16 19:11 physical_node ->
>> > >>> ../../../../platform/USBC000:00/typec/port0
>> > >>> drwxr-xr-x 2 root root    0 Dec 16 19:11 power
>> > >>> lrwxrwxrwx 1 root root    0 Dec 16 16:45 subsystem -> ../../../../../bus/acpi
>> > >>> -rw-r--r-- 1 root root 4096 Dec 16 16:45 uevent
>> > >>>
>> > >>> dougg@treten:/sys/bus/acpi/devices/USBC000:00/device:ac$ cd ../device\:ad
>> > >>> dougg@treten:/sys/bus/acpi/devices/USBC000:00/device:ad$ ls -l
>> > >>> total 0
>> > >>> -r--r--r-- 1 root root 4096 Dec 16 19:11 adr
>> > >>> -r--r--r-- 1 root root 4096 Dec 16 19:11 path
>> > >>> lrwxrwxrwx 1 root root    0 Dec 16 19:11 physical_node ->
>> > >>> ../../../../platform/USBC000:00/typec/port1
>> > >>> drwxr-xr-x 2 root root    0 Dec 16 19:11 power
>> > >>> lrwxrwxrwx 1 root root    0 Dec 16 16:45 subsystem -> ../../../../../bus/acpi
>> > >>> -rw-r--r-- 1 root root 4096 Dec 16 16:45 uevent
>> > >>>
>> > >>>
>> > >>>>
>> > >>>> In my /sys/bus/acpi/devices/USBC000:00/device:(48,49), there are only
>> > >>>> adr, path and uevent files, and power and subsytem folders. Subsystem
>> > >>>> links to bus/acpi, and path has \_SB_.UBTC.CR01, \_SB_.UBTC.CR02
>> > >>>
>> > >>> Mine has the extra physical_node symlinks to typec/port0 and typec/port1
>> > >> Yes, I have the same as on T14 Gen 3 (Intel). Looks like they have no
>> > >> driver symlinks, too, but they're working on Intel.
>> > >>>
>> > >>>> P.S. I tried latest live Fedora, just to see if I forgot to compile
>> > >>>> some drivers for custom-built Gentoo kernel, but same issue on Fedora
>> > >>>
>> > >>> Below is a fragment of a post from Heikki Krogerus about turning on ucsi debug:
>> > >>>
>> > >>> If you want to see the actual UCSI notification in user space, then
>> > >>> that is not possible, but the driver does produce trace output, and I
>> > >>> would actually like to see what we got there. You need debugfs to be
>> > >>> mounted. Then try the following:
>> > >>>
>> > >>>           # Unload all UCSI modules
>> > >>>           modprobe -r ucsi_acpi
>> > >>>
>> > >>>           # At this point you should plug-in the problematic device
>> > >>>
>> > >>>           # Reload the UCSI core module
>> > >>>           modprobe typec_ucsi
>> > >>>
>> > >>>           # Enable UCSI tracing
>> > >>>           echo 1 > /sys/kernel/debug/tracing/events/ucsi/enable
>> > >>>
>> > >>>           # Now reload the ACPI glue driver
>> > >>>           modprobe ucsi_acpi
>> > >>>
>> > >>>           # Unplug the problematic device so that you see the error
>> > >>>
>> > >>>           # Finally dump the trace output
>> > >>>           cat /sys/kernel/debug/tracing/trace
>> > >>>
>> > >>> So if that works, please send the trace output to me.
>> > >>> [Heikki]
>> > >> I tried provided commands, both in Gentoo and Fedora - nothing in
>> > >> trace at all. I guess, it's because ucsi on AMD can see two devices,
>> > >> but cannot work with them, for some reason. I also checked same
>> > >> commands on T14 Gen 3 (Intel), and I can see many ucsi_register_port
>> > >> and ucsi_register_altmode events.
>> > >>>
>> > >>>
>> > >
>> > > I think I managed to find the issue - looks like on my laptop,
>> > > ucsi_register fails in version check, !ucsi->version returns False.
>> > > Commenting out this check populates /sys/class/typec and
>> > > /sys/class/usb_power_delivery. I did not check yet, if populated data
>> > > is correct, but, it's definite progress.
>> >
>> > Well spotted.
>> >
>> > That is probably the first UCSI read operation that failed. At the very least
>> > ucsi_register() could send a message to the log that it was exiting rather
>> > than leave users guessing.
>> It returns -ENODEV, which, I guess, is a signal for code, which
>> detects devices, that this module doesn't support this device.
>> 
>> P.S. Looks like power_delivery code works properly, even with
>> version==0 - lsucpd shows proper directions, even with my Pixel 7,
>> which can charge laptop. Also it shows correct data for
>> voltage/current, for "partner" device. It also shows proper data in
>> power_supply subsystem. The only thing which is not working,
>> currently, is displayport altmode not showing, for dockstation I
>> have... But this might be missing module, or something else... I'll
>> try this on Intel laptop, and will debug it further.
>> 
>> >
>> > My guess is that Lenovo/AMD have a configuration or timing issue.
>> 
>> I tried to add loop, re-reading version in case if it's zero, but,
>> even after 10 tries, it's returning zero, so, it's some weird behavior
>> of UCSI on this AMD laptop. I wonder, what should be the proper fix,
>> then.
>
> You need to report this to Lenovo. This is an issue in their firmware.
>
> We can work around this by adding DMI quirk where we hardcode the UCSI
> version for your system, but before we do that, you should try to get
> Lenovo to fix their firmware.
>
I got forwarded this report from the support team. Was able to reproduce this on my system.
I have internal ticket LO-2879 open and we'll look into it.

Mark





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

  Powered by Linux