* [PATCH 0/2] nvmem: rockchip-efuse: add support for rk3328-efuse
@ 2017-07-06 7:36 Finley Xiao
2017-07-06 7:36 ` [PATCH 1/2] nvmem: rockchip-efuse: parse 'rockchip,efuse-size' Finley Xiao
2017-07-06 7:36 ` [PATCH 2/2] nvmem: rockchip-efuse: add support for rk3328-efuse Finley Xiao
0 siblings, 2 replies; 5+ messages in thread
From: Finley Xiao @ 2017-07-06 7:36 UTC (permalink / raw)
To: srinivas.kandagatla, robh+dt, mark.rutland, heiko
Cc: linux-arm-kernel, linux-rockchip, devicetree, linux-kernel,
jay.xu, huangtao, tony.xie, cl, Finley Xiao
Add a new property to define eFuse size and add the necessary data
for handling eFuse on the rk3328.
Finley Xiao (2):
nvmem: rockchip-efuse: parse 'rockchip,efuse-size'
nvmem: rockchip-efuse: add support for rk3328-efuse
.../devicetree/bindings/nvmem/rockchip-efuse.txt | 5 ++
drivers/nvmem/rockchip-efuse.c | 70 +++++++++++++++++++++-
2 files changed, 74 insertions(+), 1 deletion(-)
--
2.7.4
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH 1/2] nvmem: rockchip-efuse: parse 'rockchip,efuse-size'
2017-07-06 7:36 [PATCH 0/2] nvmem: rockchip-efuse: add support for rk3328-efuse Finley Xiao
@ 2017-07-06 7:36 ` Finley Xiao
2017-07-10 1:26 ` Rob Herring
2017-07-06 7:36 ` [PATCH 2/2] nvmem: rockchip-efuse: add support for rk3328-efuse Finley Xiao
1 sibling, 1 reply; 5+ messages in thread
From: Finley Xiao @ 2017-07-06 7:36 UTC (permalink / raw)
To: srinivas.kandagatla, robh+dt, mark.rutland, heiko
Cc: linux-arm-kernel, linux-rockchip, devicetree, linux-kernel,
jay.xu, huangtao, tony.xie, cl, Finley Xiao
The eFuse size is defined in property <reg> before, but the length
of registers is not equal to the size on some platforms, so we
add a new property to redefine it.
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
---
Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt | 4 ++++
drivers/nvmem/rockchip-efuse.c | 4 +++-
2 files changed, 7 insertions(+), 1 deletion(-)
diff --git a/Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt b/Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt
index 194926f..d206aa1 100644
--- a/Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt
+++ b/Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt
@@ -11,6 +11,10 @@ Required properties:
- clocks: Should be the clock id of eFuse
- clock-names: Should be "pclk_efuse"
+Optional properties:
+- rockchip,efuse-size: Should be exact eFuse size in byte, the eFuse
+ size in property <reg> will be invalid if define this property.
+
Deprecated properties:
- compatible: "rockchip,rockchip-efuse"
Old efuse compatible value compatible to rk3066a, rk3188 and rk3288
diff --git a/drivers/nvmem/rockchip-efuse.c b/drivers/nvmem/rockchip-efuse.c
index a0d4ede..8e3e5d0 100644
--- a/drivers/nvmem/rockchip-efuse.c
+++ b/drivers/nvmem/rockchip-efuse.c
@@ -214,7 +214,9 @@ static int rockchip_efuse_probe(struct platform_device *pdev)
return PTR_ERR(efuse->clk);
efuse->dev = &pdev->dev;
- econfig.size = resource_size(res);
+ if (of_property_read_u32(dev->of_node, "rockchip,efuse-size",
+ &econfig.size))
+ econfig.size = resource_size(res);
econfig.reg_read = match->data;
econfig.priv = efuse;
econfig.dev = efuse->dev;
--
2.7.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH 2/2] nvmem: rockchip-efuse: add support for rk3328-efuse
2017-07-06 7:36 [PATCH 0/2] nvmem: rockchip-efuse: add support for rk3328-efuse Finley Xiao
2017-07-06 7:36 ` [PATCH 1/2] nvmem: rockchip-efuse: parse 'rockchip,efuse-size' Finley Xiao
@ 2017-07-06 7:36 ` Finley Xiao
2017-07-10 1:26 ` Rob Herring
1 sibling, 1 reply; 5+ messages in thread
From: Finley Xiao @ 2017-07-06 7:36 UTC (permalink / raw)
To: srinivas.kandagatla, robh+dt, mark.rutland, heiko
Cc: linux-arm-kernel, linux-rockchip, devicetree, linux-kernel,
jay.xu, huangtao, tony.xie, cl, Finley Xiao
This adds the necessary data for handling eFuse on the rk3328.
Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
---
.../devicetree/bindings/nvmem/rockchip-efuse.txt | 1 +
drivers/nvmem/rockchip-efuse.c | 66 ++++++++++++++++++++++
2 files changed, 67 insertions(+)
diff --git a/Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt b/Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt
index d206aa1..7a817c5 100644
--- a/Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt
+++ b/Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt
@@ -6,6 +6,7 @@ Required properties:
- "rockchip,rk3188-efuse" - for RK3188 SoCs.
- "rockchip,rk322x-efuse" - for RK322x SoCs.
- "rockchip,rk3288-efuse" - for RK3288 SoCs.
+ - "rockchip,rk3328-efuse" - for RK3328 SoCs.
- "rockchip,rk3399-efuse" - for RK3399 SoCs.
- reg: Should contain the registers location and exact eFuse size
- clocks: Should be the clock id of eFuse
diff --git a/drivers/nvmem/rockchip-efuse.c b/drivers/nvmem/rockchip-efuse.c
index 8e3e5d0..70c2d64 100644
--- a/drivers/nvmem/rockchip-efuse.c
+++ b/drivers/nvmem/rockchip-efuse.c
@@ -32,6 +32,14 @@
#define RK3288_STROBE BIT(1)
#define RK3288_CSB BIT(0)
+#define RK3328_SECURE_SIZES 96
+#define RK3328_INT_STATUS 0x0018
+#define RK3328_DOUT 0x0020
+#define RK3328_AUTO_CTRL 0x0024
+#define RK3328_INT_FINISH BIT(0)
+#define RK3328_AUTO_ENB BIT(0)
+#define RK3328_AUTO_RD BIT(1)
+
#define RK3399_A_SHIFT 16
#define RK3399_A_MASK 0x3ff
#define RK3399_NBYTES 4
@@ -92,6 +100,60 @@ static int rockchip_rk3288_efuse_read(void *context, unsigned int offset,
return 0;
}
+static int rockchip_rk3328_efuse_read(void *context, unsigned int offset,
+ void *val, size_t bytes)
+{
+ struct rockchip_efuse_chip *efuse = context;
+ unsigned int addr_start, addr_end, addr_offset, addr_len;
+ u32 out_value, status;
+ u8 *buf;
+ int ret, i = 0;
+
+ ret = clk_prepare_enable(efuse->clk);
+ if (ret < 0) {
+ dev_err(efuse->dev, "failed to prepare/enable efuse clk\n");
+ return ret;
+ }
+
+ /* 128 Byte efuse, 96 Byte for secure, 32 Byte for non-secure */
+ offset += RK3328_SECURE_SIZES;
+ addr_start = rounddown(offset, RK3399_NBYTES) / RK3399_NBYTES;
+ addr_end = roundup(offset + bytes, RK3399_NBYTES) / RK3399_NBYTES;
+ addr_offset = offset % RK3399_NBYTES;
+ addr_len = addr_end - addr_start;
+
+ buf = kzalloc(sizeof(*buf) * addr_len * RK3399_NBYTES, GFP_KERNEL);
+ if (!buf) {
+ ret = -ENOMEM;
+ goto nomem;
+ }
+
+ while (addr_len--) {
+ writel(RK3328_AUTO_RD | RK3328_AUTO_ENB |
+ ((addr_start++ & RK3399_A_MASK) << RK3399_A_SHIFT),
+ efuse->base + RK3328_AUTO_CTRL);
+ udelay(2);
+ status = readl(efuse->base + RK3328_INT_STATUS);
+ if (!(status & RK3328_INT_FINISH)) {
+ ret = -EIO;
+ goto err;
+ }
+ out_value = readl(efuse->base + RK3328_DOUT);
+ writel(RK3328_INT_FINISH, efuse->base + RK3328_INT_STATUS);
+
+ memcpy(&buf[i], &out_value, RK3399_NBYTES);
+ i += RK3399_NBYTES;
+ }
+
+ memcpy(val, buf + addr_offset, bytes);
+err:
+ kfree(buf);
+nomem:
+ clk_disable_unprepare(efuse->clk);
+
+ return ret;
+}
+
static int rockchip_rk3399_efuse_read(void *context, unsigned int offset,
void *val, size_t bytes)
{
@@ -178,6 +240,10 @@ static const struct of_device_id rockchip_efuse_match[] = {
.data = (void *)&rockchip_rk3288_efuse_read,
},
{
+ .compatible = "rockchip,rk3328-efuse",
+ .data = (void *)&rockchip_rk3328_efuse_read,
+ },
+ {
.compatible = "rockchip,rk3399-efuse",
.data = (void *)&rockchip_rk3399_efuse_read,
},
--
2.7.4
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH 1/2] nvmem: rockchip-efuse: parse 'rockchip,efuse-size'
2017-07-06 7:36 ` [PATCH 1/2] nvmem: rockchip-efuse: parse 'rockchip,efuse-size' Finley Xiao
@ 2017-07-10 1:26 ` Rob Herring
0 siblings, 0 replies; 5+ messages in thread
From: Rob Herring @ 2017-07-10 1:26 UTC (permalink / raw)
To: Finley Xiao
Cc: srinivas.kandagatla, mark.rutland, heiko, linux-arm-kernel,
linux-rockchip, devicetree, linux-kernel, jay.xu, huangtao,
tony.xie, cl
On Thu, Jul 06, 2017 at 03:36:36PM +0800, Finley Xiao wrote:
> The eFuse size is defined in property <reg> before, but the length
> of registers is not equal to the size on some platforms, so we
> add a new property to redefine it.
>
> Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
> ---
> Documentation/devicetree/bindings/nvmem/rockchip-efuse.txt | 4 ++++
> drivers/nvmem/rockchip-efuse.c | 4 +++-
> 2 files changed, 7 insertions(+), 1 deletion(-)
Acked-by: Rob Herring <robh@kernel.org>
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH 2/2] nvmem: rockchip-efuse: add support for rk3328-efuse
2017-07-06 7:36 ` [PATCH 2/2] nvmem: rockchip-efuse: add support for rk3328-efuse Finley Xiao
@ 2017-07-10 1:26 ` Rob Herring
0 siblings, 0 replies; 5+ messages in thread
From: Rob Herring @ 2017-07-10 1:26 UTC (permalink / raw)
To: Finley Xiao
Cc: srinivas.kandagatla, mark.rutland, heiko, linux-arm-kernel,
linux-rockchip, devicetree, linux-kernel, jay.xu, huangtao,
tony.xie, cl
On Thu, Jul 06, 2017 at 03:36:37PM +0800, Finley Xiao wrote:
> This adds the necessary data for handling eFuse on the rk3328.
>
> Signed-off-by: Finley Xiao <finley.xiao@rock-chips.com>
> ---
> .../devicetree/bindings/nvmem/rockchip-efuse.txt | 1 +
Acked-by: Rob Herring <robh@kernel.org>
> drivers/nvmem/rockchip-efuse.c | 66 ++++++++++++++++++++++
> 2 files changed, 67 insertions(+)
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2017-07-10 1:26 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2017-07-06 7:36 [PATCH 0/2] nvmem: rockchip-efuse: add support for rk3328-efuse Finley Xiao
2017-07-06 7:36 ` [PATCH 1/2] nvmem: rockchip-efuse: parse 'rockchip,efuse-size' Finley Xiao
2017-07-10 1:26 ` Rob Herring
2017-07-06 7:36 ` [PATCH 2/2] nvmem: rockchip-efuse: add support for rk3328-efuse Finley Xiao
2017-07-10 1:26 ` Rob Herring
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).