dxp 65 27 марта, 2023 Опубликовано 27 марта, 2023 · Жалоба А вы запрос по BDF делаете? Я всегда с адресами памяти работал. Свич по идее не должен влиять — при енумерации RC его должен обнаружить и запрограммировать на корректную маршрутизацию. И она же работает на два запроса. Со свичами дел не имел, не могу ничего сказать, может там и правда надо что-то со стороны драйвера настраивать, хотя это сомнительно. Всё же надо как-то локализовать проблему — где возникает. Вот ушёл второй запрос, что на RR порте? Он (порт) готов принимать запрос? Или может там уже после второго tready в нуле. Или, например, только на третьем затыкается. Или и после третьего не затыкается, но просто уже не проходит — ломается где-то дальше. По тому, что ругается на таймаут, похоже на то, что запрос где-то потерялся и ядро вернуло ошибку таймаута. Адреса (если по адресам запросы идут) посмотрите внимательно — корректные ли. На уровне TLP 32-разрядные запросы можно метать только в 32-разрядно-адресуемую память, а и 64-разрядные — в 64-разрядно-адресуемую. Хотя тут не TLP, а их проприетарный интерфейс. Но может есть какие-то нюансы. Не включен ли на хосте IOMMU, может он там вносит коррективы. Пока идеи кончились. 🙂 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fingertouch 2 27 марта, 2023 Опубликовано 27 марта, 2023 · Жалоба Может, у вас банально кривой драйвер на чипсет (свитч) в системе стоит? Или какая-нибудь экзотическая аппаратная шалость, в виде, например, неподходящего по стандарту генератора опорной частоты? Помнится, когда-то давно сталкивался с подобной проблемой на какой-то матери: опорный кварц имел отклонение чуть больше ppm, чем вытаскивает Elastic Buffer. Простите, могу в терминологии путаться, давно дело было. Покупные PCIE устройства в используемом слоте работают? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 27 марта, 2023 Опубликовано 27 марта, 2023 · Жалоба 12 hours ago, dxp said: У вас тут не самая простая топология — коммутатор имеется, проблема может быть на любом уровне. Выяснили: на том же CPC-512 воткнули в дальние слоты (трудно это было) и... Всё заработало! Значит всё упирается в PCI-E Switch. Но я ведь правильно понимаю, что его наличие должно оставаться для устройства абсолютно прозрачным и в прошивке это учитывать вообще никак не надо? Если надо то как, получать топологию, какой то иной адрес запроса делать? 33 minutes ago, fingertouch said: Может, у вас банально кривой драйвер на чипсет (свитч) в системе стоит? Покупные PCIE устройства в используемом слоте работают? Пробовали более новые ОС - ничего не исправилось, дело не в драйвере конкретной ОС. На свитч точно нужно драйвер? Просто как он тогда без драйвера обеспечивает первичную энумерацию? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
fingertouch 2 27 марта, 2023 Опубликовано 27 марта, 2023 · Жалоба 20 минут назад, 1891ВМ12Я сказал: На свитч точно нужно драйвер? Просто как он тогда без драйвера обеспечивает первичную энумерацию? Опять же, прошу простить, если что-то помню неверно. Но коль скоро switch имеет конфигурационное пространство, то и настраивать его кто-то должен. Могу, конечно, превратно помнить такие подробности, поскольку сам занимался только аппаратной частью, но кажется, программисты даже из него что-то вычитывали. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
dxp 65 28 марта, 2023 Опубликовано 28 марта, 2023 · Жалоба 11 часов назад, 1891ВМ12Я сказал: На свитч точно нужно драйвер? Просто как он тогда без драйвера обеспечивает первичную энумерацию? Обычно это входит в драйвер чипсета (часто и свичи в "южном" мосте). Енумерацию проходит, но корректно ли после этого работает — вот вопрос. Там может быть инициализация проходит на уровне стандартных действий, а конкретный свич требует ещё какие-то специфичные действия, которые обеспечивает проприетарный для этого компонента драйвер. По типу как с видеокартами — все они как-то обнаруживаются системой и что-то выдают. Но чтобы извлечь из видеокарты её настоящий потенциал, необходимо использовать специализированный драйвер для неё. Другие PCIe устройства в этом слоте исправно работают? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 28 марта, 2023 Опубликовано 28 марта, 2023 · Жалоба 9 hours ago, dxp said: Другие PCIe устройства в этом слоте исправно работают? Увы, никаких других устройств просто тупо нет в наличии. Было бы любопытно, но к сожалению нет. Пример с видеокартой - великолепный. Сейчас перепиливаю на 128-байтный payload прошивку, куда деваться. Точнее при помощи ifdef else end делаю вариацию для 256/128 байт. Затем попробую собрать ультра-распоследнее свежайшее ядро туда. Ведь где еще взять драйвер на Linux для этого switch? Отдельно не лежит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 226 28 марта, 2023 Опубликовано 28 марта, 2023 · Жалоба 58 минут назад, 1891ВМ12Я сказал: Ведь где еще взять драйвер на Linux для этого switch? Отдельно не лежит Он штатно входит в ядро и я ни разу не видел специфичного драйвера для PCIE-мостов. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 29 марта, 2023 Опубликовано 29 марта, 2023 · Жалоба On 3/28/2023 at 3:20 PM, makc said: Он штатно входит в ядро и я ни разу не видел специфичного драйвера для PCIE-мостов. Сегодня пробовали свежайшее ультра-последнее ядро Linux 6.2.8 + Debian 10, собрал со всеми драйверами и свитча и dma engine самой последней версии драйвер (тоже разработчик PLX), собрал вручную. Всё то же самое, значит это не баг старой версии, и либо что то в биосе не так, либо я всё таки делаю что то не так. Предположим что 90% скорее моя где то ошибка, но почему без switch напрямую всё работает. Что же я не учел, вообще не представляю. Тэги разные пробовал. Если я делаю запрос - кто должен выдавать тэг? Я выдавать Какая может быть интересно несовместимость, а главное в чем. Опять мысль про адресацию 32-64 бита, но я убедился что DMA у меня 32 битные и маска по дефолту dma_mask 32 бита Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 226 29 марта, 2023 Опубликовано 29 марта, 2023 · Жалоба 50 минут назад, 1891ВМ12Я сказал: Предположим что 90% скорее моя где то ошибка, но почему без switch напрямую всё работает. Покажите полную выдачу lspci, чтобы была понятна схема и режимы работы всей иерархии. Там же будет видно содержимое регистров статуса свича и рута. Без этого можно продолжать гадать до бесконечности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 29 марта, 2023 Опубликовано 29 марта, 2023 · Жалоба 58 minutes ago, makc said: Покажите полную выдачу lspci, чтобы была понятна схема и режимы работы всей иерархии. Там же будет видно содержимое регистров статуса свича и рута. Без этого можно продолжать гадать до бесконечности. Прилагаю лог, но это чуть устаревший файл, System peripheral: PLX Technology, Inc. Device 87d0 также имеет драйвер plx_dma Утром добуду полный lspci свежий, где устройство торчит в проблемном слоте pci_20230329_1.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 226 29 марта, 2023 Опубликовано 29 марта, 2023 · Жалоба 13 минут назад, 1891ВМ12Я сказал: Утром добуду полный lspci свежий, где устройство торчит в проблемном слоте Сделайте два снимка состояния с помощью lspci: сразу после загрузки и после попытки обмена через DMA. И выложите их сюда. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 30 марта, 2023 Опубликовано 30 марта, 2023 · Жалоба 10 hours ago, makc said: Сделайте два снимка состояния с помощью lspci: сразу после загрузки и после попытки обмена через DMA. И выложите их сюда. Два файла - до и после. После - загрузился драйвер и там при старте обмен произошел - запрошен MRd. Я их при помощи kdiff3 сравниваю, и вот что вижу! PCI bridge: PLX Technology, Inc. Device 8725 было FatalErr- а стало FatalErr+ Ваш совет посмотреть - помог увидеть проблему! А у моего устройства вот что: AERCap: First Error Pointer: 0e - как извлечь код ошибки из этого факта? Что за 0x0E? lspci_20230330_1.tar.gz lspci_before.txt lspci_after.txt Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 226 30 марта, 2023 Опубликовано 30 марта, 2023 · Жалоба 4 минуты назад, 1891ВМ12Я сказал: Два файла - до и после. Похоже проблема всё-таки в том, как вы формируете или как у вас отправляется TLP: FatalErr+ и MalfTLP+ прямо на это намекают. Вообще говоря у вас при этом в dmesg должны были появляться сообщения от AER, если только вы его не заглушили. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
1891ВМ12Я 0 30 марта, 2023 Опубликовано 30 марта, 2023 · Жалоба 3 minutes ago, makc said: Похоже проблема всё-таки в том, как вы формируете или как у вас отправляется TLP: У моего устройства вот что: AERCap: First Error Pointer: 0e - как извлечь код ошибки из этого факта? Что за 0x0E? Да, MalfTLP+ вижу, malformed TLP Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
makc 226 30 марта, 2023 Опубликовано 30 марта, 2023 · Жалоба Цитата The Fatal Error Reporting bit or bit 2 is set for any of the following reasons: Protocol error Receive buffer overflow Flow Control error Malformed TLP 4 минуты назад, 1891ВМ12Я сказал: У моего устройства вот что: AERCap: First Error Pointer: 0e - как извлечь код ошибки из этого факта? Что за 0x0E? 4 минуты назад, 1891ВМ12Я сказал: Да, MalfTLP+ вижу, malformed TLP Нужно лечить эту проблему. Разные мосты по-разному относятся к отклонениям от требования стандарта и при некоторых раскладах вам могло неповезти с излишне дотошным мостом. Распишите в удобоваримом для человека виде отправляемый TLP в виде массива 32-битных значений, чтобы можно было удобно читать и сверять со стандартом и давайте разбираться с ним. В стандарте полно оговорок приблизительно такого вида: Цитата Receivers may optionally check for violations of these rules (but must not check Reserved bits). These checks are independently optional (see Section ...). If a Receiver implementing these checks determines that a TLP violates these rules, the TLP is a Malformed TLP. Соответственно, PLX может проверять что-то, что не проверяют другие и это пока полностью укладывается в наблюдаемую вами картину. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться