MCP2518FD not working with JetPack 6.0 GA

Dear Nvidia Team

We flashed on our Orin NX custom carrier board JetPack 6.0 GA. Now we face an issue with the SPI-CAN Controller MCP2518FD. With older JetPack Versions, everything was working.
The controller is connected to the SPI0 interface of the Orin NX. We changed the device tree according to the new Documentation:

cat kernel/kernel-jammy-src_5.15/Documentation/devicetree/bindings/net/can/microchip,mcp251xfd.yaml
# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
%YAML 1.2
---
$id: http://devicetree.org/schemas/net/can/microchip,mcp251xfd.yaml#
$schema: http://devicetree.org/meta-schemas/core.yaml#

title:
  Microchip MCP2517FD and MCP2518FD stand-alone CAN controller device tree
  bindings

maintainers:
  - Marc Kleine-Budde <mkl@pengutronix.de>

properties:
  compatible:
    oneOf:
      - const: microchip,mcp2517fd
        description: for MCP2517FD
      - const: microchip,mcp2518fd
        description: for MCP2518FD
      - const: microchip,mcp251xfd
        description: to autodetect chip variant

  reg:
    maxItems: 1

  interrupts:
    maxItems: 1

  clocks:
    maxItems: 1

  vdd-supply:
    description: Regulator that powers the CAN controller.

  xceiver-supply:
    description: Regulator that powers the CAN transceiver.

  microchip,rx-int-gpios:
    description:
      GPIO phandle of GPIO connected to to INT1 pin of the MCP251XFD, which
      signals a pending RX interrupt.
    maxItems: 1

  spi-max-frequency:
    description:
      Must be half or less of "clocks" frequency.
    maximum: 20000000

required:
  - compatible
  - reg
  - interrupts
  - clocks

additionalProperties: false

examples:
  - |
    #include <dt-bindings/gpio/gpio.h>
    #include <dt-bindings/interrupt-controller/irq.h>

    spi0 {
        #address-cells = <1>;
        #size-cells = <0>;

        can@0 {
            compatible = "microchip,mcp251xfd";
            reg = <0>;
            clocks = <&can0_osc>;
            pinctrl-names = "default";
            pinctrl-0 = <&can0_pins>;
            spi-max-frequency = <20000000>;
            interrupts-extended = <&gpio 13 IRQ_TYPE_LEVEL_LOW>;
            microchip,rx-int-gpios = <&gpio 27 GPIO_ACTIVE_LOW>;
            vdd-supply = <&reg5v0>;
            xceiver-supply = <&reg5v0>;
        };
    };

We see in the log files, that the controller is successfully initialized:

[ 10.690021] mcp251xfd spi0.0 can1: MCP2518FD rev0.0 (-RX_INT -MAB_NO_WARN +CRC_REG +CRC_RX +CRC_TX +ECC -HD c:40.00MHz m:20.00MHz r:17.00MHz e:0.00MHz) successfully initialized.

After we activate the interface with:

ip link set can1 type can bitrate 1000000 restart-ms 1000

Receiving data with the interface works, however we are not able to send any messages. We tested it with cansend.
Any idea what could go wrong?
Let us know if you need further information.
Thank you.

Hi sevm89,

Please share the full dmesg for further check.

Do you mean that you can receive the CAN data but you can’t send CAN data?

Please also share the result of sudo ip -d -s link show can1 on your board.

Hi KevinFFF

Here is the full dmesg:
dmesg.txt (63.7 KB)

Yes we can receive the CAN data on this interface, but we are not able to send any CAN data.

ip -d -s link show can1
9: can1: <NOARP,UP,LOWER_UP,ECHO> mtu 16 qdisc pfifo_fast state UP mode DEFAULT group default qlen 10
link/can promiscuity 0 minmtu 0 maxmtu 0
can state ERROR-ACTIVE (berr-counter tx 0 rx 0) restart-ms 1000
bitrate 1000000 sample-point 0.750
tq 25 prop-seg 14 phase-seg1 15 phase-seg2 10 sjw 1
mcp251xfd: tseg1 2…256 tseg2 1…128 sjw 1…128 brp 1…256 brp-inc 1
mcp251xfd: dtseg1 1…32 dtseg2 1…16 dsjw 1…16 dbrp 1…256 dbrp-inc 1
clock 40000000
re-started bus-errors arbit-lost error-warn error-pass bus-off
0 0 0 0 0 0 numtxqueues 1 numrxqueues 1 gso_max_size 65536 gso_max_segs 65535 parentbus spi parentdev spi0.0
RX: bytes packets errors dropped missed mcast
8000 1000 0 0 0 0
TX: bytes packets errors dropped carrier collsns
0 0 0 0 0 0

Thank you.

I can’t find the errors in your dmesg and also the result of can interface.

Is there any errors when you run cangen can1?
You can also measure the waveform when you send CAN packet.