summaryrefslogtreecommitdiff
path: root/board
diff options
context:
space:
mode:
authorStefan Agner <stefan.agner@toradex.com>2015-05-09 12:29:34 +0200
committerStefan Agner <stefan.agner@toradex.com>2015-05-11 08:26:51 +0200
commit3974fc382adcc18c49228506bf256a7eaa211b06 (patch)
treec3a99945e7e68c9bc183e43f0e9aa473121acfd3 /board
parent0fa5ed9af80300a67c61e750205ff0c44cf516c4 (diff)
toradex: common: set board-rev and product-id
Set board revision and Toradex product ID as device tree property. This transfers the Toradex configblock information to Linux user- space, where it can be read conviniently through the proc file system files: - /proc/device-tree/serial-number - /proc/device-tree/toradex,board-rev - /proc/device-tree/toradex,product-id In case the Toradex config block is missing or corrupted, the device tree properties won't be created by the boot loader and hence those file won't exist in that case.
Diffstat (limited to 'board')
-rw-r--r--board/toradex/common/common.c31
1 files changed, 24 insertions, 7 deletions
diff --git a/board/toradex/common/common.c b/board/toradex/common/common.c
index 0869337baf..ac1b73430b 100644
--- a/board/toradex/common/common.c
+++ b/board/toradex/common/common.c
@@ -10,6 +10,7 @@
#include <libfdt.h>
static char trdx_serial_str[9];
+static char trdx_board_rev_str[6];
__weak int checkboard_fallback(void)
{
@@ -90,6 +91,12 @@ int checkboard(void)
/* board serial-number */
sprintf(trdx_serial_str, "%08u", trdx_serial);
+ sprintf(trdx_board_rev_str, "V%1d.%1d%c",
+ trdx_hw_tag.ver_major,
+ trdx_hw_tag.ver_minor,
+ (char)trdx_hw_tag.ver_assembly + 'A');
+
+
setenv("serial#", trdx_serial_str);
/*
@@ -111,12 +118,10 @@ int checkboard(void)
}
#endif
- printf("Model: Toradex %s V%d.%d%c, Serial# %08u\n",
+ printf("Model: Toradex %s %s, Serial# %s\n",
toradex_modules[trdx_hw_tag.prodid],
- trdx_hw_tag.ver_major,
- trdx_hw_tag.ver_minor,
- (char)trdx_hw_tag.ver_assembly + 'A',
- trdx_serial);
+ trdx_board_rev_str,
+ trdx_serial_str);
#else
checkboard_fallback();
#endif
@@ -141,8 +146,20 @@ int g_dnl_bind_fixup(struct usb_device_descriptor *dev, const char *name)
defined(CONFIG_TRDX_CFG_BLOCK)
int ft_system_setup(void *blob, bd_t *bd)
{
- fdt_setprop(blob, 0, "serial-number", trdx_serial_str,
- strlen(trdx_serial_str) + 1);
+ if (trdx_serial) {
+ fdt_setprop(blob, 0, "serial-number", trdx_serial_str,
+ strlen(trdx_serial_str) + 1);
+ }
+
+ if (trdx_hw_tag.ver_major) {
+ char prod_id[5];
+
+ sprintf(prod_id, "%04u", trdx_hw_tag.prodid);
+ fdt_setprop(blob, 0, "toradex,product-id", prod_id, 5);
+
+ fdt_setprop(blob, 0, "toradex,board-rev", trdx_board_rev_str,
+ strlen(trdx_board_rev_str) + 1);
+ }
return 0;
}