mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-10 15:14:43 +00:00
fdt: Pass the device serial number through devicetree
Before device-tree, the device serial number used to be passed to the kernel using ATAGs (on ARM). This is now deprecated and all the handover to the kernel should now be done using device-tree. Thus, this passes the serial-number property to the kernel using the serial-number property of the root node, as expected by the kernel. The serial number is a string that somewhat represents the device's serial number. It might come from some form of storage (e.g. an eeprom) and be programmed at factory-time by the manufacturer or come from identification bits available in e.g. the SoC. Signed-off-by: Paul Kocialkowski <contact@paulk.fr> Reviewed-by: Simon Glass <sgj@chromium.org>
This commit is contained in:
parent
d8abb46b37
commit
10be5b5d3a
4 changed files with 34 additions and 0 deletions
|
@ -194,6 +194,31 @@ static inline int fdt_setprop_uxx(void *fdt, int nodeoffset, const char *name,
|
|||
return fdt_setprop_u32(fdt, nodeoffset, name, (uint32_t)val);
|
||||
}
|
||||
|
||||
int fdt_root(void *fdt)
|
||||
{
|
||||
char *serial;
|
||||
int err;
|
||||
|
||||
err = fdt_check_header(fdt);
|
||||
if (err < 0) {
|
||||
printf("fdt_root: %s\n", fdt_strerror(err));
|
||||
return err;
|
||||
}
|
||||
|
||||
serial = getenv("serial#");
|
||||
if (serial) {
|
||||
err = fdt_setprop(fdt, 0, "serial-number", serial,
|
||||
strlen(serial) + 1);
|
||||
|
||||
if (err < 0) {
|
||||
printf("WARNING: could not set serial-number %s.\n",
|
||||
fdt_strerror(err));
|
||||
return err;
|
||||
}
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end)
|
||||
{
|
||||
|
|
|
@ -471,6 +471,10 @@ int image_setup_libfdt(bootm_headers_t *images, void *blob,
|
|||
int ret = -EPERM;
|
||||
int fdt_ret;
|
||||
|
||||
if (fdt_root(blob) < 0) {
|
||||
printf("ERROR: root node setup failed\n");
|
||||
goto err;
|
||||
}
|
||||
if (fdt_chosen(blob) < 0) {
|
||||
printf("ERROR: /chosen node create failed\n");
|
||||
goto err;
|
||||
|
|
4
doc/device-tree-bindings/root.txt
Normal file
4
doc/device-tree-bindings/root.txt
Normal file
|
@ -0,0 +1,4 @@
|
|||
The root node
|
||||
|
||||
Optional properties:
|
||||
- serial-number : a string representing the device's serial number
|
|
@ -16,6 +16,7 @@ u32 fdt_getprop_u32_default_node(const void *fdt, int off, int cell,
|
|||
const char *prop, const u32 dflt);
|
||||
u32 fdt_getprop_u32_default(const void *fdt, const char *path,
|
||||
const char *prop, const u32 dflt);
|
||||
int fdt_root(void *fdt);
|
||||
int fdt_chosen(void *fdt);
|
||||
int fdt_initrd(void *fdt, ulong initrd_start, ulong initrd_end);
|
||||
void do_fixup_by_path(void *fdt, const char *path, const char *prop,
|
||||
|
|
Loading…
Reference in a new issue