build/patch/u-boot/v2022.07/board_jethubj100/0005-Add-usid-serial-mac-read-from-emmc.patch

103 lines
2.7 KiB
Diff

From a0f1aca3cf0638afeef494002ecd76eb2ab88ee3 Mon Sep 17 00:00:00 2001
From: Vyacheslav Bocharov <adeep@lexina.in>
Date: Tue, 5 Jul 2022 19:06:25 +0300
Subject: [PATCH 5/6] Add usid/serial/mac read from emmc
---
board/amlogic/jethub-j100/jethub-j100.c | 63 +++++++++++++++++++++++--
1 file changed, 60 insertions(+), 3 deletions(-)
diff --git a/board/amlogic/jethub-j100/jethub-j100.c b/board/amlogic/jethub-j100/jethub-j100.c
index 6a2c4ad4c3..41ef5db493 100644
--- a/board/amlogic/jethub-j100/jethub-j100.c
+++ b/board/amlogic/jethub-j100/jethub-j100.c
@@ -5,6 +5,7 @@
*/
#include <common.h>
+#include <command.h>
#include <dm.h>
#include <init.h>
#include <net.h>
@@ -20,8 +21,65 @@ int misc_init_r(void)
u8 mac_addr[ARP_HLEN];
char serial[SM_SERIAL_SIZE];
u32 sid;
+ int ret;
- if (!meson_sm_get_serial(serial, SM_SERIAL_SIZE)) {
+ char _cmdbuf[96];
+ char keyname[32];
+ char keydata[256];
+ int ver=0;
+
+ memset (mac_addr,0, sizeof(mac_addr));
+ sprintf(_cmdbuf, "store init");
+ if(!run_command(_cmdbuf, 0))
+ {
+ sprintf(_cmdbuf, "keyman init 0x1234");
+ if(!run_command(_cmdbuf, 0))
+ {
+ strcpy(keyname, "usid");
+ memset (keydata, 0, sizeof(keydata));
+ sprintf(_cmdbuf, "keyman read %s %p str", keyname, keydata);
+ ret = run_command(_cmdbuf, 0);
+ if (!ret)
+ {
+ // j100__04012201sw00016142005c
+ // 0123456789
+ if (keydata[0] == 'j')
+ {
+ if (keydata[1] == '1')
+ {
+ sprintf(_cmdbuf, "%c%c",keydata[6],keydata[7]);
+ env_set("hwrev", _cmdbuf);
+ sprintf(_cmdbuf, "%c%c",keydata[8],keydata[9]);
+ env_set("perev", _cmdbuf);
+ }
+ }
+ }
+ // get serial
+ strcpy(keyname, "serial");
+ memset (keydata, 0, sizeof(keydata));
+ sprintf(_cmdbuf, "keyman read %s %p str", keyname, keydata);
+ ret = run_command(_cmdbuf, 0);
+
+ // get mac
+ strcpy(keyname, "mac");
+ memset (keydata, 0, sizeof(keydata));
+ sprintf(_cmdbuf, "keyman read %s %#p str", keyname, keydata);
+ ret = run_command(_cmdbuf, 0);
+ if (keydata[2]==':')
+ {
+ keydata[17] = (char) 0x00;
+ sprintf(_cmdbuf,"env set ethaddr %s", keydata);
+ ret = run_command(_cmdbuf, 0);
+ mac_addr[0] = (char) 0x01;
+ } else
+ {
+ printf("keyman read mac failed\n");
+ }
+ }
+ }
+
+ if (mac_addr[0]==0)
+ 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)
@@ -34,9 +92,8 @@ int misc_init_r(void)
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;
}
--
2.30.2