]> git.ozlabs.org Git - yaboot.git/blobdiff - second/yaboot.c
make: use STRIP
[yaboot.git] / second / yaboot.c
index 0fd26a106af36d2599019ebb9289aa1ba150bc5b..ec0c0859d71813be46db27937154583b744c6a2a 100644 (file)
@@ -76,6 +76,8 @@
 #define KERNEL_LINK_ADDR_PPC32 0xC0000000UL
 #define KERNEL_LINK_ADDR_PPC64 0xC000000000000000ULL
 
+#define INITRD_CHUNKSIZE 0x100000
+
 typedef struct {
      union {
          Elf32_Ehdr  elf32hdr;
@@ -205,6 +207,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))
@@ -1020,6 +1025,7 @@ yaboot_text_ui(void)
      loadinfo_t          loadinfo;
      void                *initrd_more,*initrd_want;
      unsigned long       initrd_read;
+     unsigned int        len = INITRD_CHUNKSIZE;
 
      loadinfo.load_loc = 0;
 
@@ -1109,19 +1115,18 @@ yaboot_text_ui(void)
               }
               prom_printf("Loading ramdisk...\n");
               result = open_file(&params.rd, &file);
+              if (result == FILE_ERR_OK && file.fs->ino_size) {
+                   result = file.fs->ino_size(&file, &len);
+               }
               if (result != FILE_ERR_OK) {
                    prom_printf("%s:%d,", params.rd.dev, params.rd.part);
                    prom_perror(result, params.rd.file);
               }
               else {
-#define INITRD_CHUNKSIZE 0x100000
-                   unsigned int len = INITRD_CHUNKSIZE;
-
-                   /* We add a bit to the actual size so the loop below doesn't think
-                    * there is more to load.
+                   /* We add a bit to the actual size so the loop below
+                    * doesn't think there is more to load.
                     */
-                   if (file.fs->ino_size && file.fs->ino_size(&file) > 0)
-                        len = file.fs->ino_size(&file) + 0x1000;
+                    len += 0x1000;
 
                    initrd_base = prom_claim_chunk(loadinfo.base+loadinfo.memsize, len, 0);
                    if (initrd_base == (void *)-1) {
@@ -1192,7 +1197,7 @@ load_elf32(struct boot_file_t *file, loadinfo_t *loadinfo)
 {
      int                       i;
      Elf32_Ehdr                *e = &(loadinfo->elf.elf32hdr);
-     Elf32_Phdr                *p, *ph;
+     Elf32_Phdr                *p, *ph = NULL;
      int                       size = sizeof(Elf32_Ehdr) - sizeof(Elf_Ident);
      unsigned long     loadaddr;
 
@@ -1325,7 +1330,7 @@ load_elf64(struct boot_file_t *file, loadinfo_t *loadinfo)
 {
      int                       i;
      Elf64_Ehdr                *e = &(loadinfo->elf.elf64hdr);
-     Elf64_Phdr                *p, *ph;
+     Elf64_Phdr                *p, *ph = NULL;
      int                       size = sizeof(Elf64_Ehdr) - sizeof(Elf_Ident);
      unsigned long     loadaddr;