карамболь 0 25 февраля, 2020 Опубликовано 25 февраля, 2020 · Жалоба Здравствуйте. Столкнулся с такой необычной ситуацией. Есть две самодельные платы на одном и том же чипе Arria 5, платы практически одинаковые, разница в том, что на более свежей разведен USB. Есть весь необходимый софт для запуска Линукс. Написан драйвер для своих устройство и пользовательская программа. В последнее время отлаживал софт на новой плате (платы предыдущей разработки все установлены в свои девайсы). За это время перешел в кернела 3.18 на 5.2, соответственно пересобрал драйвер под новое ядро. Тут пришло время обновить софт на старых платах. И начались чудеса. Поменял на Sd карте ядро линукса, накатил драйвер, записал preloader и при insmod ядро зависло. Поставил эту SD карту на новую плату (с заменой preloader) и на ней все отлично работает. Перекидываю карту назад и снова ядро виснет, замена preloader не помогает. Стал разбираться в драйвере, обвесил его printk-ами и выяснил, что крашится при попытке записи в регистр L3REGS (0xFF800000) remap = L3REGS_REMAP_LWH2F_BIT | L3REGS_REMAP_H2F_BIT; printk ("init_hw_interface 8 L3REGS = %x !\n", L3REGS + L3REGS_REMAP_OFF ); iowrite32(remap, L3REGS + L3REGS_REMAP_OFF); Функции ioremap, request_mem_region присутствуют, там все корректно, да и работал это драйвер годами и этот кусок не правился, добавлялись только новые устройства со своими прерываниями (в DTB вносились соответствующие изменения). Причем, если на неработающей плате откатить только ядро до 3.18 (и пересобрать драйвер, соответственно), то все отлично работает. На что еще обратить внимание ? Я уже себе весь мозг сломал. Спасибо Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 25 февраля, 2020 Опубликовано 25 февраля, 2020 · Жалоба 5 часов назад, карамболь сказал: Причем, если на неработающей плате откатить только ядро до 3.18 (и пересобрать драйвер, соответственно), то все отлично работает. На что еще обратить внимание ? Я уже себе весь мозг сломал. Спасибо а то, что этот регистр write-only не смущает printk? l3regs 0xFF800000 0xFF800000 Offset: 0x0 Access: WO по описанию очень смахивает на проблему в прелоадере - откусите из сборки USB и попробуйте собранное на старой плате еррату смотрели? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
карамболь 0 26 февраля, 2020 Опубликовано 26 февраля, 2020 · Жалоба 10 hours ago, Jury093 said: а то, что этот регистр write-only не смущает printk? l3regs 0xFF800000 0xFF800000 Offset: 0x0 Access: WO по описанию очень смахивает на проблему в прелоадере - откусите из сборки USB и попробуйте собранное на старой плате еррату смотрели? Спасибо за ответ. Я в этот регистр только пишу (читать пробовал в качестве эксперимента, было подозрение, что глюк в кернеле и неправильно отрабатывает ioremap). Сейчас у меня прошивка без USB и Handoff от нее, пересобрал прелодер, но ничего не изменилось. Странно, что с другими регистрами такого не происходит. Еррату пока не читал Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 26 февраля, 2020 Опубликовано 26 февраля, 2020 · Жалоба 59 минут назад, карамболь сказал: Спасибо за ответ. Я в этот регистр только пишу (читать пробовал в качестве эксперимента, было подозрение, что глюк в кернеле и неправильно отрабатывает ioremap). Сейчас у меня прошивка без USB и Handoff от нее, пересобрал прелодер, но ничего не изменилось. Странно, что с другими регистрами такого не происходит. Еррату пока не читал может забыли в убуте манипуляции сделать, типа бридж дернуть? у альтеры это штатный код, там не д.б. таких чудес, у нас подобное работает на cyclone5_soc несколько лет если проблема не решиться, попробуйте взять ядро помладше с упором проверки именно на этот функционал.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
карамболь 0 26 февраля, 2020 Опубликовано 26 февраля, 2020 · Жалоба Ладно, допустим, что проблема в preloader. Но почему тот же прелодер с ядром 3.18 работает корректно на старой плате ? Вот это меня больше всего интересует Just now, Jury093 said: может забыли в убуте манипуляции сделать, типа бридж дернуть? у альтеры это штатный код, там не д.б. таких чудес, у нас подобное работает на cyclone5_soc несколько лет если проблема не решиться, попробуйте взять ядро помладше с упором проверки именно на этот функционал.. я ниже ответил уже. С ядром 3.18 эта связка (убут+прелодер+драйвер) работает нормально Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 26 февраля, 2020 Опубликовано 26 февраля, 2020 · Жалоба 1 час назад, карамболь сказал: Ладно, допустим, что проблема в preloader. Но почему тот же прелодер с ядром 3.18 работает корректно на старой плате ? Вот это меня больше всего интересует я ниже ответил уже. С ядром 3.18 эта связка (убут+прелодер+драйвер) работает нормально если это не баг силикона, то значит что-то упустили, все же прыжок с 3.хх на 5.х довольно резок, могли где-то имена поменять или еще что-то не очевидное.. а где храниться окружение убута? на той же uSD? в таких случаях помогает последовательная замена бинарников, от модуля до прелоадера и поиск проблемного места в момент когда заработает.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
карамболь 0 26 февраля, 2020 Опубликовано 26 февраля, 2020 (изменено) · Жалоба 15 minutes ago, Jury093 said: если это не баг силикона, то значит что-то упустили, все же прыжок с 3.хх на 5.х довольно резок, могли где-то имена поменять или еще что-то не очевидное.. а где храниться окружение убута? на той же uSD? в таких случаях помогает последовательная замена бинарников, от модуля до прелоадера и поиск проблемного места в момент когда заработает.. окружение убута тоже на карте хранится. Кстати, вспомнил, что в DTB не выпилил USB... Может из-за этого глючить ? Но все равно непонятно, почему с 3.18 работает... Изменено 26 февраля, 2020 пользователем карамболь Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Jury093 2 26 февраля, 2020 Опубликовано 26 февраля, 2020 · Жалоба 1 час назад, карамболь сказал: окружение убута тоже на карте хранится. Кстати, вспомнил, что в DTB не выпилил USB... Может из-за этого глючить ? Но все равно непонятно, почему с 3.18 работает... если я правильно понял - платы идентичны, кроме как в новой добавлена поддержка USB, остальное одинаково - память, порты, периферия. старый и новый прелоадер работают на обеих платах, ядро 3.18 и модули аналогично, проблема нового ядра, точнее модуля на его основе и старой платы остается немногое: отсечь идентификацию платы (если она есть) и поискать костыли в виде дефайнов, типа "если ядро старее чем делаем то, иначе другое", в теории новый кросскомпилятор может добавить проблем. больше идей пока не вижу.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
карамболь 0 26 февраля, 2020 Опубликовано 26 февраля, 2020 · Жалоба 3 minutes ago, Jury093 said: если я правильно понял - платы идентичны, кроме как в новой добавлена поддержка USB, остальное одинаково - память, порты, периферия. старый и новый прелоадер работают на обеих платах, ядро 3.18 и модули аналогично, проблема нового ядра, точнее модуля на его основе и старой платы остается немногое: отсечь идентификацию платы (если она есть) и поискать костыли в виде дефайнов, типа "если ядро старее чем делаем то, иначе другое", в теории новый кросскомпилятор может добавить проблем. больше идей пока не вижу.. все практически так, как вы описали. Только один нюанс, на новой плате тоже происходит зависание с новым ядром, но лечится заменой прелодера. А старая плата работает только с ядром 3.18, от прелодера не зависит Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 1 марта, 2020 Опубликовано 1 марта, 2020 · Жалоба А регистр в который пишете, он расположен в HPS, или через мост в FPGA пишется? Я к тому что нет возможности посмотреть сигналтапом на процесс записи? Может waitrequest бесконечно висит, или еще что... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
карамболь 0 1 марта, 2020 Опубликовано 1 марта, 2020 · Жалоба 3 hours ago, R6L-025 said: А регистр в который пишете, он расположен в HPS, или через мост в FPGA пишется? Я к тому что нет возможности посмотреть сигналтапом на процесс записи? Может waitrequest бесконечно висит, или еще что... извините, что не ответил сразу. Да, это регистр HPS, так что сигналтапом не посмотреть Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
R6L-025 1 2 марта, 2020 Опубликовано 2 марта, 2020 · Жалоба dtb файл Вы же изменяли? Т.е. на старой плате убирали описание usb? А ядро кросскомпилятором собираете? Может (если есть возможность) попробовать на плате собрать? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
карамболь 0 2 марта, 2020 Опубликовано 2 марта, 2020 · Жалоба 2 hours ago, R6L-025 said: dtb файл Вы же изменяли? Т.е. на старой плате убирали описание usb? А ядро кросскомпилятором собираете? Может (если есть возможность) попробовать на плате собрать? dtb не менял в части USB, только новые прерывания добавлял по мере необходимости. Ядро собираю кросскомпилятором Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
gosha-z 2 2 марта, 2020 Опубликовано 2 марта, 2020 · Жалоба 33 minutes ago, карамболь said: Ядро собираю кросскомпилятором А каким? (Версия gcc?) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
карамболь 0 2 марта, 2020 Опубликовано 2 марта, 2020 · Жалоба 44 minutes ago, gosha-z said: А каким? (Версия gcc?) Linaro GCC 4.9-2016.02 (4.9.4 20151028 prerelease) Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться