[PATCH v4 0/5] arch-meson: introduce efusedump command

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

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__ */

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

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" +);

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 ----------

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

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" );

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 -------------

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

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/12d78273492... [2/5] arm/mach-meson: move smc commands in cmd/meson https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/311106a1c6e... [3/5] doc/usage: cmd: documentation for meson/sm command https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/23435cfb3a2... [4/5] cmd/arm: meson: sm: introduce efusedump command https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/38e29404b86... [5/5] doc/usage: cmd: sm: documentation efusedump cmd https://source.denx.de/u-boot/custodians/u-boot-amlogic/-/commit/12e561f63a1...
participants (3)
-
Alexey Romanov
-
Mattijs Korpershoek
-
Neil Armstrong