Дерево устройств: как я могу изменить свойство дочернего узла устройства - PullRequest
0 голосов
/ 15 апреля 2019

Мне нужно привязать драйвер к моей записи в дереве устройств. Для этого мне нужно установить свойство ID устройства с dma-channel @ 00000030 на «1»

Кажется, я не могу переопределить свойства этих подузлов. Как я могу это сделать?

Файл pl.dtsi, откуда пришел этот фрагмент, не может быть изменен, так как он генерируется автоматически. Это будет перезаписано в одно мгновение.

Что я делал до этого вопроса

Я пытался все это переопределить, вместо того, чтобы просто изменить нужные мне значения. Но для этого подхода потребуется новое имя узла, которое работает до тех пор, пока драйвер dma не захочет связать себя с узлом. Тогда это терпит неудачу, потому что запись виртуальной файловой системы уже там. Отсюда первый вопрос. Как я могу отменить только свойство дочернего узла?

[    0.207961] sysfs: cannot create duplicate filename '/bus/platform/devices/a0000000.dma'

Цель - загрузить драйвер ядра Axidma для сообщества.

axidma_dma.c: axidma_request_channels: 651: Unable to get slave channel 0: tx_channel.

В соответствии со страницами проблем в репозитории github это означает одно из двух: либо драйвер не найден, либо драйвер используется. Это должно быть первым в моем случае. Теперь я предполагаю, что имя узла должно оставаться неизменным в дереве устройств, чтобы драйвер аксидмы мог его найти. .

автоматически сгенерированный файл dtsi

... которые я хотел бы изменить в основном файле system-top.dts

amba_pl: amba_pl@0 {
    #address-cells = <2>;
    #size-cells = <2>;
    compatible = "simple-bus";
    ranges ;
    axi_dma_0: dma@a0000000 {
        #dma-cells = <1>;
        clock-names = "s_axi_lite_aclk", "m_axi_sg_aclk", "m_axi_mm2s_aclk", "m_axi_s2mm_aclk";
        clocks = <&clk 71>, <&clk 71>, <&clk 71>, <&clk 71>;
        compatible = "xlnx,axi-dma-1.00.a";
        interrupt-names = "mm2s_introut", "s2mm_introut";
        interrupt-parent = <&gic>;
        interrupts = <0 89 4 0 90 4>;
        reg = <0x0 0xa0000000 0x0 0x1000>;
        xlnx,addrwidth = <0x40>;
        xlnx,include-sg ;
        xlnx,sg-length-width = <0x1a>;
        dma-channel@a0000000 {
            compatible = "xlnx,axi-dma-mm2s-channel";
            dma-channels = <0x1>;
            interrupts = <0 89 4>;
            xlnx,datawidth = <0x20>;
            xlnx,device-id = <0x0>;
            xlnx,include-dre ;
        };
        dma-channel@a0000030 {
            compatible = "xlnx,axi-dma-s2mm-channel";
            dma-channels = <0x1>;
            interrupts = <0 90 4>;
            xlnx,datawidth = <0x20>;
            xlnx,device-id = <0x0>;
            xlnx,include-dre ;
        };
    };
};

1 Ответ

0 голосов
/ 17 апреля 2019

Благодарность за @Ian Abbot за этот ответ.

Когда следующая строка добавляется после основного блока в ваш мастер-файл DTS.(в данном случае: system-top.dts) вы можете переопределить свойства даже дочерних узлов, даже если дочерние узлы имеют одинаковую метку.

Вам нужно будет включить исходный файл, в котором происходит запись,(В данном случае: пл.дци)

/dts-v1/;
/include/ "pl.dtsi"

\{
    main block where other magic stuff happens;
};

&axi_dma_0 {

    dma-channel@a0000030 {

         xlnx,device-id = <0x1>; 

     }; 
};
...