Message ID | 1426707979-1884-1-git-send-email-contact@paulk.fr |
---|---|
State | Superseded |
Delegated to: | Hans de Goede |
Headers | show |
Hi, Thanks for the patch, I've 1 comment inline, please send a version with that fixed then I'll queue it up for merging upstream. On 18-03-15 20:46, Paul Kocialkowski wrote: > Signed-off-by: Paul Kocialkowski <contact@paulk.fr> > --- > board/sunxi/board.c | 33 ++++++++++++++++++++++++++++++--- > include/configs/sunxi-common.h | 1 + > 2 files changed, 31 insertions(+), 3 deletions(-) > > diff --git a/board/sunxi/board.c b/board/sunxi/board.c > index becdc8b..0355de5 100644 > --- a/board/sunxi/board.c > +++ b/board/sunxi/board.c > @@ -248,13 +248,34 @@ int g_dnl_board_usb_cable_connected(void) > } > #endif > > +#ifdef CONFIG_SERIAL_TAG > +void get_board_serial(struct tag_serialnr *serialnr) > +{ > + char *serial_string = getenv("serial#"); > + unsigned long long 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) > { > - unsigned int sid[4]; > + char serial_string[17] = { 0 }; > + unsigned int sid[4] = { 0 }; > + int ret; > + > + ret = sunxi_get_sid(sid); > > - if (!getenv("ethaddr") && sunxi_get_sid(sid) == 0 && > - sid[0] != 0 && sid[3] != 0) { > + if (!getenv("ethaddr") && ret == 0 && sid[0] != 0 && sid[3] != 0) { > uint8_t mac_addr[6]; > > mac_addr[0] = 0x02; /* Non OUI / registered MAC address */ > @@ -267,6 +288,12 @@ int misc_init_r(void) > eth_setenv_enetaddr("ethaddr", mac_addr); > } > You should check for get_sid succeeding before calling snprintf, also since your buffer is always large enough, there is no need to use or error check snprintf, and last you should check for serial# not already being set so that the user can override it if he wants. > + ret = snprintf(serial_string, sizeof(serial_string), "%08x%08x", > + sid[0], sid[3]); > + > + if (ret > 0) > + setenv("serial#", serial_string); > + IOW, you should replace the above with: if (!getenv("serial#") && ret == 0) { sprintf(serial_string, "%08x%08x", sid[0], sid[3]); setenv("serial#", serial_string); } > #if defined(CONFIG_MUSB_HOST) || defined(CONFIG_MUSB_GADGET) > musb_register(&musb_plat, NULL, (void *)SUNXI_USB0_BASE); > #endif > diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h > index ffd9f5c..61a45e1 100644 > --- a/include/configs/sunxi-common.h > +++ b/include/configs/sunxi-common.h > @@ -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) > Otherwise this looks good. Regards, Hans p.s. A quick grep on serial# shows the following: board/gateworks/gw_ventana/gw_ventana.c 1202: * serial# env var 1207: char *serial = getenv("serial#"); 1432: setenv("serial#", str); 1512: fdt_setprop(blob, 0, "system-serial", getenv("serial#"), 1513: strlen(getenv("serial#")) + 1); Which may be used as an example for devicetree support, or not, the first thing to do would be to write a Documentation/devicetree/bindings/system-serial.txt patch for the kernel and send that to the devicetree list for review, once that is accepted we can actually start implementing it. Regards, Hans
diff --git a/board/sunxi/board.c b/board/sunxi/board.c index becdc8b..0355de5 100644 --- a/board/sunxi/board.c +++ b/board/sunxi/board.c @@ -248,13 +248,34 @@ int g_dnl_board_usb_cable_connected(void) } #endif +#ifdef CONFIG_SERIAL_TAG +void get_board_serial(struct tag_serialnr *serialnr) +{ + char *serial_string = getenv("serial#"); + unsigned long long 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) { - unsigned int sid[4]; + char serial_string[17] = { 0 }; + unsigned int sid[4] = { 0 }; + int ret; + + ret = sunxi_get_sid(sid); - if (!getenv("ethaddr") && sunxi_get_sid(sid) == 0 && - sid[0] != 0 && sid[3] != 0) { + if (!getenv("ethaddr") && ret == 0 && sid[0] != 0 && sid[3] != 0) { uint8_t mac_addr[6]; mac_addr[0] = 0x02; /* Non OUI / registered MAC address */ @@ -267,6 +288,12 @@ int misc_init_r(void) eth_setenv_enetaddr("ethaddr", mac_addr); } + ret = snprintf(serial_string, sizeof(serial_string), "%08x%08x", + sid[0], sid[3]); + + if (ret > 0) + setenv("serial#", serial_string); + #if defined(CONFIG_MUSB_HOST) || defined(CONFIG_MUSB_GADGET) musb_register(&musb_plat, NULL, (void *)SUNXI_USB0_BASE); #endif diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h index ffd9f5c..61a45e1 100644 --- a/include/configs/sunxi-common.h +++ b/include/configs/sunxi-common.h @@ -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)
Signed-off-by: Paul Kocialkowski <contact@paulk.fr> --- board/sunxi/board.c | 33 ++++++++++++++++++++++++++++++--- include/configs/sunxi-common.h | 1 + 2 files changed, 31 insertions(+), 3 deletions(-)