Beaglebone dcan0 и dcan1 - PullRequest
       29

Beaglebone dcan0 и dcan1

0 голосов
/ 31 марта 2020

У меня есть изображение linux, созданное с помощью yocto для beaglebone black. Мне нужно настроить dcan0 и dcan1, а также связку gp ios и несколько uarts. Для этого я создал кучу файлов .dtsi и включил их в пользовательские .dts и создал патчи для включения всех изменений. Все работает отлично, кроме dcan0 и dcan1 (я удалил i2c2), проверено с помощью:

cat /sys/kernel/debug/pinctrl/44e10800.pinmux-pinctrl-single/pinmux-pins

Это моя конфигурация dcan0, dcan1 выглядит примерно так же, используются только другие контакты:

&am33xx_pinmux {
    dcan0_pins_default: dcan0_pins_default {
        pinctrl-single,pins = <
            AM33XX_IOPAD(0x97c, PIN_INPUT | MUX_MODE2) /* (D17) uart1_rtsn.dcan0_rx */
            AM33XX_IOPAD(0x978, PIN_OUTPUT | MUX_MODE2) /* (D18) uart1_ctsn.dcan0_tx */
        >;
    };
};

&dcan0 {
    status = "okay";
    pinctrl-names = "default";
    pinctrl1-0 = <&dcan0_pins_default>;
};

После этого я добавил конфигурацию dcan0 и dca1 в am33xx.dtsi следующим образом:

+   d_can@481cc000 {
+            compatible = "bosch,d_can";
+            ti,hwmods = "d_can0";
+            reg = <0x481cc000 0x2000>;
+            interrupts = <0x34>;
+            status = "disabled";
+            linux,phandle = <0x2c>;
+            phandle = <0x2c>;
+        };
+ 
+        d_can@481d0000 {
+            compatible = "bosch,d_can";
+            ti,hwmods = "d_can1";
+            reg = <0x481d0000 0x2000>;
+            interrupts = <0x37>;
+            status = "disabled";
+            linux,phandle = <0x2d>;
+            phandle = <0x2d>;
+        };

Еще раз, банок нет. У кого-нибудь есть идея, почему она не работает? У меня мои уарты настроены одинаково, и все они работают.

1 Ответ

0 голосов
/ 31 марта 2020

Вы пытаетесь перегрузить свойства в &dcan0, который использует метод phandle. Вы можете сделать это, только если вы указали метку для устройства, описанного в дереве устройств. В am33xx.dtsi:

/ {
    can@f09237 {
        some-properties;
    };
};

Чтобы перегрузить или добавить свойства к вышеуказанному устройству, вам нужно сделать в другом DTS (I), который включает DTSI, следующее: В mycustom.dts:

/ {
    can@f09237 {
        some-other-properties;
    };
};

Вам необходимо соблюдать точный путь от /. Так что если у вас есть следующее: В am33xx.dtsi:

/ {
    bus@9908ab {
        can@f09237 {
            some-properties;
        };
    };
};

В mycustom.dtsi вы должны иметь:

/ {
    bus@9908ab {
        can@f09237 {
            some-other-properties;
        };
    };
};

Второй способ перегрузить / добавить свойства на устройство это использовать phandle с. Для этого вам понадобится метка: В am33xx.dtsi:

/ {
    can0: can@f09237 {
        some-properties;
    };
};

В mycustom.dts:

// Technically not needed but just to show it should be outside of this, the root of the DTS
/ {
};

&can0 {
    some-other-properties;
};

Если нет метки для вашего узла, а метки для родительского узел, такой как в следующем примере: В am33xx.dtsi:

/ {
    bus0: bus@9908ab {
        can@f09237 {
            some-properties;
        };
    };
};

В mycustom.dtsi вы можете сделать следующее (что в основном представляет собой сочетание методов phandle и path):

&bus0 {
    can@f09237 {
        some-other-properties;
    };
};

Я бы go лично применил метод phandle, так что его стало бы более читабельным и легче найти, где был определен исходный узел.

IIR C (не уверен на 100% об этом) вам не нужно добавлять phandle в am33xx.dtsi, вы можете добавить его в другом месте, но вам, очевидно, нужно соблюдать одно из приведенных выше решений для перегрузки узла дерева устройств. Например, с первым примером для am33xx.dtsi вы можете иметь в mycustom.dts (или отделить объявление метки в посреднике mycustom.dtsi):

/ {
    can0: can@f09237 {
    };
};

&can0 {
    some-other-properties;
};

В противном случае я очень удивлен, увидев linux,phandle и phandle в вашем Дереве устройств, которое довольно древнее и больше не используется в DTS (хотя на самом деле оно помещается туда DT C при компиляции DTS). Кроме того, я сомневаюсь, что linux,phandle является детерминированным c, он обычно создается на лету с помощью DT C, просто увеличивая число каждый раз, когда создается phandle.

...