Terminator 0 23 декабря, 2014 Опубликовано 23 декабря, 2014 (изменено) · Жалоба Почему-то не смог найти готовый модуль умеющий заливать прошивку в fpga, решил написать свой. Почитал про device tree, посмотрел набор готовых модулей. Вроде всё просто должно быть. Споткнулся на spi-gpio :smile3046: Описал всё по докам, написал заготовку модуля с заливкой файла в spi. Вроде работает, ногами правильно машет. Кусок dts-а: 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. Изменено 23 декабря, 2014 пользователем Terminator Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
svss 0 24 декабря, 2014 Опубликовано 24 декабря, 2014 · Жалоба Ваш случай сильно напоминает: http://permalink.gmane.org/gmane.linux.por...m.kernel/349467 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terminator 0 24 декабря, 2014 Опубликовано 24 декабря, 2014 · Жалоба Ваш случай сильно напоминает: 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 0 24 декабря, 2014 Опубликовано 24 декабря, 2014 · Жалоба Но без ranges тоже работает и вроде не ругается. ( Работает и не ругается.. значит тема закрыта :) ) О ranges тоже есть дискуссии: https://lists.ozlabs.org/pipermail/devicetr...ber/001217.html Мож., кто другой чего добавит.. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terminator 0 24 декабря, 2014 Опубликовано 24 декабря, 2014 · Жалоба ( Работает и не ругается.. значит тема закрыта :) ) Не закрыта :) Неясным остался момент с отключением чипселекта. В коде spi-gpio упоминается, что чипселект может отсутствовать, но как это указать в dts файле, я найти не могу. Судя по другим докам из ядра отсутствующая нога вместо <&pio 10 0> описывается как <0>, но после такой записи модуль spi-gpio падает со страшной руганью. О ranges тоже есть дискуссии: https://lists.ozlabs.org/pipermail/devicetr...ber/001217.html Мож., кто другой чего добавит.. Это же spi-gpio, откуда у него address space ? И про "потомков" подключенных к этому spi тот же вопрос. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Terminator 0 25 декабря, 2014 Опубликовано 25 декабря, 2014 · Жалоба Пошарился в исходниках ядра. Насколько смог понять of_get_named_gpio() используемый spi-gpio для создания перечня чипселектов, не может выдать -1, который spi-gpio воспринимает как отсутствие чипселекта. Есть способ создать чисто виртуальный pin чтобы подсунуть его вместо ненужного чипселекта? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться