não pode inicializar / detectar 16550A UART em endereço de porta io incomum

5

Eu tenho uma placa baseada na CPU Vortex86DX que é um microcontrolador baseado em x86. Ele tem cinco 16550A UARTS, 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, irq9.

Vortex86DX

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

O que eu fiz até agora:

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

Então eu escrevi um utilitário de sondagem da porta io para leitura direta da porta io 0x010, e não consegui detectar nenhum registrador 16550A na região de 0x010 a 0x017. Parece que não há nada lá. Eu tenho tentado escrever e ler dados de volta do registrador zero (offset +7), mas não recebo nada no endereço 0x017.

A folha de dados para a CPU não diz muito. Ele indica que há um bit de controle em um registro Southbridge que faz "alguma coisa" para COM9. Eu escrevi um utilitário PCI que escreveu para este bit, mas ele não pareceu ativar a porta COM ou alterar qualquer coisa quando eu fiz o teste da porta io.

Qualquer ajuda seria apreciada neste momento!

    
por Mr Stinky 06.07.2012 / 21:53

2 respostas

1

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

# setserial ttyS4 address 0x10 irq 9

Veja o Linux Serial HOWTO para mais detalhes.

    
por 07.07.2012 / 08:34
1

Parece que o BIOS ou o Linux desabilita a porta COM9 nos registradores Southbridge.

Registros:

  • "Registro de controle UART9 interno" deve ser redefinido para o valor padrão de: 0x00810010
  • "Registro de controle de dispositivos no chip" deve ter o bit 9 liberado para reativar a COM9.

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

Quando os defino para valores sadios no meu driver de dispositivo, consegui detectar a COM9 UART.

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

    
por 09.07.2012 / 14:47