| /* |
| * Copyright 2023 NXP |
| * |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| |
| /dts-v1/; |
| #include <arm/nxp/nxp_s32k344_m7.dtsi> |
| #include <dt-bindings/gpio/gpio.h> |
| #include <zephyr/dt-bindings/input/input-event-codes.h> |
| #include <freq.h> |
| #include <dt-bindings/pwm/pwm.h> |
| #include "mr_canhubk3-pinctrl.dtsi" |
| #include <zephyr/dt-bindings/sensor/qdec_nxp_s32.h> |
| |
| / { |
| model = "NXP MR-CANHUBK3"; |
| compatible = "nxp,mr_canhubk3"; |
| |
| chosen { |
| zephyr,sram = &sram0_1; |
| zephyr,flash = &flash0; |
| zephyr,itcm = &itcm; |
| zephyr,dtcm = &dtcm; |
| zephyr,code-partition = &code_partition; |
| zephyr,console = &lpuart2; |
| zephyr,shell-uart = &lpuart2; |
| zephyr,flash-controller = &mx25l6433f; |
| zephyr,canbus = &flexcan0; |
| zephyr,display = &ssd1306; |
| }; |
| |
| aliases { |
| dma0 = &edma0; |
| led0 = &user_led1_red; |
| led1 = &user_led1_green; |
| led2 = &user_led1_blue; |
| sw0 = &user_button_1; |
| sw1 = &user_button_2; |
| watchdog0 = &fs26_wdt; |
| /* For pwm test suites */ |
| pwm-0 = &emios0_pwm; |
| red-pwm-led = &user_led1_red_pwm; |
| green-pwm-led = &user_led1_green_pwm; |
| blue-pwm-led = &user_led1_blue_pwm; |
| pwm-led0 = &user_led1_blue_pwm; |
| qdec0 = &qdec0; |
| }; |
| |
| leds { |
| compatible = "gpio-leds"; |
| user_led1_green: user_led1_green { |
| gpios = <&gpioa_h 11 GPIO_ACTIVE_LOW>; |
| label = "User RGB LED1 GREEN"; |
| }; |
| user_led1_blue: user_led1_blue { |
| gpios = <&gpioe_l 12 GPIO_ACTIVE_LOW>; |
| label = "User RGB LED1 BLUE"; |
| }; |
| user_led1_red: user_led1_red { |
| gpios = <&gpioe_l 14 GPIO_ACTIVE_LOW>; |
| label = "User RGB LED1 RED"; |
| }; |
| can_led0: can_led0 { |
| gpios = <&gpioc_h 2 GPIO_ACTIVE_LOW>; |
| label = "CAN LED0"; |
| }; |
| can_led1: can_led1 { |
| gpios = <&gpioe_l 5 GPIO_ACTIVE_LOW>; |
| label = "CAN LED1"; |
| }; |
| can_led2: can_led2 { |
| gpios = <&gpiod_h 4 GPIO_ACTIVE_LOW>; |
| label = "CAN LED2"; |
| }; |
| can_led3: can_led3 { |
| gpios = <&gpiob_h 8 GPIO_ACTIVE_LOW>; |
| label = "CAN LED3"; |
| }; |
| can_led4: can_led4 { |
| gpios = <&gpiob_h 10 GPIO_ACTIVE_LOW>; |
| label = "CAN LED4"; |
| }; |
| can_led5: can_led5 { |
| gpios = <&gpiod_h 15 GPIO_ACTIVE_LOW>; |
| label = "CAN LED5"; |
| }; |
| }; |
| |
| /* gpio-leds and pwm-leds are the same RGB LED and cannot be used at the same time. */ |
| pwmleds { |
| compatible = "pwm-leds"; |
| |
| user_led1_blue_pwm: user_led1_blue { |
| pwms = <&emios1_pwm 5 PWM_MSEC(20) PWM_POLARITY_INVERTED>; |
| }; |
| |
| user_led1_green_pwm: user_led1_green { |
| pwms = <&emios1_pwm 10 PWM_MSEC(20) PWM_POLARITY_INVERTED>; |
| }; |
| |
| user_led1_red_pwm: user_led1_red { |
| pwms = <&emios0_pwm 19 PWM_MSEC(20) PWM_POLARITY_INVERTED>; |
| }; |
| }; |
| |
| qdec0: qdec0 { |
| compatible = "nxp,qdec-s32"; |
| pinctrl-0 = <&qdec_s32>; |
| pinctrl-names = "default"; |
| micro-ticks-per-rev = <685440000>; |
| status = "okay"; |
| trgmux = <&trgmux>; |
| trgmux-io-config = |
| <0 TRGMUX_IP_OUTPUT_EMIOS0_CH5_9_IPP_IND_CH6 TRGMUX_IP_INPUT_LCU1_LC0_OUT_I2>, |
| <1 TRGMUX_IP_OUTPUT_EMIOS0_CH5_9_IPP_IND_CH7 TRGMUX_IP_INPUT_LCU1_LC0_OUT_I3>, |
| <2 TRGMUX_IP_OUTPUT_LCU1_0_INP_I0 TRGMUX_IP_INPUT_SIUL2_IN2>, |
| <3 TRGMUX_IP_OUTPUT_LCU1_0_INP_I1 TRGMUX_IP_INPUT_SIUL2_IN3>; |
| lcu = <&lcu1>; |
| lcu-input-idx = |
| <LCU_IP_IN_0 LCU_IP_IN_1 |
| LCU_IP_IN_2 LCU_IP_IN_3>; |
| lcu-mux-sel = |
| <LCU_IP_MUX_SEL_LU_IN_0 LCU_IP_MUX_SEL_LU_IN_1 |
| LCU_IP_MUX_SEL_LU_OUT_0 LCU_IP_MUX_SEL_LU_OUT_1>; |
| lcu-output-filter-config = |
| /* LCU Out HW ID, Rise Filter, Fall Filter */ |
| <0 5 5>, /* LCU O0 */ |
| <1 5 5>, /* LCU O1 */ |
| <2 2 2>, /* LCU O2 */ |
| <3 2 2>; /* LCU O3 */ |
| emios = <&emios0>; |
| /* |
| * eMios channel numbers for qdec should be beyond the channel numbers |
| * used by the emios pwm |
| */ |
| emios-channels = <6 7>; |
| }; |
| |
| gpio_keys { |
| compatible = "gpio-keys"; |
| user_button_1: button_0 { |
| label = "User SW1"; |
| gpios = <&gpiod_l 15 GPIO_ACTIVE_HIGH>; |
| zephyr,code = <INPUT_KEY_0>; |
| }; |
| user_button_2: button_1 { |
| label = "User SW2"; |
| gpios = <&gpioa_h 9 GPIO_ACTIVE_HIGH>; |
| zephyr,code = <INPUT_KEY_1>; |
| }; |
| }; |
| |
| can_phy0: can-phy0 { |
| compatible = "nxp,tja1443", "can-transceiver-gpio"; |
| enable-gpios = <&gpioc_h 8 GPIO_ACTIVE_HIGH>; |
| standby-gpios = <&gpioc_h 5 GPIO_ACTIVE_LOW>; |
| max-bitrate = <5000000>; |
| #phy-cells = <0>; |
| }; |
| |
| can_phy1: can-phy1 { |
| compatible = "nxp,tja1443", "can-transceiver-gpio"; |
| enable-gpios = <&gpiod_l 2 GPIO_ACTIVE_HIGH>; |
| standby-gpios = <&gpiod_h 7 GPIO_ACTIVE_LOW>; |
| max-bitrate = <5000000>; |
| #phy-cells = <0>; |
| }; |
| |
| can_phy2: can-phy2 { |
| compatible = "nxp,tja1463", "can-transceiver-gpio"; |
| enable-gpios = <&gpiod_l 4 GPIO_ACTIVE_HIGH>; |
| standby-gpios = <&gpiod_h 6 GPIO_ACTIVE_LOW>; |
| max-bitrate = <8000000>; |
| #phy-cells = <0>; |
| }; |
| |
| can_phy3: can-phy3 { |
| compatible = "nxp,tja1463", "can-transceiver-gpio"; |
| enable-gpios = <&gpiob_l 0 GPIO_ACTIVE_HIGH>; |
| standby-gpios = <&gpiob_l 1 GPIO_ACTIVE_LOW>; |
| max-bitrate = <8000000>; |
| #phy-cells = <0>; |
| }; |
| |
| can_phy4: can-phy4 { |
| compatible = "nxp,tja1153", "can-transceiver-gpio"; |
| enable-gpios = <&gpioc_h 10 GPIO_ACTIVE_HIGH>; |
| standby-gpios = <&gpioc_h 9 GPIO_ACTIVE_LOW>; |
| max-bitrate = <2000000>; |
| #phy-cells = <0>; |
| }; |
| |
| can_phy5: can-phy5 { |
| compatible = "nxp,tja1153", "can-transceiver-gpio"; |
| enable-gpios = <&gpioe_h 1 GPIO_ACTIVE_HIGH>; |
| standby-gpios = <&gpiod_h 14 GPIO_ACTIVE_LOW>; |
| max-bitrate = <2000000>; |
| #phy-cells = <0>; |
| }; |
| }; |
| |
| &flash0 { |
| partitions { |
| compatible = "fixed-partitions"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| |
| ivt_header: partition@0 { |
| label = "ivt-header"; |
| reg = <0x00000000 0x100>; |
| }; |
| |
| code_partition: partition@100 { |
| label = "code-partition"; |
| reg = <0x00000100 (DT_SIZE_K(4048) - 0x100)>; |
| }; |
| }; |
| }; |
| |
| &gpioa_h { |
| status = "okay"; |
| }; |
| |
| &gpioe_l { |
| status = "okay"; |
| }; |
| |
| /* Enable gpio to control the CAN transceivers and LEDs */ |
| |
| &gpiob_h { |
| status = "okay"; |
| }; |
| |
| &gpioc_h { |
| status = "okay"; |
| }; |
| |
| &gpiod_l { |
| status = "okay"; |
| }; |
| |
| &gpiod_h { |
| status = "okay"; |
| }; |
| |
| &gpiob_l { |
| status = "okay"; |
| }; |
| |
| &gpioe_h { |
| status = "okay"; |
| }; |
| |
| &eirq0 { |
| pinctrl-0 = <&eirq0_default>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| }; |
| |
| &lpuart0 { |
| pinctrl-0 = <&lpuart0_default>; |
| pinctrl-names = "default"; |
| dmas = <&edma0 0 37>, <&edma0 1 38>; |
| dma-names = "tx", "rx"; |
| }; |
| |
| &lpuart1 { |
| pinctrl-0 = <&lpuart1_default>; |
| pinctrl-names = "default"; |
| dmas = <&edma0 2 39>, <&edma0 3 40>; |
| dma-names = "tx", "rx"; |
| }; |
| |
| &lpuart2 { |
| pinctrl-0 = <&lpuart2_default>; |
| pinctrl-names = "default"; |
| current-speed = <115200>; |
| dmas = <&edma0 16 38>, <&edma0 17 39>; |
| dma-names = "tx", "rx"; |
| status = "okay"; |
| }; |
| |
| &lpuart9 { |
| pinctrl-0 = <&lpuart9_default>; |
| pinctrl-names = "default"; |
| /* |
| * LPUART 1 and 9 share the same DMA source for TX |
| * and RX, using UART async API for both instances |
| * should be careful. |
| */ |
| dmas = <&edma0 4 39>, <&edma0 5 40>; |
| dma-names = "tx", "rx"; |
| }; |
| |
| &lpuart10 { |
| pinctrl-0 = <&lpuart10_default>; |
| pinctrl-names = "default"; |
| /* |
| * LPUART 2 and 10 share the same DMA source for TX |
| * and RX, using UART async API for both instances |
| * should be careful. |
| */ |
| dmas = <&edma0 18 38>, <&edma0 19 39>; |
| dma-names = "tx", "rx"; |
| }; |
| |
| &lpuart13 { |
| pinctrl-0 = <&lpuart13_default>; |
| pinctrl-names = "default"; |
| dmas = <&edma0 20 44>, <&edma0 21 45>; |
| dma-names = "tx", "rx"; |
| }; |
| |
| &lpuart14 { |
| pinctrl-0 = <&lpuart14_default>; |
| pinctrl-names = "default"; |
| dmas = <&edma0 22 46>, <&edma0 23 47>; |
| dma-names = "tx", "rx"; |
| }; |
| |
| &qspi0 { |
| pinctrl-0 = <&qspi0_default>; |
| pinctrl-names = "default"; |
| data-rate = "SDR"; |
| a-rx-clock-source = "LOOPBACK"; |
| a-dll-mode = "BYPASSED"; |
| ahb-buffers-masters = <0 1 2 3>; |
| ahb-buffers-sizes = <0 0 0 256>; |
| ahb-buffers-all-masters; |
| status = "okay"; |
| |
| mx25l6433f: mx25l6433f@0 { |
| compatible = "nxp,s32-qspi-nor"; |
| reg = <0>; |
| size = <DT_SIZE_M(64)>; |
| jedec-id = [c2 20 17]; |
| quad-enable-requirements = "S1B6"; |
| readoc = "1-4-4"; |
| writeoc = "1-4-4"; |
| has-32k-erase; |
| status = "okay"; |
| |
| partitions { |
| compatible = "fixed-partitions"; |
| #address-cells = <1>; |
| #size-cells = <1>; |
| |
| storage_partition: partition@0 { |
| label = "storage"; |
| reg = <0x0 0x100000>; |
| }; |
| }; |
| }; |
| }; |
| |
| &flexcan0 { |
| pinctrl-0 = <&flexcan0_default>; |
| pinctrl-names = "default"; |
| phys = <&can_phy0>; |
| bus-speed = <125000>; |
| bus-speed-data = <1000000>; |
| status = "okay"; |
| }; |
| |
| &flexcan1 { |
| pinctrl-0 = <&flexcan1_default>; |
| pinctrl-names = "default"; |
| phys = <&can_phy1>; |
| bus-speed = <125000>; |
| bus-speed-data = <1000000>; |
| }; |
| |
| &flexcan2 { |
| pinctrl-0 = <&flexcan2_default>; |
| pinctrl-names = "default"; |
| phys = <&can_phy2>; |
| bus-speed = <125000>; |
| bus-speed-data = <1000000>; |
| }; |
| |
| &flexcan3 { |
| pinctrl-0 = <&flexcan3_default>; |
| pinctrl-names = "default"; |
| phys = <&can_phy3>; |
| bus-speed = <125000>; |
| bus-speed-data = <1000000>; |
| }; |
| |
| &flexcan4 { |
| pinctrl-0 = <&flexcan4_default>; |
| pinctrl-names = "default"; |
| phys = <&can_phy4>; |
| bus-speed = <125000>; |
| bus-speed-data = <1000000>; |
| }; |
| |
| &flexcan5 { |
| pinctrl-0 = <&flexcan5_default>; |
| pinctrl-names = "default"; |
| phys = <&can_phy5>; |
| bus-speed = <125000>; |
| bus-speed-data = <1000000>; |
| }; |
| |
| &lpi2c0 { |
| pinctrl-0 = <&lpi2c0_default>; |
| pinctrl-names = "default"; |
| clock-frequency = <I2C_BITRATE_STANDARD>; |
| status = "okay"; |
| |
| ssd1306: ssd1306@3c { |
| compatible = "solomon,ssd1306fb"; |
| reg = <0x3c>; |
| width = <128>; |
| height = <32>; |
| segment-offset = <0>; |
| page-offset = <0>; |
| display-offset = <0>; |
| multiplex-ratio = <31>; |
| segment-remap; |
| com-invdir; |
| com-sequential; |
| prechargep = <0x22>; |
| }; |
| }; |
| |
| &lpi2c1 { |
| pinctrl-0 = <&lpi2c1_default>; |
| pinctrl-names = "default"; |
| clock-frequency = <I2C_BITRATE_STANDARD>; |
| }; |
| |
| &lpspi1 { |
| pinctrl-0 = <&lpspi1_default>; |
| pinctrl-names = "default"; |
| data-pin-config = "sdo-in,sdi-out"; |
| }; |
| |
| &lpspi2 { |
| pinctrl-0 = <&lpspi2_default>; |
| pinctrl-names = "default"; |
| data-pin-config = "sdo-in,sdi-out"; |
| }; |
| |
| &lpspi3 { |
| pinctrl-0 = <&lpspi3_default>; |
| pinctrl-names = "default"; |
| data-pin-config = "sdo-in,sdi-out"; |
| status = "okay"; |
| |
| fs26_wdt: watchdog@0 { |
| compatible = "nxp,fs26-wdog"; |
| reg = <0>; |
| spi-max-frequency = <DT_FREQ_M(5)>; |
| type = "challenger"; |
| int-gpios = <&gpioa_h 2 GPIO_ACTIVE_LOW>; |
| status = "okay"; |
| }; |
| }; |
| |
| &lpspi4 { |
| pinctrl-0 = <&lpspi4_default>; |
| pinctrl-names = "default"; |
| data-pin-config = "sdo-in,sdi-out"; |
| }; |
| |
| &lpspi5 { |
| pinctrl-0 = <&lpspi5_default>; |
| pinctrl-names = "default"; |
| data-pin-config = "sdo-in,sdi-out"; |
| }; |
| |
| &emac0 { |
| pinctrl-0 = <&emac0_default>; |
| pinctrl-names = "default"; |
| phy-connection-type = "rmii"; |
| local-mac-address = [02 04 9f aa bb cc]; |
| phy-handle = <&phy>; |
| status = "okay"; |
| }; |
| |
| &mdio0 { |
| pinctrl-0 = <&mdio0_default>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| |
| phy: ethernet-phy@12 { |
| compatible = "nxp,tja1103"; |
| status = "okay"; |
| reg = <0x12>; |
| int-gpios = <&gpiod_l 5 GPIO_ACTIVE_LOW>; |
| master-slave = "slave"; |
| }; |
| }; |
| |
| &emios0 { |
| clock-divider = <200>; |
| status = "okay"; |
| |
| master_bus { |
| /* |
| * Timebase for PWM led, setting clock 50KHz for internal counter, |
| * default period is 1000 cycles <-> 20ms. |
| */ |
| emios0_bus_a { |
| mode = "MCB_UP_COUNTER"; |
| prescaler = <16>; |
| period = <1000>; |
| status = "okay"; |
| }; |
| }; |
| |
| emios0_pwm: pwm { |
| pinctrl-0 = <&emios0_default>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| |
| /* Default clock for internal counter for PWM channel 0-7 is 100Khz */ |
| pwm_0 { |
| channel = <0>; |
| pwm-mode = "OPWFMB"; |
| period = <65535>; |
| duty-cycle = <0>; |
| prescaler = <8>; |
| polarity = "ACTIVE_HIGH"; |
| }; |
| |
| pwm_1 { |
| channel = <1>; |
| pwm-mode = "OPWFMB"; |
| period = <65535>; |
| duty-cycle = <0>; |
| prescaler = <8>; |
| polarity = "ACTIVE_HIGH"; |
| }; |
| |
| pwm_2 { |
| channel = <2>; |
| pwm-mode = "OPWFMB"; |
| period = <65535>; |
| duty-cycle = <0>; |
| prescaler = <8>; |
| polarity = "ACTIVE_HIGH"; |
| }; |
| |
| pwm_3 { |
| channel = <3>; |
| pwm-mode = "OPWFMB"; |
| period = <65535>; |
| duty-cycle = <0>; |
| prescaler = <8>; |
| polarity = "ACTIVE_HIGH"; |
| }; |
| |
| pwm_4 { |
| channel = <4>; |
| pwm-mode = "OPWFMB"; |
| period = <65535>; |
| duty-cycle = <0>; |
| prescaler = <8>; |
| polarity = "ACTIVE_HIGH"; |
| }; |
| |
| pwm_5 { |
| channel = <5>; |
| pwm-mode = "OPWFMB"; |
| period = <65535>; |
| duty-cycle = <0>; |
| prescaler = <8>; |
| polarity = "ACTIVE_HIGH"; |
| }; |
| |
| rgb_red { |
| channel = <19>; |
| master-bus = <&emios0_bus_a>; |
| duty-cycle = <0>; |
| pwm-mode = "OPWMB"; |
| polarity = "ACTIVE_LOW"; |
| }; |
| }; |
| }; |
| |
| &emios1 { |
| clock-divider = <200>; |
| status = "okay"; |
| |
| master_bus { |
| /* |
| * Timebase for PWM led, setting clock 50KHz for internal counter, |
| * default period is 1000 cycles <-> 20ms. |
| */ |
| emios1_bus_a { |
| prescaler = <16>; |
| mode = "MCB_UP_COUNTER"; |
| period = <1000>; |
| status = "okay"; |
| }; |
| |
| emios1_bus_f { |
| prescaler = <16>; |
| mode = "MCB_UP_COUNTER"; |
| period = <1000>; |
| status = "okay"; |
| }; |
| }; |
| |
| emios1_pwm: pwm { |
| pinctrl-0 = <&emios1_default>; |
| pinctrl-names = "default"; |
| status = "okay"; |
| |
| rgb_green { |
| channel = <10>; |
| master-bus = <&emios1_bus_a>; |
| duty-cycle = <0>; |
| pwm-mode = "OPWMB"; |
| polarity = "ACTIVE_LOW"; |
| }; |
| |
| rgb_blue { |
| channel = <5>; |
| master-bus = <&emios1_bus_f>; |
| duty-cycle = <0>; |
| pwm-mode = "OPWMB"; |
| polarity = "ACTIVE_LOW"; |
| }; |
| }; |
| }; |
| |
| &lcu1 { |
| status = "okay"; |
| }; |
| |
| &trgmux { |
| status = "okay"; |
| }; |
| |
| &edma0 { |
| status = "okay"; |
| }; |