Device tree updation

hello aravind.m90,

you may change BPMP device tree, modify kernel and also kernel device tree.
for your reference, please check below for the steps.


Step-1. Change BPMP device tree

  1. Unpack dtb file
    cd $TOP/Linux_for_Tegra/bootloader/t186ref
    $ dtc -I dtb -O dts tegra194-a02-bpmp-p3668-a00.dtb > tegra194-a02-bpmp-p3668-a00.dts

  2. Modify CAN clock,

         clock@can1 {
             allow_fractional_divider = <0x1>;
        -    allowed-parents = <0x121 0x5b 0x13a>;
        +    allowed-parents = <0x121 0x5b 0x13a 0x5e>;
             clk-id = <0x9>;
         };
  1. Repack dtb file
    $ dtc -I dts -O dtb tegra194-a02-bpmp-p3668-a00.dts > tegra194-a02-bpmp-p3668-a00.dtb

  2. Re-flash bpmp-fw-dtb partition
    $ sudo ./flash.sh -k bpmp-fw-dtb jetson-xavier-nx-devkit mmcblk0p1

Step-2. Modify kernel and kernel device tree.

diff --git a/hardware/nvidia/platform/t19x/jakku/kernel-dts/tegra194-p3668-all-p3509-0000.dts b/hardware/nvidia/platform/t19x/jakku/kernel-dts/tegra194-p3668-all-p3509-0000.dts
index b724f6279..707b5b1d3 100644
--- a/hardware/nvidia/platform/t19x/jakku/kernel-dts/tegra194-p3668-all-p3509-0000.dts
+++ b/hardware/nvidia/platform/t19x/jakku/kernel-dts/tegra194-p3668-all-p3509-0000.dts
@@ -22,4 +22,17 @@
        nvidia,dtbbuildtime = __DATE__, __TIME__;
 
        compatible = "nvidia,p3449-0000+p3668-0000", "nvidia,p3449-0000+p3668-0001", "nvidia,p3509-0000+p3668-0000", "nvidia,p3509-0000+p3668-0001", "nvidia,tegra194";
+
+       clocks-init {
+               /delete-node/ disable;
+       };
+
+       mttcan@c310000 {
+               pll_source = "pllaon";
+               clock-names = "can_core", "can_host", "can", "pllaon";
+               clocks = <&bpmp_clks TEGRA194_CLK_CAN1_CORE>,
+                                       <&bpmp_clks TEGRA194_CLK_CAN1_HOST>,
+                                       <&bpmp_clks TEGRA194_CLK_CAN1>,
+                                       <&bpmp_clks TEGRA194_CLK_PLLAON>;
+       };
 };
diff --git a/kernel/kernel-4.9/arch/arm64/configs/tegra_defconfig b/kernel/kernel-4.9/arch/arm64/configs/tegra_defconfig
index 0fa3a1c86..9fe665e7d 100644
--- a/kernel/kernel-4.9/arch/arm64/configs/tegra_defconfig
+++ b/kernel/kernel-4.9/arch/arm64/configs/tegra_defconfig
@@ -227,8 +227,10 @@ CONFIG_DNS_RESOLVER=y
 CONFIG_NET_L3_MASTER_DEV=y
 CONFIG_CGROUP_NET_PRIO=y
 CONFIG_BPF_JIT=y
-CONFIG_CAN=m
+CONFIG_CAN=y
 CONFIG_CAN_VCAN=m
+CONFIG_CAN_RAW=y
+CONFIG_CAN_DEV=y
 CONFIG_CAN_SLCAN=m
 CONFIG_CAN_C_CAN=m
 CONFIG_CAN_CC770=m
@@ -249,7 +251,7 @@ CONFIG_CAN_GS_USB=m
 CONFIG_CAN_KVASER_USB=m
 CONFIG_CAN_PEAK_USB=m
 CONFIG_CAN_8DEV_USB=m
-CONFIG_MTTCAN=m
+CONFIG_MTTCAN=y
 CONFIG_IRDA=m
 CONFIG_BT=y
 CONFIG_BT_RFCOMM=y

Step-3. there are several ways to trigger a auto boot up task. here’s one for your reference.

  1. $ sudo touch /etc/rc.local; sudo chmod +x /etc/rc.local
  2. Edit rc.local file as follow.
#!/bin/bash -e

ifconfig can0 down
ip link set can0 up type can bitrate 1000000

exit 0

you may also refer to external wiki page to describes how to enable and verify CAN in Linux on Jetson AGX Xavier.
for example, Jetson/AGX Xavier CAN - eLinux.org
thanks