From: Jerry Van Baren <gerald.vanbaren@ge.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH] Add sub-commands to fdt
Date: Fri, 15 Feb 2008 09:09:51 -0500 [thread overview]
Message-ID: <47B59D2F.2020602@ge.com> (raw)
In-Reply-To: <Pine.LNX.4.64.0802150335580.22869@blarg.am.freescale.net>
Kumar Gala wrote:
> fdt header - Display header info
> fdt bootcpu <id> - Set boot cpuid
> fdt memory <addr> <size> - Add/Update memory node
> fdt memrsv print - Show current mem reserves
> fdt memrsv add <addr> <size> - Add a mem reserve
> fdt memrsv delete <index> - Delete a mem reserves
>
> Signed-off-by: Kumar Gala <galak@kernel.crashing.org>
Cool, procrastination pays off again! :-)
> ---
> common/cmd_fdt.c | 111 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
> 1 files changed, 111 insertions(+), 0 deletions(-)
>
> diff --git a/common/cmd_fdt.c b/common/cmd_fdt.c
> index 9cd22ee..d0f8c27 100644
> --- a/common/cmd_fdt.c
> +++ b/common/cmd_fdt.c
> @@ -296,6 +296,111 @@ int do_fdt (cmd_tbl_t * cmdtp, int flag, int argc, char *argv[])
> return err;
> }
> }
> +
> + /********************************************************************
> + * Display header info
> + ********************************************************************/
> + } else if (argv[1][0] == 'h') {
> + u32 version = fdt_version(fdt);
> + printf("magic:\t\t\t0x%x\n", fdt_magic(fdt));
> + printf("totalsize:\t\t0x%x (%d)\n", fdt_totalsize(fdt), fdt_totalsize(fdt));
> + printf("off_dt_struct:\t\t0x%x\n", fdt_off_dt_struct(fdt));
> + printf("off_dt_strings:\t\t0x%x\n", fdt_off_dt_strings(fdt));
> + printf("off_mem_rsvmap:\t\t0x%x\n", fdt_off_mem_rsvmap(fdt));
> + printf("version:\t\t%d\n", version);
> + printf("last_comp_version:\t%d\n", fdt_last_comp_version(fdt));
> + if (version >= 2)
> + printf("boot_cpuid_phys:\t0x%x\n",
> + fdt_boot_cpuid_phys(fdt));
> + if (version >= 3)
> + printf("size_dt_strings:\t0x%x\n",
> + fdt_size_dt_strings(fdt));
> + if (version >= 17)
> + printf("size_dt_struct:\t\t0x%x\n",
> + fdt_size_dt_struct(fdt));
> + printf("\n");
Very nice.
* I think we should add the size of the reserved map.
* It would be very useful to know how much space is available in the
reserved map
* It would be very useful to know how much space is available in the
dt_struct and dt_space space (I believe the "spare" in the blob can be
used for both the dt_struct and the dt_strings, but I'm not sure, don't
have time to look it up right now).
> + /********************************************************************
> + * Set boot cpu id
> + ********************************************************************/
> + } else if ((argv[1][0] == 'b') && (argv[1][1] == 'o')) {
> + unsigned long tmp = simple_strtoul(argv[2], NULL, 16);
> + fdt_set_boot_cpuid_phys(fdt, tmp);
> +
> + /********************************************************************
> + * memory command
> + ********************************************************************/
> + } else if ((argv[1][0] == 'm') && (argv[1][1] == 'e') &&
> + (argv[1][3] == 'o')) {
Did we miss (argv[1][2] == 'm'), is the term checking (argv[1][3] ==
'o') wrong, or are we trying to accommodate dyslecix people? I can
picture our fearless leader typing "fdt meromy", assuming he types that
many characters. :-D
> + uint64_t addr, size;
> + int err;
> +#ifdef CFG_64BIT_STRTOUL
> + addr = simple_strtoull(argv[2], NULL, 16);
> + size = simple_strtoull(argv[3], NULL, 16);
> +#else
> + addr = simple_strtoul(argv[2], NULL, 16);
> + size = simple_strtoul(argv[3], NULL, 16);
> +#endif
> + err = fdt_fixup_memory(fdt, addr, size);
> + if (err < 0)
> + return err;
> +
> + /********************************************************************
> + * mem reserve commands
> + ********************************************************************/
> + } else if ((argv[1][0] == 'm') && (argv[1][1] == 'e') &&
> + (argv[1][3] == 'r')) {
Hmm, missing (argv[1][2] == 'm') again. Once is an accident, twice is
by design. I take it you are skipping the argv[1][2] check since it
isn't a significant character - code savings. I can accept that,
although it really hurts my humor to have a logical explanation (pun
intended ;-).
> + if (argv[2][0] == 'p') {
> + uint64_t addr, size;
> + int total = fdt_num_mem_rsv(fdt);
> + int j, err;
> + printf("index\t\t start\t\t size\n");
> + printf("-------------------------------"
> + "-----------------\n");
> + for (j = 0; j < total; j++) {
> + err = fdt_get_mem_rsv(fdt, j, &addr, &size);
> + if (err < 0) {
> + printf("libfdt fdt_get_mem_rsv(): %s\n",
> + fdt_strerror(err));
> + return err;
> + }
> + printf(" %x\t%08x%08x\t%08x%08x\n", j,
> + (u32)(addr >> 32),
> + (u32)(addr & 0xffffffff),
> + (u32)(size >> 32),
> + (u32)(size & 0xffffffff));
Trivia: If the compiler supports CFG_64BIT_STRTOUL, it /probably/
supports the "%llx" format. I ran into trouble with this originally
(the compiler for my mpc8360 had problems passing a 64 bit varargs arg,
IIRC). The above works in both 32bit and 64bit support cases and I
personally prefer the above slightly extra work rather than Yet Another
#ifdef (YA#).
> + }
> + } else if (argv[2][0] == 'a') {
> + uint64_t addr, size;
> + int err;
> +#ifdef CFG_64BIT_STRTOUL
...but some are unavoidable.
> + addr = simple_strtoull(argv[3], NULL, 16);
> + size = simple_strtoull(argv[4], NULL, 16);
> +#else
> + addr = simple_strtoul(argv[3], NULL, 16);
> + size = simple_strtoul(argv[4], NULL, 16);
> +#endif
[snip]
> #ifdef CONFIG_OF_BOARD_SETUP
> /* Call the board-specific fixup routine */
> @@ -689,6 +794,12 @@ U_BOOT_CMD(
> "fdt set <path> <prop> [<val>] - Set <property> [to <val>]\n"
> "fdt mknode <path> <node> - Create a new node after <path>\n"
> "fdt rm <path> [<prop>] - Delete the node or <property>\n"
> + "fdt header - Display header info\n"
> + "fdt bootcpu <id> - Set boot cpuid\n"
> + "fdt memory <addr> <size> - Add/Update memory node\n"
> + "fdt memrsv print - Show current mem reserves\n"
> + "fdt memrsv add <addr> <size> - Add a mem reserve\n"
^^^
> + "fdt memrsv add <addr> <size> - Add a mem reserve\n"
It is a weakly held personal preference, but I would kill the extra
spaces between add and <addr>, I don't see that it helps readability.
> + "fdt memrsv delete <index> - Delete a mem reserves\n"
> "fdt chosen - Add/update the /chosen branch in the tree\n"
> #ifdef CONFIG_OF_HAS_UBOOT_ENV
> "fdt env - Add/replace the /u-boot-env branch in the tree\n"
THANKS!
gvb
next prev parent reply other threads:[~2008-02-15 14:09 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-02-15 9:36 [U-Boot-Users] [PATCH] Add sub-commands to fdt Kumar Gala
2008-02-15 14:09 ` Jerry Van Baren [this message]
2008-02-15 14:38 ` Kumar Gala
2008-02-15 14:39 ` [U-Boot-Users] [PATCH v2] " Kumar Gala
2008-02-15 21:44 ` [U-Boot-Users] [PATCH] " Jerry Van Baren
2008-02-15 21:51 ` Kumar Gala
2008-02-15 21:57 ` [U-Boot-Users] [PATCH v3] " Kumar Gala
2008-02-16 22:28 ` Jerry Van Baren
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=47B59D2F.2020602@ge.com \
--to=gerald.vanbaren@ge.com \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.