mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
- add sm efuse write support and cmd for read/write efuse
- add JetHub D1 eth mac generation with manufacturer OUI -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEPVPGJshWBf4d9CyLd9zb2sjISdEFAmGA+fwACgkQd9zb2sjI SdGGmg/+JNrKt/9yJ5giKwklLMEzSccKG23lQA2bZiYCP3I8j3t6spkHvHRRfgbX ZJIZjz9zhJ4bvaoiVa64fWoSxx8LpFDnTA1yQugDMxci9djXs2lnq1OdB3t9H4y3 duy4+9U8H0lgpQosZwtLeI2FJvEnkrPlWyUAV9oMoFnyCllfjj0DfGqu9wm7mBlS q4VMBBVi3z8fhEs/lBoQ0psRHhfqY3ztI7PUCk1j15QSzaEt2RgNFYuVWW9QLi5f C0PB7/3mh004N6WkjrThT310dKoRNrTA30n4svnZDAtRkeligHe4krJBgJGWy0hk i6b4Cg1DPWVi5gfsyWsdO4nqJ2SEvmeGJ6EWPkzk3WxvHzVLj0+xBLIEhG+QgLgF GyoUhsy+crxmEmmE2NXpCnu0hZ+ouldGJXLqC+s/cy1dsXMtBgBfqbz8sfCSP2Qu w+FqpnwzAFBALB6DoA51Y/yxBwNTs9TtMRnR1kH99Gu7ekcNSZDCuLrrASp1+NiT axOQFJtopEuPTqBzR7Z/7NV5KjVMhUC9znQEHBmbmIKzr/27go0QF/267E4yEXlS fi1b0uPGSN+lfSwL2jau/CxRCFJmfTtI6flrkN7dBYWGYc98b1ISxa8U9OnJj/EA eYywK2BfzL5F2jKVCemJ441riImCZcrnIToWevnWUCLJV07LIcE= =UyL3 -----END PGP SIGNATURE----- Merge tag 'u-boot-amlogic-20211102' of https://source.denx.de/u-boot/custodians/u-boot-amlogic - add sm efuse write support and cmd for read/write efuse - add JetHub D1 eth mac generation with manufacturer OUI
This commit is contained in:
commit
b8bfe05282
6 changed files with 125 additions and 3 deletions
|
@ -68,6 +68,26 @@ ssize_t meson_sm_read_efuse(uintptr_t offset, void *buffer, size_t size)
|
||||||
return regs.regs[0];
|
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_LENGTH 119
|
||||||
#define SM_CHIP_ID_OFFSET 4
|
#define SM_CHIP_ID_OFFSET 4
|
||||||
#define SM_CHIP_ID_SIZE 12
|
#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;
|
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[] = {
|
static struct cmd_tbl cmd_sm_sub[] = {
|
||||||
U_BOOT_CMD_MKENT(serial, 2, 1, do_sm_serial, "", ""),
|
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(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,
|
static int do_sm(struct cmd_tbl *cmdtp, int flag, int argc,
|
||||||
|
@ -216,5 +280,7 @@ U_BOOT_CMD(
|
||||||
sm, 5, 0, do_sm,
|
sm, 5, 0, do_sm,
|
||||||
"Secure Monitor Control",
|
"Secure Monitor Control",
|
||||||
"serial <address> - read chip unique id to memory address\n"
|
"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"
|
||||||
);
|
);
|
||||||
|
|
8
board/amlogic/jethub-j100/MAINTAINERS
Normal file
8
board/amlogic/jethub-j100/MAINTAINERS
Normal file
|
@ -0,0 +1,8 @@
|
||||||
|
JetHome JetHub
|
||||||
|
M: Vyacheslav Bocharov <adeep@lexina.in>
|
||||||
|
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
|
6
board/amlogic/jethub-j100/Makefile
Normal file
6
board/amlogic/jethub-j100/Makefile
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0+
|
||||||
|
#
|
||||||
|
# (C) Copyright 2021 Vyacheslav Bocharov
|
||||||
|
# Author: Vyacheslav Bocharov <adeep@lexina.in>
|
||||||
|
|
||||||
|
obj-y := jethub-j100.o
|
42
board/amlogic/jethub-j100/jethub-j100.c
Normal file
42
board/amlogic/jethub-j100/jethub-j100.c
Normal file
|
@ -0,0 +1,42 @@
|
||||||
|
// SPDX-License-Identifier: GPL-2.0+
|
||||||
|
/*
|
||||||
|
* Copyright (C) 2021 Vyacheslav Bocharov
|
||||||
|
* Author: Vyacheslav Bocharov <adeep@lexina.in>
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <common.h>
|
||||||
|
#include <dm.h>
|
||||||
|
#include <init.h>
|
||||||
|
#include <net.h>
|
||||||
|
#include <asm/io.h>
|
||||||
|
#include <asm/arch/axg.h>
|
||||||
|
#include <asm/arch/sm.h>
|
||||||
|
#include <asm/arch/eth.h>
|
||||||
|
#include <asm/arch/mem.h>
|
||||||
|
#include <u-boot/crc.h>
|
||||||
|
|
||||||
|
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;
|
||||||
|
}
|
|
@ -4,6 +4,5 @@ S: Maintained
|
||||||
L: u-boot-amlogic@groups.io
|
L: u-boot-amlogic@groups.io
|
||||||
F: board/amlogic/jethub-j80/
|
F: board/amlogic/jethub-j80/
|
||||||
F: configs/jethub_j80_defconfig
|
F: configs/jethub_j80_defconfig
|
||||||
F: configs/jethub_j100_defconfig
|
|
||||||
F: doc/board/amlogic/jethub-j80.rst
|
F: doc/board/amlogic/jethub-j80.rst
|
||||||
F: doc/board/amlogic/jethub-j100.rst
|
F: include/configs/jethub.h
|
||||||
|
|
|
@ -1,4 +1,5 @@
|
||||||
CONFIG_ARM=y
|
CONFIG_ARM=y
|
||||||
|
CONFIG_SYS_BOARD="jethub-j100"
|
||||||
CONFIG_SYS_CONFIG_NAME="jethub"
|
CONFIG_SYS_CONFIG_NAME="jethub"
|
||||||
CONFIG_ARCH_MESON=y
|
CONFIG_ARCH_MESON=y
|
||||||
CONFIG_SYS_TEXT_BASE=0x01000000
|
CONFIG_SYS_TEXT_BASE=0x01000000
|
||||||
|
|
Loading…
Reference in a new issue