У меня есть карта, которая вставляется в слот PCIe, с некоторыми контролируемыми микросхемами SMBus.Карта самостоятельно выложена и прекрасно работает на некоторых старых материнских платах.На более новой материнской плате (ASUS PRIME Z370-A) она не работает.
Карта не использует интерфейс PCIe, только слот PCIe.Нет связи между PRSNT1 и 2 и, кроме того, нет связи с дифференциальными линиями передачи данных.Слот PCIe используется только для питания (контакты A9, A19, B8 (+ 3,3 В) - A4, A12, A15, A18, B4, B7, B13, B26, B18 (GND)) и интерфейса SMBus (B5 (SMCLK)), B6 (SMDAT)).
С неработающим я имею ввиду, что не могу с ним общаться через SMBus.Я пытаюсь это с помощью модуля ядра i2c-dev.Вывод i2cdetect -l: (сокращенно, я удалил разработчиков i2c карты nvidia)
i2c-3 i2c i915 gmbus dpd I2C adapter
i2c-1 i2c i915 gmbus dpc I2C adapteradapter
i2c-4 i2c DPDDC-B I2C adapter
i2c-2 i2c i915 gmbus dpb I2C adapter
i2c-0 smbus SMBus I801 adapter at f040 SMBus adapter
На мой взгляд, устройство i2c-0 является правильным.Когда я запускаю i2cdetect на интерфейсе 0, обнаруживаются некоторые микросхемы, но не правильные (у них есть addr 0x70 и 0x72).Подводя итог, я пытаюсь говорить через мастер SMBus в Intel 200 PCH со своими подчиненными чипами SMBus.
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- 08 -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: 30 31 -- -- 34 35 -- -- -- -- -- -- -- -- -- --
40: -- -- -- -- 44 -- -- -- -- -- -- -- -- -- -- --
50: -- 51 -- 53 -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: -- -- -- -- -- -- -- --
Я пробовал также шину 1-4, но тот же результат.На другой материнской плате обнаружение работает, как вы видите ниже.
Кроме того, я измерял осциллографом выводы B5 и B6 разъема PCIe.На одной из этих выводов новой материнской платы нет тактового сигнала или сигнала данных.
Я думаю, что мне нужно каким-то образом настроить модуль ядра, чтобы он также пытался обмениваться данными с устройствами SMBus в слотах PCIe.Может быть, кто-нибудь может дать мне подсказку.
Хотя не было предупреждений о перекрывающихся областях памяти, я установил опцию ядра acpi_enforce_resources = lax, чтобы гарантировать, что никакое связывание памяти ACPI не конфликтует с контроллером SMBus.
Некоторые выходы
dmesg modprobe i2c-i801 (выход модуля ядра, который абстрагирует контроллер Intel SMBus)
[ 81.667581] i801_smbus 0000:00:1f.4: SPD Write Disable is set
[ 81.667639] i801_smbus 0000:00:1f.4: SMBus using PCI interrupt
i2cdetect 0 (рабочая системная плата, контроллер SMBus на i2c-0)
0 1 2 3 4 5 6 7 8 9 a b c d e f
00: -- -- -- -- -- -- -- -- -- -- -- -- --
10: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
20: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
30: -- -- -- -- -- -- -- -- 38 -- -- -- -- -- -- --
40: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
50: 50 -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
60: -- -- -- -- -- -- -- -- -- -- -- -- -- -- -- --
70: 70 -- 72 -- -- -- -- --
uname -a
Linux XY 4.16.0-1-amd64 #1 SMP Debian 4.16.5-1