Mttcan Probe Failed: unable to set CAN_CLK parent after upgrade to JetPack 4.4

Hello folks,

Previously, we followed instructions on this guide and successfully enabled the two can buses on our custom Jetson Xavier carrier board in JetPack 4.3 and JetPack 4.4 DP.

However, when we upgrade to JetPack 4.4, we cannot “modprobe mttcan” successfully. The error message in dmesg is

[ 578.264270] mttcan c310000.mttcan: unable to set CAN_CLK parent
[ 578.280785] mttcan c310000.mttcan: probe failed

We do appreciate for your any possible solutions or related experience.

Thanks!

Hi kaichu,
Did you make any changes in kernel?
Please also share the contents of device-tree mttcan node.
cat /proc/device-tree/mttcan@c310000/pll_source
xxd /proc/device-tree/mttcan@c310000/clocks

Thanks,
Shubhi

Hello Shubhi,

Thanks for your reply and clues.

We didn’t changed the kernel. But, we brought the device tree from JetPack 4.4 DP to JetPack 4.4 directly.

Here are the related information:

Device Tree
mttcan@c310000 {
compatible = “nvidia,tegra194-mttcan”;
reg = <0x0 0xc310000 0x0 0x400 0x0 0xc311000 0x0 0x32 0x0 0xc312000 0x0 0x1000>;
reg-names = “can-regs”, “glue-regs”, “msg-ram”;
interrupts = <0x0 0x28 0x4>;
pll_source = “pllaon”;
clocks = <0x4 0x11c 0x4 0xa 0x4 0x9 0x4 0x5e>;
clock-names = “can_core”, “can_host”, “can”, “pllaon”;
resets = <0x5 0x4>;
reset-names = “can”;
mram-params = <0x0 0x10 0x10 0x20 0x0 0x0 0x10 0x10 0x10>;
tx-config = <0x0 0x10 0x0 0x40>;
rx-config = <0x40 0x40 0x40>;
status = “okay”;
linux,phandle = <0x17c>;
phandle = <0x17c>;
};

cat /proc/device-tree/mttcan@c310000/pll_source
pllaon

xxd /proc/device-tree/mttcan@c310000/clocks
00000000: 0000 0004 0000 011c 0000 0004 0000 000a …
00000010: 0000 0004 0000 0009 0000 0004 0000 005e …^

Thanks,
Kaichu

Hi,
In DT, it is changed to osc clock. Now, it is no more using pllaon to save power.
It should have reflected in J4.4, I am not sure in your case, why it is still pllaon.
Please change it to pll_c in device-tree.
pll_source = “pllc”;
clocks = <0x4 0x11c 0x4 0xa 0x4 0x9 0x4 0x13a>;
clock-names = “can_core”, “can_host”, “can”, “pllc”;

Thanks,
Shubhi

Hello Shgarg.

Thanks for your clues. We have solved the solutions by updating the pll_source.

The reason we used “pllaon” instead of “pllc” as pll_sources is that we took the device tree in JetPack 4.4 DP to JetPack 4.4 directly. For future JetPack version update, we will do a carefully dts comparsion.

Thanks,
Kaichu