diff options
author | Patrick Rudolph <patrick.rudolph@9elements.com> | 2018-04-19 14:39:07 +0200 |
---|---|---|
committer | Philipp Deppenwiese <zaolin.daisuki@gmail.com> | 2018-06-19 18:10:05 +0000 |
commit | a892cde653d40e39d399b1bc4c438e3dc2d00cd6 (patch) | |
tree | 369d008d2cc9ec931925b75a2f2805ef4636d841 /src/lib/prog_loaders.c | |
parent | 8c986ab26358b40863f7404c97e8afbb118789f1 (diff) | |
download | coreboot-a892cde653d40e39d399b1bc4c438e3dc2d00cd6.tar.xz |
lib: Add FIT payload support
* Add support for parsing and booting FIT payloads.
* Build fit loader code from depthcharge.
* Fix coding style.
* Add Kconfig option to add compiletime support for FIT.
* Add support for initrd.
* Add default compat strings
* Apply optional devicetree fixups using dt_apply_fixups
Starting at this point the CBFS payload/ can be either SELF or FIT.
Tested on Cavium SoC: Parses and loads a Linux kernel 4.16.3.
Tested on Cavium SoC: Parses and loads a Linux kernel 4.15.0.
Tested on Cavium SoC: Parses and loads a Linux kernel 4.1.52.
Change-Id: I0f27b92a5e074966f893399eb401eb97d784850d
Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com>
Reviewed-on: https://review.coreboot.org/25019
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Philipp Deppenwiese <zaolin.daisuki@gmail.com>
Diffstat (limited to 'src/lib/prog_loaders.c')
-rw-r--r-- | src/lib/prog_loaders.c | 15 |
1 files changed, 14 insertions, 1 deletions
diff --git a/src/lib/prog_loaders.c b/src/lib/prog_loaders.c index 6811eb0001..02b6590aac 100644 --- a/src/lib/prog_loaders.c +++ b/src/lib/prog_loaders.c @@ -31,6 +31,7 @@ #include <symbols.h> #include <timestamp.h> #include <cbfs.h> +#include <fit_payload.h> /* Only can represent up to 1 byte less than size_t. */ const struct mem_region_device addrspace_32bit = @@ -183,7 +184,19 @@ void payload_load(void) mirror_payload(payload); - selfload(payload, true); + switch (prog_cbfs_type(payload)) { + case CBFS_TYPE_SELF: /* Simple ELF */ + selfload(payload, true); + break; + case CBFS_TYPE_FIT: /* Flattened image tree */ + if (IS_ENABLED(CONFIG_PAYLOAD_FIT_SUPPORT)) { + fit_payload(payload); + break; + } /* else fall-through */ + default: + die("Unsupported payload type.\n"); + break; + } out: if (prog_entry(payload) == NULL) |