* [PATCH] ARM: amlogic: add sm efuse write support and cmd for read/write efuse
@ 2021-10-05 12:00 Vyacheslav Bocharov
2021-10-20 14:23 ` Neil Armstrong
0 siblings, 1 reply; 3+ messages in thread
From: Vyacheslav Bocharov @ 2021-10-05 12:00 UTC (permalink / raw)
To: Neil Armstrong; +Cc: u-boot, u-boot-amlogic
This adds support for amlogic efuse write and provides two subcommands
of "sm" command: "efuseread" and "efusewrite" to read/write bytes between
memory and efuse.
Signed-off-by: Vyacheslav Bocharov <adeep@lexina.in>
---
arch/arm/mach-meson/sm.c | 68 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 67 insertions(+), 1 deletion(-)
diff --git a/arch/arm/mach-meson/sm.c b/arch/arm/mach-meson/sm.c
index 1a8f23cb1fa..fb437b94d14 100644
--- a/arch/arm/mach-meson/sm.c
+++ b/arch/arm/mach-meson/sm.c
@@ -68,6 +68,26 @@ ssize_t meson_sm_read_efuse(uintptr_t offset, void *buffer, size_t size)
return regs.regs[0];
}
+ssize_t meson_sm_write_efuse(uintptr_t offset, void *buffer, size_t size)
+{
+ struct pt_regs regs;
+
+ meson_init_shmem();
+
+ memcpy(shmem_input, buffer, size);
+
+ regs.regs[0] = FN_EFUSE_WRITE;
+ regs.regs[1] = offset;
+ regs.regs[2] = size;
+
+ smc_call(®s);
+
+ if (regs.regs[0] == 0)
+ return -1;
+
+ return 0;
+}
+
#define SM_CHIP_ID_LENGTH 119
#define SM_CHIP_ID_OFFSET 4
#define SM_CHIP_ID_SIZE 12
@@ -187,9 +207,53 @@ static int do_sm_reboot_reason(struct cmd_tbl *cmdtp, int flag, int argc,
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)
+ 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)
+ 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,
@@ -216,5 +280,7 @@ 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"
+ "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"
);
--
2.30.2
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] ARM: amlogic: add sm efuse write support and cmd for read/write efuse
2021-10-05 12:00 [PATCH] ARM: amlogic: add sm efuse write support and cmd for read/write efuse Vyacheslav Bocharov
@ 2021-10-20 14:23 ` Neil Armstrong
2021-10-20 16:32 ` Vyacheslav Bocharov
0 siblings, 1 reply; 3+ messages in thread
From: Neil Armstrong @ 2021-10-20 14:23 UTC (permalink / raw)
To: Vyacheslav Bocharov; +Cc: u-boot, u-boot-amlogic
On 05/10/2021 14:00, Vyacheslav Bocharov wrote:
> This adds support for amlogic efuse write and provides two subcommands
> of "sm" command: "efuseread" and "efusewrite" to read/write bytes between
> memory and efuse.
>
> Signed-off-by: Vyacheslav Bocharov <adeep@lexina.in>
> ---
> arch/arm/mach-meson/sm.c | 68 +++++++++++++++++++++++++++++++++++++++-
> 1 file changed, 67 insertions(+), 1 deletion(-)
>
> diff --git a/arch/arm/mach-meson/sm.c b/arch/arm/mach-meson/sm.c
> index 1a8f23cb1fa..fb437b94d14 100644
> --- a/arch/arm/mach-meson/sm.c
> +++ b/arch/arm/mach-meson/sm.c
> @@ -68,6 +68,26 @@ ssize_t meson_sm_read_efuse(uintptr_t offset, void *buffer, size_t size)
> return regs.regs[0];
> }
>
> +ssize_t meson_sm_write_efuse(uintptr_t offset, void *buffer, size_t size)
> +{
> + struct pt_regs regs;
> +
> + meson_init_shmem();
> +
> + memcpy(shmem_input, buffer, size);
> +
> + regs.regs[0] = FN_EFUSE_WRITE;
> + regs.regs[1] = offset;
> + regs.regs[2] = size;
> +
> + smc_call(®s);
> +
> + if (regs.regs[0] == 0)
> + return -1;
> +
> + return 0;
> +}
> +
> #define SM_CHIP_ID_LENGTH 119
> #define SM_CHIP_ID_OFFSET 4
> #define SM_CHIP_ID_SIZE 12
> @@ -187,9 +207,53 @@ static int do_sm_reboot_reason(struct cmd_tbl *cmdtp, int flag, int argc,
> 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)
> + 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)
> + 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, "", ""),
These should be aligned with tabs
> };
>
> static int do_sm(struct cmd_tbl *cmdtp, int flag, int argc,
> @@ -216,5 +280,7 @@ 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"
> + "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"
Same here
> );
>
Applied to u-boot-amlogic while fixing indent
Thanks,
Neil
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] ARM: amlogic: add sm efuse write support and cmd for read/write efuse
2021-10-20 14:23 ` Neil Armstrong
@ 2021-10-20 16:32 ` Vyacheslav Bocharov
0 siblings, 0 replies; 3+ messages in thread
From: Vyacheslav Bocharov @ 2021-10-20 16:32 UTC (permalink / raw)
To: Neil Armstrong; +Cc: u-boot-amlogic
Great, thanks.
20.10.2021 17:23, Neil Armstrong wroute:
> On 05/10/2021 14:00, Vyacheslav Bocharov wrote:
>
> These should be aligned with tabs
Damn, that's my regular mistake.
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2021-10-20 16:32 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-10-05 12:00 [PATCH] ARM: amlogic: add sm efuse write support and cmd for read/write efuse Vyacheslav Bocharov
2021-10-20 14:23 ` Neil Armstrong
2021-10-20 16:32 ` Vyacheslav Bocharov
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.