summaryrefslogtreecommitdiffstats
path: root/drivers/soc
diff options
context:
space:
mode:
authorJules Maselbas <jmaselbas@kalray.eu>2023-07-11 11:11:23 +0200
committerSascha Hauer <s.hauer@pengutronix.de>2023-07-26 14:21:21 +0200
commit588bf1f37b4662a754d7da93d865bd7b8f9f9cce (patch)
tree5a48199e8fa26ec2ad9c5974be1c8a349ae5a52c /drivers/soc
parent91bc3a16b4bd3e27c9fb8322f4a2ab0d64cdbd33 (diff)
downloadbarebox-588bf1f37b4662a754d7da93d865bd7b8f9f9cce.tar.gz
barebox-588bf1f37b4662a754d7da93d865bd7b8f9f9cce.tar.xz
soc: kvx: Add board_sn global var from OTP
Add the magic variable "kvx.board_sn" that will reflect the board serial number stored in OTP. Signed-off-by: Jules Maselbas <jmaselbas@kalray.eu> Link: https://lore.barebox.org/20230711091123.19111-3-jmaselbas@kalray.eu Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'drivers/soc')
-rw-r--r--drivers/soc/kvx/kvx_socinfo.c33
1 files changed, 32 insertions, 1 deletions
diff --git a/drivers/soc/kvx/kvx_socinfo.c b/drivers/soc/kvx/kvx_socinfo.c
index 544f5dbd37..87c20c327b 100644
--- a/drivers/soc/kvx/kvx_socinfo.c
+++ b/drivers/soc/kvx/kvx_socinfo.c
@@ -33,9 +33,11 @@
static char *kvx_mppa_id;
static char *kvx_arch_rev;
+static char *kvx_board_sn;
BAREBOX_MAGICVAR(kvx.arch_rev, "KVX architecture revision");
BAREBOX_MAGICVAR(kvx.mppa_id, "KVX MPPA chip id");
+BAREBOX_MAGICVAR(kvx.board_sn, "KVX board sn");
static void kvx_soc_info_read_revision(void)
{
@@ -123,11 +125,40 @@ static int kvx_read_mppa_id(struct device_node *socinfo)
return 0;
}
+static int kvx_read_board_sn(struct device_node *socinfo)
+{
+ struct nvmem_cell *cell;
+ size_t len;
+ char *sn;
+
+ cell = of_nvmem_cell_get(socinfo, "board_sn");
+ if (IS_ERR(cell)) {
+ pr_debug("Fail to get board_sn cell\n");
+ return PTR_ERR(cell);
+ }
+
+ sn = (char *)nvmem_cell_read(cell, &len);
+ nvmem_cell_put(cell);
+ if (IS_ERR(sn)) {
+ pr_debug("Fail to read board_sn\n");
+ return PTR_ERR(sn);
+ }
+
+ kvx_board_sn = xzalloc(len + 1);
+ memcpy(kvx_board_sn, sn, len);
+ globalvar_add_simple_string("kvx.board_sn", &kvx_board_sn);
+ free(sn);
+
+ return 0;
+}
+
static int kvx_socinfo_probe(struct device *dev)
{
kvx_soc_info_read_revision();
- return kvx_read_mppa_id(dev->of_node);
+ kvx_read_board_sn(dev->device_node);
+
+ return kvx_read_mppa_id(dev->device_node);
}
static const struct of_device_id kvx_socinfo_dt_ids[] = {