From 18634fbff1f64df29af12a8b2ce335fc27019b27 Mon Sep 17 00:00:00 2001 From: Dan Willemsen Date: Wed, 14 Sep 2011 17:15:50 -0700 Subject: arm: tegra: Add ATAG_SERIAL parsing Bug 973078 Change-Id: I2860402c887db414717ce313101dc09e8b327f99 Signed-off-by: Chinmay Kamat Reviewed-on: http://git-master/r/108699 Reviewed-by: Automatic_Commit_Validation_User Reviewed-by: Stephen Warren GVS: Gerrit_Virtual_Submit Tested-by: Nitin Kumbhar Reviewed-by: Dan Willemsen --- arch/arm/boot/compressed/atags_to_fdt.c | 5 +++++ arch/arm/kernel/devtree.c | 14 +++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/arch/arm/boot/compressed/atags_to_fdt.c b/arch/arm/boot/compressed/atags_to_fdt.c index 6ce11c481178..05c548875e3d 100644 --- a/arch/arm/boot/compressed/atags_to_fdt.c +++ b/arch/arm/boot/compressed/atags_to_fdt.c @@ -87,6 +87,11 @@ int atags_to_fdt(void *atag_list, void *fdt, int total_space) initrd_start); setprop_cell(fdt, "/chosen", "linux,initrd-end", initrd_start + initrd_size); + } else if (atag->hdr.tag == ATAG_SERIAL) { + uint32_t serial[2]; + serial[0] = cpu_to_fdt32(atag->u.serialnr.high); + serial[1] = cpu_to_fdt32(atag->u.serialnr.low); + setprop(fdt, "/", "serial-num", serial, 8); } } diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c index 1a33e9d6bb1f..e855fcb71bf9 100644 --- a/arch/arm/kernel/devtree.c +++ b/arch/arm/kernel/devtree.c @@ -75,6 +75,9 @@ struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) unsigned int score, mdesc_score = ~1; unsigned long dt_root; const char *model; + __be32 *serial_prop; + u64 serial = 0; + unsigned long len; if (!dt_phys) return NULL; @@ -118,7 +121,16 @@ struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) model = of_get_flat_dt_prop(dt_root, "compatible", NULL); if (!model) model = ""; - pr_info("Machine: %s, model: %s\n", mdesc_best->name, model); + + serial_prop = of_get_flat_dt_prop(dt_root, "serial-num", &len); + if (serial_prop) { + serial = of_read_number(serial_prop, len / 4); + } + system_serial_high = serial >> 32; + system_serial_low = serial; + + pr_info("Machine: %s, model: %s, serial: %llu\n", mdesc_best->name, + model, serial); /* Retrieve various information from the /chosen node */ of_scan_flat_dt(early_init_dt_scan_chosen, boot_command_line); -- cgit v1.2.3