* [PATCH v2 0/3] nvmem: meson-efuse: add write support
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: Srinivas Kandagatla, Carlo Caione, Kevin Hilman
Cc: Jerome Brunet, linux-arm-kernel, linux-amlogic, linux-kernel
This changeset adds write support to meson efuse driver.
The first patch just changes the way the nvmem data are allocated w/o
any functional changes. The second patches actually adds write support.
The memory being an OTP, it is safer if it remains read-only by default,
which is why I also submitted this DT patch [0]. It has now been merged by
Kevin.
If a user knows what he is doing, it should be easy to remove the
read-only property from the board DT. This can be done in u-boot, before
starting linux:
> fdt rm /efuse read-only
Tested on the gxl libretech-cc
Changes since v1 [1]:
- Remove un-necessary code in callbacks
- Rebase on v4.17-rc1
[0]: https://lkml.kernel.org/r/20180316145021.8517-1-jbrunet@baylibre.com
[1]: https://lkml.kernel.org/r/20180316150113.9779-1-jbrunet@baylibre.com
Jerome Brunet (3):
nvmem: meson-efuse: remove econfig global
nvmem: meson-efuse: simplify read callback
nvmem: meson-efuse: add write support
drivers/nvmem/meson-efuse.c | 41 ++++++++++++++++++++++-------------------
1 file changed, 22 insertions(+), 19 deletions(-)
--
2.14.3
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 0/3] nvmem: meson-efuse: add write support
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: linux-arm-kernel
This changeset adds write support to meson efuse driver.
The first patch just changes the way the nvmem data are allocated w/o
any functional changes. The second patches actually adds write support.
The memory being an OTP, it is safer if it remains read-only by default,
which is why I also submitted this DT patch [0]. It has now been merged by
Kevin.
If a user knows what he is doing, it should be easy to remove the
read-only property from the board DT. This can be done in u-boot, before
starting linux:
> fdt rm /efuse read-only
Tested on the gxl libretech-cc
Changes since v1 [1]:
- Remove un-necessary code in callbacks
- Rebase on v4.17-rc1
[0]: https://lkml.kernel.org/r/20180316145021.8517-1-jbrunet at baylibre.com
[1]: https://lkml.kernel.org/r/20180316150113.9779-1-jbrunet at baylibre.com
Jerome Brunet (3):
nvmem: meson-efuse: remove econfig global
nvmem: meson-efuse: simplify read callback
nvmem: meson-efuse: add write support
drivers/nvmem/meson-efuse.c | 41 ++++++++++++++++++++++-------------------
1 file changed, 22 insertions(+), 19 deletions(-)
--
2.14.3
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 0/3] nvmem: meson-efuse: add write support
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: linus-amlogic
This changeset adds write support to meson efuse driver.
The first patch just changes the way the nvmem data are allocated w/o
any functional changes. The second patches actually adds write support.
The memory being an OTP, it is safer if it remains read-only by default,
which is why I also submitted this DT patch [0]. It has now been merged by
Kevin.
If a user knows what he is doing, it should be easy to remove the
read-only property from the board DT. This can be done in u-boot, before
starting linux:
> fdt rm /efuse read-only
Tested on the gxl libretech-cc
Changes since v1 [1]:
- Remove un-necessary code in callbacks
- Rebase on v4.17-rc1
[0]: https://lkml.kernel.org/r/20180316145021.8517-1-jbrunet at baylibre.com
[1]: https://lkml.kernel.org/r/20180316150113.9779-1-jbrunet at baylibre.com
Jerome Brunet (3):
nvmem: meson-efuse: remove econfig global
nvmem: meson-efuse: simplify read callback
nvmem: meson-efuse: add write support
drivers/nvmem/meson-efuse.c | 41 ++++++++++++++++++++++-------------------
1 file changed, 22 insertions(+), 19 deletions(-)
--
2.14.3
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v2 1/3] nvmem: meson-efuse: remove econfig global
2018-04-23 12:41 ` Jerome Brunet
(?)
@ 2018-04-23 12:41 ` Jerome Brunet
-1 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: Srinivas Kandagatla, Carlo Caione, Kevin Hilman
Cc: Jerome Brunet, linux-arm-kernel, linux-amlogic, linux-kernel
Having a global structure holding a reference to the device
structure is not very nice. Allocate the econfig instead and fill
the nvmem information as before
Reviewed-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 71823d1403c5..2df9b0094f45 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -35,13 +35,6 @@ static int meson_efuse_read(void *context, unsigned int offset,
return 0;
}
-static struct nvmem_config econfig = {
- .name = "meson-efuse",
- .stride = 1,
- .word_size = 1,
- .read_only = true,
-};
-
static const struct of_device_id meson_efuse_match[] = {
{ .compatible = "amlogic,meson-gxbb-efuse", },
{ /* sentinel */ },
@@ -50,17 +43,27 @@ MODULE_DEVICE_TABLE(of, meson_efuse_match);
static int meson_efuse_probe(struct platform_device *pdev)
{
+ struct device *dev = &pdev->dev;
struct nvmem_device *nvmem;
+ struct nvmem_config *econfig;
unsigned int size;
if (meson_sm_call(SM_EFUSE_USER_MAX, &size, 0, 0, 0, 0, 0) < 0)
return -EINVAL;
- econfig.dev = &pdev->dev;
- econfig.reg_read = meson_efuse_read;
- econfig.size = size;
+ econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
+ if (!econfig)
+ return -ENOMEM;
+
+ econfig->dev = dev;
+ econfig->name = dev_name(dev);
+ econfig->stride = 1;
+ econfig->word_size = 1;
+ econfig->read_only = true;
+ econfig->reg_read = meson_efuse_read;
+ econfig->size = size;
- nvmem = devm_nvmem_register(&pdev->dev, &econfig);
+ nvmem = devm_nvmem_register(&pdev->dev, econfig);
return PTR_ERR_OR_ZERO(nvmem);
}
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 1/3] nvmem: meson-efuse: remove econfig global
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: linux-arm-kernel
Having a global structure holding a reference to the device
structure is not very nice. Allocate the econfig instead and fill
the nvmem information as before
Reviewed-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 71823d1403c5..2df9b0094f45 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -35,13 +35,6 @@ static int meson_efuse_read(void *context, unsigned int offset,
return 0;
}
-static struct nvmem_config econfig = {
- .name = "meson-efuse",
- .stride = 1,
- .word_size = 1,
- .read_only = true,
-};
-
static const struct of_device_id meson_efuse_match[] = {
{ .compatible = "amlogic,meson-gxbb-efuse", },
{ /* sentinel */ },
@@ -50,17 +43,27 @@ MODULE_DEVICE_TABLE(of, meson_efuse_match);
static int meson_efuse_probe(struct platform_device *pdev)
{
+ struct device *dev = &pdev->dev;
struct nvmem_device *nvmem;
+ struct nvmem_config *econfig;
unsigned int size;
if (meson_sm_call(SM_EFUSE_USER_MAX, &size, 0, 0, 0, 0, 0) < 0)
return -EINVAL;
- econfig.dev = &pdev->dev;
- econfig.reg_read = meson_efuse_read;
- econfig.size = size;
+ econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
+ if (!econfig)
+ return -ENOMEM;
+
+ econfig->dev = dev;
+ econfig->name = dev_name(dev);
+ econfig->stride = 1;
+ econfig->word_size = 1;
+ econfig->read_only = true;
+ econfig->reg_read = meson_efuse_read;
+ econfig->size = size;
- nvmem = devm_nvmem_register(&pdev->dev, &econfig);
+ nvmem = devm_nvmem_register(&pdev->dev, econfig);
return PTR_ERR_OR_ZERO(nvmem);
}
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 1/3] nvmem: meson-efuse: remove econfig global
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: linus-amlogic
Having a global structure holding a reference to the device
structure is not very nice. Allocate the econfig instead and fill
the nvmem information as before
Reviewed-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 25 ++++++++++++++-----------
1 file changed, 14 insertions(+), 11 deletions(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 71823d1403c5..2df9b0094f45 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -35,13 +35,6 @@ static int meson_efuse_read(void *context, unsigned int offset,
return 0;
}
-static struct nvmem_config econfig = {
- .name = "meson-efuse",
- .stride = 1,
- .word_size = 1,
- .read_only = true,
-};
-
static const struct of_device_id meson_efuse_match[] = {
{ .compatible = "amlogic,meson-gxbb-efuse", },
{ /* sentinel */ },
@@ -50,17 +43,27 @@ MODULE_DEVICE_TABLE(of, meson_efuse_match);
static int meson_efuse_probe(struct platform_device *pdev)
{
+ struct device *dev = &pdev->dev;
struct nvmem_device *nvmem;
+ struct nvmem_config *econfig;
unsigned int size;
if (meson_sm_call(SM_EFUSE_USER_MAX, &size, 0, 0, 0, 0, 0) < 0)
return -EINVAL;
- econfig.dev = &pdev->dev;
- econfig.reg_read = meson_efuse_read;
- econfig.size = size;
+ econfig = devm_kzalloc(dev, sizeof(*econfig), GFP_KERNEL);
+ if (!econfig)
+ return -ENOMEM;
+
+ econfig->dev = dev;
+ econfig->name = dev_name(dev);
+ econfig->stride = 1;
+ econfig->word_size = 1;
+ econfig->read_only = true;
+ econfig->reg_read = meson_efuse_read;
+ econfig->size = size;
- nvmem = devm_nvmem_register(&pdev->dev, &econfig);
+ nvmem = devm_nvmem_register(&pdev->dev, econfig);
return PTR_ERR_OR_ZERO(nvmem);
}
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 2/3] nvmem: meson-efuse: simplify read callback
2018-04-23 12:41 ` Jerome Brunet
(?)
@ 2018-04-23 12:41 ` Jerome Brunet
-1 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: Srinivas Kandagatla, Carlo Caione, Kevin Hilman
Cc: Jerome Brunet, linux-arm-kernel, linux-amlogic, linux-kernel
Most of the code and variables in the read callback is not necessary.
Keep only what is required.
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 2df9b0094f45..4623249dfd87 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -24,15 +24,8 @@
static int meson_efuse_read(void *context, unsigned int offset,
void *val, size_t bytes)
{
- u8 *buf = val;
- int ret;
-
- ret = meson_sm_call_read(buf, bytes, SM_EFUSE_READ, offset,
- bytes, 0, 0, 0);
- if (ret < 0)
- return ret;
-
- return 0;
+ return meson_sm_call_read((u8 *)val, bytes, SM_EFUSE_READ, offset,
+ bytes, 0, 0, 0);
}
static const struct of_device_id meson_efuse_match[] = {
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 2/3] nvmem: meson-efuse: simplify read callback
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: linux-arm-kernel
Most of the code and variables in the read callback is not necessary.
Keep only what is required.
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 2df9b0094f45..4623249dfd87 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -24,15 +24,8 @@
static int meson_efuse_read(void *context, unsigned int offset,
void *val, size_t bytes)
{
- u8 *buf = val;
- int ret;
-
- ret = meson_sm_call_read(buf, bytes, SM_EFUSE_READ, offset,
- bytes, 0, 0, 0);
- if (ret < 0)
- return ret;
-
- return 0;
+ return meson_sm_call_read((u8 *)val, bytes, SM_EFUSE_READ, offset,
+ bytes, 0, 0, 0);
}
static const struct of_device_id meson_efuse_match[] = {
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 2/3] nvmem: meson-efuse: simplify read callback
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: linus-amlogic
Most of the code and variables in the read callback is not necessary.
Keep only what is required.
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 2df9b0094f45..4623249dfd87 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -24,15 +24,8 @@
static int meson_efuse_read(void *context, unsigned int offset,
void *val, size_t bytes)
{
- u8 *buf = val;
- int ret;
-
- ret = meson_sm_call_read(buf, bytes, SM_EFUSE_READ, offset,
- bytes, 0, 0, 0);
- if (ret < 0)
- return ret;
-
- return 0;
+ return meson_sm_call_read((u8 *)val, bytes, SM_EFUSE_READ, offset,
+ bytes, 0, 0, 0);
}
static const struct of_device_id meson_efuse_match[] = {
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 3/3] nvmem: meson-efuse: add write support
2018-04-23 12:41 ` Jerome Brunet
(?)
@ 2018-04-23 12:41 ` Jerome Brunet
-1 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: Srinivas Kandagatla, Carlo Caione, Kevin Hilman
Cc: Jerome Brunet, linux-arm-kernel, linux-amlogic, linux-kernel
Add write support to the meson-gx efuse driver.
Beware, this efuse is one time programmable !
Reviewed-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 4623249dfd87..d769840d1e18 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -28,6 +28,13 @@ static int meson_efuse_read(void *context, unsigned int offset,
bytes, 0, 0, 0);
}
+static int meson_efuse_write(void *context, unsigned int offset,
+ void *val, size_t bytes)
+{
+ return meson_sm_call_write((u8 *)val, bytes, SM_EFUSE_WRITE, offset,
+ bytes, 0, 0, 0);
+}
+
static const struct of_device_id meson_efuse_match[] = {
{ .compatible = "amlogic,meson-gxbb-efuse", },
{ /* sentinel */ },
@@ -52,8 +59,8 @@ static int meson_efuse_probe(struct platform_device *pdev)
econfig->name = dev_name(dev);
econfig->stride = 1;
econfig->word_size = 1;
- econfig->read_only = true;
econfig->reg_read = meson_efuse_read;
+ econfig->reg_write = meson_efuse_write;
econfig->size = size;
nvmem = devm_nvmem_register(&pdev->dev, econfig);
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 3/3] nvmem: meson-efuse: add write support
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: linux-arm-kernel
Add write support to the meson-gx efuse driver.
Beware, this efuse is one time programmable !
Reviewed-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 4623249dfd87..d769840d1e18 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -28,6 +28,13 @@ static int meson_efuse_read(void *context, unsigned int offset,
bytes, 0, 0, 0);
}
+static int meson_efuse_write(void *context, unsigned int offset,
+ void *val, size_t bytes)
+{
+ return meson_sm_call_write((u8 *)val, bytes, SM_EFUSE_WRITE, offset,
+ bytes, 0, 0, 0);
+}
+
static const struct of_device_id meson_efuse_match[] = {
{ .compatible = "amlogic,meson-gxbb-efuse", },
{ /* sentinel */ },
@@ -52,8 +59,8 @@ static int meson_efuse_probe(struct platform_device *pdev)
econfig->name = dev_name(dev);
econfig->stride = 1;
econfig->word_size = 1;
- econfig->read_only = true;
econfig->reg_read = meson_efuse_read;
+ econfig->reg_write = meson_efuse_write;
econfig->size = size;
nvmem = devm_nvmem_register(&pdev->dev, econfig);
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v2 3/3] nvmem: meson-efuse: add write support
@ 2018-04-23 12:41 ` Jerome Brunet
0 siblings, 0 replies; 12+ messages in thread
From: Jerome Brunet @ 2018-04-23 12:41 UTC (permalink / raw)
To: linus-amlogic
Add write support to the meson-gx efuse driver.
Beware, this efuse is one time programmable !
Reviewed-by: Kevin Hilman <khilman@baylibre.com>
Signed-off-by: Jerome Brunet <jbrunet@baylibre.com>
---
drivers/nvmem/meson-efuse.c | 9 ++++++++-
1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/nvmem/meson-efuse.c b/drivers/nvmem/meson-efuse.c
index 4623249dfd87..d769840d1e18 100644
--- a/drivers/nvmem/meson-efuse.c
+++ b/drivers/nvmem/meson-efuse.c
@@ -28,6 +28,13 @@ static int meson_efuse_read(void *context, unsigned int offset,
bytes, 0, 0, 0);
}
+static int meson_efuse_write(void *context, unsigned int offset,
+ void *val, size_t bytes)
+{
+ return meson_sm_call_write((u8 *)val, bytes, SM_EFUSE_WRITE, offset,
+ bytes, 0, 0, 0);
+}
+
static const struct of_device_id meson_efuse_match[] = {
{ .compatible = "amlogic,meson-gxbb-efuse", },
{ /* sentinel */ },
@@ -52,8 +59,8 @@ static int meson_efuse_probe(struct platform_device *pdev)
econfig->name = dev_name(dev);
econfig->stride = 1;
econfig->word_size = 1;
- econfig->read_only = true;
econfig->reg_read = meson_efuse_read;
+ econfig->reg_write = meson_efuse_write;
econfig->size = size;
nvmem = devm_nvmem_register(&pdev->dev, econfig);
--
2.14.3
^ permalink raw reply related [flat|nested] 12+ messages in thread
end of thread, other threads:[~2018-04-23 12:42 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-04-23 12:41 [PATCH v2 0/3] nvmem: meson-efuse: add write support Jerome Brunet
2018-04-23 12:41 ` Jerome Brunet
2018-04-23 12:41 ` Jerome Brunet
2018-04-23 12:41 ` [PATCH v2 1/3] nvmem: meson-efuse: remove econfig global Jerome Brunet
2018-04-23 12:41 ` Jerome Brunet
2018-04-23 12:41 ` Jerome Brunet
2018-04-23 12:41 ` [PATCH v2 2/3] nvmem: meson-efuse: simplify read callback Jerome Brunet
2018-04-23 12:41 ` Jerome Brunet
2018-04-23 12:41 ` Jerome Brunet
2018-04-23 12:41 ` [PATCH v2 3/3] nvmem: meson-efuse: add write support Jerome Brunet
2018-04-23 12:41 ` Jerome Brunet
2018-04-23 12:41 ` Jerome Brunet
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.