não é possível inicializar/detectar UART 16550A em endereço de porta io incomum

não é possível inicializar/detectar UART 16550A em endereço de porta io incomum

Eu tenho uma placa baseada na CPU Vortex86DX que é um microcontrolador baseado em x86. Possui cinco UARTS 16550A, quatro (COM1-COM4) dos quais estão nos endereços de porta io usuais (0x3f8, 0x2f8, 0x3e8, 0x2e8), mas o quinto (COM9) está em 0x010, irq 9.

Vortex86DX

Os primeiros quatro UARTS são detectados, não tenho problemas com eles. O problema é que não consigo fazer o quinto (COM9) funcionar no Linux. COM9 funciona em um aplicativo DOS independente, mas não consigo nem detectá-lo no Linux.

O que eu fiz até agora:

Resultado: o kernel falhou ao testar o UART no endereço 0x010

Então, escrevi um utilitário de sondagem de porta io para ler diretamente da porta io 0x010 e não consegui detectar nenhum registro 16550A na região 0x010 a 0x017. Parece que não há nada lá. Tenho tentado gravar e ler dados do registrador scratch (offset +7), mas não recebo nada no endereço 0x017.

A folha de dados da CPU não diz muito. Indica que há um bit de controle em um registro Southbridge que faz “alguma coisa” para COM9. Eu escrevi um utilitário PCI que gravou neste bit, mas ele não pareceu ativar a porta COM nem alterar nada quando fiz a sondagem da porta io.

Qualquer ajuda seria apreciada neste momento!

Responder1

Não vejo por que você se deu ao trabalho de alterar o código-fonte do kernel para adicionar suporte para essa porta serial de E/S e IRQ fora do padrão. O setserial(8)programa deve ser capaz de configurá-lo para você. Algo assim:

# setserial ttyS4 address 0x10 irq 9

Vero COMO FAZER em série do Linuxpara mais detalhes.

Responder2

Parece que o BIOS ou o Linux desativam a porta COM9 nos registros Southbridge.

Registros:

  • "Registro de controle UART9 interno" deve ser redefinido para seu valor padrão de: 0x00810010
  • "On-Chip Device Control Register" deve ter o bit 9 limpo para reativar COM9.

Não sei por que ou onde eles estão desativados.

Quando os configurei com valores sensatos em meu driver de dispositivo, consegui detectar o COM9 UART.

O Linux requer um novo tipo de chip x86 para o Vortex86DX. Não é 100% compatível.

informação relacionada