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
-
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
-
Modify CAN clock,
clock@can1 {
allow_fractional_divider = <0x1>;
- allowed-parents = <0x121 0x5b 0x13a>;
+ allowed-parents = <0x121 0x5b 0x13a 0x5e>;
clk-id = <0x9>;
};
-
Repack dtb file
$ dtc -I dts -O dtb tegra194-a02-bpmp-p3668-a00.dts > tegra194-a02-bpmp-p3668-a00.dtb
-
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.
$ sudo touch /etc/rc.local; sudo chmod +x /etc/rc.local
- 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