А не пробовал кто-нибудь клок для ПЛИС настраивать не в прикладном ПО или модуле ядра, а в device tree? Я практически все особенности аппаратуры в DTS описываю, чтобы все инициализации происходили при загрузке ядра, а не прикладных модулей. И все, связанное с ПЛИС, успешно описывается, кроме клока, который нужно настроить в проце и выдать на PE0.
Настройка PE0 как Periperal B проходит успешно через секцию pinctrl, а вот с клоком - глухо. В dtsi для SAM9G45 описана куча источников клоков, но все попытки перенести в свой DTS фрагмент, отвечающий за PCK0 заканчиваются безуспешно - или клока просто нет, или ядро виснет на самом начале загрузки, похоже, на ожидании захвата ФАПЧ.
Обижаете. Первое, что сделал - это прошерстил DTS и нашел этот самый фрагмент, точнее его клон для sam9g45, и попробовал у себя на плате, к сожалению, без эффекта. В данном случае, похоже, теги assigned-clocks обрабатываются каким-то специфическим драйвером.
Наверное, где-то неправильно указал параметры.
Попробую еще поэкспериментировать
На практике польза следующая:
1. ПЛИС работает без загрузки модуля ядра. device tree по сути заменяет BSP - описал всю периферию и можно пользоваться сразу адресным пространством ПЛИС из юзер-спейса (mmap)
2. Если модуль ядра все-таки нужен, то в инициализации нужно включить клок и поработать с регистрами - тогда после включения клока нужно паузу делать, чтобы дать ПЛИС время запуститься
Ну в ПЛИС например, может быть просто демка, мигающая светодиодами для студентов, пока ПЛИС автономно работает, ей ничего не нужно от ядра, кроме включения клока.
Паузу сделать можно, хотя и с ограничениями, например, 2 мс - без проблем. Но мне идея останавливать загрузку ядра ради паузы кажется идеологически неверной.
Просто немного странно, что в данном случае запустить клок некому. Клок SPI, например, запускается соответствующим драйвером, а почему бы клоку PCK не быть запущенным драйвером PMC?
а демка как в FPGA попадает - насколько знаю на местных платах нет флеша для хранения конфигурации
куча внешней периферии да и встроенной требует сброс в течении какого-то времени и задержки, вы ради идеологии куда все это денете ? кому нужна быстрая загрузка подгружают такие модули динамически, оставляя в ядре минимально необходимое для старта
грузится с проца с использованием трех gpio без уровня ядра
Ну за эти задержки пусть голова у их разработчиков болит
Вот я годами патчил ядро и как только узнал, что bsp можно делать на dts и это позволит не лезть в исходники ядра и перестать патчить - вот я и стал использовать dts :)
Минус пересборка ядра для исправления инициализации bsp, например, таймингов памяти
Минус перенакладывание патчей на новую версию ядра - dts не так сильно меняется от версии к версии