X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=second%2Fyaboot.c;h=9b66ab44e1be0ee82b88e386a5d0358428766e73;hb=32b8ef2cc825d09ac26bb5c7aa4d31ab53df8dc3;hp=c73348845721ee06eaadaff8bab1e5cb8497e37f;hpb=89aafcfba49a5a302c591b05c7c73d26451dcfda;p=yaboot.git diff --git a/second/yaboot.c b/second/yaboot.c index c733488..9b66ab4 100644 --- a/second/yaboot.c +++ b/second/yaboot.c @@ -180,10 +180,10 @@ yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) prom_print_available(); /* Allocate some memory for malloc'ator */ - malloc_base = prom_claim_chunk((void *)MALLOCADDR, MALLOCSIZE, 0); + malloc_base = prom_claim_chunk_top(MALLOCSIZE, 0); if (malloc_base == (void *)-1) { - prom_printf("Can't claim malloc buffer (%d bytes at 0x%08x)\n", - MALLOCSIZE, MALLOCADDR); + prom_printf("Can't claim malloc buffer of %d bytes\n", + MALLOCSIZE); return -1; } malloc_init(malloc_base, MALLOCSIZE); @@ -205,6 +205,9 @@ yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) else if (prom_getprop(root, "device_type", model, 256 ) > 0 && !strncmp("chrp", model, 4)) _machine = _MACH_chrp; + else if (prom_getprop(root, "compatible", model, 256 ) > 0 && + strstr(model, "ibm,powernv")) + _machine = _MACH_chrp; else { if (prom_getprop(root, "model", model, 256 ) > 0 && !strncmp(model, "IBM", 3)) @@ -603,7 +606,7 @@ void check_password(char *str) prom_printf ("\n"); #ifdef USE_MD5_PASSWORDS if (!strncmp (password, "$1$", 3)) { - if (!check_md5_password(passwdbuff, password)) + if (!check_md5_password((unsigned char*)passwdbuff, (unsigned char*)password)) return; } else if (!strcmp (password, passwdbuff)) @@ -709,9 +712,10 @@ int get_params(struct boot_param_t* params) if (!imagename) { if (bootoncelabel[0] != 0) imagename = bootoncelabel; - else if (bootlastlabel[0] != 0) - imagename = bootlastlabel; - else + else if (bootlastlabel[0] != 0) { + imagename = bootlastlabel; + word_split(&imagename, ¶ms->args); + } else imagename = cfg_get_default(); } if (imagename) @@ -773,7 +777,13 @@ int get_params(struct boot_param_t* params) imagename = cfg_get_default(); /* write the imagename out so it can be reused on reboot if necessary */ - prom_set_options("boot-last-label", imagename, strlen(imagename)); + strcpy(bootlastlabel, imagename); + if (params->args && params->args[0]) { + strcat(bootlastlabel, " "); + strcat(bootlastlabel, params->args); + } + prom_set_options("boot-last-label", bootlastlabel, + strlen(bootlastlabel) + 1); label = 0; defdevice = boot.dev;