summaryrefslogtreecommitdiffstats
path: root/src/lib/prog_loaders.c
diff options
context:
space:
mode:
authorPatrick Rudolph <patrick.rudolph@9elements.com>2018-04-19 14:39:07 +0200
committerPhilipp Deppenwiese <zaolin.daisuki@gmail.com>2018-06-19 18:10:05 +0000
commita892cde653d40e39d399b1bc4c438e3dc2d00cd6 (patch)
tree369d008d2cc9ec931925b75a2f2805ef4636d841 /src/lib/prog_loaders.c
parent8c986ab26358b40863f7404c97e8afbb118789f1 (diff)
downloadcoreboot-a892cde653d40e39d399b1bc4c438e3dc2d00cd6.tar.gz
coreboot-a892cde653d40e39d399b1bc4c438e3dc2d00cd6.tar.bz2
coreboot-a892cde653d40e39d399b1bc4c438e3dc2d00cd6.zip
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.c15
1 files changed, 14 insertions, 1 deletions
diff --git a/src/lib/prog_loaders.c b/src/lib/prog_loaders.c
index 6811eb000131..02b6590aac44 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)