+ pb_log_fn("Failed to parse nvram\n");
+
+ /*
+ * If we have an IPMI mailbox configuration available use it instead of
+ * the boot order found in NVRAM.
+ */
+ if (platform->get_ipmi_boot_mailbox) {
+ char *mailbox;
+ struct param *param;
+ rc = platform->get_ipmi_boot_mailbox(platform, &mailbox);
+ if (!rc && mailbox) {
+ platform->ipmi_mailbox_original_config =
+ talloc_strdup(
+ platform,
+ param_list_get_value(
+ platform->params, "petitboot,bootdevs"));
+ param_list_set(platform->params, "petitboot,bootdevs",
+ mailbox, false);
+ param = param_list_get_param(platform->params,
+ "petitboot,bootdevs");
+ /* Avoid writing this to NVRAM */
+ param->modified = false;
+ config->ipmi_bootdev_mailbox = true;
+ talloc_free(mailbox);
+ }
+ }
+
+ config_populate_all(config, platform->params);
+
+ if (platform->get_ipmi_bootdev) {
+ bool bootdev_persistent;
+ uint8_t bootdev = IPMI_BOOTDEV_INVALID;
+ rc = platform->get_ipmi_bootdev(platform, &bootdev,
+ &bootdev_persistent);
+ if (!rc && ipmi_bootdev_is_valid(bootdev)) {
+ config_set_ipmi_bootdev(config, bootdev,
+ bootdev_persistent);
+ }
+ }
+
+ if (platform->ipmi)
+ get_ipmi_network_override(platform, config);