| // SPDX-License-Identifier: GPL-2.0 | |
| /* | |
| * (C) Copyright 2019 - 2020 Xilinx, Inc. | |
| */ | |
| #include <command.h> | |
| #include <fdtdec.h> | |
| #include <malloc.h> | |
| #include "fru.h" | |
| static int do_fru_capture(struct cmd_tbl *cmdtp, int flag, int argc, | |
| char *const argv[]) | |
| { | |
| unsigned long addr; | |
| char *endp; | |
| if (argc < cmdtp->maxargs) | |
| return CMD_RET_USAGE; | |
| addr = hextoul(argv[2], &endp); | |
| if (*argv[1] == 0 || *endp != 0) | |
| return -1; | |
| return fru_capture(addr); | |
| } | |
| static int do_fru_display(struct cmd_tbl *cmdtp, int flag, int argc, | |
| char *const argv[]) | |
| { | |
| fru_display(1); | |
| return CMD_RET_SUCCESS; | |
| } | |
| static int do_fru_generate(struct cmd_tbl *cmdtp, int flag, int argc, | |
| char *const argv[]) | |
| { | |
| unsigned long addr; | |
| if (argc < cmdtp->maxargs) | |
| return CMD_RET_USAGE; | |
| addr = hextoul(argv[2], NULL); | |
| return fru_generate(addr, argv[3], argv[4], argv[5], argv[6], argv[7]); | |
| } | |
| static struct cmd_tbl cmd_fru_sub[] = { | |
| U_BOOT_CMD_MKENT(capture, 3, 0, do_fru_capture, "", ""), | |
| U_BOOT_CMD_MKENT(display, 2, 0, do_fru_display, "", ""), | |
| U_BOOT_CMD_MKENT(board_gen, 8, 0, do_fru_generate, "", ""), | |
| }; | |
| static int do_fru(struct cmd_tbl *cmdtp, int flag, int argc, | |
| char *const argv[]) | |
| { | |
| struct cmd_tbl *c; | |
| int ret; | |
| if (argc < 2) | |
| return CMD_RET_USAGE; | |
| c = find_cmd_tbl(argv[1], &cmd_fru_sub[0], | |
| ARRAY_SIZE(cmd_fru_sub)); | |
| if (!c) | |
| return CMD_RET_USAGE; | |
| ret = c->cmd(c, flag, argc, argv); | |
| return cmd_process_error(c, ret); | |
| } | |
| /***************************************************/ | |
| U_BOOT_LONGHELP(fru, | |
| "capture <addr> - Parse and capture FRU table present at address.\n" | |
| "fru display - Displays content of FRU table that was captured using\n" | |
| " fru capture command\n" | |
| "fru board_gen <addr> <manufacturer> <board name> <serial number>\n" | |
| " <part number> <revision> - Generate FRU format with\n" | |
| " board info area filled based on parameters. <addr> is\n" | |
| " pointing to place where FRU is generated.\n"); | |
| U_BOOT_CMD( | |
| fru, 8, 1, do_fru, | |
| "FRU table info", | |
| fru_help_text | |
| ); |