mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2025-12-18 07:52:10 +01:00
imx: Add support for Kontron i.MX93 OSM-S SoM and BL carrier board
This adds support for the Kontron Electronics OSM-S i.MX93 SoM and the matching baseboard BL i.MX93. The SoM hardware complies to the Open Standard Module (OSM) 1.1 specification, size S (https://sget.org/standards/osm). Signed-off-by: Frieder Schrempf <frieder.schrempf@kontron.de>
This commit is contained in:
parent
b9e48705e0
commit
8cad37db36
153
arch/arm/dts/imx93-kontron-bl-osm-s-u-boot.dtsi
Normal file
153
arch/arm/dts/imx93-kontron-bl-osm-s-u-boot.dtsi
Normal file
@ -0,0 +1,153 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+ OR MIT
|
||||
/*
|
||||
* Copyright (C) 2024 Kontron Electronics GmbH
|
||||
*/
|
||||
|
||||
#include "imx93-u-boot.dtsi"
|
||||
|
||||
/ {
|
||||
wdt-reboot {
|
||||
compatible = "wdt-reboot";
|
||||
wdt = <&wdog3>;
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
firmware {
|
||||
optee {
|
||||
compatible = "linaro,optee-tz";
|
||||
method = "smc";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
&A55_0 {
|
||||
clocks = <&clk IMX93_CLK_ARM_PLL>;
|
||||
};
|
||||
|
||||
&A55_1 {
|
||||
clocks = <&clk IMX93_CLK_ARM_PLL>;
|
||||
};
|
||||
|
||||
&{/soc@0} {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
®_vdd_carrier {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&pinctrl_reg_vdd_carrier {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&aips1 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&aips2 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&aips3 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&iomuxc {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2_gpio {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&pinctrl_usdhc2 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&gpio1 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&gpio2 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&gpio3 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&gpio4 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&lpuart1 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&pinctrl_lpuart1 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&usdhc1 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&usdhc2 {
|
||||
bootph-all;
|
||||
fsl,signal-voltage-switch-extra-delay-ms = <8>;
|
||||
};
|
||||
|
||||
&lpi2c1 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
/* Enable I2C2 to probe for a touch controller on LVDS connector */
|
||||
&lpi2c2 {
|
||||
bootph-all;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&pca9451 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&{/soc@0/bus@44000000/i2c@44340000/pmic@25/regulators} {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&pinctrl_lpi2c1 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&s4muap {
|
||||
bootph-all;
|
||||
status = "okay";
|
||||
};
|
||||
|
||||
&clk {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&osc_32k {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&osc_24m {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&clk_ext1 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
&wdog3 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
®_vdd_3v3 {
|
||||
bootph-all;
|
||||
};
|
||||
|
||||
®_nvcc_sd {
|
||||
bootph-all;
|
||||
};
|
||||
@ -103,6 +103,15 @@ config TARGET_IMX93_VAR_SOM
|
||||
select IMX93
|
||||
select IMX9_LPDDR4X
|
||||
|
||||
config TARGET_KONTRON_MX93
|
||||
bool "Kontron OSM-S/BL i.MX93"
|
||||
select BINMAN
|
||||
select IMX93
|
||||
select IMX9_LPDDR4X
|
||||
help
|
||||
Kontron Electronics BL i.MX93 using SoM module conformant to OSM
|
||||
standard 1.1 size S.
|
||||
|
||||
config TARGET_PHYCORE_IMX93
|
||||
bool "phycore_imx93"
|
||||
select IMX93
|
||||
@ -142,6 +151,7 @@ source "board/freescale/imx91_evk/Kconfig"
|
||||
source "board/freescale/imx93_evk/Kconfig"
|
||||
source "board/freescale/imx93_frdm/Kconfig"
|
||||
source "board/freescale/imx93_qsb/Kconfig"
|
||||
source "board/kontron/osm-s-mx93/Kconfig"
|
||||
source "board/phytec/phycore_imx93/Kconfig"
|
||||
source "board/variscite/imx93_var_som/Kconfig"
|
||||
source "board/freescale/imx94_evk/Kconfig"
|
||||
@ -149,4 +159,3 @@ source "board/freescale/imx95_evk/Kconfig"
|
||||
source "board/toradex/smarc-imx95/Kconfig"
|
||||
|
||||
endif
|
||||
|
||||
|
||||
17
board/kontron/osm-s-mx93/Kconfig
Normal file
17
board/kontron/osm-s-mx93/Kconfig
Normal file
@ -0,0 +1,17 @@
|
||||
if TARGET_KONTRON_MX93
|
||||
|
||||
config SYS_BOARD
|
||||
string
|
||||
default "osm-s-mx93"
|
||||
|
||||
config SYS_VENDOR
|
||||
string
|
||||
default "kontron"
|
||||
|
||||
config SYS_CONFIG_NAME
|
||||
string
|
||||
default "kontron-osm-s-mx93"
|
||||
|
||||
source "board/kontron/common/Kconfig"
|
||||
|
||||
endif
|
||||
7
board/kontron/osm-s-mx93/MAINTAINERS
Normal file
7
board/kontron/osm-s-mx93/MAINTAINERS
Normal file
@ -0,0 +1,7 @@
|
||||
Kontron OSM-S/BL i.MX93 Boards
|
||||
M: Frieder Schrempf <frieder.schrempf@kontron.de>
|
||||
S: Maintained
|
||||
F: board/kontron/osm-s-mx93
|
||||
F: configs/kontron-osm-s-mx93_defconfig
|
||||
F: doc/board/kontron/osm-s-mx93.rst
|
||||
F: include/configs/kontron-osm-s-mx93.h
|
||||
9
board/kontron/osm-s-mx93/Makefile
Normal file
9
board/kontron/osm-s-mx93/Makefile
Normal file
@ -0,0 +1,9 @@
|
||||
# SPDX-License-Identifier: GPL-2.0+
|
||||
# (C) Copyright 2023 Kontron Electronics GmbH
|
||||
|
||||
obj-y := osm-s-mx93.o
|
||||
|
||||
ifdef CONFIG_SPL_BUILD
|
||||
obj-y += spl.o
|
||||
obj-y += lpddr4x_timing.o
|
||||
endif
|
||||
1992
board/kontron/osm-s-mx93/lpddr4x_timing.c
Normal file
1992
board/kontron/osm-s-mx93/lpddr4x_timing.c
Normal file
File diff suppressed because it is too large
Load Diff
168
board/kontron/osm-s-mx93/osm-s-mx93.c
Normal file
168
board/kontron/osm-s-mx93/osm-s-mx93.c
Normal file
@ -0,0 +1,168 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (C) 2024 Kontron Electronics GmbH
|
||||
*/
|
||||
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/io.h>
|
||||
#include <asm/mach-imx/boot_mode.h>
|
||||
#include <dm/uclass.h>
|
||||
#include <efi.h>
|
||||
#include <efi_loader.h>
|
||||
#include <env_internal.h>
|
||||
#include <fdt_support.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <mmc.h>
|
||||
#include <net.h>
|
||||
#include <asm/arch-imx9/imx93_pins.h>
|
||||
#include <asm/arch/ccm_regs.h>
|
||||
|
||||
#include "../common/hw-uid.h"
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int board_early_init_f(void)
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_KONTRON_HW_UID)
|
||||
struct uid_otp_loc uid_otp_locations[] = {
|
||||
{
|
||||
.addr = (u32 *)(FSB_BASE_ADDR + 0x8000 + 0x5e8),
|
||||
.len = 2,
|
||||
.format = UID_OTP_FORMAT_DEC,
|
||||
.desc = "BOARD"
|
||||
},
|
||||
{
|
||||
.addr = (u32 *)(FSB_BASE_ADDR + 0x8000 + 0x5e0),
|
||||
.len = 2,
|
||||
.format = UID_OTP_FORMAT_DEC,
|
||||
.desc = "SOM"
|
||||
}
|
||||
};
|
||||
#endif /* CONFIG_KONTRON_HW_UID */
|
||||
|
||||
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
enum boot_device boot_dev;
|
||||
char env_str_sd[] = "sd-card";
|
||||
char env_str_emmc[] = "emmc";
|
||||
char *env_config_str;
|
||||
|
||||
if (env_get_location(0, 0) != ENVL_MMC)
|
||||
return 0;
|
||||
|
||||
boot_dev = get_boot_device();
|
||||
if (boot_dev == SD2_BOOT)
|
||||
env_config_str = env_str_sd;
|
||||
else if (boot_dev == MMC1_BOOT)
|
||||
env_config_str = env_str_emmc;
|
||||
else
|
||||
return 0;
|
||||
|
||||
/*
|
||||
* Export a string to the devicetree that tells userspace tools like
|
||||
* libubootenv where the environment is currently coming from.
|
||||
*/
|
||||
return fdt_find_and_setprop(blob, "/chosen", "u-boot,env-config",
|
||||
env_config_str, strlen(env_config_str) + 1, 1);
|
||||
}
|
||||
|
||||
static int setup_eqos(void)
|
||||
{
|
||||
struct blk_ctrl_wakeupmix_regs *bctrl =
|
||||
(struct blk_ctrl_wakeupmix_regs *)BLK_CTRL_WAKEUPMIX_BASE_ADDR;
|
||||
|
||||
/* set INTF as RGMII, enable RGMII TXC clock */
|
||||
clrsetbits_le32(&bctrl->eqos_gpr,
|
||||
BCTRL_GPR_ENET_QOS_INTF_MODE_MASK,
|
||||
BCTRL_GPR_ENET_QOS_INTF_SEL_RGMII | BCTRL_GPR_ENET_QOS_CLK_GEN_EN);
|
||||
|
||||
return set_clk_eqos(ENET_125MHZ);
|
||||
}
|
||||
|
||||
int board_init(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_DWC_ETH_QOS))
|
||||
setup_eqos();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int board_late_init(void)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_KONTRON_HW_UID))
|
||||
get_serial_number(uid_otp_locations, ARRAY_SIZE(uid_otp_locations));
|
||||
|
||||
if (get_boot_device() == USB_BOOT) {
|
||||
env_set("bootcmd", "fastboot 0");
|
||||
env_set("bootdelay", "0");
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
#if IS_ENABLED(CONFIG_ENV_IS_IN_MMC)
|
||||
int board_mmc_get_env_dev(int devno)
|
||||
{
|
||||
return devno;
|
||||
}
|
||||
|
||||
uint mmc_get_env_part(struct mmc *mmc)
|
||||
{
|
||||
if (IS_SD(mmc))
|
||||
return EMMC_HWPART_DEFAULT;
|
||||
|
||||
switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
|
||||
case EMMC_BOOT_PART_BOOT1:
|
||||
return EMMC_HWPART_BOOT1;
|
||||
case EMMC_BOOT_PART_BOOT2:
|
||||
return EMMC_HWPART_BOOT2;
|
||||
default:
|
||||
return EMMC_HWPART_DEFAULT;
|
||||
}
|
||||
}
|
||||
|
||||
int mmc_get_env_addr(struct mmc *mmc, int copy, u32 *env_addr)
|
||||
{
|
||||
/* use normal offset for SD card */
|
||||
if (IS_SD(mmc)) {
|
||||
*env_addr = CONFIG_ENV_OFFSET;
|
||||
if (copy)
|
||||
*env_addr = CONFIG_ENV_OFFSET_REDUND;
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
switch (EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)) {
|
||||
case EMMC_BOOT_PART_BOOT1:
|
||||
case EMMC_BOOT_PART_BOOT2:
|
||||
*env_addr = mmc->capacity - CONFIG_ENV_SIZE - CONFIG_ENV_SIZE;
|
||||
if (copy)
|
||||
*env_addr = mmc->capacity - CONFIG_ENV_SIZE;
|
||||
break;
|
||||
default:
|
||||
*env_addr = CONFIG_ENV_OFFSET;
|
||||
if (copy)
|
||||
*env_addr = CONFIG_ENV_OFFSET_REDUND;
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
enum env_location env_get_location(enum env_operation op, int prio)
|
||||
{
|
||||
if (prio)
|
||||
return ENVL_UNKNOWN;
|
||||
|
||||
if (CONFIG_IS_ENABLED(ENV_IS_NOWHERE) && get_boot_device() == USB_BOOT)
|
||||
return ENVL_NOWHERE;
|
||||
|
||||
return arch_env_get_location(op, prio);
|
||||
}
|
||||
6
board/kontron/osm-s-mx93/osm-s-mx93.env
Normal file
6
board/kontron/osm-s-mx93/osm-s-mx93.env
Normal file
@ -0,0 +1,6 @@
|
||||
kernel_addr_r=0x82000000
|
||||
fdt_addr_r=0x88000000
|
||||
fdtoverlay_addr_r=0x89000000
|
||||
ramdisk_addr_r=0x88080000
|
||||
scriptaddr=0x80000000
|
||||
pxefile_addr_r=0x80100000
|
||||
169
board/kontron/osm-s-mx93/spl.c
Normal file
169
board/kontron/osm-s-mx93/spl.c
Normal file
@ -0,0 +1,169 @@
|
||||
// SPDX-License-Identifier: GPL-2.0+
|
||||
/*
|
||||
* Copyright (C) 2024 Kontron Electronics GmbH
|
||||
*/
|
||||
|
||||
#include <asm/arch/imx93_pins.h>
|
||||
#include <asm/arch/clock.h>
|
||||
#include <asm/arch/ddr.h>
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <asm/arch/sys_proto.h>
|
||||
#include <asm/global_data.h>
|
||||
#include <asm/gpio.h>
|
||||
#include <asm/mach-imx/boot_mode.h>
|
||||
#include <asm/mach-imx/iomux-v3.h>
|
||||
#include <dm/uclass.h>
|
||||
#include <dm/device.h>
|
||||
#include <dm/uclass-internal.h>
|
||||
#include <dm/device-internal.h>
|
||||
#include <hang.h>
|
||||
#include <i2c.h>
|
||||
#include <init.h>
|
||||
#include <linux/errno.h>
|
||||
#include <linux/delay.h>
|
||||
#include <power/pca9450.h>
|
||||
#include <power/pmic.h>
|
||||
#include <spl.h>
|
||||
#include <asm/sections.h>
|
||||
#include <asm/arch/trdc.h>
|
||||
#include <asm/arch/ccm_regs.h>
|
||||
|
||||
DECLARE_GLOBAL_DATA_PTR;
|
||||
|
||||
int spl_board_boot_device(enum boot_device boot_dev_spl)
|
||||
{
|
||||
if (IS_ENABLED(CONFIG_SPL_BOOTROM_SUPPORT))
|
||||
return BOOT_DEVICE_BOOTROM;
|
||||
|
||||
switch (boot_dev_spl) {
|
||||
case SD1_BOOT:
|
||||
case MMC1_BOOT:
|
||||
return BOOT_DEVICE_MMC1;
|
||||
case SD2_BOOT:
|
||||
case MMC2_BOOT:
|
||||
return BOOT_DEVICE_MMC2;
|
||||
default:
|
||||
return BOOT_DEVICE_NONE;
|
||||
}
|
||||
}
|
||||
|
||||
bool check_ram_available(long size)
|
||||
{
|
||||
long sz = get_ram_size((long *)PHYS_SDRAM, size);
|
||||
|
||||
if (sz == size)
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
static void spl_dram_init(void)
|
||||
{
|
||||
if (ddr_init(&dram_timing) || !check_ram_available(SZ_2G))
|
||||
printf("Failed to initialize DDR RAM!\n");
|
||||
|
||||
printf("DDR: LPDDR4 initialized (2GB)\n");
|
||||
}
|
||||
|
||||
void spl_board_init(void)
|
||||
{
|
||||
puts("Normal Boot\n");
|
||||
}
|
||||
|
||||
static int power_init_board(void)
|
||||
{
|
||||
struct udevice *dev;
|
||||
int ret = pmic_get("pmic@25", &dev);
|
||||
|
||||
if (ret == -ENODEV)
|
||||
puts("No pmic found\n");
|
||||
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
/* BUCKxOUT_DVS0/1 control BUCK123 output */
|
||||
pmic_reg_write(dev, PCA9450_BUCK123_DVS, 0x29);
|
||||
|
||||
/* enable DVS control through PMIC_STBY_REQ */
|
||||
pmic_reg_write(dev, PCA9450_BUCK1CTRL, 0x59);
|
||||
|
||||
/* 0.9v for Over drive mode */
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS0, 0x18);
|
||||
pmic_reg_write(dev, PCA9450_BUCK3OUT_DVS0, 0x18);
|
||||
|
||||
/* set standby voltage to 0.65v */
|
||||
pmic_reg_write(dev, PCA9450_BUCK1OUT_DVS1, 0x4);
|
||||
|
||||
/* I2C_LT_EN*/
|
||||
pmic_reg_write(dev, 0xa, 0x3);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
const char *spl_board_loader_name(u32 boot_device)
|
||||
{
|
||||
static char name[16];
|
||||
struct mmc *mmc;
|
||||
|
||||
switch (boot_device) {
|
||||
case BOOT_DEVICE_MMC1:
|
||||
mmc_init_device(0);
|
||||
mmc = find_mmc_device(0);
|
||||
mmc_init(mmc);
|
||||
snprintf(name, sizeof(name), "eMMC %s",
|
||||
emmc_hwpart_names[EXT_CSD_EXTRACT_BOOT_PART(mmc->part_config)]);
|
||||
return name;
|
||||
case BOOT_DEVICE_MMC2:
|
||||
sprintf(name, "SD card");
|
||||
return name;
|
||||
}
|
||||
|
||||
return NULL;
|
||||
}
|
||||
|
||||
extern int imx9_probe_mu(void);
|
||||
void board_init_f(ulong dummy)
|
||||
{
|
||||
int ret;
|
||||
|
||||
/* Clear the BSS. */
|
||||
memset(__bss_start, 0, __bss_end - __bss_start);
|
||||
timer_init();
|
||||
|
||||
arch_cpu_init();
|
||||
|
||||
board_early_init_f();
|
||||
|
||||
spl_early_init();
|
||||
|
||||
preloader_console_init();
|
||||
|
||||
ret = imx9_probe_mu();
|
||||
if (ret) {
|
||||
printf("Fail to init Sentinel API\n");
|
||||
} else {
|
||||
debug("SOC: 0x%x\n", gd->arch.soc_rev);
|
||||
debug("LC: 0x%x\n", gd->arch.lifecycle);
|
||||
}
|
||||
|
||||
power_init_board();
|
||||
|
||||
if (!IS_ENABLED(CONFIG_IMX9_LOW_DRIVE_MODE))
|
||||
set_arm_clk(get_cpu_speed_grade_hz());
|
||||
|
||||
/* Init power of mix */
|
||||
soc_power_init();
|
||||
|
||||
/* Setup TRDC for DDR access */
|
||||
trdc_init();
|
||||
|
||||
/* DDR initialization */
|
||||
spl_dram_init();
|
||||
|
||||
/* Put M33 into CPUWAIT for following kick */
|
||||
ret = m33_prepare();
|
||||
if (ret)
|
||||
printf("M33 prepare failed!\n");
|
||||
|
||||
board_init_r(NULL, 0);
|
||||
}
|
||||
197
configs/kontron-osm-s-mx93.config
Normal file
197
configs/kontron-osm-s-mx93.config
Normal file
@ -0,0 +1,197 @@
|
||||
CONFIG_ARM=y
|
||||
CONFIG_ARCH_IMX9=y
|
||||
CONFIG_TEXT_BASE=0x80200000
|
||||
CONFIG_SYS_MALLOC_LEN=0x2000000
|
||||
CONFIG_SYS_MALLOC_F_LEN=0x20000
|
||||
CONFIG_SPL_GPIO=y
|
||||
CONFIG_SPL_LIBCOMMON_SUPPORT=y
|
||||
CONFIG_SPL_LIBGENERIC_SUPPORT=y
|
||||
CONFIG_NR_DRAM_BANKS=2
|
||||
CONFIG_ENV_SIZE=0x10000
|
||||
CONFIG_ENV_OFFSET=0x1E0000
|
||||
CONFIG_IMX_CONFIG="arch/arm/mach-imx/imx9/imximage.cfg"
|
||||
CONFIG_DM_GPIO=y
|
||||
CONFIG_KONTRON_HW_UID=y
|
||||
CONFIG_DEFAULT_DEVICE_TREE="freescale/imx93-kontron-bl-osm-s"
|
||||
CONFIG_TARGET_KONTRON_MX93=y
|
||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||
CONFIG_SPL_MMC=y
|
||||
CONFIG_SPL_SERIAL=y
|
||||
CONFIG_SPL_DRIVERS_MISC=y
|
||||
CONFIG_BOOTCOUNT_BOOTLIMIT=3
|
||||
CONFIG_SPL_STACK=0x20519dd0
|
||||
CONFIG_SPL_TEXT_BASE=0x2049A000
|
||||
CONFIG_SPL_HAS_BSS_LINKER_SECTION=y
|
||||
CONFIG_SPL_BSS_START_ADDR=0x2051a000
|
||||
CONFIG_SPL_BSS_MAX_SIZE=0x2000
|
||||
CONFIG_SYS_LOAD_ADDR=0x82000000
|
||||
CONFIG_SPL=y
|
||||
CONFIG_ENV_OFFSET_REDUND=0x1F0000
|
||||
CONFIG_IMX_ELE_DEK_ENCAP=y
|
||||
CONFIG_SPL_IMX_ROMAPI_LOADADDR=0x88000000
|
||||
CONFIG_LTO=y
|
||||
CONFIG_EFI_SET_TIME=y
|
||||
CONFIG_FIT=y
|
||||
CONFIG_FIT_EXTERNAL_OFFSET=0x3000
|
||||
CONFIG_BOOTSTD_FULL=y
|
||||
CONFIG_BOOTMETH_RAUC=y
|
||||
CONFIG_SYS_CBSIZE=2048
|
||||
CONFIG_SYS_PBSIZE=2074
|
||||
CONFIG_BOARD_LATE_INIT=y
|
||||
CONFIG_SPL_MAX_SIZE=0x26000
|
||||
CONFIG_SPL_BOARD_INIT=y
|
||||
CONFIG_SPL_LOAD_IMX_CONTAINER=y
|
||||
CONFIG_IMX_CONTAINER_CFG="arch/arm/mach-imx/imx9/container.cfg"
|
||||
# CONFIG_SPL_SHARES_INIT_SP_ADDR is not set
|
||||
CONFIG_SPL_HAVE_INIT_STACK=y
|
||||
CONFIG_SPL_SYS_MALLOC=y
|
||||
CONFIG_SPL_HAS_CUSTOM_MALLOC_START=y
|
||||
CONFIG_SPL_CUSTOM_SYS_MALLOC_ADDR=0x83200000
|
||||
CONFIG_SPL_SYS_MALLOC_SIZE=0x80000
|
||||
CONFIG_SPL_SYS_MMCSD_RAW_MODE=y
|
||||
CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_SECTOR=0x300
|
||||
CONFIG_SPL_I2C=y
|
||||
CONFIG_SPL_POWER=y
|
||||
CONFIG_SPL_WATCHDOG=y
|
||||
CONFIG_CMD_NVEDIT_EFI=y
|
||||
CONFIG_CRC32_VERIFY=y
|
||||
CONFIG_CMD_EEPROM=y
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR_LEN=2
|
||||
CONFIG_SYS_EEPROM_SIZE=8192
|
||||
CONFIG_SYS_EEPROM_PAGE_WRITE_BITS=5
|
||||
CONFIG_SYS_EEPROM_PAGE_WRITE_DELAY_MS=6
|
||||
CONFIG_CMD_MD5SUM=y
|
||||
CONFIG_MD5SUM_VERIFY=y
|
||||
CONFIG_CMD_MEMTEST=y
|
||||
CONFIG_CMD_SHA1SUM=y
|
||||
CONFIG_SHA1SUM_VERIFY=y
|
||||
# CONFIG_CMD_LZMADEC is not set
|
||||
CONFIG_CMD_CLK=y
|
||||
CONFIG_CMD_DFU=y
|
||||
CONFIG_CMD_FUSE=y
|
||||
CONFIG_CMD_GPIO=y
|
||||
CONFIG_CMD_GPT=y
|
||||
CONFIG_CMD_GPT_RENAME=y
|
||||
CONFIG_CMD_I2C=y
|
||||
CONFIG_CMD_LSBLK=y
|
||||
CONFIG_CMD_MBR=y
|
||||
CONFIG_CMD_MMC=y
|
||||
CONFIG_CMD_BKOPS_ENABLE=y
|
||||
CONFIG_MMC_SPEED_MODE_SET=y
|
||||
CONFIG_CMD_READ=y
|
||||
CONFIG_CMD_SPI=y
|
||||
CONFIG_CMD_USB=y
|
||||
CONFIG_CMD_USB_SDP=y
|
||||
CONFIG_CMD_USB_MASS_STORAGE=y
|
||||
CONFIG_CMD_WDT=y
|
||||
CONFIG_CMD_BOOTCOUNT=y
|
||||
CONFIG_CMD_CACHE=y
|
||||
CONFIG_CMD_EFIDEBUG=y
|
||||
CONFIG_CMD_RTC=y
|
||||
CONFIG_CMD_TIME=y
|
||||
CONFIG_CMD_GETTIME=y
|
||||
CONFIG_CMD_TIMER=y
|
||||
CONFIG_CMD_UUID=y
|
||||
CONFIG_CMD_PMIC=y
|
||||
CONFIG_CMD_REGULATOR=y
|
||||
CONFIG_CMD_HASH=y
|
||||
CONFIG_CMD_SMC=y
|
||||
CONFIG_HASH_VERIFY=y
|
||||
CONFIG_CMD_BTRFS=y
|
||||
CONFIG_CMD_EXT4_WRITE=y
|
||||
CONFIG_CMD_FS_UUID=y
|
||||
CONFIG_PARTITION_TYPE_GUID=y
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_OF_UPSTREAM=y
|
||||
CONFIG_ENV_IS_NOWHERE=y
|
||||
CONFIG_ENV_IS_IN_MMC=y
|
||||
CONFIG_ENV_REDUNDANT=y
|
||||
CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG=y
|
||||
CONFIG_USE_HOSTNAME=y
|
||||
CONFIG_HOSTNAME="kontron-mx93"
|
||||
CONFIG_VERSION_VARIABLE=y
|
||||
CONFIG_TFTP_TSIZE=y
|
||||
CONFIG_NET_RANDOM_ETHADDR=y
|
||||
CONFIG_SPL_DM=y
|
||||
CONFIG_SPL_DM_SEQ_ALIAS=y
|
||||
CONFIG_REGMAP=y
|
||||
CONFIG_SYSCON=y
|
||||
CONFIG_ADC=y
|
||||
CONFIG_ADC_IMX93=y
|
||||
CONFIG_BOOTCOUNT_LIMIT=y
|
||||
CONFIG_BOOTCOUNT_ENV=y
|
||||
CONFIG_SPL_CLK_IMX93=y
|
||||
CONFIG_CLK_IMX93=y
|
||||
CONFIG_USB_FUNCTION_FASTBOOT=y
|
||||
CONFIG_FASTBOOT_BUF_ADDR=0x82000000
|
||||
CONFIG_FASTBOOT_FLASH=y
|
||||
CONFIG_FASTBOOT_UUU_SUPPORT=y
|
||||
CONFIG_FASTBOOT_FLASH_MMC_DEV=0
|
||||
CONFIG_FASTBOOT_MMC_BOOT_SUPPORT=y
|
||||
CONFIG_FASTBOOT_MMC_USER_SUPPORT=y
|
||||
CONFIG_GPIO_HOG=y
|
||||
CONFIG_IMX_RGPIO2P=y
|
||||
CONFIG_DM_I2C=y
|
||||
CONFIG_DM_I2C_GPIO=y
|
||||
CONFIG_SYS_I2C_IMX_LPI2C=y
|
||||
CONFIG_LED=y
|
||||
CONFIG_LED_GPIO=y
|
||||
CONFIG_USB_HUB_USB251XB=y
|
||||
CONFIG_I2C_EEPROM=y
|
||||
CONFIG_SPL_I2C_EEPROM=y
|
||||
CONFIG_SYS_I2C_EEPROM_ADDR=0x50
|
||||
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_FSL_USDHC=y
|
||||
CONFIG_PHY_ETHERNET_ID=y
|
||||
CONFIG_DM_ETH_PHY=y
|
||||
CONFIG_PHY_GIGE=y
|
||||
CONFIG_DWC_ETH_QOS=y
|
||||
CONFIG_DWC_ETH_QOS_IMX=y
|
||||
CONFIG_FEC_MXC=y
|
||||
CONFIG_RGMII=y
|
||||
CONFIG_MII=y
|
||||
CONFIG_RMII=y
|
||||
CONFIG_PINCTRL=y
|
||||
CONFIG_SPL_PINCTRL=y
|
||||
CONFIG_PINCTRL_IMX93=y
|
||||
CONFIG_POWER_DOMAIN=y
|
||||
CONFIG_DM_PMIC=y
|
||||
CONFIG_DM_PMIC_PCA9450=y
|
||||
CONFIG_SPL_DM_PMIC_PCA9450=y
|
||||
CONFIG_DM_REGULATOR=y
|
||||
CONFIG_SPL_DM_REGULATOR=y
|
||||
CONFIG_DM_REGULATOR_PCA9450=y
|
||||
CONFIG_SPL_DM_REGULATOR_PCA9450=y
|
||||
CONFIG_DM_REGULATOR_FIXED=y
|
||||
CONFIG_DM_REGULATOR_GPIO=y
|
||||
CONFIG_DM_RTC=y
|
||||
CONFIG_RTC_RV3028=y
|
||||
CONFIG_DM_SERIAL=y
|
||||
CONFIG_FSL_LPUART=y
|
||||
CONFIG_LPUART=y
|
||||
CONFIG_SPI=y
|
||||
CONFIG_DM_SPI=y
|
||||
CONFIG_MXC_SPI=y
|
||||
CONFIG_SYSRESET=y
|
||||
CONFIG_SPL_SYSRESET=y
|
||||
CONFIG_SYSRESET_PSCI=y
|
||||
CONFIG_SYSRESET_WATCHDOG=y
|
||||
CONFIG_DM_THERMAL=y
|
||||
CONFIG_USB=y
|
||||
CONFIG_USB_EHCI_HCD=y
|
||||
CONFIG_USB_GADGET=y
|
||||
CONFIG_USB_GADGET_MANUFACTURER="FSL"
|
||||
CONFIG_USB_GADGET_VENDOR_NUM=0x1fc9
|
||||
CONFIG_USB_GADGET_PRODUCT_NUM=0x0152
|
||||
CONFIG_CI_UDC=y
|
||||
CONFIG_USB_ETHER=y
|
||||
CONFIG_USB_ETH_CDC=y
|
||||
CONFIG_IMX_WATCHDOG=y
|
||||
CONFIG_ULP_WATCHDOG=y
|
||||
3
configs/kontron-osm-s-mx93_defconfig
Normal file
3
configs/kontron-osm-s-mx93_defconfig
Normal file
@ -0,0 +1,3 @@
|
||||
#include <configs/kontron-osm-s-mx93.config>
|
||||
|
||||
CONFIG_SPL_BOOTROM_SUPPORT=y
|
||||
@ -7,6 +7,7 @@ Kontron
|
||||
:maxdepth: 2
|
||||
|
||||
osm-s-mx8mp
|
||||
osm-s-mx93
|
||||
pitx-imx8m
|
||||
sl28
|
||||
sl-mx6ul
|
||||
|
||||
95
doc/board/kontron/osm-s-mx93.rst
Normal file
95
doc/board/kontron/osm-s-mx93.rst
Normal file
@ -0,0 +1,95 @@
|
||||
.. SPDX-License-Identifier: GPL-2.0+
|
||||
|
||||
Kontron Electronics i.MX93 SoMs and Boards
|
||||
===========================================
|
||||
|
||||
The OSM-S i.MX93 by Kontron Electronics GmbH is a SoM module with an
|
||||
i.MX93 SoC, 2 GB LPDDR4 RAM, eMMC, PMIC, RTC.
|
||||
|
||||
The matching evaluation boards (Board-Line, BL) have two Ethernet ports,
|
||||
USB 2.0, LVDS, SD card, CAN, RS485, RS232 and much more.
|
||||
|
||||
The OSM-S i.MX93 is compliant to the Open Standard Module (OSM) 1.1
|
||||
specification, size S (https://sget.org/standards/osm).
|
||||
|
||||
Quick Start
|
||||
-----------
|
||||
|
||||
- Get and Build the Trusted Firmware-A (TF-A)
|
||||
- Get the DDR firmware
|
||||
- Build U-Boot
|
||||
- Boot
|
||||
|
||||
.. note::
|
||||
|
||||
To build on a x86-64 host machine, you need a GNU cross toolchain for the
|
||||
target architecture (aarch64). Check your distros package manager or
|
||||
download and install the necessary tools (``aarch64-linux-gnu-*``) manually.
|
||||
|
||||
Get and Build the Trusted Firmware-A (TF-A)
|
||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. note::
|
||||
|
||||
If you are using GCC 12 and you get compiler/linker errors, try to add the
|
||||
following arguments to your make command as workaround:
|
||||
``CFLAGS="-Wno-array-bounds" LDFLAGS="--no-warn-rwx-segments"``
|
||||
|
||||
1. Get TF-A from: https://github.com/nxp-imx/imx-atf, branch: lf_v2.12
|
||||
2. Build
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make PLAT=imx93 CROSS_COMPILE=aarch64-linux-gnu- IMX_BOOT_UART_BASE="0x30880000" bl31
|
||||
$ cp build/imx93/release/bl31.bin $(builddir)
|
||||
|
||||
.. note::
|
||||
|
||||
*builddir* is U-Boot's build directory (source directory for in-tree builds)
|
||||
|
||||
Get the DDR firmware
|
||||
^^^^^^^^^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-imx-8.28-994fa14.bin
|
||||
$ wget https://www.nxp.com/lgfiles/NMG/MAD/YOCTO/firmware-ele-imx-2.0.2-89161a8.bin
|
||||
$ chmod +x firmware-imx-8.28-994fa14.bin firmware-ele-imx-2.0.2-89161a8.bin
|
||||
$ ./firmware-imx-8.28-994fa14.bin
|
||||
$ ./firmware-ele-imx-2.0.2-89161a8.bin
|
||||
$ cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr4_dmem_1d_v202201.bin $(builddir)
|
||||
$ cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr4_dmem_2d_v202201.bin $(builddir)
|
||||
$ cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr4_imem_1d_v202201.bin $(builddir)
|
||||
$ cp firmware-imx-8.28-994fa14/firmware/ddr/synopsys/lpddr4_imem_2d_v202201.bin $(builddir)
|
||||
$ cp firmware-ele-imx-2.0.2-89161a8/mx93a1-ahab-container.img $(builddir)
|
||||
|
||||
Build U-Boot
|
||||
^^^^^^^^^^^^
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ make kontron-osm-s-mx93_defconfig
|
||||
$ make CROSS_COMPILE=aarch64-linux-gnu-
|
||||
|
||||
Copy the flash.bin to SD card at an offset of 32 KiB:
|
||||
|
||||
.. code-block:: bash
|
||||
|
||||
$ dd if=flash.bin of=/dev/sd[x] bs=1K seek=32 conv=fsync
|
||||
|
||||
Boot
|
||||
^^^^
|
||||
|
||||
Put the SD card in the slot on the board and apply power. Alternatively connect
|
||||
the USB Type-C Connector to your host machine, power up the board and load the
|
||||
bootloader via uuu-Tool (`uuu flash.bin`).
|
||||
|
||||
Check the serial console for output.
|
||||
|
||||
Further Information
|
||||
-------------------
|
||||
|
||||
The bootloader configuration is setup to be used with kernel FIT images. Legacy
|
||||
images might not be working out of the box.
|
||||
|
||||
Please see https://docs.kontron-electronics.de for further vendor documentation.
|
||||
30
include/configs/kontron-osm-s-mx93.h
Normal file
30
include/configs/kontron-osm-s-mx93.h
Normal file
@ -0,0 +1,30 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0+ */
|
||||
/*
|
||||
* Copyright (C) 2024 Kontron Electronics GmbH
|
||||
*
|
||||
* Configuration settings for the Kontron OSM-S/BL i.MX93 boards and modules.
|
||||
*/
|
||||
#ifndef __KONTRON_MX93_CONFIG_H
|
||||
#define __KONTRON_MX93_CONFIG_H
|
||||
|
||||
#include <asm/arch/imx-regs.h>
|
||||
#include <linux/sizes.h>
|
||||
|
||||
/* RAM */
|
||||
#define PHYS_SDRAM 0x80000000
|
||||
#define PHYS_SDRAM_SIZE (SZ_2G)
|
||||
#define CFG_SYS_SDRAM_BASE PHYS_SDRAM
|
||||
|
||||
#define CFG_SYS_INIT_RAM_ADDR 0x80000000
|
||||
#define CFG_SYS_INIT_RAM_SIZE SZ_2M
|
||||
|
||||
/* Board and environment settings */
|
||||
|
||||
#ifdef CONFIG_USB_EHCI_HCD
|
||||
#define CFG_MXC_USB_PORTSC (PORT_PTS_UTMI | PORT_PTS_PTW)
|
||||
#define CFG_MXC_USB_FLAGS 0
|
||||
#endif
|
||||
|
||||
#define WDOG_BASE_ADDR WDG3_BASE_ADDR
|
||||
|
||||
#endif /* __KONTRON_MX93_CONFIG_H */
|
||||
Loading…
x
Reference in New Issue
Block a user