summaryrefslogtreecommitdiff
path: root/arch
diff options
context:
space:
mode:
authorThilo Jeremias <tjeremias@de.adit-jv.com>2012-07-04 18:19:11 +0200
committerDirk Behme <dirk.behme@gmail.com>2012-11-11 11:42:28 +0100
commit28b17e9f105b2725577e7739c12615aee8267bfa (patch)
treeda4d3c39d747c8a97e48ae64a469bb666100563c /arch
parent83b4ff9f2da07304d44634bdea0ea4bc19b93c87 (diff)
i.MX6: add OTP support
Signed-off-by: Thilo Jeremias <tjeremias@de.adit-jv.com> Signed-off-by: Dirk Behme <dirk.behme@de.bosch.com>
Diffstat (limited to 'arch')
-rw-r--r--arch/arm/cpu/armv7/mx6/clock.c14
-rw-r--r--arch/arm/include/asm/arch-mx6/imx-regs.h18
-rw-r--r--arch/arm/include/asm/arch-mx6/sys_proto.h5
3 files changed, 37 insertions, 0 deletions
diff --git a/arch/arm/cpu/armv7/mx6/clock.c b/arch/arm/cpu/armv7/mx6/clock.c
index a01d96f48e..abbe8c8368 100644
--- a/arch/arm/cpu/armv7/mx6/clock.c
+++ b/arch/arm/cpu/armv7/mx6/clock.c
@@ -49,6 +49,20 @@ void enable_usboh3_clk(unsigned char enable)
__raw_writel(reg, &imx_ccm->CCGR6);
}
+#ifdef CONFIG_IMX_OTP
+void enable_otp_clk(unsigned char enable)
+{
+ u32 reg;
+
+ reg = __raw_readl(&imx_ccm->CCGR2);
+ if (enable)
+ reg |= MXC_CCM_CCGR2_OCOTP_CTRL_MASK;
+ else
+ reg &= ~(MXC_CCM_CCGR2_OCOTP_CTRL_MASK);
+ __raw_writel(reg, &imx_ccm->CCGR2);
+
+}
+#endif
#ifdef CONFIG_I2C_MXC
/* i2c_num can be from 0 - 2 */
diff --git a/arch/arm/include/asm/arch-mx6/imx-regs.h b/arch/arm/include/asm/arch-mx6/imx-regs.h
index 3eb0081ca8..93d1901f45 100644
--- a/arch/arm/include/asm/arch-mx6/imx-regs.h
+++ b/arch/arm/include/asm/arch-mx6/imx-regs.h
@@ -601,5 +601,23 @@ struct iomuxc_base_regs {
u32 daisy[104]; /* 0x7b0..94c */
};
+#define BP_OCOTP_CTRL_WR_UNLOCK 16
+#define BM_OCOTP_CTRL_WR_UNLOCK 0xFFFF0000
+#define BV_OCOTP_CTRL_WR_UNLOCK__KEY 0x3E77
+#define BM_OCOTP_CTRL_RELOAD_SHADOWS 0x00000400
+#define BM_OCOTP_CTRL_ERROR 0x00000200
+#define BM_OCOTP_CTRL_BUSY 0x00000100
+#define BP_OCOTP_CTRL_ADDR 0
+#define BM_OCOTP_CTRL_ADDR 0x0000007F
+
+#define BP_OCOTP_TIMING_STROBE_READ 16
+#define BM_OCOTP_TIMING_STROBE_READ 0x003F0000
+#define BP_OCOTP_TIMING_RELAX 12
+#define BM_OCOTP_TIMING_RELAX 0x0000F000
+#define BP_OCOTP_TIMING_STROBE_PROG 0
+#define BM_OCOTP_TIMING_STROBE_PROG 0x00000FFF
+
+#define BM_OCOTP_READ_CTRL_READ_FUSE 0x00000001
+
#endif /* __ASSEMBLER__*/
#endif /* __ASM_ARCH_MX6_IMX_REGS_H__ */
diff --git a/arch/arm/include/asm/arch-mx6/sys_proto.h b/arch/arm/include/asm/arch-mx6/sys_proto.h
index 3193297610..a3478d4e16 100644
--- a/arch/arm/include/asm/arch-mx6/sys_proto.h
+++ b/arch/arm/include/asm/arch-mx6/sys_proto.h
@@ -46,4 +46,9 @@ void set_vddsoc(u32 mv);
int fecmxc_initialize(bd_t *bis);
u32 get_ahb_clk(void);
u32 get_periph_clk(void);
+
+/* OTP related functionality */
+int imx_otp_read_one_u32(u32, u32 *);
+int imx_otp_blow_one_u32(u32, u32, u32 *);
+void enable_otp_clk(unsigned char);
#endif