summaryrefslogtreecommitdiff
path: root/arch/arm/mach-snapdragon/misc.c
diff options
context:
space:
mode:
authorRamon Fried <ramon.fried@gmail.com>2018-08-03 16:25:35 +0300
committerTom Rini <trini@konsulko.com>2018-08-13 14:04:04 -0400
commit86e5e429468310d0f1716a1ebb95159aba3b61b4 (patch)
tree708157e64164c6a07d2d21d5e84f86a4760e35b6 /arch/arm/mach-snapdragon/misc.c
parent8ff21d6d9c26e1aca5a6d0df9a43519d24948f69 (diff)
snapdragon: added msm_board_serial() func
This commit adds a function to get the board serial number. In snapdragon it's actually the eMMC serial number. Function added in a new file misc.c that will include further snapdragon miscellaneous functions. Signed-off-by: Ramon Fried <ramon.fried@gmail.com>
Diffstat (limited to 'arch/arm/mach-snapdragon/misc.c')
-rw-r--r--arch/arm/mach-snapdragon/misc.c37
1 files changed, 37 insertions, 0 deletions
diff --git a/arch/arm/mach-snapdragon/misc.c b/arch/arm/mach-snapdragon/misc.c
new file mode 100644
index 0000000000..678bd69f83
--- /dev/null
+++ b/arch/arm/mach-snapdragon/misc.c
@@ -0,0 +1,37 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Miscellaneous Snapdragon functionality
+ *
+ * (C) Copyright 2018 Ramon Fried <ramon.fried@gmail.com>
+ *
+ */
+
+#include <common.h>
+#include <mmc.h>
+#include <asm/arch/misc.h>
+
+/* UNSTUFF_BITS macro taken from Linux Kernel: drivers/mmc/core/sd.c */
+#define UNSTUFF_BITS(resp, start, size) \
+ ({ \
+ const int __size = size; \
+ const u32 __mask = (__size < 32 ? 1 << __size : 0) - 1; \
+ const int __off = 3 - ((start) / 32); \
+ const int __shft = (start) & 31; \
+ u32 __res; \
+ \
+ __res = resp[__off] >> __shft; \
+ if (__size + __shft > 32) \
+ __res |= resp[__off - 1] << ((32 - __shft) % 32); \
+ __res & __mask; \
+ })
+
+u32 msm_board_serial(void)
+{
+ struct mmc *mmc_dev;
+
+ mmc_dev = find_mmc_device(0);
+ if (!mmc_dev)
+ return 0;
+
+ return UNSTUFF_BITS(mmc_dev->cid, 16, 32);
+}