mirror of
https://github.com/u-boot/u-boot.git
synced 2025-05-09 03:21:51 +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;
|
} 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
|
#define BCM2835_MBOX_TAG_GET_ARM_MEMORY 0x00010005
|
||||||
|
|
||||||
struct bcm2835_mbox_tag_get_arm_mem {
|
struct bcm2835_mbox_tag_get_arm_mem {
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <common.h>
|
#include <common.h>
|
||||||
|
#include <inttypes.h>
|
||||||
#include <config.h>
|
#include <config.h>
|
||||||
#include <dm.h>
|
#include <dm.h>
|
||||||
#include <fdt_support.h>
|
#include <fdt_support.h>
|
||||||
|
@ -56,6 +57,12 @@ struct msg_get_board_rev {
|
||||||
u32 end_tag;
|
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 msg_get_mac_address {
|
||||||
struct bcm2835_mbox_hdr hdr;
|
struct bcm2835_mbox_hdr hdr;
|
||||||
struct bcm2835_mbox_tag_get_mac_address get_mac_address;
|
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 */
|
#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)
|
int misc_init_r(void)
|
||||||
{
|
{
|
||||||
set_fdtfile();
|
set_fdtfile();
|
||||||
|
@ -288,6 +319,8 @@ int misc_init_r(void)
|
||||||
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
|
#ifdef CONFIG_ENV_VARS_UBOOT_RUNTIME_CONFIG
|
||||||
set_board_info();
|
set_board_info();
|
||||||
#endif
|
#endif
|
||||||
|
set_serial_number();
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue