не удается инициализировать/обнаружить 16550A UART по необычному адресу порта ввода-вывода

не удается инициализировать/обнаружить 16550A UART по необычному адресу порта ввода-вывода

У меня есть плата на базе процессора Vortex86DX, который является микроконтроллером на базе x86. Он имеет пять 16550A UARTS, четыре (COM1-COM4) из которых находятся на обычных адресах портов ввода-вывода (0x3f8, 0x2f8, 0x3e8, 0x2e8), но пятый (COM9) находится на 0x010, irq 9.

Vortex86DX

Первые четыре UARTS обнаружены, у меня нет с ними проблем. Проблема в том, что я не могу заставить работать пятый (COM9) в Linux. COM9 работает в отдельном приложении DOS, но я даже не могу обнаружить его из Linux.

Что я уже сделал:

Результат: ядро ​​не смогло проверить UART по адресу 0x010

Поэтому я написал утилиту проверки порта ввода-вывода для прямого чтения из порта ввода-вывода 0x010, и я не смог обнаружить никаких регистров 16550A в области от 0x010 до 0x017. Похоже, там ничего нет. Я пытался записать и прочитать данные из регистра scratch (смещение +7), но ничего не получил по адресу 0x017.

В техническом описании ЦП не сказано многого. Там указано, что в регистре южного моста есть бит управления, который делает "что-то" для COM9. Я написал утилиту PCI, которая записывала в этот бит, но она, похоже, не включила порт COM или не изменила ничего, когда я провел зондирование порта io.

На этом этапе мы будем признательны за любую помощь!

решение1

Я не понимаю, зачем вы так усложнили себе жизнь, изменив исходный код ядра, чтобы добавить поддержку этого нестандартного последовательного порта ввода-вывода и IRQ. Программа setserial(8)должна уметь настраивать его для вас. Что-то вроде этого:

# setserial ttyS4 address 0x10 irq 9

ВидетьLinux Serial HOWTOБольше подробностей.

решение2

Похоже, что либо BIOS, либо Linux отключают порт COM9 в регистрах южного моста.

Регистры:

  • «Внутренний регистр управления UART9» необходимо сбросить до значения по умолчанию: 0x00810010
  • Для повторного включения COM9 необходимо очистить бит 9 в «Регистре управления встроенным устройством».

Я не знаю, почему и где они отключены.

Когда я установил разумные значения в драйвере устройства, мне удалось обнаружить COM9 UART.

Linux требует новый тип чипа x86 для Vortex86DX. Он не совместим на 100%.

Связанный контент