X-Git-Url: http://git.ozlabs.org/?p=yaboot.git;a=blobdiff_plain;f=second%2Fyaboot.c;h=46ab0efca9c00cdf3826d4111c20453dce86c093;hp=4ade0776383399d486a0c517a4fed507847ea0fe;hb=ac8fbd5ad52b43b820973f1828a29f85bed13a1d;hpb=b6b70ff54df42432d58801ac69ba24e7d95e0426 diff --git a/second/yaboot.c b/second/yaboot.c index 4ade077..46ab0ef 100644 --- a/second/yaboot.c +++ b/second/yaboot.c @@ -178,6 +178,7 @@ yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) { int result; void* malloc_base = NULL; + unsigned long addr; prom_handle root; /* OF seems to do it, but I'm not very confident */ @@ -196,7 +197,10 @@ yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) prom_init ((prom_entry) r5); /* Allocate some memory for malloc'ator */ - malloc_base = prom_claim((void *)MALLOCADDR, MALLOCSIZE, 0); + for (addr = MALLOCADDR; addr <= MALLOCADDR * 16 ;addr+=0x100000) { + malloc_base = prom_claim((void *)addr, MALLOCSIZE, 0); + if (malloc_base != (void *)-1) break; + } if (malloc_base == (void *)-1) { prom_printf("Can't claim malloc buffer (%d bytes at 0x%08x)\n", MALLOCSIZE, MALLOCADDR); @@ -219,7 +223,10 @@ yaboot_start (unsigned long r3, unsigned long r4, unsigned long r5) root = prom_finddevice("/"); if (root != 0) { static char model[256]; - if (prom_getprop(root, "device_type", model, 256 ) > 0 && + if (prom_getprop(root, "CODEGEN,vendor", model, 256) > 0 && + !strncmp("bplan", model, 5)) + _machine = _MACH_bplan; + else if (prom_getprop(root, "device_type", model, 256 ) > 0 && !strncmp("chrp", model, 4)) _machine = _MACH_chrp; else { @@ -455,7 +462,7 @@ static int load_my_config_file(struct boot_fspec_t *orig_fspec) struct bootp_packet *packet; int rc = 0; struct boot_fspec_t fspec = *orig_fspec; - char *cfgpath = (_machine == _MACH_chrp) ? "/etc/" : ""; + char *cfgpath = (_machine == _MACH_chrp || _machine == _MACH_bplan) ? "/etc/" : ""; int flen; int minlen; @@ -1722,11 +1729,13 @@ yaboot_main(void) prom_printf("%s: Unable to parse\n", bootdevice); return -1; } + if (_machine == _MACH_bplan) + boot.part++; DEBUG_F("After parse_device_path: dev=%s, part=%d, file=%s\n", boot.dev, boot.part, boot.file); if (!conf_given) { - if (_machine == _MACH_chrp) + if (_machine == _MACH_chrp || _machine == _MACH_bplan) boot.file = "/etc/"; else if (strlen(boot.file)) { if (!strncmp(boot.file, "\\\\", 2))