mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-12-19 08:21:27 +01:00
board: toradex: add Toradex SMARC iMX95
Add support for the Toradex SMARC iMX95. Link: https://www.toradex.com/computer-on-modules/smarc-arm-family/nxp-imx95 Link: https://www.toradex.com/products/carrier-board/smarc-development-board-kit Signed-off-by: João Paulo Gonçalves <joao.goncalves@toradex.com> Co-developed-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com> Signed-off-by: Emanuele Ghidoli <emanuele.ghidoli@toradex.com> Co-developed-by: Max Krummenacher <max.krummenacher@toradex.com> Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Co-developed-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com> Signed-off-by: Ernest Van Hoecke <ernest.vanhoecke@toradex.com>
This commit is contained in:
parent
f6f319f035
commit
ff0540fcfe
110
arch/arm/dts/imx95-toradex-smarc-dev-u-boot.dtsi
Normal file
110
arch/arm/dts/imx95-toradex-smarc-dev-u-boot.dtsi
Normal file
@ -0,0 +1,110 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
/* Copyright (C) 2025 Toradex */
|
||||||
|
|
||||||
|
#include "imx95-u-boot.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
sysinfo {
|
||||||
|
compatible = "toradex,sysinfo";
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio1 {
|
||||||
|
reg = <0 0x47400000 0 0x1000>, <0 0x47400040 0 0x40>;
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpi2c4 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&lpuart1 {
|
||||||
|
clocks = <&scmi_clk IMX95_CLK_LPUART1>, <&scmi_clk IMX95_CLK_LPUART1>;
|
||||||
|
clock-names = "ipg", "per";
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Conflict with JTAG interface */
|
||||||
|
&lpuart5 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_lpi2c4 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_lpi2c4_gpio {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_uart1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_usdhc1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_usdhc1_200mhz {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_usdhc2 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_usdhc2_200mhz {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_usdhc2_cd {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_usdhc2_pwr_en {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&pinctrl_usdhc2_vsel {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
®_usdhc2_vmmc {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
®_usdhc2_vqmmc {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&som_gpio_expander_0 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&som_gpio_expander_1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb2 {
|
||||||
|
/delete-property/power-domains;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3_dwc3 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usdhc1 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&usdhc2 {
|
||||||
|
bootph-pre-ram;
|
||||||
|
};
|
||||||
|
|
||||||
|
&wdog3 {
|
||||||
|
status = "disabled";
|
||||||
|
};
|
||||||
277
arch/arm/dts/imx95-toradex-smarc-dev.dts
Normal file
277
arch/arm/dts/imx95-toradex-smarc-dev.dts
Normal file
@ -0,0 +1,277 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later OR MIT
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2025 Toradex
|
||||||
|
*
|
||||||
|
* https://www.toradex.com/computer-on-modules/smarc-arm-family/nxp-imx95
|
||||||
|
* https://www.toradex.com/products/carrier-board/smarc-development-board-kit
|
||||||
|
*/
|
||||||
|
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include <dt-bindings/pwm/pwm.h>
|
||||||
|
#include "imx95-toradex-smarc.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "Toradex SMARC iMX95 on Toradex SMARC Development Board";
|
||||||
|
compatible = "toradex,smarc-imx95-dev",
|
||||||
|
"toradex,smarc-imx95",
|
||||||
|
"fsl,imx95";
|
||||||
|
|
||||||
|
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 = <&scmi_clk IMX95_CLK_SAI3>;
|
||||||
|
sound-dai = <&wm8904_1a>;
|
||||||
|
};
|
||||||
|
|
||||||
|
simple-audio-card,cpu {
|
||||||
|
sound-dai = <&sai3>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC GBE0 */
|
||||||
|
&enetc_port0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC GBE1 */
|
||||||
|
&enetc_port1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC CAN0 */
|
||||||
|
&flexcan1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC CAN1 */
|
||||||
|
&flexcan2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio2 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_gpio12>, <&pinctrl_gpio13>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio4 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_gpio10>, <&pinctrl_gpio11>;
|
||||||
|
};
|
||||||
|
|
||||||
|
&gpio5 {
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_gpio2>,
|
||||||
|
<&pinctrl_gpio3>,
|
||||||
|
<&pinctrl_gpio4>,
|
||||||
|
<&pinctrl_gpio6>,
|
||||||
|
<&pinctrl_gpio8>,
|
||||||
|
<&pinctrl_gpio9>;
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_CAM0 */
|
||||||
|
&i2c_cam0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_CAM1 */
|
||||||
|
&i2c_cam1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_GP */
|
||||||
|
&lpi2c2 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
wm8904_1a: audio-codec@1a {
|
||||||
|
compatible = "wlf,wm8904";
|
||||||
|
reg = <0x1a>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_sai3>, <&pinctrl_sai3_mclk>;
|
||||||
|
#sound-dai-cells = <0>;
|
||||||
|
clocks = <&scmi_clk IMX95_CLK_SAI3>;
|
||||||
|
clock-names = "mclk";
|
||||||
|
AVDD-supply = <®_carrier_1p8v>;
|
||||||
|
CPVDD-supply = <®_carrier_1p8v>;
|
||||||
|
DBVDD-supply = <®_carrier_1p8v>;
|
||||||
|
DCVDD-supply = <®_carrier_1p8v>;
|
||||||
|
MICVDD-supply = <®_carrier_1p8v>;
|
||||||
|
};
|
||||||
|
|
||||||
|
temperature-sensor@4f {
|
||||||
|
compatible = "ti,tmp1075";
|
||||||
|
reg = <0x4f>;
|
||||||
|
};
|
||||||
|
|
||||||
|
eeprom@57 {
|
||||||
|
compatible = "st,24c02", "atmel,24c02";
|
||||||
|
reg = <0x57>;
|
||||||
|
pagesize = <16>;
|
||||||
|
};
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_PM */
|
||||||
|
&lpi2c3 {
|
||||||
|
clock-frequency = <100000>;
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
fan_controller: fan@18 {
|
||||||
|
compatible = "ti,amc6821";
|
||||||
|
reg = <0x18>;
|
||||||
|
#pwm-cells = <2>;
|
||||||
|
|
||||||
|
fan {
|
||||||
|
cooling-levels = <255>;
|
||||||
|
pwms = <&fan_controller 40000 PWM_POLARITY_INVERTED>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* Current measurement into module VCC */
|
||||||
|
hwmon@40 {
|
||||||
|
compatible = "ti,ina226";
|
||||||
|
reg = <0x40>;
|
||||||
|
shunt-resistor = <5000>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2C_LCD */
|
||||||
|
&lpi2c5 {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
i2c-mux@70 {
|
||||||
|
compatible = "nxp,pca9543";
|
||||||
|
reg = <0x70>;
|
||||||
|
i2c-mux-idle-disconnect;
|
||||||
|
#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 SPI0 */
|
||||||
|
&lpspi6 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SER1, used as the Linux Console */
|
||||||
|
&lpuart1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SER0, RS485 */
|
||||||
|
&lpuart2 {
|
||||||
|
linux,rs485-enabled-at-boot-time;
|
||||||
|
rs485-rts-active-low;
|
||||||
|
rs485-rx-during-tx;
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SER3, RS232 */
|
||||||
|
&lpuart3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC MDIO, shared between all ethernet ports */
|
||||||
|
&netc_emdio {
|
||||||
|
status = "okay";
|
||||||
|
|
||||||
|
ethphy3: ethernet-phy@4 {
|
||||||
|
reg = <4>;
|
||||||
|
pinctrl-names = "default";
|
||||||
|
pinctrl-0 = <&pinctrl_gpio7>;
|
||||||
|
interrupt-parent = <&gpio5>;
|
||||||
|
interrupts = <9 IRQ_TYPE_LEVEL_LOW>;
|
||||||
|
};
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC PCIE_A / M2 Key B */
|
||||||
|
&pcie0 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC PCIE_B / M2 Key E */
|
||||||
|
&pcie1 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC I2S0 */
|
||||||
|
&sai3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC LCD0_BKLT_PWM */
|
||||||
|
&tpm3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC LCD1_BKLT_PWM */
|
||||||
|
&tpm4 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC GPIO5 as PWM */
|
||||||
|
&tpm5 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC USB0 */
|
||||||
|
&usb2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC USB1..4 */
|
||||||
|
&usb3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3_dwc3 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
&usb3_phy {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
|
|
||||||
|
/* SMARC SDIO */
|
||||||
|
&usdhc2 {
|
||||||
|
status = "okay";
|
||||||
|
};
|
||||||
1153
arch/arm/dts/imx95-toradex-smarc.dtsi
Normal file
1153
arch/arm/dts/imx95-toradex-smarc.dtsi
Normal file
File diff suppressed because it is too large
Load Diff
@ -113,6 +113,10 @@ config TARGET_IMX943_EVK
|
|||||||
imply BOOTSTD_FULL
|
imply BOOTSTD_FULL
|
||||||
imply OF_UPSTREAM
|
imply OF_UPSTREAM
|
||||||
|
|
||||||
|
config TARGET_TORADEX_SMARC_IMX95
|
||||||
|
bool "Support Toradex SMARC iMX95"
|
||||||
|
select IMX95
|
||||||
|
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
source "board/freescale/imx91_evk/Kconfig"
|
source "board/freescale/imx91_evk/Kconfig"
|
||||||
@ -123,6 +127,7 @@ source "board/phytec/phycore_imx93/Kconfig"
|
|||||||
source "board/variscite/imx93_var_som/Kconfig"
|
source "board/variscite/imx93_var_som/Kconfig"
|
||||||
source "board/freescale/imx94_evk/Kconfig"
|
source "board/freescale/imx94_evk/Kconfig"
|
||||||
source "board/freescale/imx95_evk/Kconfig"
|
source "board/freescale/imx95_evk/Kconfig"
|
||||||
|
source "board/toradex/smarc-imx95/Kconfig"
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
|||||||
36
board/toradex/smarc-imx95/Kconfig
Normal file
36
board/toradex/smarc-imx95/Kconfig
Normal file
@ -0,0 +1,36 @@
|
|||||||
|
if TARGET_TORADEX_SMARC_IMX95
|
||||||
|
|
||||||
|
config SYS_BOARD
|
||||||
|
default "smarc-imx95"
|
||||||
|
|
||||||
|
config SYS_VENDOR
|
||||||
|
default "toradex"
|
||||||
|
|
||||||
|
config SYS_CONFIG_NAME
|
||||||
|
default "toradex-smarc-imx95"
|
||||||
|
|
||||||
|
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
|
||||||
11
board/toradex/smarc-imx95/MAINTAINERS
Normal file
11
board/toradex/smarc-imx95/MAINTAINERS
Normal file
@ -0,0 +1,11 @@
|
|||||||
|
Toradex SMARC iMX95
|
||||||
|
F: arch/arm/dts/imx95-toradex-smarc.dtsi
|
||||||
|
F: arch/arm/dts/imx95-toradex-smarc-dev.dts
|
||||||
|
F: arch/arm/dts/imx95-toradex-smarc-dev-u-boot.dtsi
|
||||||
|
F: board/toradex/smarc-imx95/
|
||||||
|
F: configs/toradex-smarc-imx95_defconfig
|
||||||
|
F: doc/board/toradex/smarc-imx95.rst
|
||||||
|
F: include/configs/toradex-smarc-imx95.h
|
||||||
|
M: Francesco Dolcini <francesco.dolcini@toradex.com>
|
||||||
|
S: Maintained
|
||||||
|
W: https://www.toradex.com/computer-on-modules/smarc-arm-family/nxp-imx95
|
||||||
8
board/toradex/smarc-imx95/Makefile
Normal file
8
board/toradex/smarc-imx95/Makefile
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
# Copyright (C) 2025 Toradex
|
||||||
|
|
||||||
|
obj-y += smarc-imx95.o
|
||||||
|
|
||||||
|
ifdef CONFIG_SPL_BUILD
|
||||||
|
obj-y += spl.o
|
||||||
|
endif
|
||||||
31
board/toradex/smarc-imx95/smarc-imx95.c
Normal file
31
board/toradex/smarc-imx95/smarc-imx95.c
Normal file
@ -0,0 +1,31 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
/* Copyright (C) 2025 Toradex */
|
||||||
|
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <fdt_support.h>
|
||||||
|
#include <init.h>
|
||||||
|
|
||||||
|
#include "../common/tdx-cfg-block.h"
|
||||||
|
|
||||||
|
int board_early_init_f(void)
|
||||||
|
{
|
||||||
|
/* UART1: A55 */
|
||||||
|
init_uart_clk(0);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int board_phys_sdram_size(phys_size_t *size)
|
||||||
|
{
|
||||||
|
*size = PHYS_SDRAM_SIZE + PHYS_SDRAM_2_SIZE;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
#if IS_ENABLED(CONFIG_OF_LIBFDT) && IS_ENABLED(CONFIG_OF_BOARD_SETUP)
|
||||||
|
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||||
|
{
|
||||||
|
return ft_common_board_setup(blob, bd);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
20
board/toradex/smarc-imx95/smarc-imx95.env
Normal file
20
board/toradex/smarc-imx95/smarc-imx95.env
Normal file
@ -0,0 +1,20 @@
|
|||||||
|
boot_scripts=boot.scr
|
||||||
|
boot_script_dhcp=boot.scr
|
||||||
|
boot_targets=mmc1 mmc0 dhcp
|
||||||
|
console=ttyLP1
|
||||||
|
fdt_board=dev
|
||||||
|
fdt_addr=0x9c400000
|
||||||
|
fdt_addr_r=0x9c400000
|
||||||
|
kernel_addr_r=CONFIG_SYS_LOAD_ADDR
|
||||||
|
kernel_comp_addr_r=0x94400000
|
||||||
|
kernel_comp_size=0x8000000
|
||||||
|
ramdisk_addr_r=0x9c800000
|
||||||
|
scriptaddr=0x9c600000
|
||||||
|
|
||||||
|
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
|
||||||
119
board/toradex/smarc-imx95/spl.c
Normal file
119
board/toradex/smarc-imx95/spl.c
Normal file
@ -0,0 +1,119 @@
|
|||||||
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
/* Copyright (C) 2025 Toradex */
|
||||||
|
|
||||||
|
#include <asm/arch/clock.h>
|
||||||
|
#include <asm/arch/mu.h>
|
||||||
|
#include <asm/arch/sys_proto.h>
|
||||||
|
#include <asm/mach-imx/boot_mode.h>
|
||||||
|
#include <asm/mach-imx/ele_api.h>
|
||||||
|
#include <asm/sections.h>
|
||||||
|
#include <asm/global_data.h>
|
||||||
|
#include <clk.h>
|
||||||
|
#include <dm/ofnode.h>
|
||||||
|
#include <dm/uclass.h>
|
||||||
|
#include <hang.h>
|
||||||
|
#include <i2c.h>
|
||||||
|
#include <init.h>
|
||||||
|
#include <spl.h>
|
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
|
#define EC_I2C_BUS_NODE_PATH "/soc/bus@42000000/i2c@42540000"
|
||||||
|
|
||||||
|
int spl_board_boot_device(enum boot_device boot_dev_spl)
|
||||||
|
{
|
||||||
|
switch (boot_dev_spl) {
|
||||||
|
case SD1_BOOT:
|
||||||
|
case MMC1_BOOT:
|
||||||
|
return BOOT_DEVICE_MMC1;
|
||||||
|
case SD2_BOOT:
|
||||||
|
case MMC2_BOOT:
|
||||||
|
return BOOT_DEVICE_MMC2;
|
||||||
|
case USB_BOOT:
|
||||||
|
return BOOT_DEVICE_BOARD;
|
||||||
|
default:
|
||||||
|
return BOOT_DEVICE_NONE;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
static void ec_boot_notify(void)
|
||||||
|
{
|
||||||
|
struct udevice *bus;
|
||||||
|
struct udevice *i2c_dev;
|
||||||
|
ofnode node;
|
||||||
|
int ret;
|
||||||
|
u8 val = 0x03;
|
||||||
|
|
||||||
|
node = ofnode_path(EC_I2C_BUS_NODE_PATH);
|
||||||
|
if (!ofnode_valid(node)) {
|
||||||
|
puts("Failed to find Toradex EC I2C BUS node\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = uclass_get_device_by_ofnode(UCLASS_I2C, node, &bus);
|
||||||
|
if (ret) {
|
||||||
|
puts("Failed to get Toradex EC I2C BUS\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
ret = dm_i2c_probe(bus, 0x28, 0, &i2c_dev);
|
||||||
|
if (ret) {
|
||||||
|
puts("Toradex EC not found\n");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* USB configuration before this command (when SoC starts in recovery):
|
||||||
|
* - SoC USB1 -> Smarc USB0
|
||||||
|
* - SoC USB2 -> NC
|
||||||
|
* After the command:
|
||||||
|
* - SoC USB1 -> SoM hub -> Smarc USB1, USB2, USB3 and USB4
|
||||||
|
* - SoC USB2 -> Smarc USB0
|
||||||
|
*/
|
||||||
|
ret = dm_i2c_write(i2c_dev, 0xD0, &val, 1);
|
||||||
|
if (ret)
|
||||||
|
puts("Cannot send command to Toradex EC\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void spl_board_init(void)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
ret = ele_start_rng();
|
||||||
|
if (ret)
|
||||||
|
printf("Fail to start RNG: %d\n", ret);
|
||||||
|
}
|
||||||
|
|
||||||
|
void board_init_f(ulong dummy)
|
||||||
|
{
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
/* Clear the BSS. */
|
||||||
|
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||||
|
|
||||||
|
if (IS_ENABLED(CONFIG_SPL_RECOVER_DATA_SECTION))
|
||||||
|
spl_save_restore_data();
|
||||||
|
|
||||||
|
timer_init();
|
||||||
|
|
||||||
|
/* Need dm_init() to run before any SCMI calls */
|
||||||
|
spl_early_init();
|
||||||
|
|
||||||
|
/* Need to enable SCMI drivers and ELE driver before console */
|
||||||
|
ret = imx9_probe_mu();
|
||||||
|
if (ret)
|
||||||
|
hang(); /* MU not probed, nothing can be outputed, hang */
|
||||||
|
|
||||||
|
arch_cpu_init();
|
||||||
|
|
||||||
|
board_early_init_f();
|
||||||
|
|
||||||
|
preloader_console_init();
|
||||||
|
|
||||||
|
debug("SOC: 0x%x\n", gd->arch.soc_rev);
|
||||||
|
debug("LC: 0x%x\n", gd->arch.lifecycle);
|
||||||
|
|
||||||
|
ec_boot_notify();
|
||||||
|
get_reset_reason(true, false);
|
||||||
|
|
||||||
|
board_init_r(NULL, 0);
|
||||||
|
}
|
||||||
172
configs/toradex-smarc-imx95_defconfig
Normal file
172
configs/toradex-smarc-imx95_defconfig
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
CONFIG_ARM=y
|
||||||
|
CONFIG_ARCH_IMX9=y
|
||||||
|
CONFIG_TEXT_BASE=0x90200000
|
||||||
|
CONFIG_SYS_MALLOC_LEN=0x2000000
|
||||||
|
CONFIG_SYS_MALLOC_F_LEN=0x10000
|
||||||
|
CONFIG_SPL_GPIO=y
|
||||||
|
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||||
|
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||||
|
CONFIG_NR_DRAM_BANKS=3
|
||||||
|
CONFIG_ENV_SIZE=0x2000
|
||||||
|
CONFIG_ENV_OFFSET=0xFFFFDE00
|
||||||
|
CONFIG_DM_GPIO=y
|
||||||
|
CONFIG_DEFAULT_DEVICE_TREE="imx95-toradex-smarc-dev"
|
||||||
|
CONFIG_TARGET_TORADEX_SMARC_IMX95=y
|
||||||
|
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||||
|
CONFIG_SYS_MONITOR_LEN=524288
|
||||||
|
CONFIG_SPL_MMC=y
|
||||||
|
CONFIG_SPL_SERIAL=y
|
||||||
|
CONFIG_SPL_DRIVERS_MISC=y
|
||||||
|
CONFIG_SPL_TEXT_BASE=0x20480000
|
||||||
|
CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
|
||||||
|
CONFIG_SPL_BSS_START_ADDR=0x204d6000
|
||||||
|
CONFIG_SPL_BSS_MAX_SIZE=0x2000
|
||||||
|
CONFIG_SYS_LOAD_ADDR=0x90400000
|
||||||
|
CONFIG_WATCHDOG_TIMEOUT_MSECS=30000
|
||||||
|
CONFIG_SPL=y
|
||||||
|
CONFIG_SPL_RECOVER_DATA_SECTION=y
|
||||||
|
CONFIG_PCI=y
|
||||||
|
CONFIG_SYS_MEMTEST_START=0x90000000
|
||||||
|
CONFIG_SYS_MEMTEST_END=0xA0000000
|
||||||
|
CONFIG_REMAKE_ELF=y
|
||||||
|
CONFIG_FIT=y
|
||||||
|
CONFIG_FIT_VERBOSE=y
|
||||||
|
CONFIG_BOOTSTD_FULL=y
|
||||||
|
CONFIG_BOOTDELAY=1
|
||||||
|
CONFIG_OF_SYSTEM_SETUP=y
|
||||||
|
CONFIG_BOOTCOMMAND="bootflow scan -b"
|
||||||
|
CONFIG_USE_PREBOOT=y
|
||||||
|
CONFIG_PREBOOT="test -n ${fdtfile} || setenv fdtfile imx95-toradex-smarc-${fdt_board}.dtb"
|
||||||
|
CONFIG_SYS_CBSIZE=2048
|
||||||
|
CONFIG_SYS_PBSIZE=2074
|
||||||
|
CONFIG_LOG=y
|
||||||
|
# CONFIG_DISPLAY_BOARDINFO is not set
|
||||||
|
CONFIG_DISPLAY_BOARDINFO_LATE=y
|
||||||
|
CONFIG_BOARD_EARLY_INIT_F=y
|
||||||
|
# CONFIG_BOARD_INIT is not set
|
||||||
|
CONFIG_SPL_MAX_SIZE=0x30000
|
||||||
|
CONFIG_SPL_BOARD_INIT=y
|
||||||
|
CONFIG_SPL_LOAD_IMX_CONTAINER=y
|
||||||
|
CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx9/scmi/container.cfg"
|
||||||
|
# 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=0x93200000
|
||||||
|
CONFIG_SPL_SYS_MALLOC_SIZE=0x80000
|
||||||
|
CONFIG_SPL_SYS_MMCSD_RAW_MODE=y
|
||||||
|
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x1040
|
||||||
|
CONFIG_SPL_I2C=y
|
||||||
|
CONFIG_SPL_DM_MAILBOX=y
|
||||||
|
CONFIG_SPL_POWER_DOMAIN=y
|
||||||
|
CONFIG_SPL_THERMAL=y
|
||||||
|
CONFIG_SPL_WATCHDOG=y
|
||||||
|
CONFIG_SYS_PROMPT="SMARC iMX95 # "
|
||||||
|
CONFIG_CMD_ASKENV=y
|
||||||
|
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_SDP=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_HASH=y
|
||||||
|
CONFIG_CMD_SCMI=y
|
||||||
|
CONFIG_CMD_EXT4_WRITE=y
|
||||||
|
CONFIG_OF_CONTROL=y
|
||||||
|
CONFIG_SPL_OF_CONTROL=y
|
||||||
|
CONFIG_ENV_OVERWRITE=y
|
||||||
|
CONFIG_ENV_IS_IN_MMC=y
|
||||||
|
CONFIG_ENV_RELOC_GD_ENV_ADDR=y
|
||||||
|
CONFIG_ENV_MMC_EMMC_HW_PARTITION=1
|
||||||
|
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||||
|
CONFIG_USE_ETHPRIME=y
|
||||||
|
CONFIG_ETHPRIME="eth0"
|
||||||
|
CONFIG_VERSION_VARIABLE=y
|
||||||
|
CONFIG_PROT_UDP=y
|
||||||
|
CONFIG_IP_DEFRAG=y
|
||||||
|
CONFIG_NET_RANDOM_ETHADDR=y
|
||||||
|
CONFIG_TFTP_BLOCKSIZE=4096
|
||||||
|
CONFIG_SYS_RX_ETH_BUFFER=8
|
||||||
|
CONFIG_SPL_DM=y
|
||||||
|
CONFIG_SPL_DM_SEQ_ALIAS=y
|
||||||
|
CONFIG_REGMAP=y
|
||||||
|
CONFIG_SYSCON=y
|
||||||
|
CONFIG_SPL_OF_TRANSLATE=y
|
||||||
|
CONFIG_BOOTCOUNT_LIMIT=y
|
||||||
|
CONFIG_BOOTCOUNT_ENV=y
|
||||||
|
CONFIG_CLK=y
|
||||||
|
CONFIG_SPL_CLK=y
|
||||||
|
CONFIG_SPL_CLK_CCF=y
|
||||||
|
CONFIG_CLK_CCF=y
|
||||||
|
CONFIG_CLK_SCMI=y
|
||||||
|
CONFIG_SPL_CLK_SCMI=y
|
||||||
|
CONFIG_USB_FUNCTION_FASTBOOT=y
|
||||||
|
CONFIG_FASTBOOT_BUF_ADDR=0x90400000
|
||||||
|
CONFIG_FASTBOOT_BUF_SIZE=0x20000000
|
||||||
|
CONFIG_FASTBOOT_FLASH=y
|
||||||
|
CONFIG_FASTBOOT_UUU_SUPPORT=y
|
||||||
|
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
|
||||||
|
CONFIG_SPL_FIRMWARE=y
|
||||||
|
# CONFIG_SCMI_AGENT_SMCCC is not set
|
||||||
|
CONFIG_IMX_RGPIO2P=y
|
||||||
|
CONFIG_DM_PCA953X=y
|
||||||
|
CONFIG_SPL_DM_PCA953X=y
|
||||||
|
CONFIG_DM_I2C=y
|
||||||
|
CONFIG_SYS_I2C_IMX_LPI2C=y
|
||||||
|
CONFIG_IMX_MU_MBOX=y
|
||||||
|
CONFIG_I2C_EEPROM=y
|
||||||
|
CONFIG_SUPPORT_EMMC_BOOT=y
|
||||||
|
CONFIG_MMC_IO_VOLTAGE=y
|
||||||
|
CONFIG_MMC_UHS_SUPPORT=y
|
||||||
|
CONFIG_MMC_HS400_ES_SUPPORT=y
|
||||||
|
CONFIG_MMC_HS400_SUPPORT=y
|
||||||
|
CONFIG_FSL_USDHC=y
|
||||||
|
CONFIG_PHYLIB=y
|
||||||
|
CONFIG_PHY_TI_DP83867=y
|
||||||
|
CONFIG_DM_MDIO=y
|
||||||
|
CONFIG_MII=y
|
||||||
|
CONFIG_FSL_ENETC=y
|
||||||
|
CONFIG_PCIE_ECAM_GENERIC=y
|
||||||
|
CONFIG_PHY_IMX8MQ_USB=y
|
||||||
|
CONFIG_PINCTRL=y
|
||||||
|
CONFIG_SPL_PINCTRL=y
|
||||||
|
CONFIG_PINCTRL_IMX_SCMI=y
|
||||||
|
CONFIG_POWER_DOMAIN=y
|
||||||
|
CONFIG_SCMI_POWER_DOMAIN=y
|
||||||
|
CONFIG_DM_REGULATOR=y
|
||||||
|
CONFIG_SPL_DM_REGULATOR=y
|
||||||
|
CONFIG_DM_REGULATOR_FIXED=y
|
||||||
|
CONFIG_SPL_DM_REGULATOR_FIXED=y
|
||||||
|
CONFIG_DM_REGULATOR_GPIO=y
|
||||||
|
CONFIG_DM_RNG=y
|
||||||
|
CONFIG_DM_SERIAL=y
|
||||||
|
CONFIG_FSL_LPUART=y
|
||||||
|
CONFIG_SPI=y
|
||||||
|
CONFIG_DM_THERMAL=y
|
||||||
|
CONFIG_USB=y
|
||||||
|
CONFIG_USB_XHCI_HCD=y
|
||||||
|
CONFIG_USB_EHCI_HCD=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_CI_UDC=y
|
||||||
|
CONFIG_SDP_LOADADDR=0x90400000
|
||||||
|
CONFIG_ULP_WATCHDOG=y
|
||||||
|
# CONFIG_SPL_SHA1 is not set
|
||||||
|
CONFIG_LZO=y
|
||||||
|
CONFIG_HEXDUMP=y
|
||||||
@ -10,6 +10,7 @@ Toradex
|
|||||||
colibri_imx7
|
colibri_imx7
|
||||||
colibri-imx8x
|
colibri-imx8x
|
||||||
smarc-imx8mp
|
smarc-imx8mp
|
||||||
|
smarc-imx95
|
||||||
verdin-am62
|
verdin-am62
|
||||||
verdin-am62p
|
verdin-am62p
|
||||||
verdin-imx8mm
|
verdin-imx8mm
|
||||||
|
|||||||
172
doc/board/toradex/smarc-imx95.rst
Normal file
172
doc/board/toradex/smarc-imx95.rst
Normal file
@ -0,0 +1,172 @@
|
|||||||
|
.. SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
Toradex SMARC iMX95 Module
|
||||||
|
==========================
|
||||||
|
|
||||||
|
- SoM: https://www.toradex.com/computer-on-modules/smarc-arm-family/nxp-imx95
|
||||||
|
- Carrier board: https://www.toradex.com/products/carrier-board/smarc-development-board-kit
|
||||||
|
|
||||||
|
Quick Start
|
||||||
|
-----------
|
||||||
|
|
||||||
|
- Setup environment
|
||||||
|
- Get ahab-container.img
|
||||||
|
- Get DDR PHY Firmware Images
|
||||||
|
- Get and Build OEI Images
|
||||||
|
- Get and Build System Manager Image
|
||||||
|
- Get and Build the ARM Trusted Firmware
|
||||||
|
- Build the Bootloader Image
|
||||||
|
- Boot
|
||||||
|
|
||||||
|
Setup environment
|
||||||
|
-----------------
|
||||||
|
|
||||||
|
Suggested current toolchains are ARM 14.3 (https://developer.arm.com/downloads/-/arm-gnu-toolchain-downloads):
|
||||||
|
|
||||||
|
- https://developer.arm.com/-/media/Files/downloads/gnu/14.3.rel1/binrel/arm-gnu-toolchain-14.3.rel1-x86_64-arm-none-linux-gnueabihf.tar.xz
|
||||||
|
- https://developer.arm.com/-/media/Files/downloads/gnu/14.3.rel1/binrel/arm-gnu-toolchain-14.3.rel1-x86_64-aarch64-none-linux-gnu.tar.xz
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ export TOOLS=<path/to/directory/with/toolchains>
|
||||||
|
$ export CROSS_COMPILE_32=<path/to/arm/toolchain/bin/>arm-none-linux-gnueabihf-
|
||||||
|
$ export CROSS_COMPILE_64=<path/to/arm64/toolchain/bin/>aarch64-none-linux-gnu-
|
||||||
|
|
||||||
|
Get ahab-container.img
|
||||||
|
----------------------
|
||||||
|
|
||||||
|
Note: `$srctree` is the U-Boot source directory
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-ele-imx-2.0.2-89161a8.bin
|
||||||
|
$ sh firmware-ele-imx-2.0.2-89161a8.bin --auto-accept
|
||||||
|
$ cp firmware-ele-imx-2.0.2-89161a8/mx95b0-ahab-container.img $(srctree)
|
||||||
|
|
||||||
|
Get DDR PHY Firmware Images
|
||||||
|
---------------------------
|
||||||
|
|
||||||
|
Note: `$srctree` is the U-Boot source directory
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.28-994fa14.bin
|
||||||
|
$ sh firmware-imx-8.28-994fa14.bin --auto-accept
|
||||||
|
$ cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr5*v202409.bin $(srctree)
|
||||||
|
|
||||||
|
Get and Build OEI Images
|
||||||
|
------------------------
|
||||||
|
|
||||||
|
Note: `$srctree` is the U-Boot source directory
|
||||||
|
Get OEI from: https://git.toradex.com/cgit/imx-oei-toradex.git/
|
||||||
|
branch: main
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ git clone -b main https://git.toradex.com/cgit/imx-oei-toradex.git/
|
||||||
|
$ cd imx-oei-toradex
|
||||||
|
|
||||||
|
$ make board=toradex-smarc-imx95 oei=ddr DEBUG=1 r=B0 all
|
||||||
|
$ cp build/toradex-smarc-imx95/ddr/oei-m33-ddr.bin $(srctree)
|
||||||
|
|
||||||
|
$ make board=toradex-smarc-imx95 oei=tcm DEBUG=1 r=B0 all
|
||||||
|
$ cp build/toradex-smarc-imx95/tcm/oei-m33-tcm.bin $(srctree)
|
||||||
|
|
||||||
|
The Makefile will set `DDR_CONFIG` automatically based on the selected silicon
|
||||||
|
revision.
|
||||||
|
|
||||||
|
Get and Build the System Manager Image
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Note: `$srctree` is the U-Boot source directory
|
||||||
|
Get System Manager from: https://git.toradex.com/cgit/imx-sm-toradex.git/
|
||||||
|
branch: main
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ git clone -b main https://git.toradex.com/cgit/imx-sm-toradex.git/
|
||||||
|
$ cd imx-sm-toradex
|
||||||
|
$ make config=tdx-smarc-imx95 all
|
||||||
|
$ cp build/tdx-smarc-imx95/m33_image.bin $(srctree)
|
||||||
|
|
||||||
|
Get and Build the ARM Trusted Firmware
|
||||||
|
--------------------------------------
|
||||||
|
|
||||||
|
Note: `$srctree` is the U-Boot source directory
|
||||||
|
Get ATF from: https://github.com/nxp-imx/imx-atf/
|
||||||
|
branch: lf_v2.12
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ export CROSS_COMPILE=$CROSS_COMPILE_64
|
||||||
|
$ unset LDFLAGS
|
||||||
|
$ unset AS
|
||||||
|
$ git clone -b lf_v2.12 https://github.com/nxp-imx/imx-atf.git
|
||||||
|
$ cd imx-atf
|
||||||
|
$ make PLAT=imx95 bl31
|
||||||
|
$ cp build/imx95/release/bl31.bin $(srctree)
|
||||||
|
|
||||||
|
Build the Bootloader Image
|
||||||
|
--------------------------
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
$ export CROSS_COMPILE=$CROSS_COMPILE_64
|
||||||
|
$ make toradex-smarc-imx95_defconfig
|
||||||
|
$ make
|
||||||
|
|
||||||
|
Flash to eMMC
|
||||||
|
-------------
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
> 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:: console
|
||||||
|
|
||||||
|
> run update_uboot
|
||||||
|
|
||||||
|
Boot
|
||||||
|
----
|
||||||
|
|
||||||
|
Boot sequence is:
|
||||||
|
|
||||||
|
* SPL ---> ATF (TF-A) ---> U-Boot proper
|
||||||
|
|
||||||
|
Output:
|
||||||
|
|
||||||
|
.. code-block:: console
|
||||||
|
|
||||||
|
U-Boot SPL 2025.10-00635-g78345766559d (Oct 21 2025 - 17:53:04 +0200)
|
||||||
|
SYS Boot reason: por, origin: -1, errid: -1
|
||||||
|
Trying to boot from MMC1
|
||||||
|
Primary set selected
|
||||||
|
Load image from MMC/SD 0xd9000
|
||||||
|
NOTICE: BL31: v2.12.0(release):lf-6.12.20-2.0.0
|
||||||
|
NOTICE: BL31: Built : 17:34:12, Oct 21 2025
|
||||||
|
|
||||||
|
|
||||||
|
U-Boot 2025.10-00635-g78345766559d (Oct 21 2025 - 17:53:04 +0200)
|
||||||
|
|
||||||
|
CPU: NXP i.MX95 Rev2.0 A55 at 1800 MHz - invalid sensor data
|
||||||
|
DRAM: 7.8 GiB
|
||||||
|
Core: 305 devices, 26 uclasses, devicetree: separate
|
||||||
|
MMC: FSL_SDHC: 0, FSL_SDHC: 1
|
||||||
|
Loading Environment from MMC... Reading from MMC(0)... OK
|
||||||
|
In: serial@44380000
|
||||||
|
Out: serial@44380000
|
||||||
|
Err: serial@44380000
|
||||||
|
Model: Toradex 0096 SMARC iMX95 Hexa 8GB WB IT V1.1A
|
||||||
|
Serial#: 12594027
|
||||||
|
|
||||||
|
BuildInfo:
|
||||||
|
- ELE firmware version 2.0.2-2a118457
|
||||||
|
|
||||||
|
Net: No ethernet found.
|
||||||
|
Hit any key to stop autoboot: 0
|
||||||
|
SMARC iMX95 #
|
||||||
24
include/configs/toradex-smarc-imx95.h
Normal file
24
include/configs/toradex-smarc-imx95.h
Normal file
@ -0,0 +1,24 @@
|
|||||||
|
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||||
|
/* Copyright (C) 2025 Toradex */
|
||||||
|
|
||||||
|
#ifndef __IMX95_TORADEX_SMARC_H
|
||||||
|
#define __IMX95_TORADEX_SMARC_H
|
||||||
|
|
||||||
|
#include <linux/sizes.h>
|
||||||
|
#include <asm/arch/imx-regs.h>
|
||||||
|
|
||||||
|
/* module has 8GB, 2GB from 0x80000000..0xffffffff, 6GB above */
|
||||||
|
#define SZ_6G _AC(0x180000000, ULL)
|
||||||
|
|
||||||
|
/* first 256MB reserved for firmware */
|
||||||
|
#define CFG_SYS_INIT_RAM_ADDR 0x90000000
|
||||||
|
#define CFG_SYS_INIT_RAM_SIZE SZ_2M
|
||||||
|
|
||||||
|
#define CFG_SYS_SDRAM_BASE 0x90000000
|
||||||
|
#define PHYS_SDRAM 0x90000000
|
||||||
|
#define PHYS_SDRAM_SIZE (SZ_2G - SZ_256M)
|
||||||
|
#define PHYS_SDRAM_2_SIZE SZ_6G
|
||||||
|
|
||||||
|
#define WDOG_BASE_ADDR WDG3_BASE_ADDR
|
||||||
|
|
||||||
|
#endif
|
||||||
Loading…
x
Reference in New Issue
Block a user