board: microchip: mpfs_icicle: update to support production silicon

With the introduction of the production silicon Icicle Kit comes the
need to support multiple board device trees. The HSS puts a minimal dtb
in it's payload's ancillary-data immediately after U-Boot in memory.
CONFIG_OF_BOARD will use this dtb that the HSS carries with the bare
minimum of nodes enabled. It allows for firmware to provide the address
of the devicetree in memory using the `a1` register.
Use the device tree compatible from the hart software services to
essentially "detect" which board is in use and therefore select the
appropiate device tree for the board.
Add a fdt production node to the .its referencing the production Icicle
Kit DTB with appropriate attributes. Introduce matching configuration
entries to enable selection of the production Icicle kit FDT blob for
the MPFS Icicle Production Silicon board.
Update the configuration names to match the device tree compatibles for
each board configuration. With these updates, change image node and
configuration node names with more appropriate names.

Signed-off-by: Jamie Gibbons <jamie.gibbons@microchip.com>
Signed-off-by: Thomas Petazzoni <thomas.petazzoni@bootlin.com>
This commit is contained in:
Jamie Gibbons
2025-08-14 13:16:36 +01:00
committed by Thomas Petazzoni
parent f0c865ee1e
commit 98a4635d87
3 changed files with 42 additions and 16 deletions

View File

@@ -24,7 +24,7 @@
algo = "sha256";
};
};
base_fdt {
fdt-mpfs-icicle-kit.dtb {
description = "Flattened Device Tree blob";
data = /incbin/("./mpfs-icicle-kit.dtb");
type = "flat_dt";
@@ -35,19 +35,41 @@
algo = "sha256";
};
};
fdt-mpfs-icicle-kit-prod.dtb {
description = "Flattened Device Tree blob";
data = /incbin/("./mpfs-icicle-kit-prod.dtb");
type = "flat_dt";
arch = "riscv";
compression = "none";
load = <0x8a000000>;
hash-1 {
algo = "sha256";
};
};
};
configurations {
default = "kernel_dtb";
kernel_dtb {
default = "conf-microchip,mpfs-icicle-kit-prod";
conf-microchip,mpfs-icicle-kit {
description = "1 Linux kernel, FDT blob";
kernel = "kernel";
fdt = "base_fdt";
fdt = "fdt-mpfs-icicle-kit.dtb";
};
base_dtb {
conf-microchip,mpfs-icicle-kit-prod {
description = "1 Linux kernel, FDT blob";
kernel = "kernel";
fdt = "fdt-mpfs-icicle-kit-prod.dtb";
};
conf-microchip,fdt-mpfs-icicle-kit.dtb {
description = "Base FDT blob for MPFS Icicle board";
fdt = "base_fdt";
fdt = "fdt-mpfs-icicle-kit.dtb";
};
conf-microchip,fdt-mpfs-icicle-kit-prod.dtb {
description = "Base FDT blob for MPFS Icicle Production board";
fdt = "fdt-mpfs-icicle-kit-prod.dtb";
};
};
};
};

View File

@@ -5,12 +5,15 @@
setenv fdt_high 0xffffffffffffffff
setenv initrd_high 0xffffffffffffffff
load mmc 0:${distro_bootpart} ${scriptaddr} mpfs_icicle.itb;
bootm start ${scriptaddr}#kernel_dtb;
bootm loados ${scriptaddr};
# Try to load a ramdisk if available inside fitImage
bootm ramdisk;
bootm prep;
fdt set /soc/ethernet@20112000 mac-address ${icicle_mac_addr0};
fdt set /soc/ethernet@20110000 mac-address ${icicle_mac_addr1};
bootm go;
fdt addr ${fdtcontroladdr}
fdt get value board_compatible / compatible 1
setenv fitconf conf-${board_compatible}
load mmc 0:${distro_bootpart} ${scriptaddr} mpfs_icicle.itb
bootm start ${scriptaddr}#${fitconf}
bootm loados ${scriptaddr}
bootm ramdisk
bootm prep
run design_overlays
bootm go

View File

@@ -1,3 +1,4 @@
CONFIG_USE_BOOTARGS=y
CONFIG_BOOTARGS="root=/dev/mmcblk0p3 rootwait uio_pdrv_genirq.of_id=generic-uio"
CONFIG_MPFS_PRIORITISE_QSPI_BOOT=n
CONFIG_OF_BOARD=y