Hello,
I want to drive two separate Holt hi3111 spi can controller integrated from the ecspi1 and ecspi2 interfaces of the imx8mp module. The integrated device I installed via ecspi1 works successfully. But I get an error during boot for the integrated device I use via ecspi2.
hi311x spi2.0: Cannot initialize HI3110. Wrong wiring?
hi311x spi2.0: Probe failed, err=19
I am sharing my patch file containing my device-tree changes below. Can you help with the problem?
---
.../boot/dts/freescale/imx8mp-verdin-dev.dtsi | 7 +-
.../dts/freescale/imx8mp-verdin-nonwifi.dtsi | 3 +-
.../dts/freescale/imx8mp-verdin-wifi.dtsi | 14 ----
.../boot/dts/freescale/imx8mp-verdin.dtsi | 80 ++++++++++++-------
arch/arm64/boot/dts/freescale/imx8mp.dtsi | 6 +-
arch/arm64/configs/toradex_defconfig | 5 +-
drivers/net/can/spi/Kconfig | 1 +
7 files changed, 64 insertions(+), 52 deletions(-)
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
index e6efe3a11e756..f2cb4a32b03b1 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-dev.dtsi
@@ -61,6 +61,11 @@
status = "okay";
};
+/* Verdin SPI_2 */
+&ecspi2 {
+ status = "okay";
+};
+
/* EEPROM on display adapter boards */
&eeprom_display_adapter {
status = "okay";
@@ -118,7 +123,7 @@
/* Verdin I2C_1 */
&i2c4 {
- status = "okay";
+ status = "disabled";
/* Audio Codec */
nau8822_1a: codec-nau@1a {
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-nonwifi.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-nonwifi.dtsi
index a484b4988ddab..4ddcbccb5d57b 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-nonwifi.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-nonwifi.dtsi
@@ -40,8 +40,7 @@
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio1>, <&pinctrl_gpio2>,
<&pinctrl_gpio3>, <&pinctrl_gpio4>,
- <&pinctrl_gpio7>, <&pinctrl_gpio8>,
- <&pinctrl_gpio_hog1>, <&pinctrl_gpio_hog2>, <&pinctrl_gpio_hog3>,
+ <&pinctrl_gpio_hog2>, <&pinctrl_gpio_hog3>,
<&pinctrl_hdmi_hog>;
};
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin-wifi.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin-wifi.dtsi
index 4013ed48df33a..0c5a9466bcd63 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin-wifi.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin-wifi.dtsi
@@ -54,24 +54,10 @@
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_gpio1>, <&pinctrl_gpio2>,
<&pinctrl_gpio3>, <&pinctrl_gpio4>,
- <&pinctrl_gpio7>, <&pinctrl_gpio8>,
<&pinctrl_gpio_hog2>, <&pinctrl_gpio_hog3>, <&pinctrl_gpio_hog4>,
<&pinctrl_hdmi_hog>;
};
-/* On-module Bluetooth */
-&uart4 {
- uart-has-rtscts;
- pinctrl-names = "default";
- pinctrl-0 = <&pinctrl_bt_uart>;
- status = "okay";
-
- bluetooth {
- compatible = "mrvl,88w8997";
- max-speed = <921600>;
- };
-};
-
/* On-module Wi-Fi */
&usdhc1 {
bus-width = <4>;
diff --git a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
index ead0c747532a9..e2c0227891654 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp-verdin.dtsi
@@ -20,6 +20,13 @@
rtc1 = &snvs_rtc;
};
+ /* Fixed clock dedicated to SPI CAN controller */
+ clk16m: oscillator {
+ compatible = "fixed-clock";
+ #clock-cells = <0>;
+ clock-frequency = <16000000>;
+ };
+
backlight: backlight {
compatible = "pwm-backlight";
brightness-levels = <0 45 63 88 119 158 203 255>;
@@ -244,8 +251,37 @@
cs-gpios = <&gpio5 9 GPIO_ACTIVE_LOW>;
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_ecspi1>;
+
+ can2: can@0 {
+ compatible = "holt,hi3110";
+ reg = <0>;
+ clocks = <&clk16m>;
+ interrupt-parent = <&gpio4>;
+ interrupts = <3 IRQ_TYPE_LEVEL_HIGH>;
+ spi-max-frequency = <16000000>;
+ status = "okay";
+ };
};
+
+/* Verdin SPI_2 */
+&ecspi2 {
+ #address-cells = <1>;
+ #size-cells = <0>;
+ cs-gpios = <&gpio5 21 GPIO_ACTIVE_LOW>;
+ pinctrl-names = "default";
+ pinctrl-0 = <&pinctrl_ecspi2>;
+
+ can3: can@0 {
+ compatible = "holt,hi3110";
+ reg = <0>;
+ clocks = <&clk16m>;
+ interrupt-parent = <&gpio4>;
+ interrupts = <1 IRQ_TYPE_LEVEL_HIGH>;
+ spi-max-frequency = <16000000>;
+ status = "okay"; };
+ };
+
/* Verdin ETH_1 (On-module PHY) */
&eqos {
phy-handle = <ðphy0>;
@@ -1018,13 +1054,6 @@
};
&iomuxc {
- pinctrl_bt_uart: btuartgrp {
- fsl,pins =
- <MX8MP_IOMUXC_ECSPI2_MISO__UART4_DCE_CTS 0x1c4>,
- <MX8MP_IOMUXC_ECSPI2_MOSI__UART4_DCE_TX 0x1c4>,
- <MX8MP_IOMUXC_ECSPI2_SCLK__UART4_DCE_RX 0x1c4>,
- <MX8MP_IOMUXC_ECSPI2_SS0__UART4_DCE_RTS 0x1c4>;
- };
pinctrl_ctrl_sleep_moci: ctrlsleepmocigrp {
fsl,pins =
@@ -1036,7 +1065,17 @@
<MX8MP_IOMUXC_ECSPI1_MISO__ECSPI1_MISO 0x1c4>, /* SODIMM 198 */
<MX8MP_IOMUXC_ECSPI1_MOSI__ECSPI1_MOSI 0x4>, /* SODIMM 200 */
<MX8MP_IOMUXC_ECSPI1_SCLK__ECSPI1_SCLK 0x4>, /* SODIMM 196 */
- <MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x1c4>; /* SODIMM 202 */
+ <MX8MP_IOMUXC_ECSPI1_SS0__GPIO5_IO09 0x1c4>, /* SODIMM 202 */
+ <MX8MP_IOMUXC_SAI1_RXD1__GPIO4_IO03 0x1c4>; /* SODIMM 220 */
+ };
+
+ pinctrl_ecspi2: ecspi2grp {
+ fsl,pins =
+ <MX8MP_IOMUXC_ECSPI2_MISO__ECSPI2_MISO 0x1c4>, /* SODIMM 116 */
+ <MX8MP_IOMUXC_ECSPI2_MOSI__ECSPI2_MOSI 0x4>, /* SODIMM 152 */
+ <MX8MP_IOMUXC_ECSPI2_SCLK__ECSPI2_SCLK 0x4>, /* SODIMM 164 */
+ <MX8MP_IOMUXC_I2C4_SDA__GPIO5_IO21 0x1c4>, /* SODIMM 12 */
+ <MX8MP_IOMUXC_SAI1_RXC__GPIO4_IO01 0x1c4>; /* SODIMM 222 */
};
/* Connection On Board PHY */
@@ -1157,16 +1196,6 @@
<MX8MP_IOMUXC_GPIO1_IO08__GPIO1_IO08 0x184>; /* SODIMM 218 */
};
- pinctrl_gpio7: gpio7grp {
- fsl,pins =
- <MX8MP_IOMUXC_SAI1_RXD1__GPIO4_IO03 0x184>; /* SODIMM 220 */
- };
-
- pinctrl_gpio8: gpio8grp {
- fsl,pins =
- <MX8MP_IOMUXC_SAI1_RXC__GPIO4_IO01 0x184>; /* SODIMM 222 */
- };
-
/* Verdin GPIO_9_DSI (pulled-up as active-low) */
pinctrl_gpio_9_dsi: gpio9dsigrp {
fsl,pins =
@@ -1179,15 +1208,6 @@
<MX8MP_IOMUXC_SAI3_RXFS__GPIO4_IO28 0x1c4>; /* SODIMM 21 */
};
- /* Non-wifi MSP usage only */
- pinctrl_gpio_hog1: gpiohog1grp {
- fsl,pins =
- <MX8MP_IOMUXC_ECSPI2_MISO__GPIO5_IO12 0x1c4>, /* SODIMM 116 */
- <MX8MP_IOMUXC_ECSPI2_MOSI__GPIO5_IO11 0x1c4>, /* SODIMM 152 */
- <MX8MP_IOMUXC_ECSPI2_SCLK__GPIO5_IO10 0x1c4>, /* SODIMM 164 */
- <MX8MP_IOMUXC_ECSPI2_SS0__GPIO5_IO13 0x1c4>; /* SODIMM 128 */
- };
-
/* USB_2_OC# */
pinctrl_gpio_hog2: gpiohog2grp {
fsl,pins =
@@ -1262,14 +1282,12 @@
/* Verdin I2C_1 */
pinctrl_i2c4: i2c4grp {
fsl,pins =
- <MX8MP_IOMUXC_I2C4_SCL__I2C4_SCL 0x400001c6>, /* SODIMM 14 */
- <MX8MP_IOMUXC_I2C4_SDA__I2C4_SDA 0x400001c6>; /* SODIMM 12 */
+ <MX8MP_IOMUXC_I2C4_SCL__I2C4_SCL 0x400001c6>; /* SODIMM 14 */
};
pinctrl_i2c4_gpio: i2c4gpiogrp {
fsl,pins =
- <MX8MP_IOMUXC_I2C4_SCL__GPIO5_IO20 0x400001c6>, /* SODIMM 14 */
- <MX8MP_IOMUXC_I2C4_SDA__GPIO5_IO21 0x400001c6>; /* SODIMM 12 */
+ <MX8MP_IOMUXC_I2C4_SCL__GPIO5_IO20 0x400001c6>; /* SODIMM 14 */
};
/* Verdin I2S_2_BCLK (TOUCH_RESET#) */
diff --git a/arch/arm64/boot/dts/freescale/imx8mp.dtsi b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
index 0adef60267ffc..527125e5aa863 100644
--- a/arch/arm64/boot/dts/freescale/imx8mp.dtsi
+++ b/arch/arm64/boot/dts/freescale/imx8mp.dtsi
@@ -39,6 +39,8 @@
serial2 = &uart3;
serial3 = &uart4;
spi0 = &flexspi;
+ spi1 = &ecspi1;
+ spi2 = &ecspi2;
isi0 = &isi_0;
isi1 = &isi_1;
csi0 = &mipi_csi_0;
@@ -915,7 +917,7 @@
assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_800M>;
dmas = <&sdma1 0 7 1>, <&sdma1 1 7 2>;
dma-names = "rx", "tx";
- status = "disabled";
+ status = "okay";
};
ecspi2: spi@30830000 {
@@ -932,7 +934,7 @@
assigned-clock-parents = <&clk IMX8MP_SYS_PLL1_800M>;
dmas = <&sdma1 2 7 1>, <&sdma1 3 7 2>;
dma-names = "rx", "tx";
- status = "disabled";
+ status = "okay";
};
ecspi3: spi@30840000 {