From owner-svn-src-head@freebsd.org Mon Feb 29 07:27:51 2016 Return-Path: Delivered-To: svn-src-head@mailman.ysv.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:1900:2254:206a::19:1]) by mailman.ysv.freebsd.org (Postfix) with ESMTP id 95DE6AB7D33; Mon, 29 Feb 2016 07:27:51 +0000 (UTC) (envelope-from sgalabov@FreeBSD.org) Received: from repo.freebsd.org (repo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:0]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (Client did not present a certificate) by mx1.freebsd.org (Postfix) with ESMTPS id 72B5219EE; Mon, 29 Feb 2016 07:27:51 +0000 (UTC) (envelope-from sgalabov@FreeBSD.org) Received: from repo.freebsd.org ([127.0.1.37]) by repo.freebsd.org (8.15.2/8.15.2) with ESMTP id u1T7Ro0N051566; Mon, 29 Feb 2016 07:27:50 GMT (envelope-from sgalabov@FreeBSD.org) Received: (from sgalabov@localhost) by repo.freebsd.org (8.15.2/8.15.2/Submit) id u1T7RnO9051557; Mon, 29 Feb 2016 07:27:49 GMT (envelope-from sgalabov@FreeBSD.org) Message-Id: <201602290727.u1T7RnO9051557@repo.freebsd.org> X-Authentication-Warning: repo.freebsd.org: sgalabov set sender to sgalabov@FreeBSD.org using -f From: Stanislav Galabov Date: Mon, 29 Feb 2016 07:27:49 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org Subject: svn commit: r296182 - in head/sys/boot: common fdt uboot/common uboot/lib X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.20 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 29 Feb 2016 07:27:51 -0000 Author: sgalabov Date: Mon Feb 29 07:27:49 2016 New Revision: 296182 URL: https://svnweb.freebsd.org/changeset/base/296182 Log: These changes attempt to put things in order before the introduction of MIPS ubldr. The changes are mostly dealing with removing unnecessary casts from the U-Boot API (we're passing only pointers, no obvious reason to cast them to uint32_t), cleaning up some compiler warnings and using the proper printf format specifiers in order to be able to compile cleanly for both 32-bit and 64-bit MIPS targets. Reviewed by: imp Approved by: adrian (mentor) Sponsored by: Smartcom - Bulgaria AD Differential Revision: https://reviews.freebsd.org/D5312 Modified: head/sys/boot/common/Makefile.inc head/sys/boot/common/dev_net.c head/sys/boot/fdt/fdt_loader_cmd.c head/sys/boot/uboot/common/main.c head/sys/boot/uboot/lib/disk.c head/sys/boot/uboot/lib/elf_freebsd.c head/sys/boot/uboot/lib/glue.c head/sys/boot/uboot/lib/glue.h Modified: head/sys/boot/common/Makefile.inc ============================================================================== --- head/sys/boot/common/Makefile.inc Mon Feb 29 05:24:29 2016 (r296181) +++ head/sys/boot/common/Makefile.inc Mon Feb 29 07:27:49 2016 (r296182) @@ -20,6 +20,8 @@ SRCS+= load_elf64.c reloc_elf64.c SRCS+= load_elf64.c reloc_elf64.c .elif ${MACHINE_ARCH} == "mips64" || ${MACHINE_ARCH} == "mips64el" SRCS+= load_elf64.c reloc_elf64.c +.elif ${MACHINE_ARCH} == "mips" || ${MACHINE_ARCH} == "mipsel" +SRCS+= load_elf32.c reloc_elf32.c .endif .if defined(LOADER_NET_SUPPORT) Modified: head/sys/boot/common/dev_net.c ============================================================================== --- head/sys/boot/common/dev_net.c Mon Feb 29 05:24:29 2016 (r296181) +++ head/sys/boot/common/dev_net.c Mon Feb 29 07:27:49 2016 (r296182) @@ -164,8 +164,7 @@ net_open(struct open_file *f, ...) * info from bootp or other sources. */ d = socktodesc(netdev_sock); - sprintf(temp, "%6D", d->myea, ":"); - setenv("boot.netif.hwaddr", temp, 1); + setenv("boot.netif.hwaddr", ether_sprintf(d->myea), 1); setenv("boot.netif.ip", inet_ntoa(myip), 1); setenv("boot.netif.netmask", intoa(netmask), 1); setenv("boot.netif.gateway", inet_ntoa(gateip), 1); Modified: head/sys/boot/fdt/fdt_loader_cmd.c ============================================================================== --- head/sys/boot/fdt/fdt_loader_cmd.c Mon Feb 29 05:24:29 2016 (r296181) +++ head/sys/boot/fdt/fdt_loader_cmd.c Mon Feb 29 07:27:49 2016 (r296182) @@ -296,8 +296,8 @@ fdt_setup_fdtp() /* If we were given the address of a valid blob in memory, use it. */ if (fdt_to_load != NULL) { if (fdt_load_dtb_addr(fdt_to_load) == 0) { - printf("Using DTB from memory address 0x%08X.\n", - (unsigned int)fdt_to_load); + printf("Using DTB from memory address 0x%p.\n", + fdt_to_load); return (0); } } @@ -427,6 +427,7 @@ fdt_fixup_cpubusfreqs(unsigned long cpuf } } +#ifdef notyet static int fdt_reg_valid(uint32_t *reg, int len, int addr_cells, int size_cells) { @@ -458,6 +459,7 @@ fdt_reg_valid(uint32_t *reg, int len, in } return (0); } +#endif void fdt_fixup_memory(struct fdt_mem_region *region, size_t num) Modified: head/sys/boot/uboot/common/main.c ============================================================================== --- head/sys/boot/uboot/common/main.c Mon Feb 29 05:24:29 2016 (r296181) +++ head/sys/boot/uboot/common/main.c Mon Feb 29 07:27:49 2016 (r296182) @@ -132,8 +132,8 @@ meminfo(void) for (i = 0; i < 3; i++) { size = memsize(si, t[i]); if (size > 0) - printf("%s: %lldMB\n", ub_mem_type(t[i]), - size / 1024 / 1024); + printf("%s: %juMB\n", ub_mem_type(t[i]), + (uintmax_t)(size / 1024 / 1024)); } } @@ -426,7 +426,7 @@ main(void) * Set up console. */ cons_probe(); - printf("Compatible U-Boot API signature found @%x\n", (uint32_t)sig); + printf("Compatible U-Boot API signature found @%p\n", sig); printf("\n"); printf("%s, Revision %s\n", bootprog_name, bootprog_rev); @@ -511,7 +511,7 @@ static int command_heap(int argc, char *argv[]) { - printf("heap base at %p, top at %p, used %d\n", end, sbrk(0), + printf("heap base at %p, top at %p, used %td\n", end, sbrk(0), sbrk(0) - end); return (CMD_OK); Modified: head/sys/boot/uboot/lib/disk.c ============================================================================== --- head/sys/boot/uboot/lib/disk.c Mon Feb 29 05:24:29 2016 (r296181) +++ head/sys/boot/uboot/lib/disk.c Mon Feb 29 07:27:49 2016 (r296182) @@ -156,7 +156,8 @@ stor_strategy(void *devdata, int rw, dad } if (size % SI(dev).bsize) { - stor_printf("size=%d not multiple of device block size=%d\n", + stor_printf("size=%zu not multiple of device " + "block size=%d\n", size, SI(dev).bsize); return (EIO); } Modified: head/sys/boot/uboot/lib/elf_freebsd.c ============================================================================== --- head/sys/boot/uboot/lib/elf_freebsd.c Mon Feb 29 05:24:29 2016 (r296181) +++ head/sys/boot/uboot/lib/elf_freebsd.c Mon Feb 29 07:27:49 2016 (r296182) @@ -31,6 +31,10 @@ __FBSDID("$FreeBSD$"); #include #include +#ifdef __mips__ +#include +#include +#endif #include #include #include @@ -81,7 +85,7 @@ __elfN(uboot_exec)(struct preloaded_file return (error); entry = (void *)e->e_entry; - printf("Kernel entry at 0x%x...\n", (unsigned)entry); + printf("Kernel entry at 0x%p...\n", entry); dev_cleanup(); printf("Kernel args: %s\n", fp->f_args); Modified: head/sys/boot/uboot/lib/glue.c ============================================================================== --- head/sys/boot/uboot/lib/glue.c Mon Feb 29 05:24:29 2016 (r296181) +++ head/sys/boot/uboot/lib/glue.c Mon Feb 29 07:27:49 2016 (r296182) @@ -83,8 +83,9 @@ api_search_sig(struct api_signature **si if (uboot_address == 0) uboot_address = 255 * 1024 * 1024; - sp = (void *)(uboot_address & ~0x000fffff); - spend = sp + 0x00300000 - API_SIG_MAGLEN; + sp = (void *)(uboot_address & API_SIG_SEARCH_MASK); + spend = sp + API_SIG_SEARCH_LEN - API_SIG_MAGLEN; + while (sp < spend) { if (!bcmp(sp, API_SIG_MAGIC, API_SIG_MAGLEN)) { *sig = (struct api_signature *)sp; @@ -109,7 +110,7 @@ ub_getc(void) { int c; - if (!syscall(API_GETC, NULL, (uint32_t)&c)) + if (!syscall(API_GETC, NULL, &c)) return (-1); return (c); @@ -120,24 +121,24 @@ ub_tstc(void) { int t; - if (!syscall(API_TSTC, NULL, (uint32_t)&t)) + if (!syscall(API_TSTC, NULL, &t)) return (-1); return (t); } void -ub_putc(char c) +ub_putc(const char c) { - syscall(API_PUTC, NULL, (uint32_t)&c); + syscall(API_PUTC, NULL, &c); } void ub_puts(const char *s) { - syscall(API_PUTS, NULL, (uint32_t)s); + syscall(API_PUTS, NULL, s); } /**************************************** @@ -166,7 +167,7 @@ ub_get_sys_info(void) si.mr_no = UB_MAX_MR; memset(&mr, 0, sizeof(mr)); - if (!syscall(API_GET_SYS_INFO, &err, (u_int32_t)&si)) + if (!syscall(API_GET_SYS_INFO, &err, &si)) return (NULL); return ((err) ? NULL : &si); @@ -433,7 +434,7 @@ ub_dump_di(int handle) int i; printf("device info (%d):\n", handle); - printf(" cookie\t= 0x%08x\n", (uint32_t)di->cookie); + printf(" cookie\t= 0x%p\n", di->cookie); printf(" type\t\t= 0x%08x\n", di->type); if (di->type == DEV_TYP_NET) { @@ -483,7 +484,7 @@ ub_env_get(const char *name) { char *value; - if (!syscall(API_ENV_GET, NULL, (uint32_t)name, (uint32_t)&value)) + if (!syscall(API_ENV_GET, NULL, name, &value)) return (NULL); return (value); @@ -493,7 +494,7 @@ void ub_env_set(const char *name, char *value) { - syscall(API_ENV_SET, NULL, (uint32_t)name, (uint32_t)value); + syscall(API_ENV_SET, NULL, name, value); } static char env_name[256]; @@ -510,7 +511,7 @@ ub_env_enum(const char *last) * internally, which handles such case */ env = NULL; - if (!syscall(API_ENV_ENUM, NULL, (uint32_t)last, (uint32_t)&env)) + if (!syscall(API_ENV_ENUM, NULL, last, &env)) return (NULL); if (env == NULL || last == env) Modified: head/sys/boot/uboot/lib/glue.h ============================================================================== --- head/sys/boot/uboot/lib/glue.h Mon Feb 29 05:24:29 2016 (r296181) +++ head/sys/boot/uboot/lib/glue.h Mon Feb 29 07:27:49 2016 (r296182) @@ -35,6 +35,26 @@ #include "api_public.h" +/* + * Mask used to align the start address for API signature search to 1MiB + */ +#define API_SIG_SEARCH_MASK ~0x000fffff + +#ifdef __mips__ +/* + * On MIPS, U-Boot passes us a hint address, which is very close to the end of + * RAM (less than 1MiB), so searching for the API signature within more than + * that leads to exception. + */ +#define API_SIG_SEARCH_LEN 0x00100000 +#else +/* + * Search for the API signature within 3MiB of the 1MiB-aligned address that + * U-Boot has hinted us. + */ +#define API_SIG_SEARCH_LEN 0x00300000 +#endif + int syscall(int, int *, ...); void *syscall_ptr;