mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Carlo D'Ambrosio <carlo.dambrosio@gmail.com>
To: Heikki Krogerus <heikki.krogerus@linux.intel.com>
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>,
	linux-usb@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [BUG] usb: typec: ucsi: Acer Aspire 16 AI reports connector 2 while num_connectors=1
Date: Sun, 27 Sep 2026 21:04:09 +0200	[thread overview]
Message-ID: <48e56ed1-d8ef-4d26-8c18-9bb0fa2e5a7a@gmail.com> (raw)
In-Reply-To: <18c22d05-af53-4d94-b6ff-91441adc65c2@gmail.com>

Hello,

I did one additional A/B trace which seems to explain why the 
notification storm persists.

Starting from a clean Windows -> Fedora boot, I traced 
|ucsi_notify_common()|and |ucsi_acpi_async_control()|and connected the 
charger to the lower USB-C port, which behaves normally.

The first event was:

|NOTIFY CCI=0x20000002 connector=1 num_connectors=1 CONTROL 
command=0x0000000000010012|

|0x12|is |UCSI_GET_CONNECTOR_STATUS|, with connector 1 encoded in the 
command.

This was followed by:

|NOTIFY CCI=0x80000900 CONTROL command=0x0000000000030004 NOTIFY 
CCI=0x20000000|

 From |ucsi.h|, |0x04|is |UCSI_ACK_CC_CI|, bit 16 is 
|UCSI_ACK_CONNECTOR_CHANGE|, and bit 17 is |UCSI_ACK_COMMAND_COMPLETE|. 
Therefore |0x00030004|is:

|ACK_CC_CI | ACK_CONNECTOR_CHANGE | ACK_COMMAND_COMPLETE|

So for the valid connector-1 notification, Linux performs the expected 
|GET_CONNECTOR_STATUS(1)|and subsequently acknowledges the connector change.

In contrast, when the upper USB-C port triggers the problem, the trace 
is only:

|NOTIFY CCI=0x20000004 connector=2 num_connectors=1 NOTIFY 
CCI=0x20000004 connector=2 num_connectors=1 ...|

approximately every 570 ms, with *no calls at all to 
|ucsi_acpi_async_control()|*during the loop.

This matches |ucsi_notify_common()|: because connector 2 is greater than 
|ucsi->cap.num_connectors|(1), |ucsi_connector_change()|is not called, 
so the normal connector-change handling/acknowledgement path is never 
entered.

Also, to correct an interpretation I was considering earlier: 
|0x20000004|is *ACK_COMPLETE + connector 2*, not ERROR + connector 2 
(|UCSI_CCI_ACK_COMPLETE|is bit 29; |UCSI_CCI_ERROR|is bit 30).

This seems to leave two separate questions:

 1. Why does the PPM expose |num_connectors=1|via GET_CAPABILITY while
    the upper physical USB-C port generates connector-change indicator 2?
 2. Independently, should Linux do anything to acknowledge/drop an
    out-of-range connector-change notification to prevent a persistent
    notification storm, or is the current behavior intentional?

I can run further traces/tests if useful.

Thank you.

Regards,


Carlo D'Ambrosio


Il 27/09/26 18:34, Carlo D'Ambrosio ha scritto:
> Hello,
>
> I am seeing a reproducible UCSI issue on an Acer Aspire 16 AI running 
> Fedora 44.
>
> System:
> - Acer Aspire 16 AI
> - BIOS 1.22 (latest available from Acer)
> - Fedora 44
> - Linux 7.2.7-200.fc44.x86_64
> - Dual boot with Windows 11
> - Two physical USB-C ports on the left side of the laptop; the upper 
> one is Thunderbolt-capable
>
> The problem occurs when I connect either a USB device or the original 
> Acer charger to the upper USB-C/Thunderbolt port.
>
> Immediately after connecting it, the kernel log starts being flooded 
> with:
>
>   ucsi_acpi USBC000:00: bogus connector number in CCI: 2
>
> The messages continue after disconnecting the device and also survive 
> a normal Fedora reboot.
>
> The lower USB-C port does not trigger the problem.
>
> The condition can be cleared in either of these ways:
>
> 1. Power off and perform an EC reset by holding the power button for 
> about 30 seconds.
> 2. Boot Windows 11 and then reboot into Fedora.
>
> Interestingly, Windows itself does not appear to trigger the problem. 
> After Windows -> Fedora, Fedora starts cleanly again until something 
> is connected to the affected upper USB-C port.
>
> Reloading ucsi_acpi does not clear the underlying condition:
>
>   modprobe -r ucsi_acpi
>   modprobe ucsi_acpi
>
> Removing the module stops the log messages, but after loading it again 
> the flooding resumes.
>
> In a clean Fedora boot (after Windows -> Fedora, with nothing 
> connected) I get:
>
>   typec port0: bound usb3-port1 (ops connector_ops)
>   typec port0: bound usb2-port1 (ops connector_ops)
>   typec port0: bound usb4_port1 (ops connector_ops [thunderbolt])
>   ucsi_acpi USBC000:00: UCSI_GET_PDOS failed (-70)
>   ucsi_acpi USBC000:00: UCSI_GET_PDOS failed (-70)
>
> There is no "bogus connector number" flooding at this point.
>
> Also, /sys/class/typec contains only port0.
>
> I used bpftrace to inspect the UCSI state directly.
>
> While the failure is active, tracing ucsi_acpi_read_cci() shows:
>
>   ret=0  CCI=0x20000004
>
> repeatedly.
>
> I also traced ucsi_notify_common() while reading the UCSI capability 
> stored by the kernel:
>
>   CCI=0x20000004  num_connectors=1
>
> This repeats continuously.
>
> I then reproduced the issue starting from a known-clean Fedora boot. 
> Before connecting anything there were no such notifications. I started 
> the ucsi_notify_common() probe and connected the original Acer charger 
> to the affected upper USB-C port.
>
> The very first notification observed was already:
>
>   CCI=0x20000004  num_connectors=1
>
> and it then repeated continuously.
>
> The bpftrace probe used was:
>
>   kfunc:ucsi_notify_common
>   {
>       printf("CCI=0x%08x  num_connectors=%u\n",
>              args.cci,
>              args.ucsi->cap.num_connectors);
>   }
>
> I separately traced ucsi_acpi_read_cci() with:
>
>   kfunc:ucsi_acpi_read_cci
>   {
>       @cci[tid] = args.cci;
>   }
>
>   kretfunc:ucsi_acpi_read_cci
>   /@cci[tid]/
>   {
>       $p = @cci[tid];
>
>       printf("ret=%d  CCI=0x%08x\n",
>              retval,
>              *(uint32 *)$p);
>
>       delete(@cci[tid]);
>   }
>
> This indicates that 0x20000004 is already being returned through the 
> ACPI UCSI path; it is not a connector number subsequently generated by 
> the typec_ucsi bounds check.
>
> I also verified:
>
>   ucsi->cap.num_connectors = 1
>
> using BTF/bpftrace.
>
> Finally, I inspected the Fedora typec_ucsi module corresponding to the 
> running 7.2.7 kernel. In ucsi_init(), the code calls ucsi_reset_ppm() 
> and subsequently obtains the capability data into ucsi->cap. The 
> num_connectors field being used by the core is therefore 1 when the 
> connector-2 CCI notifications are received.
>
> So the state visible to Linux appears to be:
>
>   UCSI capability:
>       num_connectors = 1
>
>   after using upper USB-C port:
>       CCI = 0x20000004
>       connector change = 2
>
> which results in:
>
>   bogus connector number in CCI: 2
>
> I am aware of the earlier UCSI issue where connector notifications 
> could arrive before num_connectors had been initialized, resulting in 
> num_connectors == 0. This does not appear to be the same case: 
> num_connectors is already initialized to 1 here, and the problem can 
> be triggered reproducibly after the system is fully booted.
>
> The fact that booting Windows clears the persistent condition is also 
> interesting, although I do not know what initialization/reset sequence 
> Windows performs and I do not want to infer the root cause from that 
> alone.
>
> Could you advise whether this looks like an Acer UCSI/PPM firmware 
> inconsistency, or whether something in the Linux UCSI/ACPI 
> initialization could cause the second physical USB-C port to generate 
> connector-2 notifications while GET_CAPABILITY exposes only one 
> connector?
>
> I can provide additional bpftrace output, ACPI tables, full dmesg, or 
> run additional tests if useful.
>
> Regards,
>
>
> Carlo D'Ambrosio

  reply	other threads:[~2026-09-27 19:04 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2026-09-27 16:34 Carlo D'Ambrosio
2026-09-27 19:04 ` Carlo D'Ambrosio [this message]
2026-09-28 13:59   ` Heikki Krogerus

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=48e56ed1-d8ef-4d26-8c18-9bb0fa2e5a7a@gmail.com \
    --to=carlo.dambrosio@gmail.com \
    --cc=gregkh@linuxfoundation.org \
    --cc=heikki.krogerus@linux.intel.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-usb@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®