mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 23:24:38 +00:00
rpi: set board serial number in environment
Gets propagated into the device tree and then into /proc/cpuinfo where users often expect it. Signed-off-by: Lubomir Rintel <lkundrak@v3.sk> Tested-by: Stephen Warren <swarren@wwwdotorg.org> Reviewed-by: Stephen Warren <swarren@wwwdotorg.org>
This commit is contained in:
parent
6f6051fac3
commit
757cd149b9
2 changed files with 44 additions and 0 deletions
|
@ -150,6 +150,17 @@ struct bcm2835_mbox_tag_get_mac_address {
|
|||
} body;
|
||||
};
|
||||
|
||||
#define BCM2835_MBOX_TAG_GET_BOARD_SERIAL 0x00010004
|
||||
|
||||
struct bcm2835_mbox_tag_get_board_serial {
|
||||
struct bcm2835_mbox_tag_hdr tag_hdr;
|
||||
union {
|
||||
struct __packed {
|
||||
u64 serial;
|
||||
} resp;
|
||||
} body;
|
||||
};
|
||||
|
||||
#define BCM2835_MBOX_TAG_GET_ARM_MEMORY 0x00010005
|
||||
|
||||
struct bcm2835_mbox_tag_get_arm_mem {
|
||||
|
|
|
@ -5,6 +5,7 @@
|
|||
*/
|
||||
|
||||
#include <common.h>
|
||||
#include <inttypes.h>
|
||||
#include <config.h>
|
||||
#include <dm.h>
|
||||
#include <fdt_support.h>
|
||||
|
@ -56,6 +57,12 @@ struct msg_get_board_rev {
|
|||
u32 end_tag;
|
||||
};
|
||||
|
||||
struct msg_get_board_serial {
|
||||
struct bcm2835_mbox_hdr hdr;
|
||||
struct bcm2835_mbox_tag_get_board_serial get_board_serial;
|
||||
u32 end_tag;
|
||||
};
|
||||
|
||||
struct msg_get_mac_address {
|
||||
struct bcm2835_mbox_hdr hdr;
|
||||
struct bcm2835_mbox_tag_get_mac_address get_mac_address;
|
||||
|
@ -281,6 +288,30 @@ static void set_board_info(void)
|
|||
}
|
||||
#endif /* CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG */
|
||||
|
||||
static void set_serial_number(void)
|
||||
{
|
||||
ALLOC_CACHE_ALIGN_BUFFER(struct msg_get_board_serial, msg, 1);
|
||||
int ret;
|
||||
char serial_string[17] = { 0 };
|
||||
|
||||
if (getenv("serial#"))
|
||||
return;
|
||||
|
||||
BCM2835_MBOX_INIT_HDR(msg);
|
||||
BCM2835_MBOX_INIT_TAG_NO_REQ(&msg->get_board_serial, GET_BOARD_SERIAL);
|
||||
|
||||
ret = bcm2835_mbox_call_prop(BCM2835_MBOX_PROP_CHAN, &msg->hdr);
|
||||
if (ret) {
|
||||
printf("bcm2835: Could not query board serial\n");
|
||||
/* Ignore error; not critical */
|
||||
return;
|
||||
}
|
||||
|
||||
snprintf(serial_string, sizeof(serial_string), "%016" PRIx64,
|
||||
msg->get_board_serial.body.resp.serial);
|
||||
setenv("serial#", serial_string);
|
||||
}
|
||||
|
||||
int misc_init_r(void)
|
||||
{
|
||||
set_fdtfile();
|
||||
|
@ -288,6 +319,8 @@ int misc_init_r(void)
|
|||
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
|
||||
set_board_info();
|
||||
#endif
|
||||
set_serial_number();
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in a new issue