mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 09:54:35 +00:00
Merge patch series "Apply SoM overlays on phyCORE-AM6xx SoMs"
Wadim Egorov <w.egorov@phytec.de> says: Our SoMs are available in multiple configurations, managed via device tree overlays. To determine the specific variant in use, we read the EEPROM and apply the appropriate overlays during boot to the device tree used by the OS. Apply overlays for phyCORE-AM62x and phyCORE-AM64x SoMs. Future K3 SoMs will be able to reuse this logic and overlays. Link: https://lore.kernel.org/r/20241030164815.1763506-1-w.egorov@phytec.de
This commit is contained in:
commit
a45d823c02
5 changed files with 182 additions and 2 deletions
|
@ -301,6 +301,54 @@
|
|||
description = "U-Boot for phyCORE-AM62x";
|
||||
};
|
||||
|
||||
som-no-rtc {
|
||||
description = "k3-am6xx-phycore-disable-rtc";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
load = <0x8F000000>;
|
||||
arch = "arm";
|
||||
|
||||
blob-ext {
|
||||
filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-rtc.dtbo";
|
||||
};
|
||||
};
|
||||
|
||||
som-no-spi {
|
||||
description = "k3-am6xx-phycore-disable-spi-nor";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
load = <0x8F001000>;
|
||||
arch = "arm";
|
||||
|
||||
blob-ext {
|
||||
filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-spi-nor.dtbo";
|
||||
};
|
||||
};
|
||||
|
||||
som-no-eth {
|
||||
description = "k3-am6xx-phycore-disable-eth-phy";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
load = <0x8F002000>;
|
||||
arch = "arm";
|
||||
|
||||
blob-ext {
|
||||
filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-eth-phy.dtbo";
|
||||
};
|
||||
};
|
||||
|
||||
som-qspi {
|
||||
description = "k3-am6xx-phycore-qspi-nor";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
load = <0x8F003000>;
|
||||
arch = "arm";
|
||||
|
||||
blob-ext {
|
||||
filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-qspi-nor.dtbo";
|
||||
};
|
||||
};
|
||||
|
||||
fdt-0 {
|
||||
description = "k3-am625-phyboard-lyra-rdk";
|
||||
type = "flat_dt";
|
||||
|
@ -325,7 +373,11 @@
|
|||
conf-0 {
|
||||
description = "k3-am625-phyboard-lyra-rdk";
|
||||
firmware = "uboot";
|
||||
loadables = "uboot";
|
||||
loadables = "uboot",
|
||||
"som-no-rtc",
|
||||
"som-no-spi",
|
||||
"som-no-eth",
|
||||
"som-qspi";
|
||||
fdt = "fdt-0";
|
||||
};
|
||||
};
|
||||
|
|
|
@ -344,6 +344,54 @@
|
|||
description = "U-Boot for AM64 board";
|
||||
};
|
||||
|
||||
som-no-rtc {
|
||||
description = "k3-am6xx-phycore-disable-rtc";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
load = <0x8F000000>;
|
||||
arch = "arm";
|
||||
|
||||
blob-ext {
|
||||
filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-rtc.dtbo";
|
||||
};
|
||||
};
|
||||
|
||||
som-no-spi {
|
||||
description = "k3-am6xx-phycore-disable-spi-nor";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
load = <0x8F001000>;
|
||||
arch = "arm";
|
||||
|
||||
blob-ext {
|
||||
filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-spi-nor.dtbo";
|
||||
};
|
||||
};
|
||||
|
||||
som-no-eth {
|
||||
description = "k3-am6xx-phycore-disable-eth-phy";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
load = <0x8F002000>;
|
||||
arch = "arm";
|
||||
|
||||
blob-ext {
|
||||
filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-disable-eth-phy.dtbo";
|
||||
};
|
||||
};
|
||||
|
||||
som-qspi {
|
||||
description = "k3-am6xx-phycore-qspi-nor";
|
||||
type = "flat_dt";
|
||||
compression = "none";
|
||||
load = <0x8F003000>;
|
||||
arch = "arm";
|
||||
|
||||
blob-ext {
|
||||
filename = "dts/upstream/src/arm64/ti/k3-am6xx-phycore-qspi-nor.dtbo";
|
||||
};
|
||||
};
|
||||
|
||||
fdt-0 {
|
||||
description = "k3-am642-phyboard-electra-rdk";
|
||||
type = "flat_dt";
|
||||
|
@ -368,7 +416,11 @@
|
|||
conf-0 {
|
||||
description = "k3-am642-phyboard-electra-rdk";
|
||||
firmware = "uboot";
|
||||
loadables = "uboot";
|
||||
loadables = "uboot",
|
||||
"som-no-rtc",
|
||||
"som-no-spi",
|
||||
"som-no-eth",
|
||||
"som-qspi";
|
||||
fdt = "fdt-0";
|
||||
};
|
||||
};
|
||||
|
|
|
@ -6,7 +6,9 @@
|
|||
|
||||
#include <env_internal.h>
|
||||
#include <fdt_support.h>
|
||||
#include <dm/ofnode.h>
|
||||
#include <spl.h>
|
||||
#include <malloc.h>
|
||||
#include <asm/arch/hardware.h>
|
||||
|
||||
#include "../am6_som_detection.h"
|
||||
|
@ -97,8 +99,79 @@ int board_late_init(void)
|
|||
#endif
|
||||
|
||||
#if IS_ENABLED(CONFIG_OF_LIBFDT) && IS_ENABLED(CONFIG_OF_BOARD_SETUP)
|
||||
static int fdt_apply_overlay_from_fit(const char *overlay_path, void *fdt)
|
||||
{
|
||||
u64 loadaddr;
|
||||
ofnode node;
|
||||
int ret;
|
||||
|
||||
node = ofnode_path(overlay_path);
|
||||
if (!ofnode_valid(node))
|
||||
return -FDT_ERR_NOTFOUND;
|
||||
|
||||
ret = ofnode_read_u64(node, "load", &loadaddr);
|
||||
if (ret)
|
||||
return ret;
|
||||
|
||||
return fdt_overlay_apply_verbose(fdt, (void *)loadaddr);
|
||||
}
|
||||
|
||||
static void fdt_apply_som_overlays(void *blob)
|
||||
{
|
||||
void *fdt_copy;
|
||||
u32 fdt_size;
|
||||
struct phytec_eeprom_data data;
|
||||
int err;
|
||||
|
||||
fdt_size = fdt_totalsize(blob);
|
||||
fdt_copy = malloc(fdt_size);
|
||||
if (!fdt_copy)
|
||||
goto fixup_error;
|
||||
|
||||
memcpy(fdt_copy, blob, fdt_size);
|
||||
|
||||
err = phytec_eeprom_data_setup(&data, 0, EEPROM_ADDR);
|
||||
if (err)
|
||||
goto fixup_error;
|
||||
|
||||
if (phytec_get_am6_rtc(&data) == 0) {
|
||||
err = fdt_apply_overlay_from_fit("/fit-images/som-no-rtc", fdt_copy);
|
||||
if (err)
|
||||
goto fixup_error;
|
||||
}
|
||||
|
||||
if (phytec_get_am6_spi(&data) == PHYTEC_EEPROM_VALUE_X) {
|
||||
err = fdt_apply_overlay_from_fit("/fit-images/som-no-spi", fdt_copy);
|
||||
if (err)
|
||||
goto fixup_error;
|
||||
}
|
||||
|
||||
if (phytec_get_am6_eth(&data) == 0) {
|
||||
err = fdt_apply_overlay_from_fit("/fit-images/som-no-eth", fdt_copy);
|
||||
if (err)
|
||||
goto fixup_error;
|
||||
}
|
||||
|
||||
if (phytec_am6_is_qspi(&data)) {
|
||||
err = fdt_apply_overlay_from_fit("/fit-images/som-qspi-nor", fdt_copy);
|
||||
if (err)
|
||||
goto fixup_error;
|
||||
}
|
||||
|
||||
memcpy(blob, fdt_copy, fdt_size);
|
||||
|
||||
cleanup:
|
||||
free(fdt_copy);
|
||||
return;
|
||||
|
||||
fixup_error:
|
||||
pr_err("Failed to apply SoM overlays\n");
|
||||
goto cleanup;
|
||||
}
|
||||
|
||||
int ft_board_setup(void *blob, struct bd_info *bd)
|
||||
{
|
||||
fdt_apply_som_overlays(blob);
|
||||
fdt_copy_fixed_partitions(blob);
|
||||
|
||||
return 0;
|
||||
|
|
|
@ -72,6 +72,7 @@ CONFIG_CMD_SMC=y
|
|||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_MULTI_DTB_FIT=y
|
||||
CONFIG_OF_OVERLAY_LIST="ti/k3-am6xx-phycore-disable-spi-nor ti/k3-am6xx-phycore-disable-rtc ti/k3-am6xx-phycore-disable-eth-phy ti/k3-am6xx-phycore-qspi-nor"
|
||||
CONFIG_SPL_MULTI_DTB_FIT=y
|
||||
CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y
|
||||
CONFIG_ENV_OVERWRITE=y
|
||||
|
|
|
@ -10,6 +10,7 @@ CONFIG_NR_DRAM_BANKS=2
|
|||
CONFIG_SOC_K3_AM642=y
|
||||
CONFIG_K3_ATF_LOAD_ADDR=0x701c0000
|
||||
CONFIG_TARGET_PHYCORE_AM64X_A53=y
|
||||
CONFIG_PHYTEC_SOM_DETECTION=y
|
||||
CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y
|
||||
CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x80480000
|
||||
CONFIG_ENV_SIZE=0x20000
|
||||
|
@ -77,6 +78,7 @@ CONFIG_CMD_TIME=y
|
|||
CONFIG_CMD_SMC=y
|
||||
CONFIG_OF_CONTROL=y
|
||||
CONFIG_SPL_OF_CONTROL=y
|
||||
CONFIG_OF_OVERLAY_LIST="ti/k3-am6xx-phycore-disable-spi-nor ti/k3-am6xx-phycore-disable-rtc ti/k3-am6xx-phycore-disable-eth-phy ti/k3-am6xx-phycore-qspi-nor"
|
||||
CONFIG_MULTI_DTB_FIT=y
|
||||
CONFIG_SPL_MULTI_DTB_FIT=y
|
||||
CONFIG_SPL_MULTI_DTB_FIT_NO_COMPRESSION=y
|
||||
|
|
Loading…
Add table
Reference in a new issue