Jump to content

    

Пытаюсь разобраться с device tree

Почему-то не смог найти готовый модуль умеющий заливать прошивку в 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.

Edited by Terminator

Share this post


Link to post
Share on other sites
Ваш случай сильно напоминает:

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 тоже работает и вроде не ругается.

Share this post


Link to post
Share on other sites
Но без ranges тоже работает и вроде не ругается.

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

 

О ranges тоже есть дискуссии:

https://lists.ozlabs.org/pipermail/devicetr...ber/001217.html

Мож., кто другой чего добавит..

 

Share this post


Link to post
Share on other sites
( Работает и не ругается.. значит тема закрыта :) )

Не закрыта :)

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

 

О ranges тоже есть дискуссии:

https://lists.ozlabs.org/pipermail/devicetr...ber/001217.html

Мож., кто другой чего добавит..

Это же spi-gpio, откуда у него address space ? И про "потомков" подключенных к этому spi тот же вопрос.

 

Share this post


Link to post
Share on other sites

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

 

Есть способ создать чисто виртуальный pin чтобы подсунуть его вместо ненужного чипселекта?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now