2023-03-17 13:26:31

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH V4 0/4] nvmem: add fixed cells layout

From: Rafał Miłecki <[email protected]>

NVMEM bindings received a new feature recently: layouts. They allow
defining NVMEM device content in a separated DT node named
"nvmem-layout". That improvement results in cleaner and more generic
bindings.

New bindings & drivers should use layouts design. If possible we should
also try converting existing bindings & drivers to layouts.

This patchset allows defining NVMEM cells in a new way (using NVMEM
layout feature).

This deprecates support for defining NVMEM cells as direct DT device
node subnodes but IT DOESN'T drop support for that.

PLEASE understand what this patchset handles. It adds new & preferred
way of defining NVMEM cells. It is NOT meant to:
1. Convert ALL existing bindings or drivers
2. Add support for new extra features (like multiple layouts)
3. Break any backward compatibility (it WON'T happen)

Note: this is based on top of the:
[PATCH 1/4] nvmem: Add macro to register nvmem layout drivers

Rafał Miłecki (4):
dt-bindings: nvmem: layouts: add fixed-layout
dt-bindings: nvmem: convert base example to use NVMEM fixed cells
layout
nvmem: core: export nvmem_add_cells_from_of()
nvmem: layouts: add fixed cells layout

.../bindings/nvmem/layouts/fixed-cell.yaml | 31 ++++++++++
.../bindings/nvmem/layouts/fixed-layout.yaml | 49 +++++++++++++++
.../bindings/nvmem/layouts/nvmem-layout.yaml | 5 +-
.../devicetree/bindings/nvmem/nvmem.yaml | 61 ++++++++-----------
drivers/nvmem/core.c | 7 ++-
drivers/nvmem/layouts/Kconfig | 8 +++
drivers/nvmem/layouts/Makefile | 1 +
drivers/nvmem/layouts/fixed.c | 41 +++++++++++++
include/linux/nvmem-provider.h | 7 +++
9 files changed, 168 insertions(+), 42 deletions(-)
create mode 100644 Documentation/devicetree/bindings/nvmem/layouts/fixed-cell.yaml
create mode 100644 Documentation/devicetree/bindings/nvmem/layouts/fixed-layout.yaml
create mode 100644 drivers/nvmem/layouts/fixed.c

--
2.34.1



2023-03-17 13:27:06

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH V4 2/4] dt-bindings: nvmem: convert base example to use NVMEM fixed cells layout

From: Rafał Miłecki <[email protected]>

With support for the "fixed-layout" binding it's possible and preferred
now to define fixed NVMEM cells in the layout node. Do that for the
binding example binding.

Signed-off-by: Rafał Miłecki <[email protected]>
---
.../devicetree/bindings/nvmem/nvmem.yaml | 42 +++++++++++--------
1 file changed, 24 insertions(+), 18 deletions(-)

diff --git a/Documentation/devicetree/bindings/nvmem/nvmem.yaml b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
index b79f1bb795fb..980244100690 100644
--- a/Documentation/devicetree/bindings/nvmem/nvmem.yaml
+++ b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
@@ -68,24 +68,30 @@ examples:

/* ... */

- /* Data cells */
- tsens_calibration: calib@404 {
- reg = <0x404 0x10>;
- };
-
- tsens_calibration_bckp: calib_bckp@504 {
- reg = <0x504 0x11>;
- bits = <6 128>;
- };
-
- pvs_version: pvs-version@6 {
- reg = <0x6 0x2>;
- bits = <7 2>;
- };
-
- speed_bin: speed-bin@c{
- reg = <0xc 0x1>;
- bits = <2 3>;
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ /* Data cells */
+ tsens_calibration: calib@404 {
+ reg = <0x404 0x10>;
+ };
+
+ tsens_calibration_bckp: calib_bckp@504 {
+ reg = <0x504 0x11>;
+ bits = <6 128>;
+ };
+
+ pvs_version: pvs-version@6 {
+ reg = <0x6 0x2>;
+ bits = <7 2>;
+ };
+
+ speed_bin: speed-bin@c{
+ reg = <0xc 0x1>;
+ bits = <2 3>;
+ };
};
};

--
2.34.1


2023-03-17 13:27:06

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH V4 1/4] dt-bindings: nvmem: layouts: add fixed-layout

From: Rafał Miłecki <[email protected]>

With the introduction of NVMEM layouts, new NVMEM content structures
should be defined as such. We should also try to convert / migrate
existing NVMEM content bindings to layouts.

This commit handles fixed NVMEM cells. So far they had to be defined
directly - as device subnodes. With this change it's allowed to put them
in the DT node named "nvmem-layout".

Having NVMEM cells in separated node is prefered as it draws a nice line
between NVMEM device and its content. It results in cleaner bindings.

FWIW a very similiar situation has happened to MTD devices and their
partitions: see commit 5d96ea42eb63 ("dt-bindings: mtd: Clarify all
partition subnodes").

Signed-off-by: Rafał Miłecki <[email protected]>
---
.../bindings/nvmem/layouts/fixed-cell.yaml | 31 ++++++++++++
.../bindings/nvmem/layouts/fixed-layout.yaml | 49 +++++++++++++++++++
.../bindings/nvmem/layouts/nvmem-layout.yaml | 5 +-
.../devicetree/bindings/nvmem/nvmem.yaml | 19 +------
4 files changed, 83 insertions(+), 21 deletions(-)
create mode 100644 Documentation/devicetree/bindings/nvmem/layouts/fixed-cell.yaml
create mode 100644 Documentation/devicetree/bindings/nvmem/layouts/fixed-layout.yaml

diff --git a/Documentation/devicetree/bindings/nvmem/layouts/fixed-cell.yaml b/Documentation/devicetree/bindings/nvmem/layouts/fixed-cell.yaml
new file mode 100644
index 000000000000..e698098450e1
--- /dev/null
+++ b/Documentation/devicetree/bindings/nvmem/layouts/fixed-cell.yaml
@@ -0,0 +1,31 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/nvmem/layouts/fixed-cell.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: Fixed offset & size NVMEM cell
+
+maintainers:
+ - Rafał Miłecki <[email protected]>
+ - Srinivas Kandagatla <[email protected]>
+
+properties:
+ reg:
+ maxItems: 1
+
+ bits:
+ $ref: /schemas/types.yaml#/definitions/uint32-array
+ items:
+ - minimum: 0
+ maximum: 7
+ description:
+ Offset in bit within the address range specified by reg.
+ - minimum: 1
+ description:
+ Size in bit within the address range specified by reg.
+
+required:
+ - reg
+
+additionalProperties: true
diff --git a/Documentation/devicetree/bindings/nvmem/layouts/fixed-layout.yaml b/Documentation/devicetree/bindings/nvmem/layouts/fixed-layout.yaml
new file mode 100644
index 000000000000..f7496ba28f33
--- /dev/null
+++ b/Documentation/devicetree/bindings/nvmem/layouts/fixed-layout.yaml
@@ -0,0 +1,49 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/nvmem/layouts/fixed-layout.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: NVMEM layout for fixed NVMEM cells
+
+description:
+ Many NVMEM devices have hardcoded cells layout (offset and size of defined
+ NVMEM content doesn't change).
+
+ This binding allows defining such NVMEM layout with its cells. It can be used
+ on top of any NVMEM device.
+
+maintainers:
+ - Rafał Miłecki <[email protected]>
+
+properties:
+ compatible:
+ const: fixed-layout
+
+ "#address-cells":
+ const: 1
+
+ "#size-cells":
+ const: 1
+
+patternProperties:
+ "@[a-f0-9]+$":
+ type: object
+ $ref: fixed-cell.yaml
+
+required:
+ - compatible
+
+additionalProperties: false
+
+examples:
+ - |
+ nvmem-layout {
+ compatible = "fixed-layout";
+ #address-cells = <1>;
+ #size-cells = <1>;
+
+ calibration@4000 {
+ reg = <0x4000 0x100>;
+ };
+ };
diff --git a/Documentation/devicetree/bindings/nvmem/layouts/nvmem-layout.yaml b/Documentation/devicetree/bindings/nvmem/layouts/nvmem-layout.yaml
index 8512ee538c4c..3b40f7880774 100644
--- a/Documentation/devicetree/bindings/nvmem/layouts/nvmem-layout.yaml
+++ b/Documentation/devicetree/bindings/nvmem/layouts/nvmem-layout.yaml
@@ -18,16 +18,13 @@ description: |
perform their parsing. The nvmem-layout container is here to describe these.

oneOf:
+ - $ref: fixed-layout.yaml
- $ref: kontron,sl28-vpd.yaml
- $ref: onie,tlv-layout.yaml

properties:
compatible: true

- '#address-cells': false
-
- '#size-cells': false
-
required:
- compatible

diff --git a/Documentation/devicetree/bindings/nvmem/nvmem.yaml b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
index 75bb93dda9df..b79f1bb795fb 100644
--- a/Documentation/devicetree/bindings/nvmem/nvmem.yaml
+++ b/Documentation/devicetree/bindings/nvmem/nvmem.yaml
@@ -49,23 +49,8 @@ properties:
patternProperties:
"@[0-9a-f]+(,[0-7])?$":
type: object
-
- properties:
- reg:
- maxItems: 1
- description:
- Offset and size in bytes within the storage device.
-
- bits:
- $ref: /schemas/types.yaml#/definitions/uint32-array
- items:
- - minimum: 0
- maximum: 7
- description:
- Offset in bit within the address range specified by reg.
- - minimum: 1
- description:
- Size in bit within the address range specified by reg.
+ $ref: layouts/fixed-cell.yaml
+ deprecated: true

additionalProperties: true

--
2.34.1


2023-03-17 13:27:39

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH V4 3/4] nvmem: core: export nvmem_add_cells_from_of()

From: Rafał Miłecki <[email protected]>

This symbol can be cleanly re-used by the fixed NVMEM layout driver.
Allow passing DT node as argument to make it a bit more generic.

Signed-off-by: Rafał Miłecki <[email protected]>
---
drivers/nvmem/core.c | 7 ++++---
include/linux/nvmem-provider.h | 7 +++++++
2 files changed, 11 insertions(+), 3 deletions(-)

diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
index 212c5ba5789f..985a42cfb0a2 100644
--- a/drivers/nvmem/core.c
+++ b/drivers/nvmem/core.c
@@ -694,7 +694,7 @@ static int nvmem_validate_keepouts(struct nvmem_device *nvmem)
return 0;
}

-static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
+int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct device_node *np)
{
struct nvmem_layout *layout = nvmem->layout;
struct device *dev = &nvmem->dev;
@@ -702,7 +702,7 @@ static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
const __be32 *addr;
int len, ret;

- for_each_child_of_node(dev->of_node, child) {
+ for_each_child_of_node(np, child) {
struct nvmem_cell_info info = {0};

addr = of_get_property(child, "reg", &len);
@@ -739,6 +739,7 @@ static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)

return 0;
}
+EXPORT_SYMBOL_GPL(nvmem_add_cells_from_of);

int __nvmem_layout_register(struct nvmem_layout *layout, struct module *owner)
{
@@ -970,7 +971,7 @@ struct nvmem_device *nvmem_register(const struct nvmem_config *config)
if (rval)
goto err_remove_cells;

- rval = nvmem_add_cells_from_of(nvmem);
+ rval = nvmem_add_cells_from_of(nvmem, nvmem->dev.of_node);
if (rval)
goto err_remove_cells;

diff --git a/include/linux/nvmem-provider.h b/include/linux/nvmem-provider.h
index 3e97c8315c45..2b5410be2636 100644
--- a/include/linux/nvmem-provider.h
+++ b/include/linux/nvmem-provider.h
@@ -195,6 +195,8 @@ void nvmem_del_cell_table(struct nvmem_cell_table *table);
int nvmem_add_one_cell(struct nvmem_device *nvmem,
const struct nvmem_cell_info *info);

+int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct device_node *np);
+
int __nvmem_layout_register(struct nvmem_layout *layout, struct module *owner);
#define nvmem_layout_register(layout) \
__nvmem_layout_register(layout, THIS_MODULE)
@@ -226,6 +228,11 @@ static inline int nvmem_add_one_cell(struct nvmem_device *nvmem,
return -EOPNOTSUPP;
}

+static int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct device_node *np)
+{
+ return -EOPNOTSUPP;
+}
+
static inline int nvmem_layout_register(struct nvmem_layout *layout)
{
return -EOPNOTSUPP;
--
2.34.1


2023-03-17 13:27:39

by Rafał Miłecki

[permalink] [raw]
Subject: [PATCH V4 4/4] nvmem: layouts: add fixed cells layout

From: Rafał Miłecki <[email protected]>

This adds a driver for the "fixed-layout" NVMEM layout binding. It
allows defining NVMEM cells in a layout DT node named "nvmem-layout".

Signed-off-by: Rafał Miłecki <[email protected]>
---
drivers/nvmem/layouts/Kconfig | 8 +++++++
drivers/nvmem/layouts/Makefile | 1 +
drivers/nvmem/layouts/fixed.c | 41 ++++++++++++++++++++++++++++++++++
3 files changed, 50 insertions(+)
create mode 100644 drivers/nvmem/layouts/fixed.c

diff --git a/drivers/nvmem/layouts/Kconfig b/drivers/nvmem/layouts/Kconfig
index 7ff1ee1c1f05..2ebbde7b15b2 100644
--- a/drivers/nvmem/layouts/Kconfig
+++ b/drivers/nvmem/layouts/Kconfig
@@ -2,6 +2,14 @@

menu "Layout Types"

+config NVMEM_LAYOUT_FIXED
+ tristate "Fixed cells layout support"
+ help
+ Say Y here if you want to support layout with fixed cells (hardcoded
+ offsets and sizes).
+
+ If unsure, say N.
+
config NVMEM_LAYOUT_SL28_VPD
tristate "Kontron sl28 VPD layout support"
select CRC8
diff --git a/drivers/nvmem/layouts/Makefile b/drivers/nvmem/layouts/Makefile
index 2974bd7d33ed..449dd893f968 100644
--- a/drivers/nvmem/layouts/Makefile
+++ b/drivers/nvmem/layouts/Makefile
@@ -3,5 +3,6 @@
# Makefile for nvmem layouts.
#

+obj-$(CONFIG_NVMEM_LAYOUT_FIXED) += fixed.o
obj-$(CONFIG_NVMEM_LAYOUT_SL28_VPD) += sl28vpd.o
obj-$(CONFIG_NVMEM_LAYOUT_ONIE_TLV) += onie-tlv.o
diff --git a/drivers/nvmem/layouts/fixed.c b/drivers/nvmem/layouts/fixed.c
new file mode 100644
index 000000000000..b8d2f141d272
--- /dev/null
+++ b/drivers/nvmem/layouts/fixed.c
@@ -0,0 +1,41 @@
+// SPDX-License-Identifier: GPL-2.0
+
+#include <linux/module.h>
+#include <linux/nvmem-consumer.h>
+#include <linux/nvmem-provider.h>
+#include <linux/of.h>
+
+static int fixed_add_cells(struct device *dev, struct nvmem_device *nvmem,
+ struct nvmem_layout *layout)
+{
+ struct device_node *layout_np;
+ int err;
+
+ layout_np = of_nvmem_layout_get_container(nvmem);
+ if (!layout_np)
+ return -ENOENT;
+
+ err = nvmem_add_cells_from_of(nvmem, layout_np);
+
+ of_node_put(layout_np);
+
+ return err;
+}
+
+static const struct of_device_id fixed_of_match_table[] = {
+ { .compatible = "fixed-layout" },
+ {},
+};
+MODULE_DEVICE_TABLE(of, fixed_of_match_table);
+
+struct nvmem_layout fixed_nvmem_layout = {
+ .name = "fixed-layout",
+ .of_match_table = fixed_of_match_table,
+ .add_cells = fixed_add_cells,
+};
+
+module_nvmem_layout_driver(fixed_nvmem_layout);
+
+MODULE_AUTHOR("Rafał Miłecki");
+MODULE_LICENSE("GPL");
+MODULE_DEVICE_TABLE(of, fixed_of_match_table);
--
2.34.1


2023-03-17 15:55:24

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH V4 4/4] nvmem: layouts: add fixed cells layout

Hi Rafał,

I love your patch! Perhaps something to improve:

[auto build test WARNING on next-20230317]
[cannot apply to robh/for-next krzk-dt/for-next char-misc/char-misc-testing char-misc/char-misc-next char-misc/char-misc-linus linus/master v6.3-rc2 v6.3-rc1 v6.2 v6.3-rc2]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Rafa-Mi-ecki/dt-bindings-nvmem-layouts-add-fixed-layout/20230317-212948
patch link: https://lore.kernel.org/r/20230317132620.31142-5-zajec5%40gmail.com
patch subject: [PATCH V4 4/4] nvmem: layouts: add fixed cells layout
config: sparc-allyesconfig (https://download.01.org/0day-ci/archive/20230317/[email protected]/config)
compiler: sparc64-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/7ffae9ad6cdb83ae60e3eacf96ab779e0b69a65b
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Rafa-Mi-ecki/dt-bindings-nvmem-layouts-add-fixed-layout/20230317-212948
git checkout 7ffae9ad6cdb83ae60e3eacf96ab779e0b69a65b
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sparc olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sparc SHELL=/bin/bash drivers/nvmem/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Link: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All warnings (new ones prefixed by >>):

>> drivers/nvmem/layouts/fixed.c:37:1: warning: data definition has no type or storage class
37 | module_nvmem_layout_driver(fixed_nvmem_layout);
| ^~~~~~~~~~~~~~~~~~~~~~~~~~
drivers/nvmem/layouts/fixed.c:37:1: error: type defaults to 'int' in declaration of 'module_nvmem_layout_driver' [-Werror=implicit-int]
>> drivers/nvmem/layouts/fixed.c:37:1: warning: parameter names (without types) in function declaration
cc1: some warnings being treated as errors


vim +37 drivers/nvmem/layouts/fixed.c

36
> 37 module_nvmem_layout_driver(fixed_nvmem_layout);
38

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

2023-03-17 16:05:38

by Rafał Miłecki

[permalink] [raw]
Subject: Re: [PATCH V4 4/4] nvmem: layouts: add fixed cells layout

On 17.03.2023 16:54, kernel test robot wrote:
> I love your patch! Perhaps something to improve:
>
> [auto build test WARNING on next-20230317]
> [cannot apply to robh/for-next krzk-dt/for-next char-misc/char-misc-testing char-misc/char-misc-next char-misc/char-misc-linus linus/master v6.3-rc2 v6.3-rc1 v6.2 v6.3-rc2]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch#_base_tree_information]
>
> url: https://github.com/intel-lab-lkp/linux/commits/Rafa-Mi-ecki/dt-bindings-nvmem-layouts-add-fixed-layout/20230317-212948
> patch link: https://lore.kernel.org/r/20230317132620.31142-5-zajec5%40gmail.com
> patch subject: [PATCH V4 4/4] nvmem: layouts: add fixed cells layout
> config: sparc-allyesconfig (https://download.01.org/0day-ci/archive/20230317/[email protected]/config)
> compiler: sparc64-linux-gcc (GCC) 12.1.0
> reproduce (this is a W=1 build):
> wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # https://github.com/intel-lab-lkp/linux/commit/7ffae9ad6cdb83ae60e3eacf96ab779e0b69a65b
> git remote add linux-review https://github.com/intel-lab-lkp/linux
> git fetch --no-tags linux-review Rafa-Mi-ecki/dt-bindings-nvmem-layouts-add-fixed-layout/20230317-212948
> git checkout 7ffae9ad6cdb83ae60e3eacf96ab779e0b69a65b
> # save the config file
> mkdir build_dir && cp config build_dir/.config
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sparc olddefconfig
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=sparc SHELL=/bin/bash drivers/nvmem/
>
> If you fix the issue, kindly add following tag where applicable
> | Reported-by: kernel test robot <[email protected]>
> | Link: https://lore.kernel.org/oe-kbuild-all/[email protected]/
>
> All warnings (new ones prefixed by >>):
>
>>> drivers/nvmem/layouts/fixed.c:37:1: warning: data definition has no type or storage class
> 37 | module_nvmem_layout_driver(fixed_nvmem_layout);
> | ^~~~~~~~~~~~~~~~~~~~~~~~~~
> drivers/nvmem/layouts/fixed.c:37:1: error: type defaults to 'int' in declaration of 'module_nvmem_layout_driver' [-Werror=implicit-int]
>>> drivers/nvmem/layouts/fixed.c:37:1: warning: parameter names (without types) in function declaration
> cc1: some warnings being treated as errors

I reported that to Miquel already, he's going to improve his patch:
https://lore.kernel.org/lkml/20230316173741.4f572068@xps-13/


> vim +37 drivers/nvmem/layouts/fixed.c
>
> 36
> > 37 module_nvmem_layout_driver(fixed_nvmem_layout);
> 38
>

2023-03-18 00:06:35

by kernel test robot

[permalink] [raw]
Subject: Re: [PATCH V4 3/4] nvmem: core: export nvmem_add_cells_from_of()

Hi Rafał,

I love your patch! Yet something to improve:

[auto build test ERROR on next-20230317]
[cannot apply to robh/for-next krzk-dt/for-next char-misc/char-misc-testing char-misc/char-misc-next char-misc/char-misc-linus linus/master v6.3-rc2 v6.3-rc1 v6.2 v6.3-rc2]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch#_base_tree_information]

url: https://github.com/intel-lab-lkp/linux/commits/Rafa-Mi-ecki/dt-bindings-nvmem-layouts-add-fixed-layout/20230317-212948
patch link: https://lore.kernel.org/r/20230317132620.31142-4-zajec5%40gmail.com
patch subject: [PATCH V4 3/4] nvmem: core: export nvmem_add_cells_from_of()
config: powerpc-allnoconfig (https://download.01.org/0day-ci/archive/20230318/[email protected]/config)
compiler: powerpc-linux-gcc (GCC) 12.1.0
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# https://github.com/intel-lab-lkp/linux/commit/70d21b7988db0cad28a2cb4b0d7f5d77d587a51f
git remote add linux-review https://github.com/intel-lab-lkp/linux
git fetch --no-tags linux-review Rafa-Mi-ecki/dt-bindings-nvmem-layouts-add-fixed-layout/20230317-212948
git checkout 70d21b7988db0cad28a2cb4b0d7f5d77d587a51f
# save the config file
mkdir build_dir && cp config build_dir/.config
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=powerpc olddefconfig
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=gcc-12.1.0 make.cross W=1 O=build_dir ARCH=powerpc SHELL=/bin/bash arch/powerpc/kernel/

If you fix the issue, kindly add following tag where applicable
| Reported-by: kernel test robot <[email protected]>
| Link: https://lore.kernel.org/oe-kbuild-all/[email protected]/

All errors (new ones prefixed by >>):

In file included from include/linux/rtc.h:18,
from arch/powerpc/kernel/time.c:48:
>> include/linux/nvmem-provider.h:230:12: error: 'nvmem_add_cells_from_of' defined but not used [-Werror=unused-function]
230 | static int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct device_node *np)
| ^~~~~~~~~~~~~~~~~~~~~~~
cc1: all warnings being treated as errors


vim +/nvmem_add_cells_from_of +230 include/linux/nvmem-provider.h

229
> 230 static int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct device_node *np)
231 {
232 return -EOPNOTSUPP;
233 }
234

--
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests

2023-03-20 08:23:23

by Michael Walle

[permalink] [raw]
Subject: Re: [PATCH V4 3/4] nvmem: core: export nvmem_add_cells_from_of()

Am 2023-03-17 14:26, schrieb Rafał Miłecki:
> From: Rafał Miłecki <[email protected]>
>
> This symbol can be cleanly re-used by the fixed NVMEM layout driver.
> Allow passing DT node as argument to make it a bit more generic.
>
> Signed-off-by: Rafał Miłecki <[email protected]>
> ---
> drivers/nvmem/core.c | 7 ++++---
> include/linux/nvmem-provider.h | 7 +++++++
> 2 files changed, 11 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/nvmem/core.c b/drivers/nvmem/core.c
> index 212c5ba5789f..985a42cfb0a2 100644
> --- a/drivers/nvmem/core.c
> +++ b/drivers/nvmem/core.c
> @@ -694,7 +694,7 @@ static int nvmem_validate_keepouts(struct
> nvmem_device *nvmem)
> return 0;
> }
>
> -static int nvmem_add_cells_from_of(struct nvmem_device *nvmem)
> +int nvmem_add_cells_from_of(struct nvmem_device *nvmem, struct
> device_node *np)

I'm not sure, how to feel about exposing an "internal" function to
the layouts module. I mean all these nvmem_add_cells_from_* are internal
to the core. Also the help text of the add_cells() callback tells you to
use nvmem_add_one_cell().

Although there is a bit of code duplication, I'd rather refactor
the nvmem_add_cells_from_of() to split it into parsing and adding.
Then re-use just the parsing from the fixed layout module and
call the appropriate nvmem_add_one_cell() yourself there.

-michael