Hi,
We have here Colibri imx6ull + custom carrier board in which trying run FlexCAN.
As described in the CAN (Linux) | Toradex Developer Center do the changes in the device tree.
After booting the image we got both CAN0 and CAN1 interface.
root@colibri-imx6ull-14797323:~# ifconfig -a
can0: flags=193<UP,RUNNING,NOARP> mtu 16 metric 1
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 37863 bytes 302904 (295.8 KiB)
RX errors 0 dropped 383 overruns 0 frame 0
TX packets 1 bytes 8 (8.0 B)
TX errors 0 dropped 1 overruns 0 carrier 1 collisions 0
device interrupt 25
can1: flags=128<NOARP> mtu 16 metric 1
unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 10 (UNSPEC)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
device interrupt 26
eth0: flags=-28605<UP,BROADCAST,RUNNING,MULTICAST,DYNAMIC> mtu 1500 metric 1
inet 192.168.4.51 netmask 255.255.0.0 broadcast 192.168.255.255
inet6 fe80::214:2dff:fee1:ca0b prefixlen 64 scopeid 0x20<link>
ether 00:14:2d:e1:ca:0b txqueuelen 1000 (Ethernet)
RX packets 49350 bytes 5638443 (5.3 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 96 bytes 12388 (12.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536 metric 1
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 86 bytes 6592 (6.4 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 86 bytes 6592 (6.4 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
mlan0: flags=4098<BROADCAST,MULTICAST> mtu 1500 metric 1
ether e8:fb:1c:aa:55:ef txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
uap0: flags=4098<BROADCAST,MULTICAST> mtu 1500 metric 1
ether e8:fb:1c:aa:57:ef txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
usb0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500 metric 1
ether 22:54:bc:81:71:63 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
root@colibri-imx6ull-14797323:~#
After setting up CAN0 and its bitrate, I can receive the messages, but once I send a message to the CAN bus, it goes in to bus-off state.
root@colibri-imx6ull-14797323:~# cangen can0 -v
can0 216#39.9B.BD.7B.2E.FD.3A[ 870.818114] flexcan 2090000.flexcan can0: bus-off
can0 07F#AF.FB.ED.2A
can0 4A5#87
can0 418#CE.96.71.3E.AC.9F.8E.64
can0 708#F1.98.78.10.F6.E9.1B.21
can0 450#08.3E.3A.77.2E.48.F4.6C
can0 7F4#8E.6B.19
^Croot@colibri-imx6ull-14797323:~# dmesg | grep flexcan
[ 11.293036] flexcan 2090000.flexcan: 2090000.flexcan supply xceiver not found, using dummy regulator
[ 11.481864] flexcan 2094000.flexcan: 2094000.flexcan supply xceiver not found, using dummy regulator
[ 53.348671] flexcan 2090000.flexcan can0: bus-off
[ 870.818114] flexcan 2090000.flexcan can0: bus-off
root@colibri-imx6ull-14797323:~# ip -details link show can0
3: can0: <NO-CARRIER,NOARP,UP,ECHO> mtu 16 qdisc pfifo_fast state DOWN mode DEFAULT group default qlen 10
link/can promiscuity 0 minmtu 0 maxmtu 0
can state BUS-OFF (berr-counter tx 0 rx 0) restart-ms 0
bitrate 500000 sample-point 0.866
tq 133 prop-seg 6 phase-seg1 6 phase-seg2 2 sjw 1
flexcan: tseg1 4..16 tseg2 2..8 sjw 1..4 brp 1..256 brp-inc 1
clock 30000000 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535
root@colibri-imx6ull-14797323:~#
Also, When I boot the same image using the NFS server on Colibri at that time, CAN is working fine even after sending a message on CAN bus remains active.
For more information about the version, I have added the output of /etc/os-release and /etc/issue.
root@colibri-imx6ull-14797323:~# cat /etc/os-release
ID=tdx-xwayland
NAME="TDX Wayland with XWayland"
VERSION="5.7.2-devel-20230526090406+build.0 (dunfell)"
VERSION_ID=5.7.2-devel-20230526090406-build.0
PRETTY_NAME="TDX Wayland with XWayland 5.7.2-devel-20230526090406+build.0 (dunfell)"
DISTRO_CODENAME="dunfell"
root@colibri-imx6ull-14797323:~# cat /etc/issue
TDX Wayland with XWayland 5.7.2-devel-20230526090406+build.0 (dunfell) \n \l
Colibri-iMX6ULL_Reference-Multimedia-Image
device tree diff :
diff --git a/arch/arm/boot/dts/imx6ul.dtsi b/arch/arm/boot/dts/imx6ul.dtsi
index 3a9985cb0dd9..7b6a9b96b34d 100644
--- a/arch/arm/boot/dts/imx6ul.dtsi
+++ b/arch/arm/boot/dts/imx6ul.dtsi
@@ -485,7 +485,7 @@
<&clks IMX6UL_CLK_CAN1_SERIAL>;
clock-names = "ipg", "per";
fsl,stop-mode = <&gpr 0x10 1 0x10 17>;
- status = "disabled";
+ status = "okay";
};
can2: flexcan@2094000 {
@@ -496,7 +496,7 @@
<&clks IMX6UL_CLK_CAN2_SERIAL>;
clock-names = "ipg", "per";
fsl,stop-mode = <&gpr 0x10 2 0x10 18>;
- status = "disabled";
+ status = "okay";
};
gpt1: gpt@2098000 {
diff --git a/arch/arm/boot/dts/imx6ull-colibri-eval-v3.dtsi b/arch/arm/boot/dts/imx6ull-colibri-eval-v3.dtsi
index 821523a12423..0d45324878fa 100644
--- a/arch/arm/boot/dts/imx6ull-colibri-eval-v3.dtsi
+++ b/arch/arm/boot/dts/imx6ull-colibri-eval-v3.dtsi
@@ -73,7 +73,7 @@
};
&ecspi1 {
- status = "okay";
+ status = "disabled";
mcp2515: can@0 {
compatible = "microchip,mcp2515";
@@ -86,7 +86,7 @@
spi-max-frequency = <10000000>;
vdd-supply = <®_3v3>;
xceiver-supply = <®_5v0>;
- status = "okay";
+ status = "disabled";
};
/* To keep the CAN controller enabled by default,
@@ -100,13 +100,13 @@
&can1 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan1>;
- status = "disabled";
+ status = "okay";
};
&can2 {
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_flexcan2>;
- status = "disabled";
+ status = "okay";
};
&i2c1 {
diff --git a/arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi b/arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi
index 237757d7df8b..0d5704176f27 100644
--- a/arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi
+++ b/arch/arm/boot/dts/imx6ull-colibri-wifi.dtsi
@@ -173,8 +173,11 @@
&iomuxc {
pinctrl-names = "default";
+#if 0
pinctrl-0 = <&pinctrl_gpio1 &pinctrl_gpio2 &pinctrl_gpio3
&pinctrl_gpio4 &pinctrl_gpio7>;
+#endif
+ pinctrl-0 = <&pinctrl_gpio1 &pinctrl_gpio2 &pinctrl_gpio4>;
};
diff --git a/arch/arm/boot/dts/imx6ull-colibri.dtsi b/arch/arm/boot/dts/imx6ull-colibri.dtsi
index 06d4270e4c13..2593165acdb2 100644
--- a/arch/arm/boot/dts/imx6ull-colibri.dtsi
+++ b/arch/arm/boot/dts/imx6ull-colibri.dtsi
@@ -369,8 +369,8 @@
pinctrl_flexcan1: flexcan1-grp {
fsl,pins = <
- MX6UL_PAD_ENET1_RX_DATA0__FLEXCAN1_TX 0x1b020
- MX6UL_PAD_ENET1_RX_DATA1__FLEXCAN1_RX 0x1b020
+ MX6UL_PAD_ENET1_RX_DATA0__FLEXCAN1_TX 0x1b0b0
+ MX6UL_PAD_ENET1_RX_DATA1__FLEXCAN1_RX 0x1b0b0
>;
};
Thanks,
Vishvas