Commit 836fb309 authored by Xiaolei Wang's avatar Xiaolei Wang Committed by Shawn Guo

soc: imx8m: Enable OCOTP clock before reading the register

Commit 7d981405 ("soc: imx8m: change to use platform driver") ever
removed the dependency on bootloader for enabling OCOTP clock.  It
helped to fix a kexec kernel hang issue.  But unfortunately it caused
a regression on CAAM driver and got reverted.

This is the second try to enable the OCOTP clock by directly calling
clock API instead of indirectly enabling the clock via nvmem API.

Fixes: ac34de14 ("Revert "soc: imx8m: change to use platform driver"")
Signed-off-by: default avatarXiaolei Wang <xiaolei.wang@windriver.com>
Reviewed-by: default avatarLucas Stach <l.stach@pengutronix.de>
Signed-off-by: default avatarShawn Guo <shawnguo@kernel.org>
parent 2db1fdb2
...@@ -11,6 +11,7 @@ ...@@ -11,6 +11,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/arm-smccc.h> #include <linux/arm-smccc.h>
#include <linux/of.h> #include <linux/of.h>
#include <linux/clk.h>
#define REV_B1 0x21 #define REV_B1 0x21
...@@ -56,6 +57,7 @@ static u32 __init imx8mq_soc_revision(void) ...@@ -56,6 +57,7 @@ static u32 __init imx8mq_soc_revision(void)
void __iomem *ocotp_base; void __iomem *ocotp_base;
u32 magic; u32 magic;
u32 rev; u32 rev;
struct clk *clk;
np = of_find_compatible_node(NULL, NULL, "fsl,imx8mq-ocotp"); np = of_find_compatible_node(NULL, NULL, "fsl,imx8mq-ocotp");
if (!np) if (!np)
...@@ -63,6 +65,13 @@ static u32 __init imx8mq_soc_revision(void) ...@@ -63,6 +65,13 @@ static u32 __init imx8mq_soc_revision(void)
ocotp_base = of_iomap(np, 0); ocotp_base = of_iomap(np, 0);
WARN_ON(!ocotp_base); WARN_ON(!ocotp_base);
clk = of_clk_get_by_name(np, NULL);
if (!clk) {
WARN_ON(!clk);
return 0;
}
clk_prepare_enable(clk);
/* /*
* SOC revision on older imx8mq is not available in fuses so query * SOC revision on older imx8mq is not available in fuses so query
...@@ -79,6 +88,8 @@ static u32 __init imx8mq_soc_revision(void) ...@@ -79,6 +88,8 @@ static u32 __init imx8mq_soc_revision(void)
soc_uid <<= 32; soc_uid <<= 32;
soc_uid |= readl_relaxed(ocotp_base + OCOTP_UID_LOW); soc_uid |= readl_relaxed(ocotp_base + OCOTP_UID_LOW);
clk_disable_unprepare(clk);
clk_put(clk);
iounmap(ocotp_base); iounmap(ocotp_base);
of_node_put(np); of_node_put(np);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment