mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-08-16 04:07:00 +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 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
|
||||
bool "Support Toradex Verdin iMX8M Mini module"
|
||||
select IMX8MM
|
||||
@ -410,6 +416,7 @@ source "board/purism/librem5/Kconfig"
|
||||
source "board/ronetix/imx8mq-cm/Kconfig"
|
||||
source "board/technexion/pico-imx8mq/Kconfig"
|
||||
source "board/variscite/imx8mn_var_som/Kconfig"
|
||||
source "board/toradex/smarc-imx8mp/Kconfig"
|
||||
source "board/toradex/verdin-imx8mm/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_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_IMX8MPQ_4GB_WB_IT, "SMARC iMX8M Plus Quad 4GB WB IT", TARGET_IS_ENABLED(TORADEX_SMARC_IMX8MP) },
|
||||
};
|
||||
|
||||
struct pid4list {
|
||||
|
@ -123,6 +123,7 @@ enum {
|
||||
APALIS_IMX8QP_1300MHZ,
|
||||
APALIS_IMX8QM_8GB_WIFI_BT_IT_1300MHZ, /* 95 */
|
||||
SMARC_IMX95_HEXA_8GB_WB_IT,
|
||||
SMARC_IMX8MPQ_4GB_WB_IT,
|
||||
};
|
||||
|
||||
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
|
||||
colibri_imx7
|
||||
colibri-imx8x
|
||||
smarc-imx8mp
|
||||
verdin-am62
|
||||
verdin-imx8mm
|
||||
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