A boa notícia para quem roda Linux em Macs com Apple Silicon: o suporte USB está dando um salto importante. Um novo driver de “cola” — dwc3-apple.c — foi aceito na árvore de desenvolvimento e promete transformar a confiabilidade do USB/Thunderbolt no Asahi Linux. Pense assim: antes, ligar periféricos era como tentar dar a partida em um carro antigo e temperamental — você precisava girar a chave (DWC3), “bombear o acelerador” (PHY) e ajustar o “afogador” (Type-C) na ordem exata; qualquer deslize, o motor morria. Agora, o driver automatiza essa coreografia e o motor pega de primeira.
a “dança” complicada para ligar o USB
O DWC3 dos SoCs da Apple (M1 e família) não “apenas funciona”. O hardware exige uma ordem de operações muito específica e sincronizada entre três atores: o controlador DWC3, o PHY USB e o controlador Type-C. Primeiro, o PHY precisa subir sabendo exatamente modo de link e orientação de lanes (USB3 puro, USB3+DisplayPort, USB4 etc.). Só depois o DWC3 pode ser inicializado, e então o PHY é finalizado para, por fim, liberar XHCI (host) ou gadget mode (dispositivo). Inverter etapas? Em alguns casos, congela; em outros, o sistema entra em estados inválidos que até forçam o SoC a se resetar. É por isso que um “glue driver” dedicado faz tanta diferença: ele orquestra cada passo e impede que o kernel pise em falso.
o “bug do primeiro dispositivo funciona”
O quirk de hardware mais cruel que esse driver contorna é o do hotplug. Sem a nova lógica, depois que você desconecta um periférico, o próximo dispositivo simplesmente não é reconhecido. O XHCI até reflete as mudanças nos registradores de status, mas nenhuma interrupção chega; do lado gadget, o kernel nem recebe o evento de “USBDisconnected”. Resultado: só o primeiro dispositivo plugado após o boot funciona — e olhe lá. A causa? Uma cadeia de componentes que inclui um repetidor eUSB2 controlado por um chip USB PD (variante do TI TPS6598x) que reseta o repetidor sempre que os CC lines mudam; sem reinicializar o PHY e re-sincronizar os estados, tudo quebra silenciosamente.
a solução: desligar, reinicializar, repetir — de forma inteligente
O novo dwc3-apple entra justamente para gerenciar esse estado com segurança. Ele usa o usb_role_switch (conectado ao estado do cabo Type-C) para decidir quando e como derrubar e trazer de volta o stack. Ao conectar um cabo, o driver executa a sequência correta: liga PHY com as informações de modo/orientação, inicializa o DWC3 sem tocar prematuramente nas áreas de host/gadget, finaliza o PHY (incluindo a troca do PIPE para USB3) e só então habilita XHCI ou gadget mode. Ao desconectar, ele desliga tudo — DWC3 e PHY — e prepara o hardware para a próxima conexão. Essa é a chave para que o hotplug seja confiável, repetível e sem “fantasmas”.
detalhes que importam (sem afundar nos registradores)
Para que as portas funcionem corretamente, o driver habilita o SUSPHY nos momentos críticos (tanto na subida quanto na queda), além de programar uma pequena região MMIO específica da Apple após o bloco comum do DWC3. Esses ajustes incluem timers de link e parâmetros de LFPS — não é documentação pública, mas é o tipo de “tempero” necessário para que dispositivos USB3 deixem de falhar de forma aleatória. O resultado prático? Conexões que antes dependiam de sorte passam a obedecer regras claras.
por que é um marco para o Asahi Linux
Para quem vive no mundo Asahi Linux, isso significa usabilidade real: docks, interfaces Thunderbolt com túnel USB3, hubs e adaptadores deixam de ser uma roleta russa. O kernel agora conhece os limites e os humores do silício da Apple e age de acordo, em vez de tentar forçar um caminho genérico que não existe nesse hardware. E tem mais: o próprio commit indica que o driver deverá, no futuro, ganhar suporte a USB3-via-USB4 (tunneling) — outra peça importante na maturidade do ecossistema em Macs com Apple Silicon.
quem está por trás (e por que isso inspira confiança)
O patch vem de Sven Peter (Asahi Linux), revisado por Neal Gompa e Thinh Nguyen (da Synopsys, criadora do DWC3), e assinado por Greg Kroah-Hartman. Em outras palavras, é código upstream com olhos experientes de todas as frentes relevantes: quem entende do SoC da Apple, quem mantém o subsistema USB no kernel e quem projetou o IP de USB3 usado no chip. É o tipo de colaboração que a gente quer ver quando o objetivo é confiabilidade — não apenas “funcionar”, mas funcionar sempre.
