Ник:
Пароль:

Контакты

E-mail: info@starterkit.ru
тел.: +7 922 680-21-73
тел.: +7 922 680-21-74
Телеграм: t.me/starterkit_ru

Способы оплаты

User Info


Добро пожаловать,
Guest

Регистрация или входРегистрация или вход
Потеряли пароль?Потеряли пароль?

Ник:
Пароль:

ПользователейПользователей:3
Поисковых ботовПоисковых ботов:3
ГостейГостей:1

ОбновитьПодробнееВсегоВсего:7
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9G45(M10)-XC6SLX
Настройка клока для ПЛИС в device tree
Romantic
Добавлено 02.04.2018 16:06
0
Сообщение: 1
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Приветствую!

А не пробовал кто-нибудь клок для ПЛИС настраивать не в прикладном ПО или модуле ядра, а в device tree? Я практически все особенности аппаратуры в DTS описываю, чтобы все инициализации происходили при загрузке ядра, а не прикладных модулей. И все, связанное с ПЛИС, успешно описывается, кроме клока, который нужно настроить в проце и выдать на PE0.

Настройка PE0 как Periperal B проходит успешно через секцию pinctrl, а вот с клоком - глухо. В dtsi для SAM9G45 описана куча источников клоков, но все попытки перенести в свой DTS фрагмент, отвечающий за PCK0 заканчиваются безуспешно - или клока просто нет, или ядро виснет на самом начале загрузки, похоже, на ожидании захвата ФАПЧ.

Раздел форума пустынный, но может кто подскажет?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 02.04.2018 17:12 Редактировалось 02.04.2018 17:16 Сообщение: 2
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
Цитата

А не пробовал кто-нибудь клок для ПЛИС настраивать не в прикладном ПО или модуле ядра, а в device tree?


документацию не пробовали смотреть

https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/clock/clock-bindings.txt#L135

Цитата

==Assigned clock parents and rates==

Some platforms may require initial configuration of default parent clocks
and clock frequencies. Such a configuration can be specified in a device tree
node through assigned-clocks, assigned-clock-parents and assigned-clock-rates
properties.


и примеры

https://elixir.bootlin.com/linux/v4.16/source/arch/arm/boot/dts/at91sam9g25ek.dts#L28

Цитата

clocks = <&pck0>;
clock-names = "xvclk";
assigned-clocks = <&pck0>;
assigned-clock-rates = <25000000>;


и предупреждения

Цитата

Configuring a clock's parent and rate through the device node that consumes
the clock can be done only for clocks that have a single user. Specifying
conflicting parent or rate configuration in multiple consumer nodes for
a shared clock is forbidden.
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 02.04.2018 18:17 Сообщение: 3
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Цитата
документацию не пробовали смотреть

Обижаете. Первое, что сделал - это прошерстил DTS и нашел этот самый фрагмент, точнее его клон для sam9g45, и попробовал у себя на плате, к сожалению, без эффекта. В данном случае, похоже, теги assigned-clocks обрабатываются каким-то специфическим драйвером.
Наверное, где-то неправильно указал параметры.
Попробую еще поэкспериментировать
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 05.04.2018 17:06 Редактировалось 05.04.2018 17:08 Сообщение: 4
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Пока все-таки не получается полностью в DT сделать:

Код

pinctrl@fffff200 {
fpga0 {
pinctrl_board_fpga0: fpga0-board {
atmel,pins =
<AT91_PIOC 10 AT91_PERIPH_GPIO AT91_PINCTRL_NONE /* PC10 for CCLK */
AT91_PIOC 11 AT91_PERIPH_GPIO AT91_PINCTRL_NONE /* PC11 for DIN */
AT91_PIOC 29 AT91_PERIPH_GPIO AT91_PINCTRL_PULL_UP /* PC29 for DONE */
AT91_PIOC 30 AT91_PERIPH_GPIO AT91_PINCTRL_MULTI_DRIVE /* PC30 for PROG */
AT91_PIOE 0 AT91_PERIPH_B AT91_PINCTRL_NONE /* PE0 for PCK0 */
>;
};
};
};
...
fpga@0 {
compatible = "sk,fpga";
reg = <0 0x0 0x500>;

pinctrl-names = "default";
pinctrl-0 = <&pinctrl_board_fpga0>;

clocks = <&pck0>;
clock-names = "fpgaclk";
assigned-clocks = <&pck0>;
assigned-clock-rates = <50000000>;
};


Этот код не игнорируется, PCK0 настраивается на частоту 50 МГц, но если в модуле ядра не вызвать clk_prepare_enable, то клок на выходе не появляется.

Код

struct clk *fclk;

fclk=devm_clk_get(&platdev->dev, "fpgaclk");
if(IS_ERR(fclk)) {
dev_err(&platdev->dev, "Failed to get fpga clock\n");
return -EINVAL;
}
if(result=clk_prepare_enable(fclk))
{
dev_err("%s: error preparing fpga clock, returned %d", __func__, result);
return result;
}


А мне хочется, чтобы клок начинал идти на ПЛИС сразу при загрузке ядра, а не позже, при загрузке модуля.
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 05.04.2018 21:02 Сообщение: 5
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
Цитата

но если в модуле ядра не вызвать clk_prepare_enable, то клок на выходе не появляется


clk_prepare_enable в люблм случае надо где-то делать, в DT такого не видел.

Цитата

А мне хочется, чтобы клок начинал идти на ПЛИС сразу при загрузке ядра, а не позже, при загрузке модуля.


в этом есть какой-то практический смысл или просто захотелось ?
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 06.04.2018 01:30 Сообщение: 6
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Цитата

в этом есть какой-то практический смысл или просто захотелось ?


На практике польза следующая:
1. ПЛИС работает без загрузки модуля ядра. device tree по сути заменяет BSP - описал всю периферию и можно пользоваться сразу адресным пространством ПЛИС из юзер-спейса (mmap)
2. Если модуль ядра все-таки нужен, то в инициализации нужно включить клок и поработать с регистрами - тогда после включения клока нужно паузу делать, чтобы дать ПЛИС время запуститься
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 06.04.2018 12:20 Сообщение: 7
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
В DT на данный момент скорей всего никак не включить клок, у цинков например есть свой костыль

https://elixir.bootlin.com/linux/latest/source/Documentation/devicetree/bindings/clock/zynq-7000.txt#L26

а по поводу 1, 2

1 мне например сомнительна нужность аппаратных устройств без прерываний и DMA

2 паузу сделать - это вообще не проблема, зачем для этого DT за уши притягивать
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 09.04.2018 17:25 Сообщение: 8
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Цитата

1 мне например сомнительна нужность аппаратных устройств без прерываний и DMA

Ну в ПЛИС например, может быть просто демка, мигающая светодиодами для студентов, пока ПЛИС автономно работает, ей ничего не нужно от ядра, кроме включения клока.

Цитата

2 паузу сделать - это вообще не проблема, зачем для этого DT за уши притягивать

Паузу сделать можно, хотя и с ограничениями, например, 2 мс - без проблем. Но мне идея останавливать загрузку ядра ради паузы кажется идеологически неверной.

Просто немного странно, что в данном случае запустить клок некому. Клок SPI, например, запускается соответствующим драйвером, а почему бы клоку PCK не быть запущенным драйвером PMC?
Спуститься к концу Подняться к началу
Персональная информация
sasamy
Добавлено 09.04.2018 20:48 Редактировалось 09.04.2018 20:49 Сообщение: 9
sasamy
4.71

Пункты: 83552
Регистрация: 14.08.2009
Цитата

пока ПЛИС автономно работает, ей ничего не нужно от ядра, кроме включения клока


а демка как в FPGA попадает - насколько знаю на местных платах нет флеша для хранения конфигурации

Цитата

Но мне идея останавливать загрузку ядра ради паузы кажется идеологически неверной.


куча внешней периферии да и встроенной требует сброс в течении какого-то времени и задержки, вы ради идеологии куда все это денете ? кому нужна быстрая загрузка подгружают такие модули динамически, оставляя в ядре минимально необходимое для старта

Цитата

а почему бы клоку PCK не быть запущенным драйвером PMC?


пропатчите - кто мешает
Спуститься к концу Подняться к началу
Персональная информация
Romantic
Добавлено 10.04.2018 18:13 Сообщение: 10
Romantic
3

Пункты: 2214
Регистрация: 20.11.2009
Пол: Мужчина
Цитата

а демка как в FPGA попадает - насколько знаю на местных платах нет флеша для хранения конфигурации

грузится с проца с использованием трех gpio без уровня ядра

Цитата

куча внешней периферии да и встроенной требует сброс в течении какого-то времени и задержки, вы ради идеологии куда все это денете ? кому нужна быстрая загрузка подгружают такие модули динамически, оставляя в ядре минимально необходимое для старта

Ну за эти задержки пусть голова у их разработчиков болит

Цитата

пропатчите - кто мешает

Вот я годами патчил ядро и как только узнал, что bsp можно делать на dts и это позволит не лезть в исходники ядра и перестать патчить - вот я и стал использовать dts :)
Минус пересборка ядра для исправления инициализации bsp, например, таймингов памяти
Минус перенакладывание патчей на новую версию ядра - dts не так сильно меняется от версии к версии
Спуститься к концу Подняться к началу
Персональная информация
Форум » starterkit.ru » Отладочные платы » SK-AT91SAM9G45(M10)-XC6SLX