Se alguém se deparar com esta questão, nunca encontrei uma boa correcção. Eu acabei hackeando tanto o u-boot quanto o driver serial do kernel do linux e basicamente checando se a senha tinha sido digitada. Se tivesse, eu permiti que o código funcionasse normalmente. Se não tivesse acabado de voltar das funções para que nada fosse realmente impresso no console.
Para o Kernel, editei a função receive_chars () para procurar a senha (entrada) e transmit_chars () para mascarar a saída. Eu tinha u-boot passar a senha como parte dos bootargs. Se fosse nulo, a senha já estava inserida e ignoramos o código especial. Se fosse um valor, então pegamos chars de entrada via receive_chars () e os comparamos com a string armazenada de bootargs.
No u-boot eu usei apenas o CONFIG_AUTOBOOT_KEYED e as macros padrão associadas para a entrada da senha. Eu então mudei o common / cmd_bootm.c para não chamar fixup_silent_linux () para mascarar o valor do console = e deixar o kernel lidar com isso como declarado acima.
Espero que isso ajude alguém.