Index: stand/uboot/common/main.c =================================================================== --- stand/uboot/common/main.c +++ stand/uboot/common/main.c @@ -497,6 +497,9 @@ do_interact: setenv("LINES", "24", 1); /* optional */ setenv("prompt", "loader>", 1); +#ifdef __powerpc__ + setenv("usefdt", "1", 1); +#endif archsw.arch_loadaddr = uboot_loadaddr; archsw.arch_getdev = uboot_getdev; Index: stand/uboot/lib/elf_freebsd.c =================================================================== --- stand/uboot/lib/elf_freebsd.c +++ stand/uboot/lib/elf_freebsd.c @@ -71,7 +71,7 @@ __elfN(uboot_exec)(struct preloaded_file *fp) { struct file_metadata *fmp; - vm_offset_t mdp; + vm_offset_t mdp, dtbp; Elf_Ehdr *e; int error; void (*entry)(void *); @@ -81,7 +81,7 @@ e = (Elf_Ehdr *)&fmp->md_data; - if ((error = md_load(fp->f_args, &mdp, NULL)) != 0) + if ((error = md_load(fp->f_args, &mdp, &dtbp)) != 0) return (error); entry = (void *)e->e_entry; @@ -90,7 +90,12 @@ dev_cleanup(); printf("Kernel args: %s\n", fp->f_args); +#ifdef __powerpc__ + ((void (*)(u_long, u_long, u_long, void *, u_long))entry)(dtbp, 0, 0, + (void *)mdp, 0xfb5d104d); +#else (*entry)((void *)mdp); +#endif panic("exec returned"); }