summaryrefslogtreecommitdiff
path: root/arch/arm/mach-imx
diff options
context:
space:
mode:
authorMax Krummenacher <max.krummenacher@toradex.com>2017-08-21 20:49:44 +0200
committerMarcel Ziswiler <marcel.ziswiler@toradex.com>2018-12-24 01:27:29 +0100
commit5cb5d3bdac76a88e2d546a89f5c74436a70b887b (patch)
treec82ad431adeef15c8575cc4ea8fc5964ca93255b /arch/arm/mach-imx
parent01da7f02df0c3a3a8359cb9cbc8ac928fa736582 (diff)
imx: Fix 'Expose SoC unique ID' for newer i.MX6
i.MX6 SL/UL/ULL use a different node in the device tree for with ocotp. So change to the relevant compatible string for these SoCs. Signed-off-by: Max Krummenacher <max.krummenacher@toradex.com> Acked-by: Stefan Agner <stefan.agner@toradex.com> (cherry picked from commit 7b02a99744e495f630bdb5081c516d40e8112685)
Diffstat (limited to 'arch/arm/mach-imx')
-rw-r--r--arch/arm/mach-imx/cpu.c23
1 files changed, 19 insertions, 4 deletions
diff --git a/arch/arm/mach-imx/cpu.c b/arch/arm/mach-imx/cpu.c
index f08b97e0ddab..7a08bb59e0fd 100644
--- a/arch/arm/mach-imx/cpu.c
+++ b/arch/arm/mach-imx/cpu.c
@@ -77,24 +77,39 @@ static unsigned long long __init imx_get_soc_uid(void)
void __iomem *ocotp_base;
u64 uid = 0ull;
- if (__mxc_cpu_type == MXC_CPU_IMX6SL || __mxc_cpu_type == MXC_CPU_IMX6DL ||
- __mxc_cpu_type == MXC_CPU_IMX6SX || __mxc_cpu_type == MXC_CPU_IMX6Q ||
- __mxc_cpu_type == MXC_CPU_IMX6UL || __mxc_cpu_type == MXC_CPU_IMX6ULL) {
+ if (__mxc_cpu_type == MXC_CPU_IMX6DL || __mxc_cpu_type == MXC_CPU_IMX6SX ||
+ __mxc_cpu_type == MXC_CPU_IMX6Q) {
np = of_find_compatible_node(NULL, NULL, "fsl,imx6q-ocotp");
+ } else if (__mxc_cpu_type == MXC_CPU_IMX6SL) {
+ np = of_find_compatible_node(NULL, NULL, "fsl,imx6sl-ocotp");
+ } else if (__mxc_cpu_type == MXC_CPU_IMX6UL) {
+ np = of_find_compatible_node(NULL, NULL, "fsl,imx6ul-ocotp");
+ } else if (__mxc_cpu_type == MXC_CPU_IMX6ULL) {
+ np = of_find_compatible_node(NULL, NULL, "fsl,imx6ull-ocotp");;
} else if (__mxc_cpu_type == MXC_CPU_IMX7D) {
np = of_find_compatible_node(NULL, NULL, "fsl,imx7d-ocotp");
} else {
return uid;
}
+ if (!np) {
+ pr_warn("failed to find ocotp node\n");
+ return uid;
+ }
+
ocotp_base = of_iomap(np, 0);
- WARN_ON(!ocotp_base);
+ if (!ocotp_base) {
+ pr_warn("failed to map ocotp\n");
+ goto put_node;
+ }
uid = readl_relaxed(ocotp_base + 0x420);
uid = (uid << 0x20);
uid |= readl_relaxed(ocotp_base + 0x410);
iounmap(ocotp_base);
+
+put_node:
of_node_put(np);
return uid;