Print this page
12220 loader multi-console shouldn't override bootenv.rc

*** 99,109 **** bootops_t bootop; /* simple bootops we'll pass on to kernel */ struct bsys_mem bm; /* * Boot info from "glue" code in low memory. xbootp is used by: ! * do_bop_phys_alloc(), do_bsys_alloc() and boot_prop_finish(). */ static struct xboot_info *xbootp; static uintptr_t next_virt; /* next available virtual address */ static paddr_t next_phys; /* next available physical address from dboot */ static paddr_t high_phys = -(paddr_t)1; /* last used physical address */ --- 99,109 ---- bootops_t bootop; /* simple bootops we'll pass on to kernel */ struct bsys_mem bm; /* * Boot info from "glue" code in low memory. xbootp is used by: ! * do_bop_phys_alloc(), do_bsys_alloc() and read_bootenvrc(). */ static struct xboot_info *xbootp; static uintptr_t next_virt; /* next available virtual address */ static paddr_t next_phys; /* next available physical address from dboot */ static paddr_t high_phys = -(paddr_t)1; /* last used physical address */
*** 668,678 **** * setprop name "value" * * we do single character I/O since this is really just looking at memory */ void ! boot_prop_finish(void) { int fd; char *line; int c; int bytes_read; --- 668,678 ---- * setprop name "value" * * we do single character I/O since this is really just looking at memory */ void ! read_bootenvrc(void) { int fd; char *line; int c; int bytes_read;
*** 776,796 **** strlen(boot_args) > 0) continue; /* * If a property was explicitly set on the command line ! * it will override a setting in bootenv.rc */ ! if (do_bsys_getproplen(NULL, name) >= 0) continue; bsetprops(name, value); } done: if (fd >= 0) (void) BRD_CLOSE(bfs_ops, fd); /* * Check if we have to limit the boot time allocator */ if (do_bsys_getproplen(NULL, "physmem") != -1 && do_bsys_getprop(NULL, "physmem", line) >= 0 && --- 776,811 ---- strlen(boot_args) > 0) continue; /* * If a property was explicitly set on the command line ! * it will override a setting in bootenv.rc. We make an ! * exception for a property from the bootloader such as: ! * ! * console="text,ttya,ttyb,ttyc,ttyd" ! * ! * In such a case, picking the first value here (as ! * lookup_console_devices() does) is at best a guess; if ! * bootenv.rc has a value, it's probably better. */ ! if (strcmp(name, "console") == 0) { ! char propval[BP_MAX_STRLEN] = ""; ! ! if (do_bsys_getprop(NULL, name, propval) == -1 || ! strchr(propval, ',') != NULL) ! bsetprops(name, value); continue; + } + if (do_bsys_getproplen(NULL, name) == -1) bsetprops(name, value); } done: if (fd >= 0) (void) BRD_CLOSE(bfs_ops, fd); + /* * Check if we have to limit the boot time allocator */ if (do_bsys_getproplen(NULL, "physmem") != -1 && do_bsys_getprop(NULL, "physmem", line) >= 0 &&
*** 841,861 **** } } else { v_len = 0; } consoledev[v_len] = 0; ! bcons_init2(inputdev, outputdev, consoledev); } else { /* * Ensure console property exists * If not create it as "hypervisor" */ v_len = do_bsys_getproplen(NULL, "console"); if (v_len < 0) bsetprops("console", "hypervisor"); inputdev = outputdev = consoledev = "hypervisor"; ! bcons_init2(inputdev, outputdev, consoledev); } if (find_boot_prop("prom_debug") || kbm_debug) boot_prop_display(line); } --- 856,876 ---- } } else { v_len = 0; } consoledev[v_len] = 0; ! bcons_post_bootenvrc(inputdev, outputdev, consoledev); } else { /* * Ensure console property exists * If not create it as "hypervisor" */ v_len = do_bsys_getproplen(NULL, "console"); if (v_len < 0) bsetprops("console", "hypervisor"); inputdev = outputdev = consoledev = "hypervisor"; ! bcons_post_bootenvrc(inputdev, outputdev, consoledev); } if (find_boot_prop("prom_debug") || kbm_debug) boot_prop_display(line); }