From 10be5b5d3a8d8dd1aa8be95d339c0fdf498c3687 Mon Sep 17 00:00:00 2001 From: Paul Kocialkowski Date: Thu, 21 May 2015 11:27:03 +0200 Subject: 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 Reviewed-by: Simon Glass --- common/fdt_support.c | 25 +++++++++++++++++++++++++ 1 file changed, 25 insertions(+) (limited to 'common/fdt_support.c') diff --git a/common/fdt_support.c b/common/fdt_support.c index 9e50148462..10648b5a4a 100644 --- a/common/fdt_support.c +++ b/common/fdt_support.c @@ -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) { -- cgit v1.2.3