Date: Wed, 3 Feb 2010 20:05:27 GMT From: Rafal Jaworowski <raj@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 174255 for review Message-ID: <201002032005.o13K5RX2005297@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://p4web.freebsd.org/chv.cgi?CH=174255 Change 174255 by raj@raj_fdt on 2010/02/03 20:04:33 Improve FDT fixup handling in loader. Fixup were not applied previously upon DTB unload and consecutive loading. This is now fixed with a run-time created 'fixup-applied' prop in the /chosen node. Affected files ... .. //depot/projects/fdt/sys/boot/uboot/lib/fdt.c#4 edit Differences ... ==== //depot/projects/fdt/sys/boot/uboot/lib/fdt.c#4 (text+ko) ==== @@ -91,7 +91,6 @@ }; static char cwd[FDT_CWD_LEN] = "/"; -static unsigned char fdt_fixup_applied = 0; static int fdt_setup_fdtp() @@ -382,15 +381,12 @@ { const char *env; char *ethstr; - int err, eth_no, len; + int chosen, err, eth_no, len; struct sys_info *si; env = NULL; eth_no = 0; - if (fdt_fixup_applied) - return (CMD_OK); - if (!fdtp) { err = fdt_setup_fdtp(); if (err) { @@ -401,8 +397,13 @@ } /* Create /chosen node (if not exists) */ - if (fdt_subnode_offset(fdtp, 0, "chosen") == -FDT_ERR_NOTFOUND) - fdt_add_subnode(fdtp, 0, "chosen"); + if ((chosen = fdt_subnode_offset(fdtp, 0, "chosen")) == + -FDT_ERR_NOTFOUND) + chosen = fdt_add_subnode(fdtp, 0, "chosen"); + + /* Value assigned to fixup-applied does not matter. */ + if (fdt_getprop(fdtp, chosen, "fixup-applied", NULL)) + return (CMD_OK); /* Acquire sys_info */ si = ub_get_sys_info(); @@ -444,7 +445,7 @@ /* Fixup memory regions */ fixup_memory(si); - fdt_fixup_applied = 1; + fdt_setprop(fdtp, chosen, "fixup-applied", NULL, 0); return (CMD_OK); } @@ -462,6 +463,11 @@ } /* + * Check if uboot env vars were parsed already. If not, do it now. + */ + fdt_fixup(); + + /* * Validate fdt <command>. */ cmd = strdup(argv[1]); @@ -483,11 +489,6 @@ if (!fdtp) if (fdt_setup_fdtp()) return (CMD_ERROR); - /* - * Check if uboot env vars were parsed already. If not, do it now. - */ - if (!fdt_fixup_applied) - fdt_fixup(); /* * Call command handler.
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201002032005.o13K5RX2005297>