mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-27 16:01:27 +00:00
Merge tag 'u-boot-imx-master-20241105' of https://gitlab.denx.de/u-boot/custodians/u-boot-imx
CI: https://source.denx.de/u-boot/custodians/u-boot-imx/-/pipelines/23262 - Improve imx9 boot medium autodection. - Add possibility to skip DCD on i.MX8. - Switch to using upstream DT on DH i.MX6 DHCOM. - Add support for i.MX6DL DHCOM SoM on PDK2 carrier board. - Handle FIELD_RETURN on i.MX HAB.
This commit is contained in:
commit
9c25cd5631
22 changed files with 113 additions and 115 deletions
|
@ -778,8 +778,6 @@ dtb-y += \
|
||||||
imx6dl-cubox-i.dtb \
|
imx6dl-cubox-i.dtb \
|
||||||
imx6dl-cubox-i-emmc-som-v15.dtb \
|
imx6dl-cubox-i-emmc-som-v15.dtb \
|
||||||
imx6dl-cubox-i-som-v15.dtb \
|
imx6dl-cubox-i-som-v15.dtb \
|
||||||
imx6dl-dhcom-pdk2.dtb \
|
|
||||||
imx6dl-dhcom-picoitx.dts \
|
|
||||||
imx6dl-gw51xx.dtb \
|
imx6dl-gw51xx.dtb \
|
||||||
imx6dl-gw52xx.dtb \
|
imx6dl-gw52xx.dtb \
|
||||||
imx6dl-gw53xx.dtb \
|
imx6dl-gw53xx.dtb \
|
||||||
|
@ -811,8 +809,7 @@ dtb-y += \
|
||||||
imx6dl-sabreauto.dtb \
|
imx6dl-sabreauto.dtb \
|
||||||
imx6dl-sabresd.dtb \
|
imx6dl-sabresd.dtb \
|
||||||
imx6dl-sielaff.dtb \
|
imx6dl-sielaff.dtb \
|
||||||
imx6dl-wandboard-revd1.dtb \
|
imx6dl-wandboard-revd1.dtb
|
||||||
imx6s-dhcom-drc02.dtb
|
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
@ -824,7 +821,6 @@ dtb-y += \
|
||||||
imx6q-cubox-i.dtb \
|
imx6q-cubox-i.dtb \
|
||||||
imx6q-cubox-i-emmc-som-v15.dtb \
|
imx6q-cubox-i-emmc-som-v15.dtb \
|
||||||
imx6q-cubox-i-som-v15.dtb \
|
imx6q-cubox-i-som-v15.dtb \
|
||||||
imx6q-dhcom-pdk2.dtb \
|
|
||||||
imx6q-display5.dtb \
|
imx6q-display5.dtb \
|
||||||
imx6q-gw51xx.dtb \
|
imx6q-gw51xx.dtb \
|
||||||
imx6q-gw52xx.dtb \
|
imx6q-gw52xx.dtb \
|
||||||
|
|
|
@ -1,15 +0,0 @@
|
||||||
// SPDX-License-Identifier: (GPL-2.0+)
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2019 DH electronics GmbH
|
|
||||||
*/
|
|
||||||
|
|
||||||
/dts-v1/;
|
|
||||||
|
|
||||||
#include "imx6dl.dtsi"
|
|
||||||
#include "imx6qdl-dhcom-som.dtsi"
|
|
||||||
#include "imx6qdl-dhcom-pdk2.dtsi"
|
|
||||||
|
|
||||||
/ {
|
|
||||||
model = "Freescale i.MX6 Duallite/Solo DHCOM Premium Developer Kit (2)";
|
|
||||||
compatible = "dh,imx6dl-dhcom-pdk2", "dh,imx6dl-dhcom", "fsl,imx6dl";
|
|
||||||
};
|
|
|
@ -1,20 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0+
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2021 DH electronics GmbH
|
|
||||||
*
|
|
||||||
* DHCOM iMX6 variant:
|
|
||||||
* DHCM-iMX6DL-C0800-R102-F0819-E-SD-RTC-T-HS-I-01D2
|
|
||||||
* DHCOM PCB number: 493-300 or newer
|
|
||||||
* PicoITX PCB number: 487-600 or newer
|
|
||||||
*/
|
|
||||||
/dts-v1/;
|
|
||||||
|
|
||||||
#include "imx6dl.dtsi"
|
|
||||||
#include "imx6qdl-dhcom-som.dtsi"
|
|
||||||
#include "imx6qdl-dhcom-picoitx.dtsi"
|
|
||||||
|
|
||||||
/ {
|
|
||||||
model = "DH electronics i.MX6DL DHCOM on PicoITX";
|
|
||||||
compatible = "dh,imx6dl-dhcom-picoitx", "dh,imx6dl-dhcom-som",
|
|
||||||
"fsl,imx6dl";
|
|
||||||
};
|
|
|
@ -1,25 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0+
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2015-2021 DH electronics GmbH
|
|
||||||
* Copyright (C) 2018 Marek Vasut <marex@denx.de>
|
|
||||||
*
|
|
||||||
* DHCOM iMX6 variant:
|
|
||||||
* DHCM-iMX6Q-C0800-R102-F0819-E-SD-RTC-T-HS-I-01D2
|
|
||||||
* DHCOM PCB number: 493-300 or newer
|
|
||||||
* PDK2 PCB number: 516-400 or newer
|
|
||||||
*/
|
|
||||||
/dts-v1/;
|
|
||||||
|
|
||||||
#include "imx6q.dtsi"
|
|
||||||
#include "imx6qdl-dhcom-som.dtsi"
|
|
||||||
#include "imx6qdl-dhcom-pdk2.dtsi"
|
|
||||||
|
|
||||||
/ {
|
|
||||||
model = "DH electronics i.MX6Q DHCOM on Premium Developer Kit (2)";
|
|
||||||
compatible = "dh,imx6q-dhcom-pdk2", "dh,imx6q-dhcom-som",
|
|
||||||
"fsl,imx6q";
|
|
||||||
};
|
|
||||||
|
|
||||||
&sata {
|
|
||||||
status = "okay";
|
|
||||||
};
|
|
|
@ -1,30 +0,0 @@
|
||||||
// SPDX-License-Identifier: GPL-2.0+
|
|
||||||
/*
|
|
||||||
* Copyright (C) 2021 DH electronics GmbH
|
|
||||||
*
|
|
||||||
* DHCOM iMX6 variant:
|
|
||||||
* DHCM-iMX6S-C0800-R102-F0409-E-CAN2-RTC-I-01D2
|
|
||||||
* DHCOM PCB number: 493-400 or newer
|
|
||||||
* DRC02 PCB number: 568-100 or newer
|
|
||||||
*/
|
|
||||||
/dts-v1/;
|
|
||||||
|
|
||||||
/*
|
|
||||||
* The kernel only distinguishes between i.MX6 Quad and DualLite,
|
|
||||||
* but the Solo is actually a DualLite with only one CPU. So use
|
|
||||||
* DualLite for the Solo and disable one CPU node.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "imx6dl.dtsi"
|
|
||||||
#include "imx6qdl-dhcom-som.dtsi"
|
|
||||||
#include "imx6qdl-dhcom-drc02.dtsi"
|
|
||||||
|
|
||||||
/ {
|
|
||||||
model = "DH electronics i.MX6S DHCOM on DRC02";
|
|
||||||
compatible = "dh,imx6s-dhcom-drc02", "dh,imx6s-dhcom-som",
|
|
||||||
"fsl,imx6dl";
|
|
||||||
|
|
||||||
cpus {
|
|
||||||
/delete-node/ cpu@1;
|
|
||||||
};
|
|
||||||
};
|
|
|
@ -132,13 +132,14 @@ enum hab_target {
|
||||||
HAB_TGT_ANY = 0x55,
|
HAB_TGT_ANY = 0x55,
|
||||||
};
|
};
|
||||||
|
|
||||||
struct imx_sec_config_fuse_t {
|
struct imx_fuse {
|
||||||
int bank;
|
int bank;
|
||||||
int word;
|
int word;
|
||||||
};
|
};
|
||||||
|
|
||||||
#if defined(CONFIG_IMX_HAB)
|
#if defined(CONFIG_IMX_HAB)
|
||||||
extern struct imx_sec_config_fuse_t const imx_sec_config_fuse;
|
extern struct imx_fuse const imx_sec_config_fuse;
|
||||||
|
extern struct imx_fuse const imx_field_return_fuse;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/*Function prototype description*/
|
/*Function prototype description*/
|
||||||
|
|
|
@ -293,3 +293,5 @@ obj-$(CONFIG_ARCH_IMXRT) += imxrt/
|
||||||
|
|
||||||
obj-$(CONFIG_SPL_BOOTROM_SUPPORT) += spl_imx_romapi.o
|
obj-$(CONFIG_SPL_BOOTROM_SUPPORT) += spl_imx_romapi.o
|
||||||
obj-$(CONFIG_IMX8_ROMAPI) += romapi.o
|
obj-$(CONFIG_IMX8_ROMAPI) += romapi.o
|
||||||
|
|
||||||
|
obj-$(CONFIG_MX7)$(CONFIG_IMX8M) += snvs.o
|
||||||
|
|
|
@ -26,6 +26,14 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
#define IS_HAB_ENABLED_BIT \
|
#define IS_HAB_ENABLED_BIT \
|
||||||
(is_soc_type(MXC_SOC_MX7ULP) ? 0x80000000 : \
|
(is_soc_type(MXC_SOC_MX7ULP) ? 0x80000000 : \
|
||||||
((is_soc_type(MXC_SOC_MX7) || is_soc_type(MXC_SOC_IMX8M)) ? 0x2000000 : 0x2))
|
((is_soc_type(MXC_SOC_MX7) || is_soc_type(MXC_SOC_IMX8M)) ? 0x2000000 : 0x2))
|
||||||
|
#define FIELD_RETURN_FUSE_MASK \
|
||||||
|
(is_imx8mp() ? 0xFFFFFFFF : 0x00000001)
|
||||||
|
/*
|
||||||
|
* The fuse pattern for i.MX8M Plus is 0x28001401, but bit 2 is already set from factory.
|
||||||
|
* This means when field return is set, the fuse word value reads 0x28001405
|
||||||
|
*/
|
||||||
|
#define FIELD_RETURN_PATTERN \
|
||||||
|
(is_imx8mp() ? 0x28001405 : 0x00000001)
|
||||||
|
|
||||||
#ifdef CONFIG_MX7ULP
|
#ifdef CONFIG_MX7ULP
|
||||||
#define HAB_M4_PERSISTENT_START ((soc_rev() >= CHIP_REV_2_0) ? 0x20008040 : \
|
#define HAB_M4_PERSISTENT_START ((soc_rev() >= CHIP_REV_2_0) ? 0x20008040 : \
|
||||||
|
@ -870,18 +878,30 @@ static int validate_ivt(struct ivt *ivt_initial)
|
||||||
|
|
||||||
bool imx_hab_is_enabled(void)
|
bool imx_hab_is_enabled(void)
|
||||||
{
|
{
|
||||||
struct imx_sec_config_fuse_t *fuse =
|
struct imx_fuse *sec_config =
|
||||||
(struct imx_sec_config_fuse_t *)&imx_sec_config_fuse;
|
(struct imx_fuse *)&imx_sec_config_fuse;
|
||||||
|
struct imx_fuse *field_return =
|
||||||
|
(struct imx_fuse *)&imx_field_return_fuse;
|
||||||
uint32_t reg;
|
uint32_t reg;
|
||||||
|
bool is_enabled;
|
||||||
int ret;
|
int ret;
|
||||||
|
|
||||||
ret = fuse_read(fuse->bank, fuse->word, ®);
|
ret = fuse_read(sec_config->bank, sec_config->word, ®);
|
||||||
if (ret) {
|
if (ret) {
|
||||||
puts("\nSecure boot fuse read error\n");
|
puts("Secure boot fuse read error\n");
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
is_enabled = reg & IS_HAB_ENABLED_BIT;
|
||||||
|
if (is_enabled) {
|
||||||
|
ret = fuse_read(field_return->bank, field_return->word, ®);
|
||||||
|
if (ret) {
|
||||||
|
puts("Field return fuse read error\n");
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
is_enabled = (reg & FIELD_RETURN_FUSE_MASK) != FIELD_RETURN_PATTERN;
|
||||||
|
}
|
||||||
|
|
||||||
return (reg & IS_HAB_ENABLED_BIT) == IS_HAB_ENABLED_BIT;
|
return is_enabled;
|
||||||
}
|
}
|
||||||
|
|
||||||
int imx_hab_authenticate_image(uint32_t ddr_start, uint32_t image_size,
|
int imx_hab_authenticate_image(uint32_t ddr_start, uint32_t image_size,
|
||||||
|
|
|
@ -34,13 +34,20 @@
|
||||||
#include <linux/bitfield.h>
|
#include <linux/bitfield.h>
|
||||||
#include <linux/sizes.h>
|
#include <linux/sizes.h>
|
||||||
|
|
||||||
|
#include "../snvs.h"
|
||||||
|
|
||||||
DECLARE_GLOBAL_DATA_PTR;
|
DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
#if defined(CONFIG_IMX_HAB)
|
#if defined(CONFIG_IMX_HAB)
|
||||||
struct imx_sec_config_fuse_t const imx_sec_config_fuse = {
|
struct imx_fuse const imx_sec_config_fuse = {
|
||||||
.bank = 1,
|
.bank = 1,
|
||||||
.word = 3,
|
.word = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct imx_fuse const imx_field_return_fuse = {
|
||||||
|
.bank = 8,
|
||||||
|
.word = 3,
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
int timer_init(void)
|
int timer_init(void)
|
||||||
|
@ -571,6 +578,8 @@ static void imx8m_setup_snvs(void)
|
||||||
writel(SNVS_LPPGDR_INIT, SNVS_BASE_ADDR + SNVS_LPLVDR);
|
writel(SNVS_LPPGDR_INIT, SNVS_BASE_ADDR + SNVS_LPLVDR);
|
||||||
/* Clear interrupt status */
|
/* Clear interrupt status */
|
||||||
writel(0xffffffff, SNVS_BASE_ADDR + SNVS_LPSR);
|
writel(0xffffffff, SNVS_BASE_ADDR + SNVS_LPSR);
|
||||||
|
|
||||||
|
init_snvs();
|
||||||
}
|
}
|
||||||
|
|
||||||
static void imx8m_setup_csu_tzasc(void)
|
static void imx8m_setup_csu_tzasc(void)
|
||||||
|
|
|
@ -42,12 +42,18 @@ DECLARE_GLOBAL_DATA_PTR;
|
||||||
|
|
||||||
struct rom_api *g_rom_api = (struct rom_api *)0x1980;
|
struct rom_api *g_rom_api = (struct rom_api *)0x1980;
|
||||||
|
|
||||||
#ifdef CONFIG_ENV_IS_IN_MMC
|
#if CONFIG_IS_ENABLED(ENV_IS_IN_MMC) || CONFIG_IS_ENABLED(ENV_IS_NOWHERE)
|
||||||
__weak int board_mmc_get_env_dev(int devno)
|
__weak int board_mmc_get_env_dev(int devno)
|
||||||
{
|
{
|
||||||
return devno;
|
return devno;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_MMC_ENV_DEV
|
||||||
|
#define IMX9_MMC_ENV_DEV CONFIG_SYS_MMC_ENV_DEV
|
||||||
|
#else
|
||||||
|
#define IMX9_MMC_ENV_DEV 0
|
||||||
|
#endif
|
||||||
|
|
||||||
int mmc_get_env_dev(void)
|
int mmc_get_env_dev(void)
|
||||||
{
|
{
|
||||||
int ret;
|
int ret;
|
||||||
|
@ -59,7 +65,7 @@ int mmc_get_env_dev(void)
|
||||||
|
|
||||||
if (ret != ROM_API_OKAY) {
|
if (ret != ROM_API_OKAY) {
|
||||||
puts("ROMAPI: failure at query_boot_info\n");
|
puts("ROMAPI: failure at query_boot_info\n");
|
||||||
return CONFIG_SYS_MMC_ENV_DEV;
|
return IMX9_MMC_ENV_DEV;
|
||||||
}
|
}
|
||||||
|
|
||||||
boot_type = boot >> 16;
|
boot_type = boot >> 16;
|
||||||
|
@ -69,7 +75,7 @@ int mmc_get_env_dev(void)
|
||||||
|
|
||||||
/* If not boot from sd/mmc, use default value */
|
/* If not boot from sd/mmc, use default value */
|
||||||
if (boot_type != BOOT_TYPE_SD && boot_type != BOOT_TYPE_MMC)
|
if (boot_type != BOOT_TYPE_SD && boot_type != BOOT_TYPE_MMC)
|
||||||
return env_get_ulong("mmcdev", 10, CONFIG_SYS_MMC_ENV_DEV);
|
return env_get_ulong("mmcdev", 10, IMX9_MMC_ENV_DEV);
|
||||||
|
|
||||||
return board_mmc_get_env_dev(boot_instance);
|
return board_mmc_get_env_dev(boot_instance);
|
||||||
}
|
}
|
||||||
|
|
|
@ -51,10 +51,15 @@ U_BOOT_DRVINFO(imx6_thermal) = {
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_IMX_HAB)
|
#if defined(CONFIG_IMX_HAB)
|
||||||
struct imx_sec_config_fuse_t const imx_sec_config_fuse = {
|
struct imx_fuse const imx_sec_config_fuse = {
|
||||||
.bank = 0,
|
.bank = 0,
|
||||||
.word = 6,
|
.word = 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct imx_fuse const imx_field_return_fuse = {
|
||||||
|
.bank = 5,
|
||||||
|
.word = 6,
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
u32 get_nr_cpus(void)
|
u32 get_nr_cpus(void)
|
||||||
|
|
|
@ -3,5 +3,5 @@
|
||||||
# (C) Copyright 2015 Freescale Semiconductor, Inc.
|
# (C) Copyright 2015 Freescale Semiconductor, Inc.
|
||||||
#
|
#
|
||||||
|
|
||||||
obj-y := soc.o clock.o clock_slice.o ddr.o snvs.o
|
obj-y := soc.o clock.o clock_slice.o ddr.o
|
||||||
obj-$(CONFIG_ARMV7_PSCI) += psci-mx7.o psci-suspend.o
|
obj-$(CONFIG_ARMV7_PSCI) += psci-mx7.o psci-suspend.o
|
||||||
|
|
|
@ -127,10 +127,15 @@ static void isolate_resource(void)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if defined(CONFIG_IMX_HAB)
|
#if defined(CONFIG_IMX_HAB)
|
||||||
struct imx_sec_config_fuse_t const imx_sec_config_fuse = {
|
struct imx_fuse const imx_sec_config_fuse = {
|
||||||
.bank = 1,
|
.bank = 1,
|
||||||
.word = 3,
|
.word = 3,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct imx_fuse const imx_field_return_fuse = {
|
||||||
|
.bank = 8,
|
||||||
|
.word = 3,
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static bool is_mx7d(void)
|
static bool is_mx7d(void)
|
||||||
|
|
|
@ -38,10 +38,15 @@
|
||||||
static char *get_reset_cause(char *);
|
static char *get_reset_cause(char *);
|
||||||
|
|
||||||
#if defined(CONFIG_IMX_HAB)
|
#if defined(CONFIG_IMX_HAB)
|
||||||
struct imx_sec_config_fuse_t const imx_sec_config_fuse = {
|
struct imx_fuse const imx_sec_config_fuse = {
|
||||||
.bank = 29,
|
.bank = 29,
|
||||||
.word = 6,
|
.word = 6,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct imx_fuse const imx_field_return_fuse = {
|
||||||
|
.bank = 9,
|
||||||
|
.word = 6,
|
||||||
|
};
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define ROM_VERSION_ADDR 0x80
|
#define ROM_VERSION_ADDR 0x80
|
||||||
|
|
6
arch/arm/mach-imx/snvs.h
Normal file
6
arch/arm/mach-imx/snvs.h
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright 2018 Linaro
|
||||||
|
*/
|
||||||
|
|
||||||
|
void init_snvs(void);
|
|
@ -58,7 +58,7 @@ int board_init(void)
|
||||||
|
|
||||||
int board_late_init(void)
|
int board_late_init(void)
|
||||||
{
|
{
|
||||||
#ifdef CONFIG_ENV_IS_IN_MMC
|
#if CONFIG_IS_ENABLED(ENV_IS_IN_MMC) || CONFIG_IS_ENABLED(ENV_IS_NOWHERE)
|
||||||
board_late_mmc_env_init();
|
board_late_mmc_env_init();
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -5,11 +5,12 @@ CONFIG_ARCH_MX6=y
|
||||||
CONFIG_MX6QDL=y
|
CONFIG_MX6QDL=y
|
||||||
CONFIG_TARGET_DHCOMIMX6=y
|
CONFIG_TARGET_DHCOMIMX6=y
|
||||||
CONFIG_SPL_SYS_L2_PL310=y
|
CONFIG_SPL_SYS_L2_PL310=y
|
||||||
CONFIG_DEFAULT_DEVICE_TREE="imx6q-dhcom-pdk2"
|
CONFIG_DEFAULT_DEVICE_TREE="nxp/imx/imx6q-dhcom-pdk2"
|
||||||
CONFIG_MX6_DDRCAL=y
|
CONFIG_MX6_DDRCAL=y
|
||||||
CONFIG_NR_DRAM_BANKS=1
|
CONFIG_NR_DRAM_BANKS=1
|
||||||
CONFIG_OF_LIBFDT_OVERLAY=y
|
CONFIG_OF_LIBFDT_OVERLAY=y
|
||||||
CONFIG_OF_LIST="imx6q-dhcom-pdk2 imx6dl-dhcom-pdk2 imx6s-dhcom-drc02 imx6dl-dhcom-picoitx"
|
CONFIG_OF_LIST="nxp/imx/imx6q-dhcom-pdk2 nxp/imx/imx6dl-dhcom-pdk2 nxp/imx/imx6s-dhcom-drc02 nxp/imx/imx6dl-dhcom-picoitx"
|
||||||
|
CONFIG_OF_UPSTREAM=y
|
||||||
CONFIG_FIT_VERBOSE=y
|
CONFIG_FIT_VERBOSE=y
|
||||||
CONFIG_MULTI_DTB_FIT=y
|
CONFIG_MULTI_DTB_FIT=y
|
||||||
CONFIG_LTO=y
|
CONFIG_LTO=y
|
||||||
|
|
20
dts/upstream/src/arm/nxp/imx/imx6dl-dhcom-pdk2.dts
Normal file
20
dts/upstream/src/arm/nxp/imx/imx6dl-dhcom-pdk2.dts
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2024 Marek Vasut <marex@denx.de>
|
||||||
|
*
|
||||||
|
* DHCOM iMX6 variant:
|
||||||
|
* DHCM-iMX6DL-C080-R102-F0819-E-SD-RTC-T-HS-I-01D2
|
||||||
|
* DHCOM PCB number: 493-400 or newer
|
||||||
|
* PDK2 PCB number: 516-400 or newer
|
||||||
|
*/
|
||||||
|
/dts-v1/;
|
||||||
|
|
||||||
|
#include "imx6dl.dtsi"
|
||||||
|
#include "imx6qdl-dhcom-som.dtsi"
|
||||||
|
#include "imx6qdl-dhcom-pdk2.dtsi"
|
||||||
|
|
||||||
|
/ {
|
||||||
|
model = "DH electronics i.MX6DL DHCOM on Premium Developer Kit (2)";
|
||||||
|
compatible = "dh,imx6dl-dhcom-pdk2", "dh,imx6dl-dhcom-som",
|
||||||
|
"fsl,imx6dl";
|
||||||
|
};
|
|
@ -27,6 +27,12 @@
|
||||||
#define BOOTENV
|
#define BOOTENV
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#ifdef CONFIG_SYS_MMC_ENV_DEV
|
||||||
|
#define IMX93_EVK_MMC_ENV_DEV CONFIG_SYS_MMC_ENV_DEV
|
||||||
|
#else
|
||||||
|
#define IMX93_EVK_MMC_ENV_DEV 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Initial environment variables */
|
/* Initial environment variables */
|
||||||
#define CFG_EXTRA_ENV_SETTINGS \
|
#define CFG_EXTRA_ENV_SETTINGS \
|
||||||
BOOTENV \
|
BOOTENV \
|
||||||
|
@ -42,7 +48,7 @@
|
||||||
"boot_fit=no\0" \
|
"boot_fit=no\0" \
|
||||||
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
|
"fdtfile=" CONFIG_DEFAULT_FDT_FILE "\0" \
|
||||||
"bootm_size=0x10000000\0" \
|
"bootm_size=0x10000000\0" \
|
||||||
"mmcdev=" __stringify(CONFIG_SYS_MMC_ENV_DEV)"\0" \
|
"mmcdev=" __stringify(IMX93_EVK_MMC_ENV_DEV)"\0" \
|
||||||
"mmcpart=1\0" \
|
"mmcpart=1\0" \
|
||||||
"mmcroot=/dev/mmcblk1p2 rootwait rw\0" \
|
"mmcroot=/dev/mmcblk1p2 rootwait rw\0" \
|
||||||
"mmcautodetect=yes\0" \
|
"mmcautodetect=yes\0" \
|
||||||
|
|
|
@ -146,6 +146,7 @@ struct image_array {
|
||||||
enum imx8image_cmd {
|
enum imx8image_cmd {
|
||||||
CMD_INVALID,
|
CMD_INVALID,
|
||||||
CMD_BOOT_FROM,
|
CMD_BOOT_FROM,
|
||||||
|
CMD_DCD_SKIP,
|
||||||
CMD_FUSE_VERSION,
|
CMD_FUSE_VERSION,
|
||||||
CMD_SW_VERSION,
|
CMD_SW_VERSION,
|
||||||
CMD_MSG_BLOCK,
|
CMD_MSG_BLOCK,
|
||||||
|
|
|
@ -14,6 +14,7 @@ static soc_type_t soc;
|
||||||
static int container = -1;
|
static int container = -1;
|
||||||
static int32_t core_type = CFG_CORE_INVALID;
|
static int32_t core_type = CFG_CORE_INVALID;
|
||||||
static bool emmc_fastboot;
|
static bool emmc_fastboot;
|
||||||
|
static bool dcd_skip;
|
||||||
static image_t param_stack[IMG_STACK_SIZE];
|
static image_t param_stack[IMG_STACK_SIZE];
|
||||||
static uint8_t fuse_version;
|
static uint8_t fuse_version;
|
||||||
static uint16_t sw_version;
|
static uint16_t sw_version;
|
||||||
|
@ -41,6 +42,7 @@ static int imx8image_check_image_types(uint8_t type)
|
||||||
|
|
||||||
static table_entry_t imx8image_cmds[] = {
|
static table_entry_t imx8image_cmds[] = {
|
||||||
{CMD_BOOT_FROM, "BOOT_FROM", "boot command", },
|
{CMD_BOOT_FROM, "BOOT_FROM", "boot command", },
|
||||||
|
{CMD_DCD_SKIP, "DCD_SKIP", "skip DCD init", },
|
||||||
{CMD_FUSE_VERSION, "FUSE_VERSION", "fuse version", },
|
{CMD_FUSE_VERSION, "FUSE_VERSION", "fuse version", },
|
||||||
{CMD_SW_VERSION, "SW_VERSION", "sw version", },
|
{CMD_SW_VERSION, "SW_VERSION", "sw version", },
|
||||||
{CMD_MSG_BLOCK, "MSG_BLOCK", "msg block", },
|
{CMD_MSG_BLOCK, "MSG_BLOCK", "msg block", },
|
||||||
|
@ -88,6 +90,9 @@ static void parse_cfg_cmd(image_t *param_stack, int32_t cmd, char *token,
|
||||||
if (!strncmp("emmc_fastboot", token, 13))
|
if (!strncmp("emmc_fastboot", token, 13))
|
||||||
emmc_fastboot = true;
|
emmc_fastboot = true;
|
||||||
break;
|
break;
|
||||||
|
case CMD_DCD_SKIP:
|
||||||
|
if (!strncmp("true", token, 4))
|
||||||
|
dcd_skip = true;
|
||||||
case CMD_FUSE_VERSION:
|
case CMD_FUSE_VERSION:
|
||||||
fuse_version = (uint8_t)(strtoll(token, NULL, 0) & 0xFF);
|
fuse_version = (uint8_t)(strtoll(token, NULL, 0) & 0xFF);
|
||||||
break;
|
break;
|
||||||
|
@ -1024,7 +1029,7 @@ int imx8image_copy_image(int outfd, struct image_tool_params *mparams)
|
||||||
fprintf(stdout, "CONTAINER SW VERSION:\t0x%04x\n", sw_version);
|
fprintf(stdout, "CONTAINER SW VERSION:\t0x%04x\n", sw_version);
|
||||||
|
|
||||||
build_container(soc, sector_size, emmc_fastboot,
|
build_container(soc, sector_size, emmc_fastboot,
|
||||||
img_sp, false, fuse_version, sw_version, outfd);
|
img_sp, dcd_skip, fuse_version, sw_version, outfd);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Reference in a new issue