* [PATCH v4 0/5] arch-meson: introduce efusedump command @ 2023-01-10 10:56 ` Alexey Romanov 0 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov Keeping the commands code in an arch/ is not correct. This patchset moves the meson smc commands from arch/arm/mach-meson to cmd/meson folder and also adds a new 'efusedump' command with which user can print efuse memory. Alexey Romanov (5): asm/arch-meson: add missing meson_sm_write_efuse signature arm/mach-meson: move smc commands in cmd/meson doc/usage: cmd: documentation for meson/sm command cmd/arm: meson: sm: introduce efusedump command doc/usage: cmd: sm: documentation efusedump cmd MAINTAINERS | 1 + arch/arm/include/asm/arch-meson/sm.h | 28 ++++ arch/arm/mach-meson/sm.c | 144 -------------------- cmd/Kconfig | 7 + cmd/Makefile | 3 + cmd/meson/Makefile | 5 + cmd/meson/sm.c | 190 +++++++++++++++++++++++++++ doc/usage/cmd/sm.rst | 48 +++++++ doc/usage/index.rst | 1 + 9 files changed, 283 insertions(+), 144 deletions(-) create mode 100644 cmd/meson/Makefile create mode 100644 cmd/meson/sm.c create mode 100644 doc/usage/cmd/sm.rst -- 2.25.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 0/5] arch-meson: introduce efusedump command @ 2023-01-10 10:56 ` Alexey Romanov 0 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov Keeping the commands code in an arch/ is not correct. This patchset moves the meson smc commands from arch/arm/mach-meson to cmd/meson folder and also adds a new 'efusedump' command with which user can print efuse memory. Alexey Romanov (5): asm/arch-meson: add missing meson_sm_write_efuse signature arm/mach-meson: move smc commands in cmd/meson doc/usage: cmd: documentation for meson/sm command cmd/arm: meson: sm: introduce efusedump command doc/usage: cmd: sm: documentation efusedump cmd MAINTAINERS | 1 + arch/arm/include/asm/arch-meson/sm.h | 28 ++++ arch/arm/mach-meson/sm.c | 144 -------------------- cmd/Kconfig | 7 + cmd/Makefile | 3 + cmd/meson/Makefile | 5 + cmd/meson/sm.c | 190 +++++++++++++++++++++++++++ doc/usage/cmd/sm.rst | 48 +++++++ doc/usage/index.rst | 1 + 9 files changed, 283 insertions(+), 144 deletions(-) create mode 100644 cmd/meson/Makefile create mode 100644 cmd/meson/sm.c create mode 100644 doc/usage/cmd/sm.rst -- 2.25.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 1/5] asm/arch-meson: add missing meson_sm_write_efuse signature 2023-01-10 10:56 ` Alexey Romanov @ 2023-01-10 10:56 ` Alexey Romanov -1 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong This function can be used by other modules. Also add comments. Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> --- arch/arm/include/asm/arch-meson/sm.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/arch/arm/include/asm/arch-meson/sm.h b/arch/arm/include/asm/arch-meson/sm.h index f3ae46a6d6b..53b75176493 100644 --- a/arch/arm/include/asm/arch-meson/sm.h +++ b/arch/arm/include/asm/arch-meson/sm.h @@ -6,10 +6,35 @@ #ifndef __MESON_SM_H__ #define __MESON_SM_H__ +/** + * meson_sm_read_efuse - read efuse memory into buffer + * + * @offset: offset from the start efuse memory + * @buffer: pointer to buffer + * @size: number of bytes to read + * @return: number of bytes read + */ ssize_t meson_sm_read_efuse(uintptr_t offset, void *buffer, size_t size); +/** + * meson_sm_write_efuse - write into efuse memory from buffer + * + * @offset: offset from the start efuse memory + * @buffer: pointer to buffer + * @size: number of bytes to write + * @return: number of bytes written + */ +ssize_t meson_sm_write_efuse(uintptr_t offset, void *buffer, size_t size); + #define SM_SERIAL_SIZE 12 +/** + * meson_sm_get_serial - read chip unique id into buffer + * + * @buffer: pointer to buffer + * @size: buffer size. + * @return: zero on success or -errno on failure + */ int meson_sm_get_serial(void *buffer, size_t size); enum { @@ -28,6 +53,9 @@ enum { REBOOT_REASON_WATCHDOG_REBOOT = 13, }; +/** + * meson_sm_get_reboot_reason - get reboot reason + */ int meson_sm_get_reboot_reason(void); #endif /* __MESON_SM_H__ */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 1/5] asm/arch-meson: add missing meson_sm_write_efuse signature @ 2023-01-10 10:56 ` Alexey Romanov 0 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong This function can be used by other modules. Also add comments. Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> --- arch/arm/include/asm/arch-meson/sm.h | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) diff --git a/arch/arm/include/asm/arch-meson/sm.h b/arch/arm/include/asm/arch-meson/sm.h index f3ae46a6d6b..53b75176493 100644 --- a/arch/arm/include/asm/arch-meson/sm.h +++ b/arch/arm/include/asm/arch-meson/sm.h @@ -6,10 +6,35 @@ #ifndef __MESON_SM_H__ #define __MESON_SM_H__ +/** + * meson_sm_read_efuse - read efuse memory into buffer + * + * @offset: offset from the start efuse memory + * @buffer: pointer to buffer + * @size: number of bytes to read + * @return: number of bytes read + */ ssize_t meson_sm_read_efuse(uintptr_t offset, void *buffer, size_t size); +/** + * meson_sm_write_efuse - write into efuse memory from buffer + * + * @offset: offset from the start efuse memory + * @buffer: pointer to buffer + * @size: number of bytes to write + * @return: number of bytes written + */ +ssize_t meson_sm_write_efuse(uintptr_t offset, void *buffer, size_t size); + #define SM_SERIAL_SIZE 12 +/** + * meson_sm_get_serial - read chip unique id into buffer + * + * @buffer: pointer to buffer + * @size: buffer size. + * @return: zero on success or -errno on failure + */ int meson_sm_get_serial(void *buffer, size_t size); enum { @@ -28,6 +53,9 @@ enum { REBOOT_REASON_WATCHDOG_REBOOT = 13, }; +/** + * meson_sm_get_reboot_reason - get reboot reason + */ int meson_sm_get_reboot_reason(void); #endif /* __MESON_SM_H__ */ -- 2.25.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v4 1/5] asm/arch-meson: add missing meson_sm_write_efuse signature 2023-01-10 10:56 ` Alexey Romanov (?) @ 2023-01-10 13:40 ` Mattijs Korpershoek -1 siblings, 0 replies; 16+ messages in thread From: Mattijs Korpershoek @ 2023-01-10 13:40 UTC (permalink / raw) To: Alexey Romanov, narmstrong, trini, sjg Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong On Tue, Jan 10, 2023 at 13:56, Alexey Romanov <avromanov@sberdevices.ru> wrote: > This function can be used by other modules. Also add comments. > > Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> > Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> > --- > arch/arm/include/asm/arch-meson/sm.h | 28 ++++++++++++++++++++++++++++ > 1 file changed, 28 insertions(+) > > diff --git a/arch/arm/include/asm/arch-meson/sm.h b/arch/arm/include/asm/arch-meson/sm.h > index f3ae46a6d6b..53b75176493 100644 > --- a/arch/arm/include/asm/arch-meson/sm.h > +++ b/arch/arm/include/asm/arch-meson/sm.h > @@ -6,10 +6,35 @@ > #ifndef __MESON_SM_H__ > #define __MESON_SM_H__ > > +/** > + * meson_sm_read_efuse - read efuse memory into buffer > + * > + * @offset: offset from the start efuse memory > + * @buffer: pointer to buffer > + * @size: number of bytes to read > + * @return: number of bytes read > + */ > ssize_t meson_sm_read_efuse(uintptr_t offset, void *buffer, size_t size); > > +/** > + * meson_sm_write_efuse - write into efuse memory from buffer > + * > + * @offset: offset from the start efuse memory > + * @buffer: pointer to buffer > + * @size: number of bytes to write > + * @return: number of bytes written > + */ > +ssize_t meson_sm_write_efuse(uintptr_t offset, void *buffer, size_t size); > + > #define SM_SERIAL_SIZE 12 > > +/** > + * meson_sm_get_serial - read chip unique id into buffer > + * > + * @buffer: pointer to buffer > + * @size: buffer size. > + * @return: zero on success or -errno on failure > + */ > int meson_sm_get_serial(void *buffer, size_t size); > > enum { > @@ -28,6 +53,9 @@ enum { > REBOOT_REASON_WATCHDOG_REBOOT = 13, > }; > > +/** > + * meson_sm_get_reboot_reason - get reboot reason > + */ > int meson_sm_get_reboot_reason(void); > > #endif /* __MESON_SM_H__ */ > -- > 2.25.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 2/5] arm/mach-meson: move smc commands in cmd/meson 2023-01-10 10:56 ` Alexey Romanov @ 2023-01-10 10:56 ` Alexey Romanov -1 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong It is incorrect to keep commands in the arch/ folder. Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> --- MAINTAINERS | 1 + arch/arm/mach-meson/sm.c | 144 ------------------------------------ cmd/Kconfig | 7 ++ cmd/Makefile | 3 + cmd/meson/Makefile | 5 ++ cmd/meson/sm.c | 156 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 172 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: u-boot-amlogic@groups.io 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..c2b57707258 --- /dev/null +++ b/cmd/meson/sm.c @@ -0,0 +1,156 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2016 Beniamino Galvani + * + * Author: Beniamino Galvani <b.galvani@gmail.com> + * Author: Vyacheslav Bocharov <adeep@lexina.in> + * Author: Neil Armstrong <narmstrong@baylibre.com> + */ + +#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 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 2/5] arm/mach-meson: move smc commands in cmd/meson @ 2023-01-10 10:56 ` Alexey Romanov 0 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong It is incorrect to keep commands in the arch/ folder. Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> --- MAINTAINERS | 1 + arch/arm/mach-meson/sm.c | 144 ------------------------------------ cmd/Kconfig | 7 ++ cmd/Makefile | 3 + cmd/meson/Makefile | 5 ++ cmd/meson/sm.c | 156 +++++++++++++++++++++++++++++++++++++++ 6 files changed, 172 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: u-boot-amlogic@groups.io 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..c2b57707258 --- /dev/null +++ b/cmd/meson/sm.c @@ -0,0 +1,156 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (c) 2016 Beniamino Galvani + * + * Author: Beniamino Galvani <b.galvani@gmail.com> + * Author: Vyacheslav Bocharov <adeep@lexina.in> + * Author: Neil Armstrong <narmstrong@baylibre.com> + */ + +#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 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 3/5] doc/usage: cmd: documentation for meson/sm command 2023-01-10 10:56 ` Alexey Romanov @ 2023-01-10 10:56 ` Alexey Romanov -1 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov Added docs for Meson Security Monitor command. Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> --- doc/usage/cmd/sm.rst | 44 ++++++++++++++++++++++++++++++++++++++++++++ doc/usage/index.rst | 1 + 2 files changed, 45 insertions(+) create mode 100644 doc/usage/cmd/sm.rst diff --git a/doc/usage/cmd/sm.rst b/doc/usage/cmd/sm.rst new file mode 100644 index 00000000000..c41227f4b3b --- /dev/null +++ b/doc/usage/cmd/sm.rst @@ -0,0 +1,44 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +sm command +========== + +Synopis +------- + +:: + + sm serial <address> + sm reboot_reason [name] + sm efuseread <offset> <size> <address> + sm efusewrite <offset> <size> <address> + sm efusedump <offset> <size> + +Description +----------- + +The sm command is used to request services from the secure monitor. User +can call secure monitor to request special TEE function, for example chip +serial number info, reboot reason, etc. + +sm serial + Retrieve chip unique serial number from sm and write it to memory on + appropriate address. + +sm reboot_reason + Print reboot reason to the console, if parameter [name] isn't specified. + If parameter specified, set reboot reason string to environment variable + with this name. + +sm efuseread + Read <size> bytes starting from <offset> from efuse memory bank and write + result to the address <address>. + +sm efusewrite + Write into efuse memory bank, starting from <offset>, the <size> bytes + of data, located at address <address>. + +Configuration +------------- + +To use the sm command you must specify CONFIG_CMD_MESON=y diff --git a/doc/usage/index.rst b/doc/usage/index.rst index 770418434ad..e34b98dae24 100644 --- a/doc/usage/index.rst +++ b/doc/usage/index.rst @@ -61,6 +61,7 @@ Shell commands cmd/true cmd/ums cmd/wdt + cmd/sm Booting OS ---------- -- 2.25.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 3/5] doc/usage: cmd: documentation for meson/sm command @ 2023-01-10 10:56 ` Alexey Romanov 0 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov Added docs for Meson Security Monitor command. Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> --- doc/usage/cmd/sm.rst | 44 ++++++++++++++++++++++++++++++++++++++++++++ doc/usage/index.rst | 1 + 2 files changed, 45 insertions(+) create mode 100644 doc/usage/cmd/sm.rst diff --git a/doc/usage/cmd/sm.rst b/doc/usage/cmd/sm.rst new file mode 100644 index 00000000000..c41227f4b3b --- /dev/null +++ b/doc/usage/cmd/sm.rst @@ -0,0 +1,44 @@ +.. SPDX-License-Identifier: GPL-2.0+: + +sm command +========== + +Synopis +------- + +:: + + sm serial <address> + sm reboot_reason [name] + sm efuseread <offset> <size> <address> + sm efusewrite <offset> <size> <address> + sm efusedump <offset> <size> + +Description +----------- + +The sm command is used to request services from the secure monitor. User +can call secure monitor to request special TEE function, for example chip +serial number info, reboot reason, etc. + +sm serial + Retrieve chip unique serial number from sm and write it to memory on + appropriate address. + +sm reboot_reason + Print reboot reason to the console, if parameter [name] isn't specified. + If parameter specified, set reboot reason string to environment variable + with this name. + +sm efuseread + Read <size> bytes starting from <offset> from efuse memory bank and write + result to the address <address>. + +sm efusewrite + Write into efuse memory bank, starting from <offset>, the <size> bytes + of data, located at address <address>. + +Configuration +------------- + +To use the sm command you must specify CONFIG_CMD_MESON=y diff --git a/doc/usage/index.rst b/doc/usage/index.rst index 770418434ad..e34b98dae24 100644 --- a/doc/usage/index.rst +++ b/doc/usage/index.rst @@ -61,6 +61,7 @@ Shell commands cmd/true cmd/ums cmd/wdt + cmd/sm Booting OS ---------- -- 2.25.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v4 3/5] doc/usage: cmd: documentation for meson/sm command 2023-01-10 10:56 ` Alexey Romanov (?) @ 2023-01-10 13:42 ` Mattijs Korpershoek -1 siblings, 0 replies; 16+ messages in thread From: Mattijs Korpershoek @ 2023-01-10 13:42 UTC (permalink / raw) To: Alexey Romanov, narmstrong, trini, sjg Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov On Tue, Jan 10, 2023 at 13:56, Alexey Romanov <avromanov@sberdevices.ru> wrote: > Added docs for Meson Security Monitor command. > > Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> > --- > doc/usage/cmd/sm.rst | 44 ++++++++++++++++++++++++++++++++++++++++++++ > doc/usage/index.rst | 1 + > 2 files changed, 45 insertions(+) > create mode 100644 doc/usage/cmd/sm.rst > > diff --git a/doc/usage/cmd/sm.rst b/doc/usage/cmd/sm.rst > new file mode 100644 > index 00000000000..c41227f4b3b > --- /dev/null > +++ b/doc/usage/cmd/sm.rst > @@ -0,0 +1,44 @@ > +.. SPDX-License-Identifier: GPL-2.0+: > + > +sm command > +========== > + > +Synopis > +------- > + > +:: > + > + sm serial <address> > + sm reboot_reason [name] > + sm efuseread <offset> <size> <address> > + sm efusewrite <offset> <size> <address> > + sm efusedump <offset> <size> > + > +Description > +----------- > + > +The sm command is used to request services from the secure monitor. User > +can call secure monitor to request special TEE function, for example chip > +serial number info, reboot reason, etc. > + > +sm serial > + Retrieve chip unique serial number from sm and write it to memory on > + appropriate address. > + > +sm reboot_reason > + Print reboot reason to the console, if parameter [name] isn't specified. > + If parameter specified, set reboot reason string to environment variable > + with this name. > + > +sm efuseread > + Read <size> bytes starting from <offset> from efuse memory bank and write > + result to the address <address>. > + > +sm efusewrite > + Write into efuse memory bank, starting from <offset>, the <size> bytes > + of data, located at address <address>. > + > +Configuration > +------------- > + > +To use the sm command you must specify CONFIG_CMD_MESON=y > diff --git a/doc/usage/index.rst b/doc/usage/index.rst > index 770418434ad..e34b98dae24 100644 > --- a/doc/usage/index.rst > +++ b/doc/usage/index.rst > @@ -61,6 +61,7 @@ Shell commands > cmd/true > cmd/ums > cmd/wdt > + cmd/sm > > Booting OS > ---------- > -- > 2.25.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH v4 4/5] cmd/arm: meson: sm: introduce efusedump command 2023-01-10 10:56 ` Alexey Romanov @ 2023-01-10 10:56 ` Alexey Romanov -1 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong Using this command user can print efuse memory: $ sm efusedump 0 10 00000000: ff 00 31 00 00 ff 66 00 00 00 ..1...f... Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> --- cmd/meson/sm.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/cmd/meson/sm.c b/cmd/meson/sm.c index c2b57707258..d5eb1d6c084 100644 --- a/cmd/meson/sm.c +++ b/cmd/meson/sm.c @@ -5,6 +5,7 @@ * Author: Beniamino Galvani <b.galvani@gmail.com> * Author: Vyacheslav Bocharov <adeep@lexina.in> * Author: Neil Armstrong <narmstrong@baylibre.com> + * Author: Alexey Romanov <avromanov@sberdevices.ru> */ #include <command.h> @@ -119,11 +120,43 @@ static int do_efuse_write(struct cmd_tbl *cmdtp, int flag, int argc, return CMD_RET_SUCCESS; } +static int do_efuse_dump(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + ulong offset, size; + u8 *buffer; + int ret; + + if (argc != 3) + return CMD_RET_USAGE; + + offset = simple_strtoul(argv[1], NULL, 0); + size = simple_strtoul(argv[2], NULL, 0); + buffer = malloc(size); + if (!buffer) { + pr_err("Failed to allocate %lu bytes\n", size); + return CMD_RET_FAILURE; + } + + ret = meson_sm_read_efuse(offset, (void *)buffer, size); + if (ret != size) { + ret = CMD_RET_FAILURE; + goto free_buffer; + } + + print_buffer(0, buffer, 1, size, 0); + +free_buffer: + free(buffer); + return ret; +} + 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, "", ""), + U_BOOT_CMD_MKENT(efusedump, 3, 1, do_efuse_dump, "", ""), }; static int do_sm(struct cmd_tbl *cmdtp, int flag, int argc, @@ -152,5 +185,6 @@ U_BOOT_CMD( "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" + "sm efusewrite <offset> <size> <address> - write into efuse from memory address\n" + "sm efusedump <offset> <size> - dump efuse data range to console" ); -- 2.25.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 4/5] cmd/arm: meson: sm: introduce efusedump command @ 2023-01-10 10:56 ` Alexey Romanov 0 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong Using this command user can print efuse memory: $ sm efusedump 0 10 00000000: ff 00 31 00 00 ff 66 00 00 00 ..1...f... Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> --- cmd/meson/sm.c | 36 +++++++++++++++++++++++++++++++++++- 1 file changed, 35 insertions(+), 1 deletion(-) diff --git a/cmd/meson/sm.c b/cmd/meson/sm.c index c2b57707258..d5eb1d6c084 100644 --- a/cmd/meson/sm.c +++ b/cmd/meson/sm.c @@ -5,6 +5,7 @@ * Author: Beniamino Galvani <b.galvani@gmail.com> * Author: Vyacheslav Bocharov <adeep@lexina.in> * Author: Neil Armstrong <narmstrong@baylibre.com> + * Author: Alexey Romanov <avromanov@sberdevices.ru> */ #include <command.h> @@ -119,11 +120,43 @@ static int do_efuse_write(struct cmd_tbl *cmdtp, int flag, int argc, return CMD_RET_SUCCESS; } +static int do_efuse_dump(struct cmd_tbl *cmdtp, int flag, int argc, + char *const argv[]) +{ + ulong offset, size; + u8 *buffer; + int ret; + + if (argc != 3) + return CMD_RET_USAGE; + + offset = simple_strtoul(argv[1], NULL, 0); + size = simple_strtoul(argv[2], NULL, 0); + buffer = malloc(size); + if (!buffer) { + pr_err("Failed to allocate %lu bytes\n", size); + return CMD_RET_FAILURE; + } + + ret = meson_sm_read_efuse(offset, (void *)buffer, size); + if (ret != size) { + ret = CMD_RET_FAILURE; + goto free_buffer; + } + + print_buffer(0, buffer, 1, size, 0); + +free_buffer: + free(buffer); + return ret; +} + 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, "", ""), + U_BOOT_CMD_MKENT(efusedump, 3, 1, do_efuse_dump, "", ""), }; static int do_sm(struct cmd_tbl *cmdtp, int flag, int argc, @@ -152,5 +185,6 @@ U_BOOT_CMD( "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" + "sm efusewrite <offset> <size> <address> - write into efuse from memory address\n" + "sm efusedump <offset> <size> - dump efuse data range to console" ); -- 2.25.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 5/5] doc/usage: cmd: sm: documentation efusedump cmd 2023-01-10 10:56 ` Alexey Romanov @ 2023-01-10 10:56 ` Alexey Romanov -1 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong Added docs about sm efusedump command, that reads bytes from efuse memory bank and print them to the console. Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> --- doc/usage/cmd/sm.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/usage/cmd/sm.rst b/doc/usage/cmd/sm.rst index c41227f4b3b..f6524a1c2e3 100644 --- a/doc/usage/cmd/sm.rst +++ b/doc/usage/cmd/sm.rst @@ -38,6 +38,10 @@ sm efusewrite Write into efuse memory bank, starting from <offset>, the <size> bytes of data, located at address <address>. +sm efusedump + Read <size> bytes starting from <offset> from efuse memory bank and print + them to the console. + Configuration ------------- -- 2.25.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH v4 5/5] doc/usage: cmd: sm: documentation efusedump cmd @ 2023-01-10 10:56 ` Alexey Romanov 0 siblings, 0 replies; 16+ messages in thread From: Alexey Romanov @ 2023-01-10 10:56 UTC (permalink / raw) To: narmstrong, trini, sjg, mkorpershoek Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong Added docs about sm efusedump command, that reads bytes from efuse memory bank and print them to the console. Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> --- doc/usage/cmd/sm.rst | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/doc/usage/cmd/sm.rst b/doc/usage/cmd/sm.rst index c41227f4b3b..f6524a1c2e3 100644 --- a/doc/usage/cmd/sm.rst +++ b/doc/usage/cmd/sm.rst @@ -38,6 +38,10 @@ sm efusewrite Write into efuse memory bank, starting from <offset>, the <size> bytes of data, located at address <address>. +sm efusedump + Read <size> bytes starting from <offset> from efuse memory bank and print + them to the console. + Configuration ------------- -- 2.25.1 ^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH v4 5/5] doc/usage: cmd: sm: documentation efusedump cmd 2023-01-10 10:56 ` Alexey Romanov (?) @ 2023-01-10 13:42 ` Mattijs Korpershoek -1 siblings, 0 replies; 16+ messages in thread From: Mattijs Korpershoek @ 2023-01-10 13:42 UTC (permalink / raw) To: Alexey Romanov, narmstrong, trini, sjg Cc: u-boot-amlogic, u-boot, kernel, Alexey Romanov, Neil Armstrong On Tue, Jan 10, 2023 at 13:56, Alexey Romanov <avromanov@sberdevices.ru> wrote: > Added docs about sm efusedump command, that reads bytes > from efuse memory bank and print them to the console. > > Signed-off-by: Alexey Romanov <avromanov@sberdevices.ru> > Reviewed-by: Neil Armstrong <neil.armstrong@linaro.org> Reviewed-by: Mattijs Korpershoek <mkorpershoek@baylibre.com> > --- > doc/usage/cmd/sm.rst | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/doc/usage/cmd/sm.rst b/doc/usage/cmd/sm.rst > index c41227f4b3b..f6524a1c2e3 100644 > --- a/doc/usage/cmd/sm.rst > +++ b/doc/usage/cmd/sm.rst > @@ -38,6 +38,10 @@ sm efusewrite > Write into efuse memory bank, starting from <offset>, the <size> bytes > of data, located at address <address>. > > +sm efusedump > + Read <size> bytes starting from <offset> from efuse memory bank and print > + them to the console. > + > Configuration > ------------- > > -- > 2.25.1 ^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH v4 0/5] arch-meson: introduce efusedump command 2023-01-10 10:56 ` Alexey Romanov ` (5 preceding siblings ...) (?) @ 2023-01-10 14:27 ` Neil Armstrong -1 siblings, 0 replies; 16+ messages in thread From: Neil Armstrong @ 2023-01-10 14:27 UTC (permalink / raw) To: trini, sjg, mkorpershoek, Neil Armstrong, Alexey Romanov Cc: u-boot-amlogic, u-boot, kernel Hi, On Tue, 10 Jan 2023 13:56:45 +0300, Alexey Romanov wrote: > Keeping the commands code in an arch/ is not correct. This patchset > moves the meson smc commands from arch/arm/mach-meson to cmd/meson > folder and also adds a new 'efusedump' command with which user can > print efuse memory. > > Alexey Romanov (5): > asm/arch-meson: add missing meson_sm_write_efuse signature > arm/mach-meson: move smc commands in cmd/meson > doc/usage: cmd: documentation for meson/sm command > cmd/arm: meson: sm: introduce efusedump command > doc/usage: cmd: sm: documentation efusedump cmd > > [...] Thanks, Applied to https://source.denx.de/u-boot/custodians/u-boot-amlogic (u-boot-amlogic-test) [1/5] asm/arch-meson: add missing meson_sm_write_efuse signature https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/12d782734927818b9d2f197e3905410632b01fcc [2/5] arm/mach-meson: move smc commands in cmd/meson https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/311106a1c6eebdc5d0284faae30bf9087227a6c1 [3/5] doc/usage: cmd: documentation for meson/sm command https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/23435cfb3a2b672d7006d2d7e04276bd39fbb1a5 [4/5] cmd/arm: meson: sm: introduce efusedump command https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/38e29404b8630ff7e761c37d6d9fd927135a7810 [5/5] doc/usage: cmd: sm: documentation efusedump cmd https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/12e561f63a16e29b89a9138a929719427736da27 -- Neil ^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2023-01-10 14:27 UTC | newest] Thread overview: 16+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2023-01-10 10:56 [PATCH v4 0/5] arch-meson: introduce efusedump command Alexey Romanov 2023-01-10 10:56 ` Alexey Romanov 2023-01-10 10:56 ` [PATCH v4 1/5] asm/arch-meson: add missing meson_sm_write_efuse signature Alexey Romanov 2023-01-10 10:56 ` Alexey Romanov 2023-01-10 13:40 ` Mattijs Korpershoek 2023-01-10 10:56 ` [PATCH v4 2/5] arm/mach-meson: move smc commands in cmd/meson Alexey Romanov 2023-01-10 10:56 ` Alexey Romanov 2023-01-10 10:56 ` [PATCH v4 3/5] doc/usage: cmd: documentation for meson/sm command Alexey Romanov 2023-01-10 10:56 ` Alexey Romanov 2023-01-10 13:42 ` Mattijs Korpershoek 2023-01-10 10:56 ` [PATCH v4 4/5] cmd/arm: meson: sm: introduce efusedump command Alexey Romanov 2023-01-10 10:56 ` Alexey Romanov 2023-01-10 10:56 ` [PATCH v4 5/5] doc/usage: cmd: sm: documentation efusedump cmd Alexey Romanov 2023-01-10 10:56 ` Alexey Romanov 2023-01-10 13:42 ` Mattijs Korpershoek 2023-01-10 14:27 ` [PATCH v4 0/5] arch-meson: introduce efusedump command Neil Armstrong
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.