Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Пытаюсь разобраться с device tree
Форум разработчиков электроники ELECTRONIX.ru > Cистемный уровень проектирования > Операционные системы > Linux
Terminator
Почему-то не смог найти готовый модуль умеющий заливать прошивку в fpga, решил написать свой.

Почитал про device tree, посмотрел набор готовых модулей. Вроде всё просто должно быть.

Споткнулся на spi-gpio smile3046.gif
Описал всё по докам, написал заготовку модуля с заливкой файла в spi. Вроде работает, ногами правильно машет.

Кусок dts-а:
CODE

ahb {
apb {
pinctrl@fffff200 {
spi_test {
pinctrl_spi_test: spi_test-0 {
atmel,pins =
<AT91_PIOA 17 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
AT91_PIOA 19 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
AT91_PIOA 21 AT91_PERIPH_GPIO AT91_PINCTRL_NONE
AT91_PIOA 23 AT91_PERIPH_GPIO AT91_PINCTRL_NONE>;
};
};
};
};
};

spi_test {
compatible = "spi-gpio";
#address-cells = <0x1>;
ranges;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_spi_test>;
gpio-sck = <&pioA 17 0>;
gpio-miso = <&pioA 19 0>;
gpio-mosi = <&pioA 21 0>;
cs-gpios = <&pioA 23 0>;
num-chipselects = <1>;

fpga_load_test {
compatible = "xlnx,fpga_load";
spi-max-frequency = <500000>;
reg = <0>;
};
};


При компиляции dts-а выдаёт:
Код
Warning (reg_format): "reg" property in /spi_test/fpga_load_test has invalid length (4 bytes) (#address-cells == 1, #size-cells == 1)
Warning (avoid_default_addr_size): Relying on default #size-cells value for /spi_test/fpga_load_test

Что ему не нравится? Что надо сделать чтобы не ругался?

Попытался отцепить чип селект, вроде как spi-gpio такое позволяет. Ничего не вышло. Компилится без варнингов, но при загрузке модуля ругается:
Код
bus: 'platform': really_probe: probing driver spi_gpio with device spi_test
spi_gpio: probe of spi_test rejects match -19

-19 это ENODEV

Как быть?

P. S. Экспериментирую на борде atmel sama5d3x-ek. Весь софт самособранный при помощи buildroot.
svss
Ваш случай сильно напоминает:
http://permalink.gmane.org/gmane.linux.por...m.kernel/349467

Terminator
Цитата(svss @ Dec 24 2014, 09:10) *
Ваш случай сильно напоминает:
http://permalink.gmane.org/gmane.linux.por...m.kernel/349467

Я так делал. В этом случае ругается на ranges;
Код
Warning (ranges_format): /spi_test has empty "ranges" property but its #size-cells (0) differs from / (1)

Зачем оно там я не знаю. В доке к spi-gpio написано, что должен быть.
Но без ranges тоже работает и вроде не ругается.
svss
Цитата(Terminator @ Dec 24 2014, 13:27) *
Но без ranges тоже работает и вроде не ругается.

( Работает и не ругается.. значит тема закрыта sm.gif )

О ranges тоже есть дискуссии:
https://lists.ozlabs.org/pipermail/devicetr...ber/001217.html
Мож., кто другой чего добавит..
Terminator
Цитата(svss @ Dec 24 2014, 13:52) *
( Работает и не ругается.. значит тема закрыта sm.gif )

Не закрыта sm.gif
Неясным остался момент с отключением чипселекта. В коде spi-gpio упоминается, что чипселект может отсутствовать, но как это указать в dts файле, я найти не могу. Судя по другим докам из ядра отсутствующая нога вместо <&pio 10 0> описывается как <0>, но после такой записи модуль spi-gpio падает со страшной руганью.

Цитата(svss @ Dec 24 2014, 13:52) *
О ranges тоже есть дискуссии:
https://lists.ozlabs.org/pipermail/devicetr...ber/001217.html
Мож., кто другой чего добавит..

Это же spi-gpio, откуда у него address space ? И про "потомков" подключенных к этому spi тот же вопрос.
Terminator
Пошарился в исходниках ядра. Насколько смог понять of_get_named_gpio() используемый spi-gpio для создания перечня чипселектов, не может выдать -1, который spi-gpio воспринимает как отсутствие чипселекта.

Есть способ создать чисто виртуальный pin чтобы подсунуть его вместо ненужного чипселекта?
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.