mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-17 20:57:01 +02:00
board: toradex: add Toradex SMARC iMX8MP
Add support for the Toradex SMARC iMX8MP. Link: https://www.toradex.com/computer-on-modules/smarc-arm-family/nxp-imx-8m-plus Link: https://www.toradex.com/products/carrier-board/smarc-development-board-kit Signed-off-by: Vitor Soares <vitor.soares@toradex.com>
This commit is contained in:
parent
be0f578439
commit
dde53eae88
80
arch/arm/dts/imx8mp-toradex-smarc-dev-u-boot.dtsi
Normal file
80
arch/arm/dts/imx8mp-toradex-smarc-dev-u-boot.dtsi
Normal file
@ -0,0 +1,80 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
/* Copyright (C) 2024 Toradex */
|
||||||
|
|
||||||
|
#include "imx8mp-u-boot.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
sysinfo {
|
||||||
|
compatible = "toradex,sysinfo";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio2 {
|
||||||
|
bt_uart_gpio {
|
||||||
|
gpio-hog;
|
||||||
|
gpios = <9 GPIO_ACTIVE_HIGH>;
|
||||||
|
input;
|
||||||
|
line-name = "BT_UART_RXD_GPIO";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio3 {
|
||||||
|
wifi_en_gpio {
|
||||||
|
gpio-hog;
|
||||||
|
gpios = <14 GPIO_ACTIVE_HIGH>;
|
||||||
|
output-high;
|
||||||
|
line-name = "CTRL_EN_WIFI";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio5 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&i2c1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pca9450 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
|
||||||
|
regulators {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_i2c1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_i2c1_gpio {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_pmic {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_uart4 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart3 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&uart4 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usdhc1 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usdhc3 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
297
arch/arm/dts/imx8mp-toradex-smarc-dev.dts
Normal file
297
arch/arm/dts/imx8mp-toradex-smarc-dev.dts
Normal file
@ -0,0 +1,297 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
/* Copyright (C) 2025 Toradex */
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "imx8mp-toradex-smarc.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Toradex SMARC iMX8M Plus on Toradex SMARC Development Board";
|
||||||
|
compatible = "toradex,smarc-imx8mp-dev",
|
||||||
|
"toradex,smarc-imx8mp",
|
||||||
|
"fsl,imx8mp";
|
||||||
|
|
||||||
|
hdmi-connector {
|
||||||
|
compatible = "hdmi-connector";
|
||||||
|
label = "J64";
|
||||||
|
type = "a";
|
||||||
|
|
||||||
|
port {
|
||||||
|
native_hdmi_connector_in: endpoint {
|
||||||
|
remote-endpoint = <&hdmi_tx_out>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
reg_carrier_1p8v: regulator-carrier-1p8v {
|
||||||
|
compatible = "regulator-fixed";
|
||||||
|
regulator-max-microvolt = <1800000>;
|
||||||
|
regulator-min-microvolt = <1800000>;
|
||||||
|
regulator-name = "On-carrier 1V8";
|
||||||
|
};
|
||||||
|
|
||||||
|
sound {
|
||||||
|
compatible = "simple-audio-card";
|
||||||
|
simple-audio-card,bitclock-master = <&codec_dai>;
|
||||||
|
simple-audio-card,format = "i2s";
|
||||||
|
simple-audio-card,frame-master = <&codec_dai>;
|
||||||
|
simple-audio-card,mclk-fs = <256>;
|
||||||
|
simple-audio-card,name = "tdx-smarc-wm8904";
|
||||||
|
simple-audio-card,routing =
|
||||||
|
"Headphone Jack", "HPOUTL",
|
||||||
|
"Headphone Jack", "HPOUTR",
|
||||||
|
"IN2L", "Line In Jack",
|
||||||
|
"IN2R", "Line In Jack",
|
||||||
|
"Microphone Jack", "MICBIAS",
|
||||||
|
"IN1L", "Microphone Jack";
|
||||||
|
simple-audio-card,widgets =
|
||||||
|
"Microphone", "Microphone Jack",
|
||||||
|
"Headphone", "Headphone Jack",
|
||||||
|
"Line", "Line In Jack";
|
||||||
|
|
||||||
|
codec_dai: simple-audio-card,codec {
|
||||||
|
clocks = <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_SAI1_MCLK1>;
|
||||||
|
sound-dai = <&wm8904_1a>;
|
||||||
|
};
|
||||||
|
|
||||||
|
simple-audio-card,cpu {
|
||||||
|
sound-dai = <&sai1>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&aud2htx {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SPI0 */
|
||||||
|
&ecspi1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC GBE0 */
|
||||||
|
&eqos {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC GBE1 */
|
||||||
|
&fec {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC CAN1 */
|
||||||
|
&flexcan1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC CAN0 */
|
||||||
|
&flexcan2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio1 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_gpio7>,
|
||||||
|
<&pinctrl_gpio8>,
|
||||||
|
<&pinctrl_gpio9>,
|
||||||
|
<&pinctrl_gpio10>,
|
||||||
|
<&pinctrl_gpio11>,
|
||||||
|
<&pinctrl_gpio12>,
|
||||||
|
<&pinctrl_gpio13>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio3 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_lvds_dsi_sel>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio4 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_gpio4>, <&pinctrl_gpio6>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&hdmi_pvi {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC HDMI */
|
||||||
|
&hdmi_tx {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
ports {
|
||||||
|
port@1 {
|
||||||
|
hdmi_tx_out: endpoint {
|
||||||
|
remote-endpoint = <&native_hdmi_connector_in>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&hdmi_tx_phy {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_LCD */
|
||||||
|
&i2c2 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
i2c-mux@70 {
|
||||||
|
compatible = "nxp,pca9543";
|
||||||
|
reg = <0x70>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
|
||||||
|
/* I2C on DSI Connector Pins 4/6 */
|
||||||
|
i2c_dsi_0: i2c@0 {
|
||||||
|
reg = <0>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* I2C on DSI Connector Pins 52/54 */
|
||||||
|
i2c_dsi_1: i2c@1 {
|
||||||
|
reg = <1>;
|
||||||
|
#address-cells = <1>;
|
||||||
|
#size-cells = <0>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_CAM0 */
|
||||||
|
&i2c3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_GP */
|
||||||
|
&i2c4 {
|
||||||
|
/* Audio Codec */
|
||||||
|
wm8904_1a: audio-codec@1a {
|
||||||
|
compatible = "wlf,wm8904";
|
||||||
|
reg = <0x1a>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_sai1>, <&pinctrl_sai1_mclk>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
clocks = <&audio_blk_ctrl IMX8MP_CLK_AUDIOMIX_SAI1_MCLK1>;
|
||||||
|
clock-names = "mclk";
|
||||||
|
AVDD-supply = <®_carrier_1p8v>;
|
||||||
|
CPVDD-supply = <®_carrier_1p8v>;
|
||||||
|
DBVDD-supply = <®_carrier_1p8v>;
|
||||||
|
DCVDD-supply = <®_carrier_1p8v>;
|
||||||
|
MICVDD-supply = <®_carrier_1p8v>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* On-Carrier Temperature Sensor */
|
||||||
|
temperature-sensor@4f {
|
||||||
|
compatible = "ti,tmp1075";
|
||||||
|
reg = <0x4f>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* On-Carrier EEPROM */
|
||||||
|
eeprom@57 {
|
||||||
|
compatible = "st,24c02", "atmel,24c02";
|
||||||
|
reg = <0x57>;
|
||||||
|
pagesize = <16>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_CAM1 */
|
||||||
|
&i2c5 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_PM */
|
||||||
|
&i2c6 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
/* Fan controller */
|
||||||
|
fan@18 {
|
||||||
|
compatible = "ti,amc6821";
|
||||||
|
reg = <0x18>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Current measurement into module VDD */
|
||||||
|
hwmon@40 {
|
||||||
|
compatible = "ti,ina226";
|
||||||
|
reg = <0x40>;
|
||||||
|
shunt-resistor = <5000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&lcdif3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC PCIE_A, M2 Key B */
|
||||||
|
&pcie {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pcie_phy {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC LCD1_BKLT_PWM */
|
||||||
|
&pwm1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC LCD0_BKLT_PWM */
|
||||||
|
&pwm2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2S0 */
|
||||||
|
&sai1 {
|
||||||
|
assigned-clocks = <&clk IMX8MP_CLK_SAI1>;
|
||||||
|
assigned-clock-parents = <&clk IMX8MP_AUDIO_PLL1_OUT>;
|
||||||
|
assigned-clock-rates = <24576000>;
|
||||||
|
fsl,sai-mclk-direction-output;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC HDMI Audio */
|
||||||
|
&sound_hdmi {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SER0, RS485. Optional M.2 KEY E */
|
||||||
|
&uart1 {
|
||||||
|
linux,rs485-enabled-at-boot-time;
|
||||||
|
rs485-rts-active-low;
|
||||||
|
rs485-rx-during-tx;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SER2 */
|
||||||
|
&uart2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SER1, used as the Linux Console */
|
||||||
|
&uart4 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC USB0 */
|
||||||
|
&usb3_0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC USB1..4 */
|
||||||
|
&usb3_1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3_phy0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3_phy1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SDIO */
|
||||||
|
&usdhc2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
1284
arch/arm/dts/imx8mp-toradex-smarc.dtsi
Normal file
1284
arch/arm/dts/imx8mp-toradex-smarc.dtsi
Normal file
File diff suppressed because it is too large
Load Diff
@ -291,6 +291,12 @@ config TARGET_KONTRON_PITX_IMX8M
|
|||||||
select IMX8MQ
|
select IMX8MQ
|
||||||
select IMX8M_LPDDR4
|
select IMX8M_LPDDR4
|
||||||
|
|
||||||
|
config TARGET_TORADEX_SMARC_IMX8MP
|
||||||
|
bool "Support Toradex SMARC iMX8M Plus module"
|
||||||
|
select IMX8MP
|
||||||
|
select SUPPORT_SPL
|
||||||
|
select IMX8M_LPDDR4
|
||||||
|
|
||||||
config TARGET_VERDIN_IMX8MM
|
config TARGET_VERDIN_IMX8MM
|
||||||
bool "Support Toradex Verdin iMX8M Mini module"
|
bool "Support Toradex Verdin iMX8M Mini module"
|
||||||
select IMX8MM
|
select IMX8MM
|
||||||
@ -410,6 +416,7 @@ source "board/purism/librem5/Kconfig"
|
|||||||
source "board/ronetix/imx8mq-cm/Kconfig"
|
source "board/ronetix/imx8mq-cm/Kconfig"
|
||||||
source "board/technexion/pico-imx8mq/Kconfig"
|
source "board/technexion/pico-imx8mq/Kconfig"
|
||||||
source "board/variscite/imx8mn_var_som/Kconfig"
|
source "board/variscite/imx8mn_var_som/Kconfig"
|
||||||
|
source "board/toradex/smarc-imx8mp/Kconfig"
|
||||||
source "board/toradex/verdin-imx8mm/Kconfig"
|
source "board/toradex/verdin-imx8mm/Kconfig"
|
||||||
source "board/toradex/verdin-imx8mp/Kconfig"
|
source "board/toradex/verdin-imx8mp/Kconfig"
|
||||||
|
|
||||||
|
@ -165,6 +165,7 @@ const struct toradex_som toradex_modules[] = {
|
|||||||
{ APALIS_IMX8QP_1300MHZ, "Apalis iMX8QP 2GB", TARGET_IS_ENABLED(APALIS_IMX8) },
|
{ APALIS_IMX8QP_1300MHZ, "Apalis iMX8QP 2GB", TARGET_IS_ENABLED(APALIS_IMX8) },
|
||||||
{ APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ, "Apalis iMX8QM 8GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) },
|
{ APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ, "Apalis iMX8QM 8GB WB IT", TARGET_IS_ENABLED(APALIS_IMX8) },
|
||||||
{ SMARC_IMX95_HEXA_8GB_WB_IT, "SMARC iMX95 Hexa 8GB WB IT", TARGET_IS_ENABLED(TORADEX_SMARC_IMX95) },
|
{ SMARC_IMX95_HEXA_8GB_WB_IT, "SMARC iMX95 Hexa 8GB WB IT", TARGET_IS_ENABLED(TORADEX_SMARC_IMX95) },
|
||||||
|
{ SMARC_IMX8MPQ_4GB_WB_IT, "SMARC iMX8M Plus Quad 4GB WB IT", TARGET_IS_ENABLED(TORADEX_SMARC_IMX8MP) },
|
||||||
};
|
};
|
||||||
|
|
||||||
struct pid4list {
|
struct pid4list {
|
||||||
|
@ -123,6 +123,7 @@ enum {
|
|||||||
APALIS_IMX8QP_1300MHZ,
|
APALIS_IMX8QP_1300MHZ,
|
||||||
APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ, /* 95 */
|
APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ, /* 95 */
|
||||||
SMARC_IMX95_HEXA_8GB_WB_IT,
|
SMARC_IMX95_HEXA_8GB_WB_IT,
|
||||||
|
SMARC_IMX8MPQ_4GB_WB_IT,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum {
|
enum {
|
||||||
|
39
board/toradex/smarc-imx8mp/Kconfig
Normal file
39
board/toradex/smarc-imx8mp/Kconfig
Normal file
@ -0,0 +1,39 @@
|
|||||||
|
if TARGET_TORADEX_SMARC_IMX8MP
|
||||||
|
|
||||||
|
config IMX_CONFIG
|
||||||
|
default "board/toradex/smarc-imx8mp/imximage.cfg"
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "smarc-imx8mp"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "toradex-smarc-imx8mp"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "toradex"
|
||||||
|
|
||||||
|
config TDX_CFG_BLOCK
|
||||||
|
default y
|
||||||
|
|
||||||
|
config TDX_CFG_BLOCK_2ND_ETHADDR
|
||||||
|
default y
|
||||||
|
|
||||||
|
config TDX_CFG_BLOCK_DEV
|
||||||
|
default "0"
|
||||||
|
|
||||||
|
# Toradex config block in eMMC, at the end of 1st "boot sector"
|
||||||
|
config TDX_CFG_BLOCK_OFFSET
|
||||||
|
default "-512"
|
||||||
|
|
||||||
|
config TDX_CFG_BLOCK_PART
|
||||||
|
default "1"
|
||||||
|
|
||||||
|
config TDX_HAVE_EEPROM_EXTRA
|
||||||
|
default y
|
||||||
|
|
||||||
|
config TDX_HAVE_MMC
|
||||||
|
default y
|
||||||
|
|
||||||
|
source "board/toradex/common/Kconfig"
|
||||||
|
|
||||||
|
endif
|
10
board/toradex/smarc-imx8mp/MAINTAINERS
Normal file
10
board/toradex/smarc-imx8mp/MAINTAINERS
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
Toradex Smarc iMX8M Plus
|
||||||
|
F: arch/arm/dts/imx8mp-toradex-smarc-dev-u-boot.dtsi
|
||||||
|
F: board/toradex/smarc-imx8mp/
|
||||||
|
F: board/toradex/common/
|
||||||
|
F: configs/toradex-smarc-imx8mp_defconfig
|
||||||
|
F: doc/board/toradex/toradex-smarc-imx8mp.rst
|
||||||
|
F: include/configs/toradex-smarc-imx8mp.h
|
||||||
|
M: Francesco Dolcini <francesco.dolcini@toradex.com>
|
||||||
|
S: Maintained
|
||||||
|
W: https://www.toradex.com/computer-on-modules/smarc-arm-family/nxp-imx-8m-plus
|
9
board/toradex/smarc-imx8mp/Makefile
Normal file
9
board/toradex/smarc-imx8mp/Makefile
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
# Copyright (C) 2024 Toradex
|
||||||
|
|
||||||
|
obj-y += smarc-imx8mp.o
|
||||||
|
|
||||||
|
ifdef CONFIG_SPL_BUILD
|
||||||
|
obj-y += spl.o
|
||||||
|
obj-$(CONFIG_IMX8M_LPDDR4) += lpddr4_timing.o
|
||||||
|
endif
|
6
board/toradex/smarc-imx8mp/imximage.cfg
Normal file
6
board/toradex/smarc-imx8mp/imximage.cfg
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
/* Copyright (C) 2024 Toradex */
|
||||||
|
|
||||||
|
ROM_VERSION v2
|
||||||
|
BOOT_FROM emmc_fastboot
|
||||||
|
LOADER u-boot-spl-ddr.bin 0x920000
|
1903
board/toradex/smarc-imx8mp/lpddr4_timing.c
Normal file
1903
board/toradex/smarc-imx8mp/lpddr4_timing.c
Normal file
File diff suppressed because it is too large
Load Diff
9
board/toradex/smarc-imx8mp/lpddr4_timing.h
Normal file
9
board/toradex/smarc-imx8mp/lpddr4_timing.h
Normal file
@ -0,0 +1,9 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
/* Copyright (C) 2024 Toradex */
|
||||||
|
|
||||||
|
#ifndef __LPDDR4_TIMING_H__
|
||||||
|
#define __LPDDR4_TIMING_H__
|
||||||
|
|
||||||
|
void lpddr4_single_rank_training_patch(void);
|
||||||
|
|
||||||
|
#endif /* __LPDDR4_TIMING_H__ */
|
85
board/toradex/smarc-imx8mp/smarc-imx8mp.c
Normal file
85
board/toradex/smarc-imx8mp/smarc-imx8mp.c
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
/* Copyright (C) 2024 Toradex */
|
||||||
|
|
||||||
|
#include <init.h>
|
||||||
|
#include <asm/global_data.h>
|
||||||
|
#include <asm-generic/gpio.h>
|
||||||
|
#include <linux/errno.h>
|
||||||
|
|
||||||
|
#include "../common/tdx-cfg-block.h"
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
int board_init(void)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_phys_sdram_size(phys_size_t *size)
|
||||||
|
{
|
||||||
|
if (!size)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
*size = get_ram_size((void *)PHYS_SDRAM, PHYS_SDRAM_SIZE + PHYS_SDRAM_2_SIZE);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_OF_LIBFDT) && IS_ENABLED(CONFIG_OF_BOARD_SETUP)
|
||||||
|
static bool board_has_wifi(void)
|
||||||
|
{
|
||||||
|
struct gpio_desc *desc;
|
||||||
|
|
||||||
|
if (!gpio_hog_lookup_name("BT_UART_RXD_GPIO", &desc))
|
||||||
|
return !!dm_gpio_get_value(desc);
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Module variants with a Wi-Fi/Bluetooth module use UART3 for Bluetooth,
|
||||||
|
* those without use UART3 as the SMARC SER3 UART.
|
||||||
|
* Test for a Wi-Fi module and if none found reassign UART3 interface to
|
||||||
|
* the SMARC SER3 pins.
|
||||||
|
*/
|
||||||
|
static void ft_board_assign_uart(void *blob)
|
||||||
|
{
|
||||||
|
const char *uart_path = "/soc@0/bus@30800000/spba-bus@30800000/serial@30880000";
|
||||||
|
const char *pinctrl_path = "/soc@0/bus@30000000/pinctrl@30330000/uart3grp";
|
||||||
|
int pinctrl_offset;
|
||||||
|
int uart_offset;
|
||||||
|
int bt_offset;
|
||||||
|
u32 phandle;
|
||||||
|
|
||||||
|
if (board_has_wifi())
|
||||||
|
return;
|
||||||
|
|
||||||
|
uart_offset = fdt_path_offset(blob, uart_path);
|
||||||
|
if (uart_offset < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fdt_delprop(blob, uart_offset, "uart-has-rtscts");
|
||||||
|
bt_offset = fdt_subnode_offset(blob, uart_offset, "bluetooth");
|
||||||
|
if (bt_offset < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fdt_del_node(blob, bt_offset);
|
||||||
|
|
||||||
|
pinctrl_offset = fdt_path_offset(blob, pinctrl_path);
|
||||||
|
if (pinctrl_offset < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
phandle = fdt_get_phandle(blob, pinctrl_offset);
|
||||||
|
if (phandle < 0)
|
||||||
|
return;
|
||||||
|
|
||||||
|
fdt_setprop_u32(blob, uart_offset, "pinctrl-0", phandle);
|
||||||
|
}
|
||||||
|
|
||||||
|
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||||
|
{
|
||||||
|
ft_board_assign_uart(blob);
|
||||||
|
|
||||||
|
return ft_common_board_setup(blob, bd);
|
||||||
|
}
|
||||||
|
#endif
|
20
board/toradex/smarc-imx8mp/smarc-imx8mp.env
Normal file
20
board/toradex/smarc-imx8mp/smarc-imx8mp.env
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
boot_script_dhcp=boot.scr
|
||||||
|
boot_targets=mmc1 mmc0 dhcp
|
||||||
|
console=ttymxc1
|
||||||
|
fdt_addr_r=0x50200000
|
||||||
|
fdt_board=dev
|
||||||
|
initrd_addr=0x43800000
|
||||||
|
initrd_high=0xffffffffffffffff
|
||||||
|
kernel_addr_r=CONFIG_SYS_LOAD_ADDR
|
||||||
|
kernel_comp_addr_r=0x40200000
|
||||||
|
kernel_comp_size=0x08000000
|
||||||
|
ramdisk_addr_r=0x50300000
|
||||||
|
scriptaddr=0x50280000
|
||||||
|
|
||||||
|
update_uboot=
|
||||||
|
askenv confirm Did you load flash.bin (y/N)?;
|
||||||
|
if test $confirm = y; then
|
||||||
|
setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt
|
||||||
|
${blkcnt} / 0x200; mmc dev 0 1; mmc write ${loadaddr} 0x0
|
||||||
|
${blkcnt};
|
||||||
|
fi
|
130
board/toradex/smarc-imx8mp/spl.c
Normal file
130
board/toradex/smarc-imx8mp/spl.c
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
/* Copyright (C) 2024 Toradex */
|
||||||
|
|
||||||
|
#include <hang.h>
|
||||||
|
#include <init.h>
|
||||||
|
#include <log.h>
|
||||||
|
#include <spl.h>
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/ddr.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/global_data.h>
|
||||||
|
#include <asm/mach-imx/boot_mode.h>
|
||||||
|
#include <dm/device.h>
|
||||||
|
#include <power/pmic.h>
|
||||||
|
#include <power/pca9450.h>
|
||||||
|
|
||||||
|
#include "lpddr4_timing.h"
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
int spl_board_boot_device(enum boot_device boot_dev_spl)
|
||||||
|
{
|
||||||
|
return BOOT_DEVICE_BOOTROM;
|
||||||
|
}
|
||||||
|
|
||||||
|
void spl_dram_init(void)
|
||||||
|
{
|
||||||
|
/*
|
||||||
|
* Try configuring for dual rank memory falling back to single rank
|
||||||
|
*/
|
||||||
|
if (!ddr_init(&dram_timing)) {
|
||||||
|
puts("DDR configured as dual rank\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
lpddr4_single_rank_training_patch();
|
||||||
|
if (!ddr_init(&dram_timing)) {
|
||||||
|
puts("DDR configured as single rank\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
puts("DDR configuration failed\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void spl_board_init(void)
|
||||||
|
{
|
||||||
|
arch_misc_init();
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Set GIC clock to 500Mhz for OD VDD_SOC. Kernel driver does
|
||||||
|
* not allow to change it. Should set the clock after PMIC
|
||||||
|
* setting done. Default is 400Mhz (system_pll1_800m with div = 2)
|
||||||
|
* set by ROM for ND VDD_SOC
|
||||||
|
*/
|
||||||
|
clock_enable(CCGR_GIC, 0);
|
||||||
|
clock_set_target_val(GIC_CLK_ROOT, CLK_ROOT_ON | CLK_ROOT_SOURCE_SEL(5));
|
||||||
|
clock_enable(CCGR_GIC, 1);
|
||||||
|
|
||||||
|
puts("Normal Boot\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
int power_init_board(void)
|
||||||
|
{
|
||||||
|
struct udevice *dev;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = pmic_get("pmic@25", &dev);
|
||||||
|
if (ret == -ENODEV) {
|
||||||
|
puts("No pmic@25\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
if (ret < 0)
|
||||||
|
return ret;
|
||||||
|
|
||||||
|
/* BUCKxOUT_DVS0/1 control BUCK123 output */
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK123_DVS, 0x29);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Increase VDD_SOC to typical value 0.95V before first
|
||||||
|
* DRAM access, set DVS1 to 0.85V for suspend.
|
||||||
|
* Enable DVS control through PMIC_STBY_REQ and
|
||||||
|
* set B1_ENMODE=1 (ON by PMIC_ON_REQ=H)
|
||||||
|
*/
|
||||||
|
if (IS_ENABLED(CONFIG_IMX8M_VDD_SOC_850MV))
|
||||||
|
/* set DVS0 to 0.85v for special case */
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x14);
|
||||||
|
else
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x1c);
|
||||||
|
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x14);
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK1CTRL, 0x59);
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Kernel uses OD/OD freq for SOC.
|
||||||
|
* To avoid timing risk from SOC to ARM,increase VDD_ARM to OD
|
||||||
|
* voltage 0.95V.
|
||||||
|
*/
|
||||||
|
pmic_reg_write(dev, PCA9450_BUCK2OUT_DVS0, 0x1c);
|
||||||
|
|
||||||
|
/* set LDO4 and CONFIG2 to enable the I2C level translator */
|
||||||
|
pmic_reg_write(dev, PCA9450_LDO4CTRL, 0x59);
|
||||||
|
pmic_reg_write(dev, PCA9450_CONFIG2, 0x1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Do not use BSS area in this phase */
|
||||||
|
void board_init_f(ulong dummy)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
arch_cpu_init();
|
||||||
|
|
||||||
|
init_uart_clk(3);
|
||||||
|
|
||||||
|
ret = spl_early_init();
|
||||||
|
if (ret) {
|
||||||
|
debug("spl_init() failed: %d\n", ret);
|
||||||
|
hang();
|
||||||
|
}
|
||||||
|
|
||||||
|
preloader_console_init();
|
||||||
|
|
||||||
|
enable_tzc380();
|
||||||
|
|
||||||
|
/* PMIC initialization */
|
||||||
|
power_init_board();
|
||||||
|
|
||||||
|
/* DDR initialization */
|
||||||
|
spl_dram_init();
|
||||||
|
}
|
184
configs/toradex-smarc-imx8mp_defconfig
Normal file
184
configs/toradex-smarc-imx8mp_defconfig
Normal file
@ -0,0 +1,184 @@
|
|||||||
|
CONFIG_ARM=y
|
||||||
|
CONFIG_ARCH_IMX8M=y
|
||||||
|
CONFIG_TEXT_BASE=0x40200000
|
||||||
|
CONFIG_SPL_GPIO=y
|
||||||
|
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||||
|
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||||
|
CONFIG_NR_DRAM_BANKS=2
|
||||||
|
CONFIG_ENV_SIZE=0x2000
|
||||||
|
CONFIG_ENV_OFFSET=0xFFFFDE00
|
||||||
|
CONFIG_DM_GPIO=y
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="imx8mp-toradex-smarc-dev"
|
||||||
|
CONFIG_SPL_TEXT_BASE=0x920000
|
||||||
|
CONFIG_TARGET_TORADEX_SMARC_IMX8MP=y
|
||||||
|
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||||
|
CONFIG_DM_RESET=y
|
||||||
|
CONFIG_SYS_MONITOR_LEN=524288
|
||||||
|
CONFIG_SPL_MMC=y
|
||||||
|
CONFIG_SPL_SERIAL=y
|
||||||
|
CONFIG_SPL_DRIVERS_MISC=y
|
||||||
|
CONFIG_SPL_STACK=0x960000
|
||||||
|
CONFIG_SPL_SYS_MALLOC_F_LEN=0x4000
|
||||||
|
CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
|
||||||
|
CONFIG_SPL_BSS_START_ADDR=0x98fc00
|
||||||
|
CONFIG_SPL_BSS_MAX_SIZE=0x400
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_IMX_BOOTAUX=y
|
||||||
|
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x48000000
|
||||||
|
CONFIG_SYS_LOAD_ADDR=0x48200000
|
||||||
|
CONFIG_PCI=y
|
||||||
|
CONFIG_SYS_MEMTEST_START=0x40000000
|
||||||
|
CONFIG_SYS_MEMTEST_END=0x80000000
|
||||||
|
CONFIG_REMAKE_ELF=y
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_FIT_EXTERNAL_OFFSET=0x3000
|
||||||
|
CONFIG_FIT_VERBOSE=y
|
||||||
|
CONFIG_SPL_LOAD_FIT=y
|
||||||
|
CONFIG_BOOTSTD_FULL=y
|
||||||
|
# CONFIG_BOOTSTD_BOOTCOMMAND is not set
|
||||||
|
CONFIG_BOOTDELAY=1
|
||||||
|
CONFIG_OF_SYSTEM_SETUP=y
|
||||||
|
CONFIG_BOOTCOMMAND="bootflow scan -b"
|
||||||
|
CONFIG_USE_PREBOOT=y
|
||||||
|
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx8mp-toradex-smarc-dev.dtb"
|
||||||
|
CONFIG_SYS_CBSIZE=2048
|
||||||
|
CONFIG_SYS_PBSIZE=2081
|
||||||
|
CONFIG_LOG=y
|
||||||
|
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||||
|
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||||
|
CONFIG_ARCH_MISC_INIT=y
|
||||||
|
CONFIG_SPL_MAX_SIZE=0x26000
|
||||||
|
CONFIG_SPL_BOARD_INIT=y
|
||||||
|
CONFIG_SPL_BOOTROM_SUPPORT=y
|
||||||
|
CONFIG_SPL_SYS_MALLOC_SIMPLE=y
|
||||||
|
# CONFIG_SPL_SHARES_INIT_SP_ADDR is not set
|
||||||
|
CONFIG_SPL_SYS_MALLOC=y
|
||||||
|
CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y
|
||||||
|
CONFIG_SPL_CUSTOM_SYS_MALLOC_ADDR=0x42200000
|
||||||
|
CONFIG_SPL_SYS_MALLOC_SIZE=0x80000
|
||||||
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_SECTOR=y
|
||||||
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x300
|
||||||
|
CONFIG_SPL_I2C=y
|
||||||
|
CONFIG_SPL_POWER=y
|
||||||
|
CONFIG_SPL_WATCHDOG=y
|
||||||
|
CONFIG_SYS_PROMPT="SMARC iMX8MP # "
|
||||||
|
# CONFIG_BOOTM_NETBSD is not set
|
||||||
|
CONFIG_CMD_ASKENV=y
|
||||||
|
# CONFIG_CMD_EXPORTENV is not set
|
||||||
|
CONFIG_CRC32_VERIFY=y
|
||||||
|
CONFIG_CMD_MD5SUM=y
|
||||||
|
CONFIG_MD5SUM_VERIFY=y
|
||||||
|
CONFIG_CMD_MEMTEST=y
|
||||||
|
CONFIG_CMD_CLK=y
|
||||||
|
CONFIG_CMD_FUSE=y
|
||||||
|
CONFIG_CMD_GPIO=y
|
||||||
|
CONFIG_CMD_I2C=y
|
||||||
|
CONFIG_CMD_MMC=y
|
||||||
|
CONFIG_CMD_PCI=y
|
||||||
|
CONFIG_CMD_READ=y
|
||||||
|
CONFIG_CMD_USB=y
|
||||||
|
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||||
|
CONFIG_CMD_BOOTCOUNT=y
|
||||||
|
CONFIG_CMD_CACHE=y
|
||||||
|
CONFIG_CMD_TIME=y
|
||||||
|
CONFIG_CMD_SYSBOOT=y
|
||||||
|
CONFIG_CMD_UUID=y
|
||||||
|
CONFIG_CMD_REGULATOR=y
|
||||||
|
CONFIG_CMD_EXT4_WRITE=y
|
||||||
|
# CONFIG_ISO_PARTITION is not set
|
||||||
|
# CONFIG_SPL_EFI_PARTITION is not set
|
||||||
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
|
CONFIG_ENV_OVERWRITE=y
|
||||||
|
CONFIG_ENV_IS_IN_MMC=y
|
||||||
|
CONFIG_SYS_RELOC_GD_ENV_ADDR=y
|
||||||
|
CONFIG_SYS_MMC_ENV_DEV=0
|
||||||
|
CONFIG_SYS_MMC_ENV_PART=1
|
||||||
|
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||||
|
CONFIG_USE_ETHPRIME=y
|
||||||
|
CONFIG_ETHPRIME="eth0"
|
||||||
|
CONFIG_VERSION_VARIABLE=y
|
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
|
CONFIG_IP_DEFRAG=y
|
||||||
|
CONFIG_TFTP_BLOCKSIZE=4096
|
||||||
|
CONFIG_SPL_DM=y
|
||||||
|
CONFIG_BOOTCOUNT_LIMIT=y
|
||||||
|
CONFIG_BOOTCOUNT_ENV=y
|
||||||
|
CONFIG_CLK_COMPOSITE_CCF=y
|
||||||
|
CONFIG_CLK_IMX8MP=y
|
||||||
|
CONFIG_FSL_CAAM=y
|
||||||
|
CONFIG_USB_FUNCTION_FASTBOOT=y
|
||||||
|
CONFIG_FASTBOOT_BUF_ADDR=0x44200000
|
||||||
|
CONFIG_FASTBOOT_FLASH=y
|
||||||
|
CONFIG_FASTBOOT_UUU_SUPPORT=y
|
||||||
|
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
|
||||||
|
CONFIG_GPIO_HOG=y
|
||||||
|
CONFIG_SPL_GPIO_HOG=y
|
||||||
|
CONFIG_MXC_GPIO=y
|
||||||
|
CONFIG_DM_PCA953X=y
|
||||||
|
CONFIG_DM_I2C=y
|
||||||
|
CONFIG_LED=y
|
||||||
|
CONFIG_LED_GPIO=y
|
||||||
|
CONFIG_I2C_EEPROM=y
|
||||||
|
CONFIG_SUPPORT_EMMC_BOOT=y
|
||||||
|
CONFIG_MMC_IO_VOLTAGE=y
|
||||||
|
CONFIG_SPL_MMC_IO_VOLTAGE=y
|
||||||
|
CONFIG_MMC_UHS_SUPPORT=y
|
||||||
|
CONFIG_SPL_MMC_UHS_SUPPORT=y
|
||||||
|
CONFIG_MMC_HS400_ES_SUPPORT=y
|
||||||
|
CONFIG_MMC_HS400_SUPPORT=y
|
||||||
|
CONFIG_SPL_MMC_HS400_SUPPORT=y
|
||||||
|
CONFIG_FSL_USDHC=y
|
||||||
|
CONFIG_PHY_ADDR_ENABLE=y
|
||||||
|
CONFIG_PHY_TI_DP83867=y
|
||||||
|
CONFIG_DM_MDIO=y
|
||||||
|
CONFIG_DM_ETH_PHY=y
|
||||||
|
CONFIG_DWC_ETH_QOS=y
|
||||||
|
CONFIG_DWC_ETH_QOS_IMX=y
|
||||||
|
CONFIG_FEC_MXC=y
|
||||||
|
CONFIG_RGMII=y
|
||||||
|
CONFIG_MII=y
|
||||||
|
CONFIG_NVME_PCI=y
|
||||||
|
CONFIG_PCIE_DW_IMX=y
|
||||||
|
CONFIG_PHY=y
|
||||||
|
CONFIG_PHY_IMX8MQ_USB=y
|
||||||
|
CONFIG_PHY_IMX8M_PCIE=y
|
||||||
|
CONFIG_PINCTRL=y
|
||||||
|
CONFIG_SPL_PINCTRL=y
|
||||||
|
CONFIG_PINCTRL_IMX8M=y
|
||||||
|
CONFIG_POWER_DOMAIN=y
|
||||||
|
CONFIG_IMX8M_POWER_DOMAIN=y
|
||||||
|
CONFIG_IMX8MP_HSIOMIX_BLKCTRL=y
|
||||||
|
CONFIG_DM_PMIC=y
|
||||||
|
CONFIG_DM_PMIC_PCA9450=y
|
||||||
|
CONFIG_SPL_DM_PMIC_PCA9450=y
|
||||||
|
CONFIG_DM_REGULATOR_PCA9450=y
|
||||||
|
CONFIG_SPL_DM_REGULATOR_PCA9450=y
|
||||||
|
CONFIG_DM_REGULATOR_FIXED=y
|
||||||
|
CONFIG_DM_REGULATOR_GPIO=y
|
||||||
|
CONFIG_DM_SERIAL=y
|
||||||
|
CONFIG_MXC_UART=y
|
||||||
|
CONFIG_SYSRESET=y
|
||||||
|
CONFIG_SPL_SYSRESET=y
|
||||||
|
CONFIG_SYSRESET_PSCI=y
|
||||||
|
CONFIG_SYSRESET_WATCHDOG=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
|
CONFIG_IMX_TMU=y
|
||||||
|
CONFIG_USB=y
|
||||||
|
# CONFIG_SPL_DM_USB is not set
|
||||||
|
CONFIG_DM_USB_GADGET=y
|
||||||
|
CONFIG_USB_XHCI_HCD=y
|
||||||
|
CONFIG_USB_XHCI_DWC3=y
|
||||||
|
CONFIG_USB_XHCI_DWC3_OF_SIMPLE=y
|
||||||
|
CONFIG_USB_EHCI_HCD=y
|
||||||
|
# CONFIG_USB_EHCI_MX7 is not set
|
||||||
|
CONFIG_USB_DWC3=y
|
||||||
|
CONFIG_USB_DWC3_GENERIC=y
|
||||||
|
CONFIG_USB_KEYBOARD=y
|
||||||
|
CONFIG_USB_HOST_ETHER=y
|
||||||
|
CONFIG_USB_GADGET=y
|
||||||
|
CONFIG_USB_GADGET_MANUFACTURER="Toradex"
|
||||||
|
CONFIG_USB_GADGET_VENDOR_NUM=0x1b67
|
||||||
|
CONFIG_USB_GADGET_PRODUCT_NUM=0x4000
|
||||||
|
CONFIG_IMX_WATCHDOG=y
|
||||||
|
CONFIG_HEXDUMP=y
|
@ -9,6 +9,7 @@ Toradex
|
|||||||
apalis-imx8
|
apalis-imx8
|
||||||
colibri_imx7
|
colibri_imx7
|
||||||
colibri-imx8x
|
colibri-imx8x
|
||||||
|
smarc-imx8mp
|
||||||
verdin-am62
|
verdin-am62
|
||||||
verdin-imx8mm
|
verdin-imx8mm
|
||||||
verdin-imx8mp
|
verdin-imx8mp
|
||||||
|
116
doc/board/toradex/smarc-imx8mp.rst
Normal file
116
doc/board/toradex/smarc-imx8mp.rst
Normal file
@ -0,0 +1,116 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
Toradex SMARC iMX8M Plus Module
|
||||||
|
===============================
|
||||||
|
|
||||||
|
- SoM: https://www.toradex.com/computer-on-modules/smarc-arm-family/nxp-imx-8m-plus
|
||||||
|
- Carrier board: https://www.toradex.com/products/carrier-board/smarc-development-board-kit
|
||||||
|
|
||||||
|
Quick Start
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- Build the ARM trusted firmware binary
|
||||||
|
- Get the DDR firmware
|
||||||
|
- Build U-Boot
|
||||||
|
- Flash to eMMC
|
||||||
|
- Boot
|
||||||
|
|
||||||
|
Get and Build the ARM Trusted Firmware (Trusted Firmware A)
|
||||||
|
-----------------------------------------------------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ echo "Downloading and building TF-A..."
|
||||||
|
$ git clone https://git.trustedfirmware.org/TF-A/trusted-firmware-a.git
|
||||||
|
$ cd trusted-firmware-a
|
||||||
|
|
||||||
|
Then build ATF (TF-A):
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ export CROSS_COMPILE=aarch64-linux-gnu-
|
||||||
|
$ make PLAT=imx8mp IMX_BOOT_UART_BASE=0x30a60000 bl31
|
||||||
|
$ cp build/imx8mp/release/bl31.bin ../
|
||||||
|
|
||||||
|
Get the DDR Firmware
|
||||||
|
--------------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ cd ..
|
||||||
|
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.10.1.bin
|
||||||
|
$ chmod +x firmware-imx-8.10.1.bin
|
||||||
|
$ ./firmware-imx-8.10.1.bin
|
||||||
|
$ cp firmware-imx-8.10.1/firmware/ddr/synopsys/lpddr4*_202006.bin ./
|
||||||
|
|
||||||
|
Build U-Boot
|
||||||
|
------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
$ export CROSS_COMPILE=aarch64-linux-gnu-
|
||||||
|
$ make toradex-smarc-imx8mp_defconfig
|
||||||
|
$ make
|
||||||
|
|
||||||
|
Flash to eMMC
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
> tftpboot ${loadaddr} flash.bin
|
||||||
|
> setexpr blkcnt ${filesize} + 0x1ff && setexpr blkcnt ${blkcnt} / 0x200
|
||||||
|
> mmc dev 0 1 && mmc write ${loadaddr} 0x0 ${blkcnt}
|
||||||
|
|
||||||
|
As a convenience, instead of the last two commands, one may also use the update
|
||||||
|
U-Boot wrapper:
|
||||||
|
|
||||||
|
.. code-block:: bash
|
||||||
|
|
||||||
|
> run update_uboot
|
||||||
|
|
||||||
|
Boot
|
||||||
|
----
|
||||||
|
|
||||||
|
ATF, U-Boot proper and u-boot.dtb images are packed into a FIT image,
|
||||||
|
which is loaded and parsed by SPL.
|
||||||
|
|
||||||
|
Boot sequence is:
|
||||||
|
|
||||||
|
* SPL ---> ATF (TF-A) ---> U-Boot proper
|
||||||
|
|
||||||
|
Output::
|
||||||
|
|
||||||
|
U-Boot SPL 2025.04-rc5-00023-g34c31be81211 (Apr 04 2025 - 15:36:23 +0100)
|
||||||
|
Training FAILED
|
||||||
|
DDR configured as single rank
|
||||||
|
SEC0: RNG instantiated
|
||||||
|
Normal Boot
|
||||||
|
Trying to boot from BOOTROM
|
||||||
|
Boot Stage: Primary boot
|
||||||
|
Find img info 0x4802f200, size 1100
|
||||||
|
Need continue download 1024
|
||||||
|
NOTICE: Do not release JR0 to NS as it can be used by HAB
|
||||||
|
NOTICE: BL31: v2.11.0(release):v2.11.0-723-gbd298f5c30ac
|
||||||
|
NOTICE: BL31: Built : 14:18:43, Apr 4 2025
|
||||||
|
|
||||||
|
|
||||||
|
U-Boot 2025.04-rc5-00023-g34c31be81211 (Apr 04 2025 - 15:36:23 +0100)
|
||||||
|
|
||||||
|
CPU: Freescale i.MX8MP[8] rev1.1 1600 MHz (running at 1200 MHz)
|
||||||
|
CPU: Industrial temperature grade (-40C to 105C) at 72C
|
||||||
|
Reset cause: POR
|
||||||
|
DRAM: 4 GiB
|
||||||
|
Core: 312 devices, 32 uclasses, devicetree: separate
|
||||||
|
WDT: Started watchdog@30280000 with servicing every 1000ms (60s timeout)
|
||||||
|
MMC: FSL_SDHC: 1, FSL_SDHC: 0
|
||||||
|
Loading Environment from MMC... Reading from MMC(0)... OK
|
||||||
|
In: serial@30a60000
|
||||||
|
Out: serial@30a60000
|
||||||
|
Err: serial@30a60000
|
||||||
|
Model: Toradex 0097 SMARC iMX8M Plus Quad 4GB WB IT V1.0A
|
||||||
|
Serial#: 15603364
|
||||||
|
SEC0: RNG instantiated
|
||||||
|
Net: Get shared mii bus on ethernet@30be0000
|
||||||
|
eth1: ethernet@30be0000, eth0: ethernet@30bf0000 [PRIME]
|
||||||
|
Hit any key to stop autoboot: 0
|
||||||
|
SMARC iMX8MP #
|
28
include/configs/toradex-smarc-imx8mp.h
Normal file
28
include/configs/toradex-smarc-imx8mp.h
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
/* Copyright (C) 2024 Toradex */
|
||||||
|
|
||||||
|
#ifndef __TORADEX_SMARC_IMX8MP_H
|
||||||
|
#define __TORADEX_SMARC_IMX8MP_H
|
||||||
|
|
||||||
|
#include <asm/arch/imx-regs.h>
|
||||||
|
#include <linux/sizes.h>
|
||||||
|
|
||||||
|
#define CFG_SYS_UBOOT_BASE \
|
||||||
|
(QSPI0_AMBA_BASE + CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR * 512)
|
||||||
|
|
||||||
|
#ifdef CONFIG_SPL_BUILD
|
||||||
|
/* malloc f used before GD_FLG_FULL_MALLOC_INIT set */
|
||||||
|
#define CFG_MALLOC_F_ADDR 0x184000
|
||||||
|
#endif /* CONFIG_SPL_BUILD */
|
||||||
|
|
||||||
|
#define CFG_SYS_INIT_RAM_ADDR 0x40000000
|
||||||
|
#define CFG_SYS_INIT_RAM_SIZE SZ_512K
|
||||||
|
|
||||||
|
/* i.MX 8M Plus supports max. 8GB memory in two albeit consecutive banks */
|
||||||
|
#define CFG_SYS_SDRAM_BASE 0x40000000
|
||||||
|
#define PHYS_SDRAM 0x40000000
|
||||||
|
#define PHYS_SDRAM_SIZE (SZ_2G + SZ_1G)
|
||||||
|
#define PHYS_SDRAM_2 0x100000000
|
||||||
|
#define PHYS_SDRAM_2_SIZE (SZ_4G + SZ_1G)
|
||||||
|
|
||||||
|
#endif /* __TORADEX_SMARC_IMX8MP_H */
|
Loading…
Reference in New Issue
Block a user