[U-Boot] [PATCH v2] sunxi: Serial number support, obtained from SID bits and passed through ATAG
Paul Kocialkowski
contact at paulk.fr
Sun Mar 22 12:41:37 CET 2015
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 <contact at paulk.fr>
> >>
> >> 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: <http://lists.denx.de/pipermail/u-boot/attachments/20150322/dd7cc5c4/attachment.sig>
More information about the U-Boot
mailing list