From 52195ba5f5799e04f7dd6332d05087f507119007 Mon Sep 17 00:00:00 2001 From: Vyacheslav Bocharov Date: Tue, 5 Oct 2021 15:00:03 +0300 Subject: [PATCH 1/2] ARM: amlogic: add sm efuse write support and cmd for read/write efuse 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 [narmstrong: fixed indent at end of patch] Signed-off-by: Neil Armstrong --- 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 1a8f23cb1f..6c28c0f5e4 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
- 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
- read efuse to memory address\n" + "sm efusewrite
- write into efuse from memory address" ); From 4f4f974a46244270c1c6723017711c0aa8250206 Mon Sep 17 00:00:00 2001 From: Vyacheslav Bocharov Date: Fri, 29 Oct 2021 10:08:20 +0300 Subject: [PATCH 2/2] ARM: amlogic: add JetHub D1 eth mac generation with manufacturer OUI JetHome has own MAC OUI. Add jethub-j100 board file. Update config. Signed-off-by: Vyacheslav Bocharov Signed-off-by: Neil Armstrong --- board/amlogic/jethub-j100/MAINTAINERS | 8 +++++ board/amlogic/jethub-j100/Makefile | 6 ++++ board/amlogic/jethub-j100/jethub-j100.c | 42 +++++++++++++++++++++++++ board/amlogic/jethub-j80/MAINTAINERS | 3 +- configs/jethub_j100_defconfig | 1 + 5 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 board/amlogic/jethub-j100/MAINTAINERS create mode 100644 board/amlogic/jethub-j100/Makefile create mode 100644 board/amlogic/jethub-j100/jethub-j100.c diff --git a/board/amlogic/jethub-j100/MAINTAINERS b/board/amlogic/jethub-j100/MAINTAINERS new file mode 100644 index 0000000000..43f6a5fc86 --- /dev/null +++ b/board/amlogic/jethub-j100/MAINTAINERS @@ -0,0 +1,8 @@ +JetHome JetHub +M: Vyacheslav Bocharov +S: Maintained +L: u-boot-amlogic@groups.io +F: board/amlogic/jethub-j100/ +F: configs/jethub_j100_defconfig +F: doc/board/amlogic/jethub-j100.rst +F: include/configs/jethub.h diff --git a/board/amlogic/jethub-j100/Makefile b/board/amlogic/jethub-j100/Makefile new file mode 100644 index 0000000000..4d935af984 --- /dev/null +++ b/board/amlogic/jethub-j100/Makefile @@ -0,0 +1,6 @@ +# SPDX-License-Identifier: GPL-2.0+ +# +# (C) Copyright 2021 Vyacheslav Bocharov +# Author: Vyacheslav Bocharov + +obj-y := jethub-j100.o diff --git a/board/amlogic/jethub-j100/jethub-j100.c b/board/amlogic/jethub-j100/jethub-j100.c new file mode 100644 index 0000000000..6a2c4ad4c3 --- /dev/null +++ b/board/amlogic/jethub-j100/jethub-j100.c @@ -0,0 +1,42 @@ +// SPDX-License-Identifier: GPL-2.0+ +/* + * Copyright (C) 2021 Vyacheslav Bocharov + * Author: Vyacheslav Bocharov + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +int misc_init_r(void) +{ + u8 mac_addr[ARP_HLEN]; + char serial[SM_SERIAL_SIZE]; + u32 sid; + + if (!meson_sm_get_serial(serial, SM_SERIAL_SIZE)) { + sid = crc32(0, (unsigned char *)serial, SM_SERIAL_SIZE); + /* Ensure the NIC specific bytes of the mac are not all 0 */ + if ((sid & 0xffff) == 0) + sid |= 0x800000; + + /* OUI registered MAC address */ + mac_addr[0] = 0x10; + mac_addr[1] = 0x27; + mac_addr[2] = 0xBE; + mac_addr[3] = (sid >> 16) & 0xff; + mac_addr[4] = (sid >> 8) & 0xff; + mac_addr[5] = (sid >> 0) & 0xff; + + eth_env_set_enetaddr("ethaddr", mac_addr); + } + + return 0; +} diff --git a/board/amlogic/jethub-j80/MAINTAINERS b/board/amlogic/jethub-j80/MAINTAINERS index 459e9f89da..a899153117 100644 --- a/board/amlogic/jethub-j80/MAINTAINERS +++ b/board/amlogic/jethub-j80/MAINTAINERS @@ -4,6 +4,5 @@ S: Maintained L: u-boot-amlogic@groups.io F: board/amlogic/jethub-j80/ F: configs/jethub_j80_defconfig -F: configs/jethub_j100_defconfig F: doc/board/amlogic/jethub-j80.rst -F: doc/board/amlogic/jethub-j100.rst +F: include/configs/jethub.h diff --git a/configs/jethub_j100_defconfig b/configs/jethub_j100_defconfig index 533f251855..a81b16c0dd 100644 --- a/configs/jethub_j100_defconfig +++ b/configs/jethub_j100_defconfig @@ -1,4 +1,5 @@ CONFIG_ARM=y +CONFIG_SYS_BOARD="jethub-j100" CONFIG_SYS_CONFIG_NAME="jethub" CONFIG_ARCH_MESON=y CONFIG_SYS_TEXT_BASE=0x01000000