X-Git-Url: http://git.ozlabs.org/?p=petitboot;a=blobdiff_plain;f=discover%2Fplatform-powerpc.c;h=57618c3592bc5922c395de72e0fb6b9a411a5cf6;hp=eb54c6dddf231d73a5f1f1965f76703f7967d471;hb=9f42e56fc5968fcb34edfad017adb73960c2bb61;hpb=ce54f866b2b9e48bab73acd73b4c05a057f9ddca diff --git a/discover/platform-powerpc.c b/discover/platform-powerpc.c index eb54c6d..57618c3 100644 --- a/discover/platform-powerpc.c +++ b/discover/platform-powerpc.c @@ -569,7 +569,7 @@ static void populate_config(struct platform_powerpc *platform, val = get_param(platform, "petitboot,tty"); if (val) - config->boot_tty = talloc_strdup(config, val); + config->boot_console = talloc_strdup(config, val); } static char *iface_config_str(void *ctx, struct interface_config *config) @@ -635,6 +635,15 @@ static void update_network_config(struct platform_powerpc *platform, unsigned int i; char *val; + /* + * Don't store IPMI overrides to NVRAM. If this was a persistent + * override it was already stored in NVRAM by + * get_ipmi_network_override() + */ + if (config->network.n_interfaces && + config->network.interfaces[0]->override) + return; + val = talloc_strdup(platform, ""); for (i = 0; i < config->network.n_interfaces; i++) { @@ -737,7 +746,7 @@ static int update_config(struct platform_powerpc *platform, val = config->allow_writes ? "true" : "false"; update_string_config(platform, "petitboot,write?", val); - val = config->boot_tty ?: ""; + val = config->boot_console ?: ""; update_string_config(platform, "petitboot,tty", val); update_network_config(platform, config); @@ -1230,32 +1239,32 @@ static void get_active_consoles(struct config *config) struct stat sbuf; char *fsp_prop = NULL; - config->n_tty = 2; - config->tty_list = talloc_array(config, char *, config->n_tty); - if (!config->tty_list) + config->n_consoles = 2; + config->consoles = talloc_array(config, char *, config->n_consoles); + if (!config->consoles) goto err; - config->tty_list[0] = talloc_asprintf(config->tty_list, + config->consoles[0] = talloc_asprintf(config->consoles, "/dev/hvc0 [IPMI / Serial]"); - config->tty_list[1] = talloc_asprintf(config->tty_list, + config->consoles[1] = talloc_asprintf(config->consoles, "/dev/tty1 [VGA]"); fsp_prop = talloc_asprintf(config, "%sfsps", devtree_dir); if (stat(fsp_prop, &sbuf) == 0) { /* FSP based machines also have a separate serial console */ - config->tty_list = talloc_realloc(config, config->tty_list, - char *, config->n_tty + 1); - if (!config->tty_list) + config->consoles = talloc_realloc(config, config->consoles, + char *, config->n_consoles + 1); + if (!config->consoles) goto err; - config->tty_list[config->n_tty++] = talloc_asprintf( - config->tty_list, + config->consoles[config->n_consoles++] = talloc_asprintf( + config->consoles, "/dev/hvc1 [Serial]"); } return; err: - config->n_tty = 0; - pb_log("Failed to allocate memory for tty_list\n"); + config->n_consoles = 0; + pb_log("Failed to allocate memory for consoles\n"); } static int load_config(struct platform *p, struct config *config) @@ -1348,6 +1357,7 @@ static bool probe(struct platform *p, void *ctx) { struct platform_powerpc *platform; struct stat statbuf; + bool bmc_present; int rc; /* we need a device tree */ @@ -1363,7 +1373,9 @@ static bool probe(struct platform *p, void *ctx) p->platform_data = platform; - if (ipmi_present()) { + bmc_present = stat("/proc/device-tree/bmc", &statbuf) == 0; + + if (ipmi_present() && bmc_present) { pb_debug("platform: using direct IPMI for IPMI paramters\n"); platform->ipmi = ipmi_open(platform); platform->get_ipmi_bootdev = get_ipmi_bootdev_ipmi; @@ -1378,8 +1390,7 @@ static bool probe(struct platform *p, void *ctx) pb_log("platform: no IPMI parameter support\n"); } - rc = stat("/proc/device-tree/bmc", &statbuf); - if (!rc) + if (bmc_present) platform->get_platform_versions = hostboot_load_versions; return true;