]> git.ozlabs.org Git - yaboot.git/blobdiff - second/yaboot.c
yaboot-1.3.17
[yaboot.git] / second / yaboot.c
index c73348845721ee06eaadaff8bab1e5cb8497e37f..9b66ab44e1be0ee82b88e386a5d0358428766e73 100644 (file)
@@ -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, &params->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;