[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