Amlogic T7 no Linux: Novo suporte a relógios e eMMC esbarra em críticas de formatação

Amlogic T7 no Linux: Novo suporte a relógios e eMMC esbarra em críticas de formatação

Ronald Claveau submeteu uma série de sete patches visando expandir o suporte ao SoC Amlogic T7 (especificamente focado na placa Khadas VIM4) no kernel Linux. As atualizações introduzem suporte para Fixed PLLs (Phase-Locked Loops), relógios do sistema (SYS PLL) e ativam o armazenamento eMMC.

Embora o código traga adições importantes para o ecossistema Amlogic, a submissão foi recebida com frustração pelos mantenedores devido a falhas na organização, formatação e comunicação dos patches.

O que são PLLs e por que o eMMC importa?

Para entender a importância da atualização, precisamos olhar para os componentes que estão sendo adicionados:

  1. PLLs (Phase-Locked Loops): Em um processador, os PLLs são circuitos responsáveis por gerar e estabilizar as frequências de relógio (clocks) que ditam a velocidade de operação de diferentes partes do chip. O Amlogic T7 precisa de “Fixed PLLs” (FPLL) e “System PLLs” (SYS PLL) para sincronizar corretamente seus núcleos, barramentos e periféricos. Sem isso, o processador não consegue operar em suas frequências ideais.
  2. eMMC (embedded Multi-Media Controller): É o chip de memória de armazenamento principal de placas como a Khadas VIM4 (uma alternativa poderosa ao Raspberry Pi). A ativação do eMMC no Device Tree (arquivos .dts e .dtsi) permite que o Linux reconheça a memória interna, essencial para dar boot no sistema e armazenar arquivos em alta velocidade.

Detalhes técnicos da implementação

Os patches incluem modificações em três áreas principais:

  • Drivers de Clock: Adição das estruturas clk_regmap no arquivo t7-pll.c para gerenciar os registradores do FPLL (como FPLL_CTRL0 a FPLL_STS). O driver também implementa divisores de frequência (fdiv2, fdiv2p5, fdiv3, etc.) críticos para derivar clocks menores a partir do cristal oscilador base (xtal).
  • Device Tree Bindings (dt-bindings): Atualização dos arquivos YAML e headers C para definir os novos identificadores de clock (CLKID_FPLL, CLKID_SYS_A_SEL, etc.) de forma que o hardware possa ser descrito corretamente.
  • Device Tree Source (DTS/DTSI): Configuração do controlador de clock, definição dos pinos (pinctrl) para o eMMC (comandos, dados e relógio) e a configuração dos reguladores de tensão (como emmc_1v8 e vcc_3v3) necessários para que o chip de memória opere com segurança.

Curiosidades e bastidores da discussão: A importância do processo

O aspecto mais notável desta submissão não foi o código em si, mas a reação da comunidade à forma como ele foi enviado. A lista de discussão (LKML) possui regras estritas para manter a organização, e a série de Ronald falhou em vários pontos cruciais.

O problema do “Cover Letter” e mensagens genéricas

Jerome Brunet e Ferass El Hafidi apontaram rapidamente que a série carecia de um “cover letter” (carta de apresentação). No desenvolvimento do kernel, quando você envia vários patches de uma vez, a mensagem 0/X serve para explicar a visão geral do projeto.

Além disso, Ferass notou que Ronald usou exatamente a mesma mensagem de commit genérica (“Add Amlogic T7 sys pll support”) em patches diferentes, dificultando o trabalho dos revisores em entender o que cada pedaço de código realmente fazia.

O caos das versões e o “threading” quebrado

A situação piorou com a intervenção do mantenedor Krzysztof Kozlowski. Ele notou que Ronald havia quebrado as regras de “threading” (encadeamento de e-mails). Em vez de agrupar os patches em uma única “conversa” de e-mail e aplicar as correções sugeridas em uma “Versão 2” oficial, Ronald enviou os patches de forma fragmentada e repetida.

Krzysztof foi incisivo ao apontar que o desenvolvedor ignorou seus comentários iniciais, reenviando patches quase idênticos poucos minutos após ter recebido feedback, o que gerou confusão sobre qual versão estava sendo revisada. Jerome Brunet tentou apaziguar, sugerindo que não houve “malícia”, apenas erros de um contribuidor de primeira viagem, mas Krzysztof demonstrou com logs de tempo que os envios foram conscientes.

Questões arquiteturais: FPLL vs MPLL e SCMI

No campo do código, Jerome Brunet fez observações técnicas vitais. Ele notou que a documentação oficial da Amlogic se refere ao componente como MPLL, mas o desenvolvedor o chamou de FPLL. No Linux, inventar nomes que não existem nos manuais de hardware é desencorajado, pois confunde futuros desenvolvedores.

Além disso, Jerome levantou a hipótese de que esses relógios específicos (PLLs fixos e divisores) deveriam, na verdade, ser fornecidos através de SCMI (System Control and Management Interface) pelo firmware seguro (como o ARM Trusted Firmware), e não gerenciados diretamente por este driver no Linux.

Próximos passos

Devido às violações de formatação de submissão e às dúvidas arquiteturais sobre o uso do SCMI e a nomenclatura correta do hardware, a série foi virtualmente rejeitada nesta iteração.

Ronald Claveau respondeu agradecendo a ajuda e prometendo corrigir a estrutura (combinando headers e documentação YAML) na próxima versão. A expectativa é que uma “Versão 3” organizada, com mensagens de commit detalhadas e, possivelmente, uma revisão sobre a delegação do clock para o SCMI, seja necessária para que o suporte do eMMC da Khadas VIM4 entre no kernel oficial.