aboutsummaryrefslogtreecommitdiff
path: root/src/lib/loaders/load_and_run_ramstage.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/lib/loaders/load_and_run_ramstage.c')
-rw-r--r--src/lib/loaders/load_and_run_ramstage.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/src/lib/loaders/load_and_run_ramstage.c b/src/lib/loaders/load_and_run_ramstage.c
index 153e38e11e..fddea4d55e 100644
--- a/src/lib/loaders/load_and_run_ramstage.c
+++ b/src/lib/loaders/load_and_run_ramstage.c
@@ -83,8 +83,25 @@ void run_ramstage(void)
run_ramstage_from_resume(romstage_handoff_find_or_add(), &ramstage);
for (i = 0; i < ARRAY_SIZE(loaders); i++) {
+ /* Default loader state is active. */
+ int ret = 1;
+
ops = loaders[i];
- printk(BIOS_DEBUG, "Trying %s ramstage loader.\n", ops->name);
+
+ if (ops->is_loader_active != NULL)
+ ret = ops->is_loader_active(&ramstage);
+
+ if (ret == 0) {
+ printk(BIOS_DEBUG, "%s ramstage loader inactive.\n",
+ ops->name);
+ continue;
+ } else if (ret < 0) {
+ printk(BIOS_DEBUG, "%s ramstage loader failure.\n",
+ ops->name);
+ continue;
+ }
+
+ printk(BIOS_DEBUG, "%s ramstage loader active.\n", ops->name);
load_ramstage(ops, &ramstage);
}