Спецификация AMD X470 SMBus - PullRequest
       16

Спецификация AMD X470 SMBus

0 голосов
/ 24 сентября 2018

Я перепроектировал драйвер Windows SMBus, чтобы перенести код в систему Linux.Для взаимодействия с SMBus в коде используются жестко закодированные адреса портов на основе системного чипсета.В моем случае я использую AMD X470 с базовым адресом 0xB20.

Каждая транзакция SMBus завершается вызовом следующей функции:

BOOL f_10CB0 (BYTE arg1) {
    BYTE val;

    for (int i = 0; i < 0x8000; ++i) {
        val = ReadPort(this->wPort);

        // Break on any error (bits 1:4) or bit 7 (bit 7 is reserved???)
        if (val & 0x9E)
            break;

        // Why is this port being read?
        ReadPort(0xED);
    }

    if ((val & 0x82) == 0) // 0x80 == unknown, 0x02 == Bus Interrupt
        return (val & 0x1C) == 0; // 0x04 (DeviceError) | 0x08 (BusCollision) | 0x10 (Killed)

    ReadPort(this->wPort);
    return FALSE;
}

Обратите внимание, что выше псевдо-код и этот вопрос не зависит от языка.

У меня две проблемы с кодом.

  1. Он проверяет бит 7 регистра состояния 0xB20.Биты состояния docs 5: 7 зарезервированы.Я читаю не те документы?Кто-нибудь знает, что означает этот бит?
  2. Цикл читает жестко закодированный порт 0xED, для которого я не могу найти никакой документации.Вызов всегда возвращает 0xFF, но адрес, по-видимому, недействителен в моей системе.

Что касается проблемы 2, я обнаружил неясную ссылку на порт на хроме.-os список рассылки , который использует его для предотвращения задержки ввода-вывода при записи на порт 0x80.Является ли 0xED зарезервированным адресом любого типа?

...