* [PATCH v2 1/5] nvmem: imx-ocotp: Elongate OCOTP_CTRL ADDR field to eight bits
2019-04-19 16:48 [PATCH v2 0/5] Add i.MX8MM support Bryan O'Donoghue
@ 2019-04-19 16:48 ` Bryan O'Donoghue
2019-04-19 16:48 ` [PATCH v2 2/5] nvmem: imx-ocotp: Ensure WAIT bits are preserved when setting timing Bryan O'Donoghue
` (3 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Bryan O'Donoghue @ 2019-04-19 16:48 UTC (permalink / raw)
To: l.stach, peng.fan, shawnguo, srinivas.kandagatla, leonard.crestez
Cc: aisheng.dong, abel.vesa, anson.huang, linux-imx, kernel,
fabio.estevam, Bryan O'Donoghue, linux-arm-kernel
i.MX6 and i.MX7 define OCOTP_CTRLn:ADDR bits as a four bit address field
with four reserved bits denoted RSVD0.
i.MX8 defines the OCOTP_CTRLn:ADDR bit-field as a full range eight bits.
i.MX6 and i.MX7 should return zero for the RSVD0 bits and ignore a
write-back of zero where i.MX8 will make use of the full range.
This patch expands the bit-field definition for all users from four bits to
eight bits.
Signed-off-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
---
drivers/nvmem/imx-ocotp.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/drivers/nvmem/imx-ocotp.c b/drivers/nvmem/imx-ocotp.c
index 4cf7b61e4bf5..6600c4ddeb51 100644
--- a/drivers/nvmem/imx-ocotp.c
+++ b/drivers/nvmem/imx-ocotp.c
@@ -45,7 +45,7 @@
#define IMX_OCOTP_ADDR_DATA2 0x0040
#define IMX_OCOTP_ADDR_DATA3 0x0050
-#define IMX_OCOTP_BM_CTRL_ADDR 0x0000007F
+#define IMX_OCOTP_BM_CTRL_ADDR 0x000000FF
#define IMX_OCOTP_BM_CTRL_BUSY 0x00000100
#define IMX_OCOTP_BM_CTRL_ERROR 0x00000200
#define IMX_OCOTP_BM_CTRL_REL_SHADOWS 0x00000400
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 2/5] nvmem: imx-ocotp: Ensure WAIT bits are preserved when setting timing
2019-04-19 16:48 [PATCH v2 0/5] Add i.MX8MM support Bryan O'Donoghue
2019-04-19 16:48 ` [PATCH v2 1/5] nvmem: imx-ocotp: Elongate OCOTP_CTRL ADDR field to eight bits Bryan O'Donoghue
@ 2019-04-19 16:48 ` Bryan O'Donoghue
2019-04-19 16:48 ` [PATCH v2 3/5] nvmem: imx-ocotp: Ensure the RELAX field is non-zero Bryan O'Donoghue
` (2 subsequent siblings)
4 siblings, 0 replies; 6+ messages in thread
From: Bryan O'Donoghue @ 2019-04-19 16:48 UTC (permalink / raw)
To: l.stach, peng.fan, shawnguo, srinivas.kandagatla, leonard.crestez
Cc: aisheng.dong, abel.vesa, anson.huang, linux-imx, kernel,
fabio.estevam, Bryan O'Donoghue, linux-arm-kernel
The i.MX6 and i.MX8 both have a bit-field spanning bits 27:22 called the
WAIT field.
The WAIT field according to the documentation for both parts "specifies
time interval between auto read and write access in one time program. It is
given in number of ipg_clk periods."
This patch ensures that the relevant field is read and written back to the
timing register.
Fixes: 0642bac7da42 ("nvmem: imx-ocotp: add write support")
Signed-off-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
---
drivers/nvmem/imx-ocotp.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/nvmem/imx-ocotp.c b/drivers/nvmem/imx-ocotp.c
index 6600c4ddeb51..85a7d0da3abb 100644
--- a/drivers/nvmem/imx-ocotp.c
+++ b/drivers/nvmem/imx-ocotp.c
@@ -189,7 +189,8 @@ static void imx_ocotp_set_imx6_timing(struct ocotp_priv *priv)
strobe_prog = clk_rate / (1000000000 / 10000) + 2 * (DEF_RELAX + 1) - 1;
strobe_read = clk_rate / (1000000000 / 40) + 2 * (DEF_RELAX + 1) - 1;
- timing = strobe_prog & 0x00000FFF;
+ timing = readl(priv->base + IMX_OCOTP_ADDR_TIMING) & 0x0FC00000;
+ timing |= strobe_prog & 0x00000FFF;
timing |= (relax << 12) & 0x0000F000;
timing |= (strobe_read << 16) & 0x003F0000;
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 3/5] nvmem: imx-ocotp: Ensure the RELAX field is non-zero
2019-04-19 16:48 [PATCH v2 0/5] Add i.MX8MM support Bryan O'Donoghue
2019-04-19 16:48 ` [PATCH v2 1/5] nvmem: imx-ocotp: Elongate OCOTP_CTRL ADDR field to eight bits Bryan O'Donoghue
2019-04-19 16:48 ` [PATCH v2 2/5] nvmem: imx-ocotp: Ensure WAIT bits are preserved when setting timing Bryan O'Donoghue
@ 2019-04-19 16:48 ` Bryan O'Donoghue
2019-04-19 16:48 ` [PATCH v2 4/5] nvmem: imx-ocotp: Add i.MX8MM support Bryan O'Donoghue
2019-04-19 16:48 ` [PATCH v2 5/5] dt-bindings: imx-ocotp: Add i.MX8MM compatible Bryan O'Donoghue
4 siblings, 0 replies; 6+ messages in thread
From: Bryan O'Donoghue @ 2019-04-19 16:48 UTC (permalink / raw)
To: l.stach, peng.fan, shawnguo, srinivas.kandagatla, leonard.crestez
Cc: aisheng.dong, abel.vesa, anson.huang, linux-imx, kernel,
fabio.estevam, Bryan O'Donoghue, linux-arm-kernel
The RELAX field of the OCOTP block quote "specifies the time to add to all
default timing parameters other than the Tpgm and Trd. It is given in
number of ipg_clk periods".
On the i.MX8MM the calculation for the RELAX value is turning out to be
zero which is not a problem for programming OTP values but, does
subsequently mess up reloading the OTP shadow registers.
This patch ensures the RELAX field is at least one ipg_clk cycle, which
seems like a pretty obvious floor to place on a value such as this.
Signed-off-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
---
drivers/nvmem/imx-ocotp.c | 2 ++
1 file changed, 2 insertions(+)
diff --git a/drivers/nvmem/imx-ocotp.c b/drivers/nvmem/imx-ocotp.c
index 85a7d0da3abb..5b625d61e433 100644
--- a/drivers/nvmem/imx-ocotp.c
+++ b/drivers/nvmem/imx-ocotp.c
@@ -186,6 +186,8 @@ static void imx_ocotp_set_imx6_timing(struct ocotp_priv *priv)
clk_rate = clk_get_rate(priv->clk);
relax = clk_rate / (1000000000 / DEF_RELAX) - 1;
+ if (!relax)
+ relax = 1;
strobe_prog = clk_rate / (1000000000 / 10000) + 2 * (DEF_RELAX + 1) - 1;
strobe_read = clk_rate / (1000000000 / 40) + 2 * (DEF_RELAX + 1) - 1;
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 4/5] nvmem: imx-ocotp: Add i.MX8MM support
2019-04-19 16:48 [PATCH v2 0/5] Add i.MX8MM support Bryan O'Donoghue
` (2 preceding siblings ...)
2019-04-19 16:48 ` [PATCH v2 3/5] nvmem: imx-ocotp: Ensure the RELAX field is non-zero Bryan O'Donoghue
@ 2019-04-19 16:48 ` Bryan O'Donoghue
2019-04-19 16:48 ` [PATCH v2 5/5] dt-bindings: imx-ocotp: Add i.MX8MM compatible Bryan O'Donoghue
4 siblings, 0 replies; 6+ messages in thread
From: Bryan O'Donoghue @ 2019-04-19 16:48 UTC (permalink / raw)
To: l.stach, peng.fan, shawnguo, srinivas.kandagatla, leonard.crestez
Cc: aisheng.dong, abel.vesa, anson.huang, linux-imx, kernel,
fabio.estevam, Bryan O'Donoghue, linux-arm-kernel
This patch adds support to burn the fuses on the i.MX8MM.
https://www.nxp.com/webapp/Download?colCode=IMX8MMRM
The i.MX8MM is similar to i.MX6 processors in terms of addressing and clock
setup.
Signed-off-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
---
drivers/nvmem/imx-ocotp.c | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/drivers/nvmem/imx-ocotp.c b/drivers/nvmem/imx-ocotp.c
index 5b625d61e433..08006b07657b 100644
--- a/drivers/nvmem/imx-ocotp.c
+++ b/drivers/nvmem/imx-ocotp.c
@@ -453,6 +453,12 @@ static const struct ocotp_params imx8mq_params = {
.set_timing = imx_ocotp_set_imx7_timing,
};
+static const struct ocotp_params imx8mm_params = {
+ .nregs = 60,
+ .bank_address_words = 0,
+ .set_timing = imx_ocotp_set_imx6_timing,
+};
+
static const struct of_device_id imx_ocotp_dt_ids[] = {
{ .compatible = "fsl,imx6q-ocotp", .data = &imx6q_params },
{ .compatible = "fsl,imx6sl-ocotp", .data = &imx6sl_params },
@@ -463,6 +469,7 @@ static const struct of_device_id imx_ocotp_dt_ids[] = {
{ .compatible = "fsl,imx6sll-ocotp", .data = &imx6sll_params },
{ .compatible = "fsl,imx7ulp-ocotp", .data = &imx7ulp_params },
{ .compatible = "fsl,imx8mq-ocotp", .data = &imx8mq_params },
+ { .compatible = "fsl,imx8mm-ocotp", .data = &imx8mm_params },
{ },
};
MODULE_DEVICE_TABLE(of, imx_ocotp_dt_ids);
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 6+ messages in thread
* [PATCH v2 5/5] dt-bindings: imx-ocotp: Add i.MX8MM compatible
2019-04-19 16:48 [PATCH v2 0/5] Add i.MX8MM support Bryan O'Donoghue
` (3 preceding siblings ...)
2019-04-19 16:48 ` [PATCH v2 4/5] nvmem: imx-ocotp: Add i.MX8MM support Bryan O'Donoghue
@ 2019-04-19 16:48 ` Bryan O'Donoghue
4 siblings, 0 replies; 6+ messages in thread
From: Bryan O'Donoghue @ 2019-04-19 16:48 UTC (permalink / raw)
To: l.stach, peng.fan, shawnguo, srinivas.kandagatla, leonard.crestez
Cc: aisheng.dong, abel.vesa, anson.huang, linux-imx, kernel,
fabio.estevam, Bryan O'Donoghue, linux-arm-kernel
Add compatible for i.MX8MM as per arch/arm64/boot/dts/freescale/imx8mm.dtsi
Signed-off-by: Bryan O'Donoghue <pure.logic@nexus-software.ie>
---
Documentation/devicetree/bindings/nvmem/imx-ocotp.txt | 1 +
1 file changed, 1 insertion(+)
diff --git a/Documentation/devicetree/bindings/nvmem/imx-ocotp.txt b/Documentation/devicetree/bindings/nvmem/imx-ocotp.txt
index 68f7d6fdd140..96ffd06d2ca8 100644
--- a/Documentation/devicetree/bindings/nvmem/imx-ocotp.txt
+++ b/Documentation/devicetree/bindings/nvmem/imx-ocotp.txt
@@ -15,6 +15,7 @@ Required properties:
"fsl,imx6sll-ocotp" (i.MX6SLL),
"fsl,imx7ulp-ocotp" (i.MX7ULP),
"fsl,imx8mq-ocotp" (i.MX8MQ),
+ "fsl,imx8mm-ocotp" (i.MX8MM),
followed by "syscon".
- #address-cells : Should be 1
- #size-cells : Should be 1
--
2.20.1
_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
^ permalink raw reply related [flat|nested] 6+ messages in thread