diff mbox series

[V2,1/6] dt-bindings: nvmem: add cell-type to nvmem cells

Message ID 20210923110109.29785-2-qiangqing.zhang@nxp.com
State New
Headers show
Series [V2,1/6] dt-bindings: nvmem: add cell-type to nvmem cells | expand

Commit Message

Joakim Zhang Sept. 23, 2021, 11:01 a.m. UTC
From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>


Some of the nvmem providers encode data for certain type of nvmem cell,
example mac-address is stored in ascii or with delimiter or in reverse order.

This is much specific to vendor, so having a cell-type would allow nvmem
provider drivers to post-process this before using it.

Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>

---
 Documentation/devicetree/bindings/nvmem/nvmem.yaml | 11 +++++++++++
 include/dt-bindings/nvmem/nvmem.h                  |  8 ++++++++
 2 files changed, 19 insertions(+)
 create mode 100644 include/dt-bindings/nvmem/nvmem.h

-- 
2.17.1

Comments

Rob Herring (Arm) Sept. 27, 2021, 8:42 p.m. UTC | #1
On Thu, Sep 23, 2021 at 07:01:04PM +0800, Joakim Zhang wrote:
> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

> 

> Some of the nvmem providers encode data for certain type of nvmem cell,

> example mac-address is stored in ascii or with delimiter or in reverse order.

> 

> This is much specific to vendor, so having a cell-type would allow nvmem

> provider drivers to post-process this before using it.

> 

> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>

> ---

>  Documentation/devicetree/bindings/nvmem/nvmem.yaml | 11 +++++++++++

>  include/dt-bindings/nvmem/nvmem.h                  |  8 ++++++++

>  2 files changed, 19 insertions(+)

>  create mode 100644 include/dt-bindings/nvmem/nvmem.h

> 

> diff --git a/Documentation/devicetree/bindings/nvmem/nvmem.yaml b/Documentation/devicetree/bindings/nvmem/nvmem.yaml

> index b8dc3d2b6e92..8cf6c7e72b0a 100644

> --- a/Documentation/devicetree/bindings/nvmem/nvmem.yaml

> +++ b/Documentation/devicetree/bindings/nvmem/nvmem.yaml

> @@ -60,6 +60,11 @@ patternProperties:

>              - minimum: 1

>                description:

>                  Size in bit within the address range specified by reg.

> +      cell-type:

> +        $ref: /schemas/types.yaml#/definitions/uint32

> +        maxItems: 1

> +        description:

> +          Type of nvmem, Use defines in dt-bindings/nvmem/nvmem.h.


I don't think magic numbers are the right approach here. Actually, I 
don't think we need any DT additions. 

Why not just have the consumer side just tell the nvmem provider what 
the data is and to translate it. The consumer side already has a name 
(e.g. mac-address) which defines what the data is and I think is pretty 
standard. If that name is standard, then you could pass it to the nvmem 
core. If not, define some kernel internal types to use.

Rob
Srinivas Kandagatla Sept. 28, 2021, 1:16 p.m. UTC | #2
On 27/09/2021 21:42, Rob Herring wrote:
> On Thu, Sep 23, 2021 at 07:01:04PM +0800, Joakim Zhang wrote:

>> From: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

>>

>> Some of the nvmem providers encode data for certain type of nvmem cell,

>> example mac-address is stored in ascii or with delimiter or in reverse order.

>>

>> This is much specific to vendor, so having a cell-type would allow nvmem

>> provider drivers to post-process this before using it.

>>

>> Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>

>> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>

>> ---

>>   Documentation/devicetree/bindings/nvmem/nvmem.yaml | 11 +++++++++++

>>   include/dt-bindings/nvmem/nvmem.h                  |  8 ++++++++

>>   2 files changed, 19 insertions(+)

>>   create mode 100644 include/dt-bindings/nvmem/nvmem.h

>>

>> diff --git a/Documentation/devicetree/bindings/nvmem/nvmem.yaml b/Documentation/devicetree/bindings/nvmem/nvmem.yaml

>> index b8dc3d2b6e92..8cf6c7e72b0a 100644

>> --- a/Documentation/devicetree/bindings/nvmem/nvmem.yaml

>> +++ b/Documentation/devicetree/bindings/nvmem/nvmem.yaml

>> @@ -60,6 +60,11 @@ patternProperties:

>>               - minimum: 1

>>                 description:

>>                   Size in bit within the address range specified by reg.

>> +      cell-type:

>> +        $ref: /schemas/types.yaml#/definitions/uint32

>> +        maxItems: 1

>> +        description:

>> +          Type of nvmem, Use defines in dt-bindings/nvmem/nvmem.h.

> 

> I don't think magic numbers are the right approach here. Actually, I

> don't think we need any DT additions.

> 

> Why not just have the consumer side just tell the nvmem provider what

> the data is and to translate it. The consumer side already has a name

> (e.g. mac-address) which defines what the data is and I think is pretty

> standard. If that name is standard, then you could pass it to the nvmem

> core. If not, define some kernel internal types to use.


Thanks Rob for the inputs,

There are potentially two sources for this information.

1> nvmem cell node name itself.

2> "nvmem-cell-names"

I think nvmem-cell-names is much more consistent w.r.t naming, which 
should help us determine pretty much similar information.

This might need bit of rework in core driver to be able to pass to 
provider drivers.

--srini
> 

> Rob

>
diff mbox series

Patch

diff --git a/Documentation/devicetree/bindings/nvmem/nvmem.yaml b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
index b8dc3d2b6e92..8cf6c7e72b0a 100644
--- a/Documentation/devicetree/bindings/nvmem/nvmem.yaml
+++ b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
@@ -60,6 +60,11 @@  patternProperties:
             - minimum: 1
               description:
                 Size in bit within the address range specified by reg.
+      cell-type:
+        $ref: /schemas/types.yaml#/definitions/uint32
+        maxItems: 1
+        description:
+          Type of nvmem, Use defines in dt-bindings/nvmem/nvmem.h.
 
     required:
       - reg
@@ -69,6 +74,7 @@  additionalProperties: true
 examples:
   - |
       #include <dt-bindings/gpio/gpio.h>
+      #include <dt-bindings/nvmem/nvmem.h>
 
       qfprom: eeprom@700000 {
           #address-cells = <1>;
@@ -98,6 +104,11 @@  examples:
               reg = <0xc 0x1>;
               bits = <2 3>;
           };
+
+          mac_addr: mac-addr@90{
+              reg = <0x90 0x6>;
+              cell-type = <NVMEM_CELL_TYPE_MAC_ADDRESS>;
+          };
       };
 
 ...
diff --git a/include/dt-bindings/nvmem/nvmem.h b/include/dt-bindings/nvmem/nvmem.h
new file mode 100644
index 000000000000..eed0478f6bfd
--- /dev/null
+++ b/include/dt-bindings/nvmem/nvmem.h
@@ -0,0 +1,8 @@ 
+/* SPDX-License-Identifier: GPL-2.0 */
+#ifndef __DT_NVMMEM_H
+#define __DT_NVMMEM_H
+
+#define NVMEM_CELL_TYPE_UNKNOWN		0
+#define NVMEM_CELL_TYPE_MAC_ADDRESS	1
+
+#endif /* __DT_NVMMEM_H */