2 * i.MX6 OCOTP fusebox driver
4 * Copyright (c) 2015 Pengutronix, Philipp Zabel <p.zabel@pengutronix.de>
6 * Based on the barebox ocotp driver,
7 * Copyright (c) 2010 Baruch Siach <baruch@tkos.co.il>,
8 * Orex Computed Radiography
10 * Write support based on the fsl_otp driver,
11 * Copyright (C) 2010-2013 Freescale Semiconductor, Inc
13 * This program is free software; you can redistribute it and/or modify
14 * it under the terms of the GNU General Public License version 2
15 * as published by the Free Software Foundation.
17 * http://www.opensource.org/licenses/gpl-license.html
18 * http://www.gnu.org/copyleft/gpl.html
21 #include <linux/clk.h>
22 #include <linux/device.h>
24 #include <linux/module.h>
25 #include <linux/nvmem-provider.h>
27 #include <linux/of_device.h>
28 #include <linux/platform_device.h>
29 #include <linux/slab.h>
30 #include <linux/delay.h>
32 #define IMX_OCOTP_OFFSET_B0W0 0x400 /* Offset from base address of the
35 #define IMX_OCOTP_OFFSET_PER_WORD 0x10 /* Offset between the start addr
36 * of two consecutive OTP words.
39 #define IMX_OCOTP_ADDR_CTRL 0x0000
40 #define IMX_OCOTP_ADDR_CTRL_SET 0x0004
41 #define IMX_OCOTP_ADDR_CTRL_CLR 0x0008
42 #define IMX_OCOTP_ADDR_TIMING 0x0010
43 #define IMX_OCOTP_ADDR_DATA0 0x0020
44 #define IMX_OCOTP_ADDR_DATA1 0x0030
45 #define IMX_OCOTP_ADDR_DATA2 0x0040
46 #define IMX_OCOTP_ADDR_DATA3 0x0050
48 #define IMX_OCOTP_BM_CTRL_ADDR 0x0000007F
49 #define IMX_OCOTP_BM_CTRL_BUSY 0x00000100
50 #define IMX_OCOTP_BM_CTRL_ERROR 0x00000200
51 #define IMX_OCOTP_BM_CTRL_REL_SHADOWS 0x00000400
53 #define DEF_RELAX 20 /* > 16.5ns */
54 #define DEF_FSOURCE 1001 /* > 1000 ns */
55 #define DEF_STROBE_PROG 10000 /* IPG clocks */
56 #define IMX_OCOTP_WR_UNLOCK 0x3E770000
57 #define IMX_OCOTP_READ_LOCKED_VAL 0xBADABADA
59 static DEFINE_MUTEX(ocotp_mutex
);
65 const struct ocotp_params
*params
;
66 struct nvmem_config
*config
;
71 unsigned int bank_address_words
;
72 void (*set_timing
)(struct ocotp_priv
*priv
);
75 static int imx_ocotp_wait_for_busy(void __iomem
*base
, u32 flags
)
80 mask
= IMX_OCOTP_BM_CTRL_BUSY
| IMX_OCOTP_BM_CTRL_ERROR
| flags
;
82 for (count
= 10000; count
>= 0; count
--) {
83 c
= readl(base
+ IMX_OCOTP_ADDR_CTRL
);
90 /* HW_OCOTP_CTRL[ERROR] will be set under the following
92 * - A write is performed to a shadow register during a shadow
93 * reload (essentially, while HW_OCOTP_CTRL[RELOAD_SHADOWS] is
94 * set. In addition, the contents of the shadow register shall
96 * - A write is performed to a shadow register which has been
98 * - A read is performed to from a shadow register which has
100 * - A program is performed to a fuse word which has been locked
101 * - A read is performed to from a fuse word which has been read
104 if (c
& IMX_OCOTP_BM_CTRL_ERROR
)
112 static void imx_ocotp_clr_err_if_set(void __iomem
*base
)
116 c
= readl(base
+ IMX_OCOTP_ADDR_CTRL
);
117 if (!(c
& IMX_OCOTP_BM_CTRL_ERROR
))
120 writel(IMX_OCOTP_BM_CTRL_ERROR
, base
+ IMX_OCOTP_ADDR_CTRL_CLR
);
123 static int imx_ocotp_read(void *context
, unsigned int offset
,
124 void *val
, size_t bytes
)
126 struct ocotp_priv
*priv
= context
;
135 if (count
> (priv
->params
->nregs
- index
))
136 count
= priv
->params
->nregs
- index
;
138 mutex_lock(&ocotp_mutex
);
140 ret
= clk_prepare_enable(priv
->clk
);
142 mutex_unlock(&ocotp_mutex
);
143 dev_err(priv
->dev
, "failed to prepare/enable ocotp clk\n");
147 ret
= imx_ocotp_wait_for_busy(priv
->base
, 0);
149 dev_err(priv
->dev
, "timeout during read setup\n");
153 for (i
= index
; i
< (index
+ count
); i
++) {
154 *buf
++ = readl(priv
->base
+ IMX_OCOTP_OFFSET_B0W0
+
155 i
* IMX_OCOTP_OFFSET_PER_WORD
);
158 * For "read locked" registers 0xBADABADA will be returned and
159 * HW_OCOTP_CTRL[ERROR] will be set. It must be cleared by
160 * software before any new write, read or reload access can be
163 if (*(buf
- 1) == IMX_OCOTP_READ_LOCKED_VAL
)
164 imx_ocotp_clr_err_if_set(priv
->base
);
169 clk_disable_unprepare(priv
->clk
);
170 mutex_unlock(&ocotp_mutex
);
174 static void imx_ocotp_set_imx6_timing(struct ocotp_priv
*priv
)
176 unsigned long clk_rate
= 0;
177 unsigned long strobe_read
, relax
, strobe_prog
;
181 * Program HW_OCOTP_TIMING[STROBE_PROG] and HW_OCOTP_TIMING[RELAX]
182 * fields with timing values to match the current frequency of the
183 * ipg_clk. OTP writes will work at maximum bus frequencies as long
184 * as the HW_OCOTP_TIMING parameters are set correctly.
186 clk_rate
= clk_get_rate(priv
->clk
);
188 relax
= clk_rate
/ (1000000000 / DEF_RELAX
) - 1;
189 strobe_prog
= clk_rate
/ (1000000000 / 10000) + 2 * (DEF_RELAX
+ 1) - 1;
190 strobe_read
= clk_rate
/ (1000000000 / 40) + 2 * (DEF_RELAX
+ 1) - 1;
192 timing
= strobe_prog
& 0x00000FFF;
193 timing
|= (relax
<< 12) & 0x0000F000;
194 timing
|= (strobe_read
<< 16) & 0x003F0000;
196 writel(timing
, priv
->base
+ IMX_OCOTP_ADDR_TIMING
);
199 static void imx_ocotp_set_imx7_timing(struct ocotp_priv
*priv
)
201 unsigned long clk_rate
= 0;
202 u64 fsource
, strobe_prog
;
205 /* i.MX 7Solo Applications Processor Reference Manual, Rev. 0.1
208 clk_rate
= clk_get_rate(priv
->clk
);
209 fsource
= DIV_ROUND_UP_ULL((u64
)clk_rate
* DEF_FSOURCE
,
211 strobe_prog
= DIV_ROUND_CLOSEST_ULL((u64
)clk_rate
* DEF_STROBE_PROG
,
214 timing
= strobe_prog
& 0x00000FFF;
215 timing
|= (fsource
<< 12) & 0x000FF000;
217 writel(timing
, priv
->base
+ IMX_OCOTP_ADDR_TIMING
);
220 static int imx_ocotp_write(void *context
, unsigned int offset
, void *val
,
223 struct ocotp_priv
*priv
= context
;
231 /* allow only writing one complete OTP word at a time */
232 if ((bytes
!= priv
->config
->word_size
) ||
233 (offset
% priv
->config
->word_size
))
236 mutex_lock(&ocotp_mutex
);
238 ret
= clk_prepare_enable(priv
->clk
);
240 mutex_unlock(&ocotp_mutex
);
241 dev_err(priv
->dev
, "failed to prepare/enable ocotp clk\n");
245 /* Setup the write timing values */
246 priv
->params
->set_timing(priv
);
249 * Check that HW_OCOTP_CTRL[BUSY] and HW_OCOTP_CTRL[ERROR] are clear.
250 * Overlapped accesses are not supported by the controller. Any pending
251 * write or reload must be completed before a write access can be
254 ret
= imx_ocotp_wait_for_busy(priv
->base
, 0);
256 dev_err(priv
->dev
, "timeout during timing setup\n");
261 * Write the requested address to HW_OCOTP_CTRL[ADDR] and program the
262 * unlock code into HW_OCOTP_CTRL[WR_UNLOCK]. This must be programmed
263 * for each write access. The lock code is documented in the register
264 * description. Both the unlock code and address can be written in the
267 if (priv
->params
->bank_address_words
!= 0) {
269 * In banked/i.MX7 mode the OTP register bank goes into waddr
270 * see i.MX 7Solo Applications Processor Reference Manual, Rev.
271 * 0.1 section 6.4.3.1
273 offset
= offset
/ priv
->config
->word_size
;
274 waddr
= offset
/ priv
->params
->bank_address_words
;
275 word
= offset
& (priv
->params
->bank_address_words
- 1);
278 * Non-banked i.MX6 mode.
279 * OTP write/read address specifies one of 128 word address
285 ctrl
= readl(priv
->base
+ IMX_OCOTP_ADDR_CTRL
);
286 ctrl
&= ~IMX_OCOTP_BM_CTRL_ADDR
;
287 ctrl
|= waddr
& IMX_OCOTP_BM_CTRL_ADDR
;
288 ctrl
|= IMX_OCOTP_WR_UNLOCK
;
290 writel(ctrl
, priv
->base
+ IMX_OCOTP_ADDR_CTRL
);
293 * Write the data to the HW_OCOTP_DATA register. This will automatically
294 * set HW_OCOTP_CTRL[BUSY] and clear HW_OCOTP_CTRL[WR_UNLOCK]. To
295 * protect programming same OTP bit twice, before program OCOTP will
296 * automatically read fuse value in OTP and use read value to mask
297 * program data. The controller will use masked program data to program
298 * a 32-bit word in the OTP per the address in HW_OCOTP_CTRL[ADDR]. Bit
299 * fields with 1's will result in that OTP bit being programmed. Bit
300 * fields with 0's will be ignored. At the same time that the write is
301 * accepted, the controller makes an internal copy of
302 * HW_OCOTP_CTRL[ADDR] which cannot be updated until the next write
303 * sequence is initiated. This copy guarantees that erroneous writes to
304 * HW_OCOTP_CTRL[ADDR] will not affect an active write operation. It
305 * should also be noted that during the programming HW_OCOTP_DATA will
306 * shift right (with zero fill). This shifting is required to program
307 * the OTP serially. During the write operation, HW_OCOTP_DATA cannot be
309 * Note: on i.MX7 there are four data fields to write for banked write
310 * with the fuse blowing operation only taking place after data0
311 * has been written. This is why data0 must always be the last
314 if (priv
->params
->bank_address_words
!= 0) {
315 /* Banked/i.MX7 mode */
318 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA1
);
319 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA2
);
320 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA3
);
321 writel(*buf
, priv
->base
+ IMX_OCOTP_ADDR_DATA0
);
324 writel(*buf
, priv
->base
+ IMX_OCOTP_ADDR_DATA1
);
325 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA2
);
326 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA3
);
327 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA0
);
330 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA1
);
331 writel(*buf
, priv
->base
+ IMX_OCOTP_ADDR_DATA2
);
332 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA3
);
333 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA0
);
336 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA1
);
337 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA2
);
338 writel(*buf
, priv
->base
+ IMX_OCOTP_ADDR_DATA3
);
339 writel(0, priv
->base
+ IMX_OCOTP_ADDR_DATA0
);
343 /* Non-banked i.MX6 mode */
344 writel(*buf
, priv
->base
+ IMX_OCOTP_ADDR_DATA0
);
348 * Once complete, the controller will clear BUSY. A write request to a
349 * protected or locked region will result in no OTP access and no
350 * setting of HW_OCOTP_CTRL[BUSY]. In addition HW_OCOTP_CTRL[ERROR] will
351 * be set. It must be cleared by software before any new write access
354 ret
= imx_ocotp_wait_for_busy(priv
->base
, 0);
357 dev_err(priv
->dev
, "failed write to locked region");
358 imx_ocotp_clr_err_if_set(priv
->base
);
360 dev_err(priv
->dev
, "timeout during data write\n");
366 * Write Postamble: Due to internal electrical characteristics of the
367 * OTP during writes, all OTP operations following a write must be
368 * separated by 2 us after the clearing of HW_OCOTP_CTRL_BUSY following
373 /* reload all shadow registers */
374 writel(IMX_OCOTP_BM_CTRL_REL_SHADOWS
,
375 priv
->base
+ IMX_OCOTP_ADDR_CTRL_SET
);
376 ret
= imx_ocotp_wait_for_busy(priv
->base
,
377 IMX_OCOTP_BM_CTRL_REL_SHADOWS
);
379 dev_err(priv
->dev
, "timeout during shadow register reload\n");
384 clk_disable_unprepare(priv
->clk
);
385 mutex_unlock(&ocotp_mutex
);
391 static struct nvmem_config imx_ocotp_nvmem_config
= {
396 .reg_read
= imx_ocotp_read
,
397 .reg_write
= imx_ocotp_write
,
400 static const struct ocotp_params imx6q_params
= {
402 .bank_address_words
= 0,
403 .set_timing
= imx_ocotp_set_imx6_timing
,
406 static const struct ocotp_params imx6sl_params
= {
408 .bank_address_words
= 0,
409 .set_timing
= imx_ocotp_set_imx6_timing
,
412 static const struct ocotp_params imx6sx_params
= {
414 .bank_address_words
= 0,
415 .set_timing
= imx_ocotp_set_imx6_timing
,
418 static const struct ocotp_params imx6ul_params
= {
420 .bank_address_words
= 0,
421 .set_timing
= imx_ocotp_set_imx6_timing
,
424 static const struct ocotp_params imx7d_params
= {
426 .bank_address_words
= 4,
427 .set_timing
= imx_ocotp_set_imx7_timing
,
430 static const struct of_device_id imx_ocotp_dt_ids
[] = {
431 { .compatible
= "fsl,imx6q-ocotp", .data
= &imx6q_params
},
432 { .compatible
= "fsl,imx6sl-ocotp", .data
= &imx6sl_params
},
433 { .compatible
= "fsl,imx6sx-ocotp", .data
= &imx6sx_params
},
434 { .compatible
= "fsl,imx6ul-ocotp", .data
= &imx6ul_params
},
435 { .compatible
= "fsl,imx7d-ocotp", .data
= &imx7d_params
},
438 MODULE_DEVICE_TABLE(of
, imx_ocotp_dt_ids
);
440 static int imx_ocotp_probe(struct platform_device
*pdev
)
442 const struct of_device_id
*of_id
;
443 struct device
*dev
= &pdev
->dev
;
444 struct resource
*res
;
445 struct ocotp_priv
*priv
;
446 struct nvmem_device
*nvmem
;
448 priv
= devm_kzalloc(dev
, sizeof(*priv
), GFP_KERNEL
);
454 res
= platform_get_resource(pdev
, IORESOURCE_MEM
, 0);
455 priv
->base
= devm_ioremap_resource(dev
, res
);
456 if (IS_ERR(priv
->base
))
457 return PTR_ERR(priv
->base
);
459 priv
->clk
= devm_clk_get(dev
, NULL
);
460 if (IS_ERR(priv
->clk
))
461 return PTR_ERR(priv
->clk
);
463 of_id
= of_match_device(imx_ocotp_dt_ids
, dev
);
464 priv
->params
= of_device_get_match_data(&pdev
->dev
);
465 imx_ocotp_nvmem_config
.size
= 4 * priv
->params
->nregs
;
466 imx_ocotp_nvmem_config
.dev
= dev
;
467 imx_ocotp_nvmem_config
.priv
= priv
;
468 priv
->config
= &imx_ocotp_nvmem_config
;
469 nvmem
= nvmem_register(&imx_ocotp_nvmem_config
);
472 return PTR_ERR(nvmem
);
474 platform_set_drvdata(pdev
, nvmem
);
479 static int imx_ocotp_remove(struct platform_device
*pdev
)
481 struct nvmem_device
*nvmem
= platform_get_drvdata(pdev
);
483 return nvmem_unregister(nvmem
);
486 static struct platform_driver imx_ocotp_driver
= {
487 .probe
= imx_ocotp_probe
,
488 .remove
= imx_ocotp_remove
,
491 .of_match_table
= imx_ocotp_dt_ids
,
494 module_platform_driver(imx_ocotp_driver
);
496 MODULE_AUTHOR("Philipp Zabel <p.zabel@pengutronix.de>");
497 MODULE_DESCRIPTION("i.MX6/i.MX7 OCOTP fuse box driver");
498 MODULE_LICENSE("GPL v2");