Skip to content

J700: after a dwc3_0 unbind, deep sleep and rebind, sleeps on 92195659 still stop the USB host (test-only) #1682

Open

Description

@DjDeveloperr

After dwc3_0 (40a280000.usb) on the MacBook Neo (J700) is unbound, put through a deep sleep and rebound, later sleeps still can't keep the USB host in place, so they take the deep path. This happens on kernel 7.3.0-36 (integration 9219565), which includes #1658's fix for exactly this sequence. It's test-only: users don't unbind dwc3, and the deep path works. So this isn't a blocker, but it means #1658's fix doesn't cover every case.

Measured on the Neo, 2026-11-12

Kernel / DTB After the rebind
5a62cab (#1658 head on 69c201c), DTB without #1298 2/2 DRAM-kept, no PIPE lock errors (#1658's own test)
7.3.0-36 RPM (9219565), its own DTB, aura b11 5/5 deep; xHCI re-created after each wake
7.3.0-36 RPM (9219565), its own DTB, aura b12 1st DRAM-kept, with the PHY logging mode 0 lost in the sleep: setting it up again (#1658's path). 2nd deep: USB controller stops for the sleep: mode 2, PIPE 1, host 1
2573357 (before #1658), its own DTB 00:30: deep after the rebind, with Pipehandler lock not acked / Host starts with its PIPE not parked. 07:20: 2/2 DRAM-kept despite 4× PIPE lock timeout: ack=0x0 mode=2 pipe=0 and 2× PIPE not parked

In the 7.3.0-36 runs, mode 2 (USB3), PIPE 1 (USB3) and host 1 all pass atcphy_can_sleep_in_place(). So one of its other conditions fails. The debug line doesn't say which:

  • sleep_power, or atcphy_sleep_power_ready() (the DART listing or apple_sleep_domain_check() of pd_usb/pd_common);
  • sleep_no_keep, mode_dirty or pipe_pending;
  • usb_off_pending, dp_owned_pmas, aux_power_requested or tunnel_users.

The 2573357 row shows the outcome after a rebind also varies from run to run, so timing is involved.

DT difference

The ATC PHY (phy@40b000000) and usb@40a280000 nodes are the same in both DTBs, apart from phandle numbers. #1298 changed the ATC0 power-domain parents:

  • atc0_common: power-domains = <&ps_atc0_usb_aon> before, <&ps_afisocni2 &ps_atc0_usb_aon> in 9219565's DTB.

atcphy_sleep_power_ready() checks pd_common through apple_sleep_domain_check(), so the added parent is a candidate.

Suggested next step

Have the USB controller stops for the sleep debug line in apple_atcphy_sleep_prepare() print which condition of atcphy_can_sleep_in_place() failed. Then rerun unbind, deep sleep, rebind and two sleeps on 7.3.0-36, with and without the afisocni2 parent on atc0_common.

Evidence on the lab host: migration/neo-continuation-20261108/final-validation/fast1/rows/{rpmqual-wk,b12qual-dwr,b12qual-kitdwr,dwr2..dwr5}, and the notes in migration/neo-continuation-20261108/resume-trim/README.md.

🤖 Generated with Claude Code

Activity

  1. added a commit that references this issue on Nov 12, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions