diff options
author | Ionela Voinescu <ionela.voinescu@imgtec.com> | 2015-01-09 13:14:20 +0000 |
---|---|---|
committer | Aaron Durbin <adurbin@google.com> | 2015-03-27 19:35:58 +0100 |
commit | 00903e5fc0249d822af1d9843358a3aa3675991b (patch) | |
tree | d8a8e26a3408a7c1a1ec08e9ef6c54d01c6e99eb /src/lib/selfboot.c | |
parent | b337c1d1f5a2baef4445a221ad0534bf047f25fc (diff) |
cbfs/rmodule: add architecture specific operations at stage load
Two weak functions were added so that architecture specific operations
on each segment of payload or stage can be performed.
Each architecture must define its own operations, otherwise the
behavior will default to do-nothing functions.
This patch has been updated by to fit more in line with
how program loading is currently being done. The API is the
same as the original, but all call sites to stages/payloads
have been updated. This is known to break any archs that use
rmodule loading that needs cache maintenance. That will be fixed
in a forthcoming patch. Also, the vboot paths are left as is
for easier upstreaming of the rest of the vboot patches.
Original-Change-Id: Ie29e7f9027dd430c8b4dde9848fa3413c5dbfbfa
Original-Signed-off-by: Ionela Voinescu <ionela.voinescu@imgtec.com>
Original-Reviewed-on: https://chromium-review.googlesource.com/239881
Original-Reviewed-by: Vadim Bendebury <vbendeb@chromium.org>
(cherry picked from commit c82c21ce87a4c02bd9219548a4226a58e77beef0)
Signed-off-by: Aaron Durbin <adurbin@chromium.org>
Change-Id: Ifcee5cd9ac5dbca991556296eb5e170b47b77af7
Reviewed-on: http://review.coreboot.org/8837
Tested-by: build bot (Jenkins)
Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/lib/selfboot.c')
-rw-r--r-- | src/lib/selfboot.c | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/lib/selfboot.c b/src/lib/selfboot.c index 4c5fbad8ff..fe73c0c451 100644 --- a/src/lib/selfboot.c +++ b/src/lib/selfboot.c @@ -437,8 +437,22 @@ static int load_self_segments( memcpy((char*)to, (char*)from, amount); } } + + /* + * Each architecture can perform additonal operations + * on the loaded segment + */ + arch_program_segment_loaded((uintptr_t)dest, + ptr->s_memsz); } } + + /* + * Each architecture can perform additonal operations once the entire + * program is loaded + */ + arch_program_loaded(); + return 1; } |