On Tue, Dec 13, 2022 at 21:31, Alexey Romanov <[email protected]> wrote:
> It is incorrect to keep commands in the arch/ folder. > > Signed-off-by: Alexey Romanov <[email protected]> > --- > MAINTAINERS | 1 + > arch/arm/mach-meson/sm.c | 144 ------------------------------------ > cmd/Kconfig | 7 ++ > cmd/Makefile | 3 + > cmd/meson/Makefile | 5 ++ > cmd/meson/sm.c | 154 +++++++++++++++++++++++++++++++++++++++ > 6 files changed, 170 insertions(+), 144 deletions(-) > create mode 100644 cmd/meson/Makefile > create mode 100644 cmd/meson/sm.c > > diff --git a/MAINTAINERS b/MAINTAINERS > index 7f27ff4c20f..7a5460d4922 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -149,6 +149,7 @@ L: [email protected] > T: git https://source.denx.de/u-boot/custodians/u-boot-amlogic.git > F: arch/arm/mach-meson/ > F: arch/arm/include/asm/arch-meson/ > +F: cmd/meson/ > F: drivers/clk/meson/ > F: drivers/serial/serial_meson.c > F: drivers/reset/reset-meson.c > diff --git a/arch/arm/mach-meson/sm.c b/arch/arm/mach-meson/sm.c > index d6eb910689f..f2ca7e76932 100644 > --- a/arch/arm/mach-meson/sm.c > +++ b/arch/arm/mach-meson/sm.c > @@ -6,8 +6,6 @@ > */ > > #include <common.h> > -#include <command.h> > -#include <env.h> > #include <log.h> > #include <asm/arch/sm.h> > #include <asm/cache.h> > @@ -139,145 +137,3 @@ int meson_sm_get_reboot_reason(void) > /* The SMC call is not used, we directly use AO_SEC_SD_CFG15 */ > return FIELD_GET(REBOOT_REASON_MASK, reason); > } > - > -static int do_sm_serial(struct cmd_tbl *cmdtp, int flag, int argc, > - char *const argv[]) > -{ > - ulong address; > - int ret; > - > - if (argc < 2) > - return CMD_RET_USAGE; > - > - address = simple_strtoul(argv[1], NULL, 0); > - > - ret = meson_sm_get_serial((void *)address, SM_CHIP_ID_SIZE); > - if (ret) > - return CMD_RET_FAILURE; > - > - return CMD_RET_SUCCESS; > -} > - > -#define MAX_REBOOT_REASONS 14 > - > -static const char *reboot_reasons[MAX_REBOOT_REASONS] = { > - [REBOOT_REASON_COLD] = "cold_boot", > - [REBOOT_REASON_NORMAL] = "normal", > - [REBOOT_REASON_RECOVERY] = "recovery", > - [REBOOT_REASON_UPDATE] = "update", > - [REBOOT_REASON_FASTBOOT] = "fastboot", > - [REBOOT_REASON_SUSPEND_OFF] = "suspend_off", > - [REBOOT_REASON_HIBERNATE] = "hibernate", > - [REBOOT_REASON_BOOTLOADER] = "bootloader", > - [REBOOT_REASON_SHUTDOWN_REBOOT] = "shutdown_reboot", > - [REBOOT_REASON_RPMBP] = "rpmbp", > - [REBOOT_REASON_CRASH_DUMP] = "crash_dump", > - [REBOOT_REASON_KERNEL_PANIC] = "kernel_panic", > - [REBOOT_REASON_WATCHDOG_REBOOT] = "watchdog_reboot", > -}; > - > -static int do_sm_reboot_reason(struct cmd_tbl *cmdtp, int flag, int argc, > - char *const argv[]) > -{ > - const char *reason_str; > - char *destarg = NULL; > - int reason; > - > - if (argc > 1) > - destarg = argv[1]; > - > - reason = meson_sm_get_reboot_reason(); > - if (reason < 0) > - return CMD_RET_FAILURE; > - > - if (reason >= MAX_REBOOT_REASONS || > - !reboot_reasons[reason]) > - reason_str = "unknown"; > - else > - reason_str = reboot_reasons[reason]; > - > - if (destarg) > - env_set(destarg, reason_str); > - else > - printf("reboot reason: %s (%x)\n", reason_str, reason); > - > - return CMD_RET_SUCCESS; > -} > - > -static int do_efuse_read(struct cmd_tbl *cmdtp, int flag, int argc, > - char *const argv[]) > -{ > - ulong address, offset, size; > - int ret; > - > - if (argc < 4) > - return CMD_RET_USAGE; > - > - offset = simple_strtoul(argv[1], NULL, 0); > - size = simple_strtoul(argv[2], NULL, 0); > - > - address = simple_strtoul(argv[3], NULL, 0); > - > - ret = meson_sm_read_efuse(offset, (void *)address, size); > - if (ret != size) > - return CMD_RET_FAILURE; > - > - return CMD_RET_SUCCESS; > -} > - > -static int do_efuse_write(struct cmd_tbl *cmdtp, int flag, int argc, > - char *const argv[]) > -{ > - ulong address, offset, size; > - int ret; > - > - if (argc < 4) > - return CMD_RET_USAGE; > - > - offset = simple_strtoul(argv[1], NULL, 0); > - size = simple_strtoul(argv[2], NULL, 0); > - > - address = simple_strtoul(argv[3], NULL, 0); > - > - ret = meson_sm_write_efuse(offset, (void *)address, size); > - if (ret != size) > - return CMD_RET_FAILURE; > - > - return CMD_RET_SUCCESS; > -} > - > -static struct cmd_tbl cmd_sm_sub[] = { > - U_BOOT_CMD_MKENT(serial, 2, 1, do_sm_serial, "", ""), > - U_BOOT_CMD_MKENT(reboot_reason, 1, 1, do_sm_reboot_reason, "", ""), > - U_BOOT_CMD_MKENT(efuseread, 4, 1, do_efuse_read, "", ""), > - U_BOOT_CMD_MKENT(efusewrite, 4, 0, do_efuse_write, "", ""), > -}; > - > -static int do_sm(struct cmd_tbl *cmdtp, int flag, int argc, > - char *const argv[]) > -{ > - struct cmd_tbl *c; > - > - if (argc < 2) > - return CMD_RET_USAGE; > - > - /* Strip off leading 'sm' command argument */ > - argc--; > - argv++; > - > - c = find_cmd_tbl(argv[0], &cmd_sm_sub[0], ARRAY_SIZE(cmd_sm_sub)); > - > - if (c) > - return c->cmd(cmdtp, flag, argc, argv); > - else > - return CMD_RET_USAGE; > -} > - > -U_BOOT_CMD( > - sm, 5, 0, do_sm, > - "Secure Monitor Control", > - "serial <address> - read chip unique id to memory address\n" > - "sm reboot_reason [name] - get reboot reason and store to to > environment\n" > - "sm efuseread <offset> <size> <address> - read efuse to memory > address\n" > - "sm efusewrite <offset> <size> <address> - write into efuse from memory > address" > -); > diff --git a/cmd/Kconfig b/cmd/Kconfig > index 09193b61b95..07833f958e7 100644 > --- a/cmd/Kconfig > +++ b/cmd/Kconfig > @@ -2565,4 +2565,11 @@ config MMC_SPEED_MODE_SET > and is indicated using the index from enum bus_mode in > include/mmc.h. A speed mode can be set only if it has already > been enabled in the device tree. > + > +config CMD_MESON > + bool "Amlogic Meson commands" > + depends on ARCH_MESON > + default y > + help > + Enable useful commands for the Meson Soc family developed by Amlogic > Inc. > endmenu > diff --git a/cmd/Makefile b/cmd/Makefile > index 5e43a1e022e..146c5ebb227 100644 > --- a/cmd/Makefile > +++ b/cmd/Makefile > @@ -210,6 +210,9 @@ obj-$(CONFIG_RISCV) += riscv/ > obj-$(CONFIG_SANDBOX) += sandbox/ > obj-$(CONFIG_X86) += x86/ > > +# Meson > +obj-$(CONFIG_CMD_MESON) += meson/ > + > obj-$(CONFIG_ARCH_MVEBU) += mvebu/ > endif # !CONFIG_SPL_BUILD > > diff --git a/cmd/meson/Makefile b/cmd/meson/Makefile > new file mode 100644 > index 00000000000..ee26c175cfe > --- /dev/null > +++ b/cmd/meson/Makefile > @@ -0,0 +1,5 @@ > +# SPDX-License-Identifier: GPL-2.0+ > +# > +# Copyright (c) 2022, SberDevices. All rights reserved. > + > +obj-y += sm.o > diff --git a/cmd/meson/sm.c b/cmd/meson/sm.c > new file mode 100644 > index 00000000000..1a3a2c7920a > --- /dev/null > +++ b/cmd/meson/sm.c > @@ -0,0 +1,154 @@ > +// SPDX-License-Identifier: GPL-2.0+ > +/* > + * Copyright (c) 2022, SberDevices. All rights reserved. > + * > + * Author: Alexey Romanov <[email protected]> Sorry to be pedantic, but since we moved a lot of code from arch/arm/mach-meson/ here, shouldn't we keep the copyright from that file as well? In other words, keep the following line: (C) Copyright 2016 Beniamino Galvani <[email protected]> With that, please add Reviewed-by: Mattijs Korpershoek <[email protected]> > + */ > + > +#include <command.h> > +#include <common.h> > +#include <env.h> > +#include <asm/arch/sm.h> > +#include <stdlib.h> > + > +static int do_sm_serial(struct cmd_tbl *cmdtp, int flag, int argc, > + char *const argv[]) > +{ > + ulong address; > + int ret; > + > + if (argc < 2) > + return CMD_RET_USAGE; > + > + address = simple_strtoul(argv[1], NULL, 0); > + > + ret = meson_sm_get_serial((void *)address, SM_SERIAL_SIZE); > + if (ret) > + return CMD_RET_FAILURE; > + > + return CMD_RET_SUCCESS; > +} > + > +#define MAX_REBOOT_REASONS 14 > + > +static const char *reboot_reasons[MAX_REBOOT_REASONS] = { > + [REBOOT_REASON_COLD] = "cold_boot", > + [REBOOT_REASON_NORMAL] = "normal", > + [REBOOT_REASON_RECOVERY] = "recovery", > + [REBOOT_REASON_UPDATE] = "update", > + [REBOOT_REASON_FASTBOOT] = "fastboot", > + [REBOOT_REASON_SUSPEND_OFF] = "suspend_off", > + [REBOOT_REASON_HIBERNATE] = "hibernate", > + [REBOOT_REASON_BOOTLOADER] = "bootloader", > + [REBOOT_REASON_SHUTDOWN_REBOOT] = "shutdown_reboot", > + [REBOOT_REASON_RPMBP] = "rpmbp", > + [REBOOT_REASON_CRASH_DUMP] = "crash_dump", > + [REBOOT_REASON_KERNEL_PANIC] = "kernel_panic", > + [REBOOT_REASON_WATCHDOG_REBOOT] = "watchdog_reboot", > +}; > + > +static int do_sm_reboot_reason(struct cmd_tbl *cmdtp, int flag, int argc, > + char *const argv[]) > +{ > + const char *reason_str; > + char *destarg = NULL; > + int reason; > + > + if (argc > 1) > + destarg = argv[1]; > + > + reason = meson_sm_get_reboot_reason(); > + if (reason < 0) > + return CMD_RET_FAILURE; > + > + if (reason >= MAX_REBOOT_REASONS || > + !reboot_reasons[reason]) > + reason_str = "unknown"; > + else > + reason_str = reboot_reasons[reason]; > + > + if (destarg) > + env_set(destarg, reason_str); > + else > + printf("reboot reason: %s (%x)\n", reason_str, reason); > + > + return CMD_RET_SUCCESS; > +} > + > +static int do_efuse_read(struct cmd_tbl *cmdtp, int flag, int argc, > + char *const argv[]) > +{ > + ulong address, offset, size; > + int ret; > + > + if (argc < 4) > + return CMD_RET_USAGE; > + > + offset = simple_strtoul(argv[1], NULL, 0); > + size = simple_strtoul(argv[2], NULL, 0); > + > + address = simple_strtoul(argv[3], NULL, 0); > + > + ret = meson_sm_read_efuse(offset, (void *)address, size); > + if (ret != size) > + return CMD_RET_FAILURE; > + > + return CMD_RET_SUCCESS; > +} > + > +static int do_efuse_write(struct cmd_tbl *cmdtp, int flag, int argc, > + char *const argv[]) > +{ > + ulong address, offset, size; > + int ret; > + > + if (argc < 4) > + return CMD_RET_USAGE; > + > + offset = simple_strtoul(argv[1], NULL, 0); > + size = simple_strtoul(argv[2], NULL, 0); > + > + address = simple_strtoul(argv[3], NULL, 0); > + > + ret = meson_sm_write_efuse(offset, (void *)address, size); > + if (ret != size) > + return CMD_RET_FAILURE; > + > + return CMD_RET_SUCCESS; > +} > + > +static struct cmd_tbl cmd_sm_sub[] = { > + U_BOOT_CMD_MKENT(serial, 2, 1, do_sm_serial, "", ""), > + U_BOOT_CMD_MKENT(reboot_reason, 1, 1, do_sm_reboot_reason, "", ""), > + U_BOOT_CMD_MKENT(efuseread, 4, 1, do_efuse_read, "", ""), > + U_BOOT_CMD_MKENT(efusewrite, 4, 0, do_efuse_write, "", ""), > +}; > + > +static int do_sm(struct cmd_tbl *cmdtp, int flag, int argc, > + char *const argv[]) > +{ > + struct cmd_tbl *c; > + > + if (argc < 2) > + return CMD_RET_USAGE; > + > + /* Strip off leading 'sm' command argument */ > + argc--; > + argv++; > + > + c = find_cmd_tbl(argv[0], &cmd_sm_sub[0], ARRAY_SIZE(cmd_sm_sub)); > + > + if (c) > + return c->cmd(cmdtp, flag, argc, argv); > + else > + return CMD_RET_USAGE; > +} > + > +U_BOOT_CMD( > + sm, 5, 0, do_sm, > + "Secure Monitor Control", > + "serial <address> - read chip unique id to memory address\n" > + "sm reboot_reason [name] - get reboot reason and store to environment\n" > + "sm efuseread <offset> <size> <address> - read efuse to memory > address\n" > + "sm efusewrite <offset> <size> <address> - write into efuse from memory > address" > +); > -- > 2.25.1

