spl: Use standard FIT entries
SPL is creating fit-images DT node when loadables are recorded in selected
configuration. Entries which are created are using entry-point and
load-addr property names. But there shouldn't be a need to use non standard
properties because entry/load are standard FIT properties. But using
standard FIT properties enables option to use generic FIT functions to
descrease SPL size. Here is result for ZynqMP virt configuration:
xilinx_zynqmp_virt: spl/u-boot-spl:all -82 spl/u-boot-spl:rodata -22 spl/u-boot-spl:text -60
The patch causes change in run time fit image record.
Before:
fit-images {
uboot {
os = "u-boot";
type = "firmware";
size = <0xfd520>;
entry-point = <0x8000000>;
load-addr = <0x8000000>;
};
};
After:
fit-images {
uboot {
os = "u-boot";
type = "firmware";
size = <0xfd520>;
entry = <0x8000000>;
load = <0x8000000>;
};
};
Replacing calling fdt_getprop_u32() by fit_image_get_entry/load() also
enables support for reading entry/load properties recorded in 64bit format.
Signed-off-by: Michal Simek <michal.simek@xilinx.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
@@ -66,6 +66,90 @@ can point to a script which generates this image source file during
|
||||
the build process. It gets passed a list of device tree files (taken from the
|
||||
CONFIG_OF_LIST symbol).
|
||||
|
||||
The SPL also records to a DT all additional images (called loadables) which are
|
||||
loaded. The information about loadables locations is passed via the DT node with
|
||||
fit-images name.
|
||||
|
||||
Loadables Example
|
||||
-----------------
|
||||
Consider the following case for an ARM64 platform where U-Boot runs in EL2
|
||||
started by ATF where SPL is loading U-Boot (as loadables) and ATF (as firmware).
|
||||
|
||||
/dts-v1/;
|
||||
|
||||
/ {
|
||||
description = "Configuration to load ATF before U-Boot";
|
||||
|
||||
images {
|
||||
uboot {
|
||||
description = "U-Boot (64-bit)";
|
||||
data = /incbin/("u-boot-nodtb.bin");
|
||||
type = "firmware";
|
||||
os = "u-boot";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
load = <0x8 0x8000000>;
|
||||
entry = <0x8 0x8000000>;
|
||||
hash {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
atf {
|
||||
description = "ARM Trusted Firmware";
|
||||
data = /incbin/("bl31.bin");
|
||||
type = "firmware";
|
||||
os = "arm-trusted-firmware";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
load = <0xfffea000>;
|
||||
entry = <0xfffea000>;
|
||||
hash {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
fdt_1 {
|
||||
description = "zynqmp-zcu102-revA";
|
||||
data = /incbin/("arch/arm/dts/zynqmp-zcu102-revA.dtb");
|
||||
type = "flat_dt";
|
||||
arch = "arm64";
|
||||
compression = "none";
|
||||
load = <0x100000>;
|
||||
hash {
|
||||
algo = "md5";
|
||||
};
|
||||
};
|
||||
};
|
||||
configurations {
|
||||
default = "config_1";
|
||||
|
||||
config_1 {
|
||||
description = "zynqmp-zcu102-revA";
|
||||
firmware = "atf";
|
||||
loadables = "uboot";
|
||||
fdt = "fdt_1";
|
||||
};
|
||||
};
|
||||
};
|
||||
|
||||
In this case the SPL records via fit-images DT node the information about
|
||||
loadables U-Boot image.
|
||||
|
||||
ZynqMP> fdt addr $fdtcontroladdr
|
||||
ZynqMP> fdt print /fit-images
|
||||
fit-images {
|
||||
uboot {
|
||||
os = "u-boot";
|
||||
type = "firmware";
|
||||
size = <0x001017c8>;
|
||||
entry = <0x00000008 0x08000000>;
|
||||
load = <0x00000008 0x08000000>;
|
||||
};
|
||||
};
|
||||
|
||||
As you can see entry and load properties are 64bit wide to support loading
|
||||
images above 4GB (in past entry and load properties where just 32bit).
|
||||
|
||||
|
||||
Example 1 -- old-style (non-FDT) kernel booting
|
||||
-----------------------------------------------
|
||||
|
||||
|
||||
Reference in New Issue
Block a user