Commit c083131c authored by Marcel Ziswiler's avatar Marcel Ziswiler Committed by Shawn Guo

arm64: dts: freescale: add apalis imx8 aka quadmax carrier board support

The previous patch added the device tree to support Toradex Apalis
iMX8 [1] aka QuadMax a computer on module which can be used on
different carrier boards which this patch introduces.

The module consists of an NXP i.MX 8 family SoC (either i.MX 8QuadMax or
8QuadPlus), two PF8100 PMICs, a KSZ9131 Gigabit Ethernet PHY, 2, 4 or 8
GB of LPDDR4 RAM, an eMMC, an SGTL5000 analogue audio codec, an USB3503A
USB HSIC hub, an optional I2C EEPROM plus an optional Bluetooth/Wi-Fi
module.

Anything that is not self-contained on the module is disabled by
default.

The carrier board device trees contained in this patch include the
module's device tree and enable the supported peripherals of the
carrier board.

Some level of display functionality just landed upstream but requires
further integration/testing on our side. Therefore, currently only
basic console UART, eMMC and Ethernet functionality work fine.

As there is no i.MX 8QuadPlus device tree upstream those have been
dropped. However, apart from an error message during boot about it
failing to bring up the second Cortex-A72 core this boots fine on
QuadPlus' as well.

[1] https://www.toradex.com/computer-on-modules/apalis-arm-family/nxp-imx-8Signed-off-by: default avatarMarcel Ziswiler <marcel.ziswiler@toradex.com>
Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
parent ad0de4ce
......@@ -122,6 +122,11 @@ dtb-$(CONFIG_ARCH_MXC) += imx8mq-pico-pi.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mq-thor96.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mq-zii-ultra-rmb3.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8mq-zii-ultra-zest.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8qm-apalis-eval.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8qm-apalis-ixora-v1.1.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8qm-apalis-v1.1-eval.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8qm-apalis-v1.1-ixora-v1.1.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8qm-apalis-v1.1-ixora-v1.2.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8qm-mek.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8qxp-ai_ml.dtb
dtb-$(CONFIG_ARCH_MXC) += imx8qxp-colibri-eval-v3.dtb
......
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2022 Toradex
*/
/ {
aliases {
rtc0 = &rtc_i2c;
rtc1 = &rtc;
};
reg_usb_host_vbus: regulator-usb-host-vbus {
regulator-name = "VCC USBH2(ABCD) / USBH(3|4)";
};
};
&adc0 {
status = "okay";
};
&adc1 {
status = "okay";
};
/* TODO: Audio Mixer */
/* TODO: Asynchronous Sample Rate Converter (ASRC) */
/* TODO: Display Controller */
/* TODO: DPU */
/* Apalis ETH1 */
&fec1 {
status = "okay";
};
/* Apalis CAN1 */
&flexcan1 {
status = "okay";
};
/* Apalis CAN2 */
&flexcan2 {
status = "okay";
};
/* TODO: GPU */
/* Apalis I2C1 */
&i2c2 {
status = "okay";
/* M41T0M6 real time clock on carrier board */
rtc_i2c: rtc@68 {
status = "okay";
};
};
/* Apalis I2C3 (CAM) */
&i2c3 {
status = "okay";
};
/* Apalis SPI1 */
&lpspi0 {
status = "okay";
};
/* Apalis SPI2 */
&lpspi2 {
status = "okay";
};
/* Apalis UART3 */
&lpuart0 {
status = "okay";
};
/* Apalis UART1 */
&lpuart1 {
status = "okay";
};
/* Apalis UART4 */
&lpuart2 {
status = "okay";
};
/* Apalis UART2 */
&lpuart3 {
status = "okay";
};
/* Apalis PWM3, MXM3 pin 6 */
&lsio_pwm0 {
status = "okay";
};
/* Apalis PWM4, MXM3 pin 8 */
&lsio_pwm1 {
status = "okay";
};
/* Apalis PWM1, MXM3 pin 2 */
&lsio_pwm2 {
status = "okay";
};
/* Apalis PWM2, MXM3 pin 4 */
&lsio_pwm3 {
status = "okay";
};
/* TODO: Apalis PCIE1 */
/* TODO: Apalis BKL1_PWM */
/* TODO: Apalis DAP1 */
/* TODO: Apalis Analogue Audio */
/* TODO: Apalis SATA1 */
/* TODO: Apalis SPDIF1 */
/* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC Hub */
/* Apalis USBO1 */
&usbotg1 {
status = "okay";
};
/* TODO: Apalis USBH4 SuperSpeed */
/* Apalis MMC1 */
&usdhc2 {
status = "okay";
};
/* Apalis SD1 */
&usdhc3 {
status = "okay";
};
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2022 Toradex
*/
#include <dt-bindings/leds/common.h>
/ {
aliases {
rtc0 = &rtc_i2c;
rtc1 = &rtc;
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_leds_ixora>;
/* LED_4_GREEN / MXM3_188 */
led-1 {
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
function = LED_FUNCTION_STATUS;
gpios = <&lsio_gpio5 27 GPIO_ACTIVE_HIGH>;
};
/* LED_4_RED / MXM3_178 */
led-2 {
color = <LED_COLOR_ID_RED>;
default-state = "off";
function = LED_FUNCTION_STATUS;
gpios = <&lsio_gpio5 29 GPIO_ACTIVE_HIGH>;
};
/* LED_5_GREEN / MXM3_152 */
led-3 {
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
function = LED_FUNCTION_STATUS;
gpios = <&lsio_gpio5 20 GPIO_ACTIVE_HIGH>;
};
/* LED_5_RED / MXM3_156 */
led-4 {
color = <LED_COLOR_ID_RED>;
default-state = "off";
function = LED_FUNCTION_STATUS;
gpios = <&lsio_gpio5 21 GPIO_ACTIVE_HIGH>;
};
};
reg_usb_host_vbus: regulator-usb-host-vbus {
regulator-name = "VCC_USBH(2|4)";
};
};
&adc0 {
status = "okay";
};
&adc1 {
status = "okay";
};
/* TODO: Audio Mixer */
/* TODO: Asynchronous Sample Rate Converter (ASRC) */
/* TODO: Display Controller */
/* TODO: DPU */
/* Apalis ETH1 */
&fec1 {
status = "okay";
};
/* Apalis CAN1 */
&flexcan1 {
status = "okay";
};
/* Apalis CAN2 */
&flexcan2 {
status = "okay";
};
/* TODO: GPU */
/* Apalis I2C1 */
&i2c2 {
status = "okay";
/* M41T0M6 real time clock on carrier board */
rtc_i2c: rtc@68 {
status = "okay";
};
};
/* Apalis I2C3 (CAM) */
&i2c3 {
status = "okay";
};
&iomuxc {
pinctrl-0 = <&pinctrl_cam1_gpios>, <&pinctrl_dap1_gpios>,
<&pinctrl_esai0_gpios>, <&pinctrl_fec2_gpios>,
<&pinctrl_gpio3>, <&pinctrl_gpio4>, <&pinctrl_gpio_usbh_oc_n>,
<&pinctrl_lpuart1ctrl>, <&pinctrl_lvds0_i2c0_gpio>,
<&pinctrl_lvds1_i2c0_gpios>, <&pinctrl_mipi_dsi_0_1_en>,
<&pinctrl_mipi_dsi1_gpios>, <&pinctrl_mlb_gpios>,
<&pinctrl_qspi1a_gpios>, <&pinctrl_sata1_act>,
<&pinctrl_sim0_gpios>, <&pinctrl_uart24_forceoff>,
<&pinctrl_usdhc1_gpios>;
pinctrl_leds_ixora: ledsixoragrp {
fsl,pins = <IMX8QM_USDHC2_DATA1_LSIO_GPIO5_IO27 0x06000061>, /* LED_4_GREEN */
<IMX8QM_USDHC2_DATA3_LSIO_GPIO5_IO29 0x06000061>, /* LED_4_RED */
<IMX8QM_USDHC1_DATA5_LSIO_GPIO5_IO20 0x06000061>, /* LED_5_GREEN */
<IMX8QM_USDHC1_DATA6_LSIO_GPIO5_IO21 0x06000061>; /* LED_5_RED */
};
pinctrl_uart24_forceoff: uart24forceoffgrp {
fsl,pins = <IMX8QM_USDHC2_CMD_LSIO_GPIO5_IO25 0x00000021>;
};
};
/* Apalis SPI1 */
&lpspi0 {
status = "okay";
};
/* Apalis SPI2 */
&lpspi2 {
status = "okay";
};
/* Apalis UART3 */
&lpuart0 {
status = "okay";
};
/* Apalis UART1 */
&lpuart1 {
status = "okay";
};
/* Apalis UART4 */
&lpuart2 {
status = "okay";
};
/* Apalis UART2 */
&lpuart3 {
status = "okay";
};
&lsio_gpio5 {
gpio-line-names = "gpio5-00", "gpio5-01", "gpio5-02", "gpio5-03",
"gpio5-04", "gpio5-05", "gpio5-06", "gpio5-07",
"gpio5-08", "gpio5-09", "gpio5-10", "gpio5-11",
"gpio5-12", "gpio5-13", "gpio5-14", "gpio5-15",
"gpio5-16", "gpio5-17", "gpio5-18", "gpio5-19",
"LED-5-GREEN", "LED-5-RED", "gpio5-22", "gpio5-23",
"gpio5-24", "UART24-FORCEOFF", "gpio5-26",
"LED-4-GREEN", "gpio5-28", "LED-4-RED", "gpio5-30",
"gpio5-31";
ngpios = <32>;
};
/* Apalis PWM3, MXM3 pin 6 */
&lsio_pwm0 {
status = "okay";
};
/* Apalis PWM4, MXM3 pin 8 */
&lsio_pwm1 {
status = "okay";
};
/* Apalis PWM1, MXM3 pin 2 */
&lsio_pwm2 {
status = "okay";
};
/* Apalis PWM2, MXM3 pin 4 */
&lsio_pwm3 {
status = "okay";
};
/* TODO: Apalis PCIE1 */
/* TODO: Apalis BKL1_PWM */
/* TODO: Apalis DAP1 */
/* TODO: Apalis Analogue Audio */
/* TODO: Apalis SATA1 */
/* TODO: Apalis SPDIF1 */
/* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC Hub */
/* Apalis USBO1 */
&usbotg1 {
status = "okay";
};
/* TODO: Apalis USBH4 SuperSpeed */
/* Apalis MMC1 */
&usdhc2 {
pinctrl-0 = <&pinctrl_usdhc2_4bit>, <&pinctrl_mmc1_cd>;
pinctrl-1 = <&pinctrl_usdhc2_4bit_100mhz>, <&pinctrl_mmc1_cd>;
pinctrl-2 = <&pinctrl_usdhc2_4bit_200mhz>, <&pinctrl_mmc1_cd>;
pinctrl-3 = <&pinctrl_usdhc2_4bit_sleep>, <&pinctrl_mmc1_cd_sleep>;
bus-width = <4>;
status = "okay";
};
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2022 Toradex
*/
#include <dt-bindings/leds/common.h>
/ {
aliases {
rtc0 = &rtc_i2c;
rtc1 = &rtc;
};
leds {
compatible = "gpio-leds";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_leds_ixora>;
/* LED_4_GREEN / MXM3_188 */
led-1 {
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
function = LED_FUNCTION_STATUS;
gpios = <&lsio_gpio5 27 GPIO_ACTIVE_HIGH>;
};
/* LED_4_RED / MXM3_178 */
led-2 {
color = <LED_COLOR_ID_RED>;
default-state = "off";
function = LED_FUNCTION_STATUS;
gpios = <&lsio_gpio5 29 GPIO_ACTIVE_HIGH>;
};
/* LED_5_GREEN / MXM3_152 */
led-3 {
color = <LED_COLOR_ID_GREEN>;
default-state = "off";
function = LED_FUNCTION_STATUS;
gpios = <&lsio_gpio5 20 GPIO_ACTIVE_HIGH>;
};
/* LED_5_RED / MXM3_156 */
led-4 {
color = <LED_COLOR_ID_RED>;
default-state = "off";
function = LED_FUNCTION_STATUS;
gpios = <&lsio_gpio5 21 GPIO_ACTIVE_HIGH>;
};
};
reg_3v3_vmmc: regulator-3v3-vmmc {
compatible = "regulator-fixed";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enable_3v3_vmmc>;
/* MMC1_PWR_CTRL */
gpio = <&lsio_gpio5 19 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-max-microvolt = <3300000>;
regulator-min-microvolt = <3300000>;
regulator-name = "3v3_vmmc";
};
reg_can1_supply: regulator-can1-supply {
compatible = "regulator-fixed";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_enable_can1_power>;
gpio = <&lsio_gpio5 22 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-name = "can1_supply";
};
reg_can2_supply: regulator-can2-supply {
compatible = "regulator-fixed";
pinctrl-names = "default";
pinctrl-0 = <&pinctrl_sata1_act>;
gpio = <&lsio_gpio2 8 GPIO_ACTIVE_HIGH>;
enable-active-high;
regulator-name = "can2_supply";
};
reg_usb_host_vbus: regulator-usb-host-vbus {
regulator-name = "VCC_USBH(2|4)";
};
};
&adc0 {
status = "okay";
};
&adc1 {
status = "okay";
};
/* TODO: Audio Mixer */
/* TODO: Asynchronous Sample Rate Converter (ASRC) */
/* TODO: Display Controller */
/* TODO: DPU */
/* Apalis ETH1 */
&fec1 {
status = "okay";
};
/* Apalis CAN1 */
&flexcan1 {
xceiver-supply = <&reg_can1_supply>;
status = "okay";
};
/* Apalis CAN2 */
&flexcan2 {
xceiver-supply = <&reg_can2_supply>;
status = "okay";
};
/* TODO: GPU */
/* Apalis I2C1 */
&i2c2 {
status = "okay";
eeprom: eeprom@50 {
compatible = "atmel,24c02";
reg = <0x50>;
pagesize = <16>;
};
/* M41T0M6 real time clock on carrier board */
rtc_i2c: rtc@68 {
status = "okay";
};
};
/* Apalis I2C3 (CAM) */
&i2c3 {
status = "okay";
};
&iomuxc {
pinctrl-0 = <&pinctrl_cam1_gpios>, <&pinctrl_dap1_gpios>,
<&pinctrl_esai0_gpios>, <&pinctrl_fec2_gpios>,
<&pinctrl_gpio3>, <&pinctrl_gpio4>, <&pinctrl_gpio_usbh_oc_n>,
<&pinctrl_lpuart1ctrl>, <&pinctrl_lvds0_i2c0_gpio>,
<&pinctrl_lvds1_i2c0_gpios>, <&pinctrl_mipi_dsi_0_1_en>,
<&pinctrl_mipi_dsi1_gpios>, <&pinctrl_mlb_gpios>,
<&pinctrl_qspi1a_gpios>, <&pinctrl_sim0_gpios>,
<&pinctrl_uart24_forceoff>, <&pinctrl_usdhc1_gpios>;
/* PMIC MMC1 power-switch */
pinctrl_enable_3v3_vmmc: enable3v3vmmcgrp {
fsl,pins = <IMX8QM_USDHC1_DATA4_LSIO_GPIO5_IO19 0x00000021>; /* MXM3_148, PMIC */
};
/* FlexCAN PMIC */
pinctrl_enable_can1_power: enablecan1powergrp {
fsl,pins = <IMX8QM_USDHC1_DATA7_LSIO_GPIO5_IO22 0x00000021>; /* MXM3_158, PMIC */
};
pinctrl_leds_ixora: ledsixoragrp {
fsl,pins = <IMX8QM_USDHC2_DATA1_LSIO_GPIO5_IO27 0x06000061>, /* LED_4_GREEN */
<IMX8QM_USDHC2_DATA3_LSIO_GPIO5_IO29 0x06000061>, /* LED_4_RED */
<IMX8QM_USDHC1_DATA5_LSIO_GPIO5_IO20 0x06000061>, /* LED_5_GREEN */
<IMX8QM_USDHC1_DATA6_LSIO_GPIO5_IO21 0x06000061>; /* LED_5_RED */
};
pinctrl_uart24_forceoff: uart24forceoffgrp {
fsl,pins = <IMX8QM_USDHC2_CMD_LSIO_GPIO5_IO25 0x00000021>;
};
};
/* Apalis SPI1 */
&lpspi0 {
status = "okay";
};
/* Apalis SPI2 */
&lpspi2 {
status = "okay";
};
/* Apalis UART3 */
&lpuart0 {
status = "okay";
};
/* Apalis UART1 */
&lpuart1 {
status = "okay";
};
/* Apalis UART4 */
&lpuart2 {
status = "okay";
};
/* Apalis UART2 */
&lpuart3 {
status = "okay";
};
&lsio_gpio5 {
gpio-line-names = "gpio5-00", "gpio5-01", "gpio5-02", "gpio5-03",
"gpio5-04", "gpio5-05", "gpio5-06", "gpio5-07",
"gpio5-08", "gpio5-09", "gpio5-10", "gpio5-11",
"gpio5-12", "gpio5-13", "gpio5-14", "gpio5-15",
"gpio5-16", "gpio5-17", "gpio5-18", "gpio5-19",
"LED-5-GREEN", "LED-5-RED", "gpio5-22", "gpio5-23",
"gpio5-24", "UART24-FORCEOFF", "gpio5-26",
"LED-4-GREEN", "gpio5-28", "LED-4-RED", "gpio5-30",
"gpio5-31";
ngpios = <32>;
};
/* Apalis PWM3, MXM3 pin 6 */
&lsio_pwm0 {
status = "okay";
};
/* Apalis PWM4, MXM3 pin 8 */
&lsio_pwm1 {
status = "okay";
};
/* Apalis PWM1, MXM3 pin 2 */
&lsio_pwm2 {
status = "okay";
};
/* Apalis PWM2, MXM3 pin 4 */
&lsio_pwm3 {
status = "okay";
};
/* TODO: Apalis PCIE1 */
/* TODO: Apalis BKL1_PWM */
/* TODO: Apalis DAP1 */
/* TODO: Apalis Analogue Audio */
/* TODO: Apalis SATA1 */
/* TODO: Apalis SPDIF1 */
/* TODO: Apalis USBH2, Apalis USBH3 and on-module Wi-Fi via on-module HSIC Hub */
/* Apalis USBO1 */
&usbotg1 {
status = "okay";
};
/* TODO: Apalis USBH4 SuperSpeed */
/* Apalis MMC1 */
&usdhc2 {
pinctrl-0 = <&pinctrl_usdhc2_4bit>, <&pinctrl_mmc1_cd>;
pinctrl-1 = <&pinctrl_usdhc2_4bit_100mhz>, <&pinctrl_mmc1_cd>;
pinctrl-2 = <&pinctrl_usdhc2_4bit_200mhz>, <&pinctrl_mmc1_cd>;
pinctrl-3 = <&pinctrl_usdhc2_4bit_sleep>, <&pinctrl_mmc1_cd_sleep>;
bus-width = <4>;
cap-power-off-card;
/delete-property/ no-1-8-v;
vmmc-supply = <&reg_3v3_vmmc>;
status = "okay";
};
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2022 Toradex
*/
/dts-v1/;
#include "imx8qm-apalis.dtsi"
#include "imx8-apalis-eval.dtsi"
/ {
model = "Toradex Apalis iMX8QM/QP on Apalis Evaluation Board";
compatible = "toradex,apalis-imx8-eval",
"toradex,apalis-imx8",
"fsl,imx8qm";
};
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2022 Toradex
*/
/dts-v1/;
#include "imx8qm-apalis.dtsi"
#include "imx8-apalis-ixora-v1.1.dtsi"
/ {
model = "Toradex Apalis iMX8QM/QP on Apalis Ixora V1.1 Carrier Board";
compatible = "toradex,apalis-imx8-ixora-v1.1",
"toradex,apalis-imx8",
"fsl,imx8qm";
};
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2022 Toradex
*/
/dts-v1/;
#include "imx8qm-apalis-v1.1.dtsi"
#include "imx8-apalis-eval.dtsi"
/ {
model = "Toradex Apalis iMX8QM V1.1 on Apalis Evaluation Board";
compatible = "toradex,apalis-imx8-v1.1-eval",
"toradex,apalis-imx8-v1.1",
"fsl,imx8qm";
};
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2022 Toradex
*/
/dts-v1/;
#include "imx8qm-apalis-v1.1.dtsi"
#include "imx8-apalis-ixora-v1.1.dtsi"
/ {
model = "Toradex Apalis iMX8QM V1.1 on Apalis Ixora V1.1 Carrier Board";
compatible = "toradex,apalis-imx8-v1.1-ixora-v1.1",
"toradex,apalis-imx8-v1.1",
"fsl,imx8qm";
};
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
/*
* Copyright 2022 Toradex
*/
/dts-v1/;
#include "imx8qm-apalis-v1.1.dtsi"
#include "imx8-apalis-ixora-v1.2.dtsi"
/ {
model = "Toradex Apalis iMX8QM V1.1 on Apalis Ixora V1.2 Carrier Board";
compatible = "toradex,apalis-imx8-v1.1-ixora-v1.2",
"toradex,apalis-imx8-v1.1",
"fsl,imx8qm";
};
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment