LAN969x MCAN
1. SoC Resources
LAN969x SoC supports two instances of CAN-FD (Control Area Network with Flexible Data-Rate) which is compliant with CAN 2.0 Part A and 2.0 Part B.
2. Kernel configurations
Following kernel config options should be enabled to use LAN969x MCAN:
-
CONFIG_CAN- CAN driver config option. -
CONFIG_CAN_M_CAN- Bosch MCAN config option. -
CONFIG_CAN_M_CAN_PLATFORM- Bosch M_CAN support for io-mapped devices.
3. Devicetree Configuration
To enable MCAN interface, following configurations are required in device tree:
-
compatiblestring must be set tobosch,m_can. -
regproperty must be set to<0xe081c000 0xfc>and<0x00100000 0x4000>for mcan0, and<0xe0820000 0xfc>and<0x00100000 0x8000>for mcan1. -
reg-namesmust be set tom_canandmessage_ram. -
interruptsproperty must be set with interrupt details as show in the table:
| MCAN ID | Shared Peripheral Interrupt (int0) | CPU INTR (int0) | Shared Peripheral Interrupt (int1) | CPU INTR (int1) |
|---|---|---|---|---|
mcan0 |
102 |
70 |
103 |
71 |
mcan1 |
104 |
72 |
105 |
73 |
- Note
-
Shared peripheral interrupt lines start at index ID32. So, CPU INTR must be calculated as [Shared peripheral interrupt number - 32].
-
interrupt-namesmust be set toint0andint1. -
clocksproperty must be set to<&clks GCK_ID_MCANx>, <&clks GCK_ID_MCANx>, wherexis MCAN ID (0-1). -
clock-namesmust be set tohclkandcclk. -
bosch,mram-cfgproperty must be set to<0x0 0 0 64 0 0 32 32>for mcan0 and -
standby-gpiosproperty is optional and defines a regular GPIO line that is used to mute the transmitter and block the receiver if the line is high.
-
3.2. Example
Following example shows how a CAN controller should be defined in DT:
dtsi file:
can0: can@e081c000 {
compatible = "bosch,m_can";
reg = <0xe081c000 0xfc>, <0x00100000 0x4000>;
reg-names = "m_can", "message_ram";
interrupts = <GIC_SPI 70 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 71 IRQ_TYPE_LEVEL_HIGH>;
interrupt-names = "int0", "int1";
clocks = <&clks GCK_ID_MCAN0>, <&clks GCK_ID_MCAN0>;
clock-names = "hclk", "cclk";
assigned-clocks = <&clks GCK_ID_MCAN0>;
assigned-clock-rates = <40000000>;
bosch,mram-cfg = <0x0 0 0 64 0 0 32 32>;
status = "disabled";
};
dts file changes:
&can0 {
pinctrl-0 = <&can0_b_pins>;
pinctrl-names = "default";
standby-gpios = <&gpio 54 GPIO_ACTIVE_HIGH>;
status = "okay";
};
| The standby-gpios shown above is just an example and must match the actual board design. |
The EVB-LAN9696-24port EVB does not have any CAN devices, so please refer to the LAN966x MCAN page for more details.