From mboxrd@z Thu Jan 1 00:00:00 1970 From: Paul Kocialkowski Date: Sun, 22 Mar 2015 12:41:37 +0100 Subject: [U-Boot] [PATCH v2] sunxi: Serial number support, obtained from SID bits and passed through ATAG In-Reply-To: <550EA94C.3070608@redhat.com> References: <550C7847.9040904@redhat.com> <1427020921-22473-1-git-send-email-contact@paulk.fr> <550EA726.6010507@redhat.com> <1427023896.2626.8.camel@aldrin> <550EA94C.3070608@redhat.com> Message-ID: <1427024497.2626.11.camel@aldrin> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Le dimanche 22 mars 2015 ? 12:36 +0100, Hans de Goede a ?crit : > Hi, > > On 22-03-15 12:31, Paul Kocialkowski wrote: > > Le dimanche 22 mars 2015 ? 12:27 +0100, Hans de Goede a ?crit : > >> Hi, > >> > >> On 22-03-15 11:42, Paul Kocialkowski wrote: > >>> Signed-off-by: Paul Kocialkowski > >> > >> Thanks this version looks good, but I would like to have some more > >> certainty wrt how to deal with serial numbers in devicetree, where we > >> may e.g. store the full 128 bits of the sid, so I've send a mail > >> to the devicetree list about this with you in the Cc. > > > > In case it is possible to store the full 128 bits through device tree, I > > would still prefer to see only the 64 bits we selected being used, so > > that each device would show the same serial number in cpuinfo when using > > the legacy 3.4 kernel and a recent upstream kernel. > > Right in /proc/cpuinfo we should always show the same, and we can > likely not extend the info to 128 bits there due to ABI compatibility concerns. > > But we can e.g. show the entire 128 bit in /sys/firmware/devicetree/base/system-serial > in which case it makes sense to have the full 128 bit in the u-boot environment > and select word 0 and 3 in get_board_serial() at which point your patch needs > to change which is why I want to have a discussion about how to deal with > this in devicetree before merging the patch. That makes good sense, let's wait and see what kernel dt people think about this. I'll still post a v3 just now because v2 was missing a closing bracket and didn't build. > Regards, > > Hans > > > > > >> Regards, > >> > >> Hans > >> > >>> --- > >>> board/sunxi/board.c | 51 +++++++++++++++++++++++++++++++++--------- > >>> include/configs/sunxi-common.h | 1 + > >>> 2 files changed, 41 insertions(+), 11 deletions(-) > >>> > >>> diff --git a/board/sunxi/board.c b/board/sunxi/board.c > >>> index e1891d1..d117558 100644 > >>> --- a/board/sunxi/board.c > >>> +++ b/board/sunxi/board.c > >>> @@ -241,24 +241,53 @@ static struct musb_hdrc_platform_data musb_plat = { > >>> }; > >>> #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) > >>> { > >>> + 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]; > >>> + if (!getenv("serial#")) { > >>> + snprintf(serial_string, sizeof(serial_string), > >>> + "%08x%08x", sid[0], sid[3]); > >>> > >>> - 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; > >>> + setenv("serial#", serial_string); > >>> > >>> - eth_setenv_enetaddr("ethaddr", mac_addr); > >>> - } > >>> + } > >>> > >>> #if defined(CONFIG_MUSB_HOST) || defined(CONFIG_MUSB_GADGET) > >>> musb_register(&musb_plat, NULL, (void *)SUNXI_USB0_BASE); > >>> diff --git a/include/configs/sunxi-common.h b/include/configs/sunxi-common.h > >>> index 1f7a1cb..b9bb971 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) > >>> > > -------------- next part -------------- A non-text attachment was scrubbed... Name: signature.asc Type: application/pgp-signature Size: 819 bytes Desc: This is a digitally signed message part URL: