sunxi: Serial number support, obtained from SID bits
PATCH v4 1/2 sunxi: Serial number support, obtained from SID bits
Signed-off-by Paul Kocialkowski <[email protected]>
--- board/sunxi/board.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-)
board/sunxi/board.c +22 -11
@@ -372,20 +372,31 @@ int g_dnl_board_usb_cable_connected(void)#ifdef CONFIG_MISC_INIT_R int misc_init_r (void ) { +char serial_string[17 ] = {0 };unsigned int sid[4 ]; +uint8_t mac_addr[6 ]; +int ret; + + ret =sunxi_get_sid (sid); +if (ret ==0 && sid[0 ] !=0 && sid[3 ] !=0 ) { +if (!getenv ("ethaddr" )) { +/* Non OUI / registered MAC address */ + mac_addr[0 ] =0x02 ; + mac_addr[1 ] = (sid[0 ] >>0 ) &0xff ; + mac_addr[2 ] = (sid[3 ] >>24 ) &0xff ; + mac_addr[3 ] = (sid[3 ] >>16 ) &0xff ; + mac_addr[4 ] = (sid[3 ] >>8 ) &0xff ; + mac_addr[5 ] = (sid[3 ] >>0 ) &0xff ; + +eth_setenv_enetaddr ("ethaddr" , mac_addr); + } -if (!getenv ("ethaddr" ) &&sunxi_get_sid (sid) ==0 && - sid[0 ] !=0 && sid[3 ] !=0 ) { -uint8_t mac_addr[6 ]; - - mac_addr[0 ] =0x02 ;/* Non OUI / registered MAC address */ - mac_addr[1 ] = (sid[0 ] >>0 ) &0xff ; - mac_addr[2 ] = (sid[3 ] >>24 ) &0xff ; - mac_addr[3 ] = (sid[3 ] >>16 ) &0xff ; - mac_addr[4 ] = (sid[3 ] >>8 ) &0xff ; - mac_addr[5 ] = (sid[3 ] >>0 ) &0xff ; +if (!getenv ("serial#" )) { +snprintf (serial_string,sizeof (serial_string), +"%08x%08x" , sid[0 ], sid[3 ]); -eth_setenv_enetaddr ("ethaddr" , mac_addr); +setenv ("serial#" , serial_string); + } }#if defined(CONFIG_MUSB_HOST ) || defined(CONFIG_MUSB_GADGET )
Signature · 1 line
1.9.1
PATCH v4 2/2 sunxi: Pass serial number through ATAG
Signed-off-by Paul Kocialkowski <[email protected]>
--- board/sunxi/board.c | 20 ++++++++++++++++++++ include/configs/sunxi-common.h | 1 + 2 files changed, 21 insertions(+)
board/sunxi/board.c +20 -0
@@ -369,6 +369,26 @@ int g_dnl_board_usb_cable_connected(void) }#endif +#ifdef CONFIG_SERIAL_TAG +void get_board_serial (struct tag_serialnr *serialnr) +{ +char *serial_string; +unsigned long long serial; + + serial_string =getenv ("serial#" ); + +if (serial_string) { + serial =simple_strtoull (serial_string,NULL ,16 ); + + serialnr->high = (unsigned int ) (serial >>32 ); + serialnr->low = (unsigned int ) (serial &0xffffffff ); + }else { + serialnr->high =0 ; + serialnr->low =0 ; + } +} +#endif +#ifdef CONFIG_MISC_INIT_R int misc_init_r (void ) {
include/configs/sunxi-common.h +1 -0
@@ -98,6 +98,7 @@#define CONFIG_SETUP_MEMORY_TAGS #define CONFIG_CMDLINE_TAG #define CONFIG_INITRD_TAG +#define CONFIG_SERIAL_TAG /* mmc config */ #if !defined(CONFIG_UART0_PORT_F )
Signature · 1 line
1.9.1
PATCH v4 2/2 sunxi: Pass serial number through ATAG
Hi,
Quoted 1 line · Paul Kocialkowski
Signed-off-by Paul Kocialkowski <[email protected]>
Thanks, I've added this to my personal git repo, sunxi-wip branch. I'll move it over to u-boot-sunxi/next once it is clear that the kernel patch to show the devicetree serial-number string /proc/cpuinfo is going to be accepted.
Regards,
Hans
Quoted 49 lines
--- board/sunxi/board.c | 20 ++++++++++++++++++++ include/configs/sunxi-common.h | 1 + 2 files changed, 21 insertions(+)board/sunxi/board.c +20
-0@@ -369,6 +369,26 @@ int g_dnl_board_usb_cable_connected(void) }#endif +#ifdef CONFIG_SERIAL_TAG +void get_board_serial (struct tag_serialnr *serialnr) +{ +char *serial_string; +unsigned long long serial; + + serial_string =getenv ("serial#" ); + +if (serial_string) { + serial =simple_strtoull (serial_string,NULL ,16 ); + + serialnr->high = (unsigned int ) (serial >>32 ); + serialnr->low = (unsigned int ) (serial &0xffffffff ); + }else { + serialnr->high =0 ; + serialnr->low =0 ; + } +} +#endif +#ifdef CONFIG_MISC_INIT_R int misc_init_r (void ) {include/configs/sunxi-common.h +1
-0@@ -98,6 +98,7 @@#define CONFIG_SETUP_MEMORY_TAGS #define CONFIG_CMDLINE_TAG #define CONFIG_INITRD_TAG +#define CONFIG_SERIAL_TAG /* mmc config */ #if !defined(CONFIG_UART0_PORT_F )
PATCH v4 1/2 sunxi: Serial number support, obtained from SID bits
In reply to Paul KocialkowskiHi,
Quoted 1 line · Paul Kocialkowski
Signed-off-by Paul Kocialkowski <[email protected]>
Thanks, I'm currently busy merging some more patches, once that is done this patch should show up in u-boot-sunxi/next, and it will be included in u-boot/master once the merge window for v2015.07 opens.
Regards,
Hans
Quoted 52 lines
--- board/sunxi/board.c | 33 ++++++++++++++++++++++----------- 1 file changed, 22 insertions(+), 11 deletions(-)board/sunxi/board.c +22
-11@@ -372,20 +372,31 @@ int g_dnl_board_usb_cable_connected(void)#ifdef CONFIG_MISC_INIT_R int misc_init_r (void ) { +char serial_string[17 ] = {0 };unsigned int sid[4 ]; +uint8_t mac_addr[6 ]; +int ret; + + ret =sunxi_get_sid (sid); +if (ret ==0 && sid[0 ] !=0 && sid[3 ] !=0 ) { +if (!getenv ("ethaddr" )) { +/* Non OUI / registered MAC address */ + mac_addr[0 ] =0x02 ; + mac_addr[1 ] = (sid[0 ] >>0 ) &0xff ; + mac_addr[2 ] = (sid[3 ] >>24 ) &0xff ; + mac_addr[3 ] = (sid[3 ] >>16 ) &0xff ; + mac_addr[4 ] = (sid[3 ] >>8 ) &0xff ; + mac_addr[5 ] = (sid[3 ] >>0 ) &0xff ; + +eth_setenv_enetaddr ("ethaddr" , mac_addr); + } -if (!getenv ("ethaddr" ) &&sunxi_get_sid (sid) ==0 && - sid[0 ] !=0 && sid[3 ] !=0 ) { -uint8_t mac_addr[6 ]; - - mac_addr[0 ] =0x02 ;/* Non OUI / registered MAC address */ - mac_addr[1 ] = (sid[0 ] >>0 ) &0xff ; - mac_addr[2 ] = (sid[3 ] >>24 ) &0xff ; - mac_addr[3 ] = (sid[3 ] >>16 ) &0xff ; - mac_addr[4 ] = (sid[3 ] >>8 ) &0xff ; - mac_addr[5 ] = (sid[3 ] >>0 ) &0xff ; +if (!getenv ("serial#" )) { +snprintf (serial_string,sizeof (serial_string), +"%08x%08x" , sid[0 ], sid[3 ]); -eth_setenv_enetaddr ("ethaddr" , mac_addr); +setenv ("serial#" , serial_string); + } }#if defined(CONFIG_MUSB_HOST ) || defined(CONFIG_MUSB_GADGET )