Re: [PATCH 2/3] libnvdimm: Add a device-tree interface
Rob Herringwrites: > On Thu, Nov 16, 2017 at 04:51:30AM +1100, Oliver O'Halloran wrote: ... >> diff --git a/drivers/nvdimm/of_nvdimm.c b/drivers/nvdimm/of_nvdimm.c >> new file mode 100644 >> index ..765cbbae8bcb >> --- /dev/null >> +++ b/drivers/nvdimm/of_nvdimm.c >> @@ -0,0 +1,202 @@ >> +/* >> + * Copyright 2017, IBM Corporation >> + * >> + * This program is free software; you can redistribute it and/or modify >> + * it under the terms of the GNU General Public License as published by >> + * the Free Software Foundation; either version 2 of the License, or >> + * (at your option) any later version. >> + * >> + * This program is distributed in the hope that it will be useful, >> + * but WITHOUT ANY WARRANTY; without even the implied warranty of >> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the >> + * GNU General Public License for more details. >> + * >> + * You should have received a copy of the GNU General Public License >> + * along with this program; if not, you can access it online at >> + * http://www.gnu.org/licenses/gpl-2.0.html. > > This can be SPDX tag. Specifically: // SPDX-License-Identifier: GPL-2.0+ /* * Copyright 2017, IBM Corporation */ ... cheers
Re: [PATCH 2/3] libnvdimm: Add a device-tree interface
On Thu, Nov 16, 2017 at 04:51:30AM +1100, Oliver O'Halloran wrote: > A fairly bare-bones set of device-tree bindings so libnvdimm can be used > on powerpc and other device-tree based platforms. > > Cc: devicet...@vger.kernel.org > Signed-off-by: Oliver O'Halloran> --- > .../devicetree/bindings/nvdimm/nvdimm-bus.txt | 69 +++ Also, please split bindings to a separate patch. > MAINTAINERS| 8 + > drivers/nvdimm/Kconfig | 10 + > drivers/nvdimm/Makefile| 1 + > drivers/nvdimm/of_nvdimm.c | 202 > + > 5 files changed, 290 insertions(+) > create mode 100644 Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt > create mode 100644 drivers/nvdimm/of_nvdimm.c
Re: [PATCH 2/3] libnvdimm: Add a device-tree interface
On Thu, Nov 16, 2017 at 04:51:30AM +1100, Oliver O'Halloran wrote: > A fairly bare-bones set of device-tree bindings so libnvdimm can be used > on powerpc and other device-tree based platforms. > > Cc: devicet...@vger.kernel.org > Signed-off-by: Oliver O'Halloran> --- > .../devicetree/bindings/nvdimm/nvdimm-bus.txt | 69 +++ > MAINTAINERS| 8 + > drivers/nvdimm/Kconfig | 10 + > drivers/nvdimm/Makefile| 1 + > drivers/nvdimm/of_nvdimm.c | 202 > + > 5 files changed, 290 insertions(+) > create mode 100644 Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt > create mode 100644 drivers/nvdimm/of_nvdimm.c > > diff --git a/Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt > b/Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt > new file mode 100644 > index ..491e7c4900ed > --- /dev/null > +++ b/Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt > @@ -0,0 +1,69 @@ > +Device-tree bindings for nonvolatile-memory / NVDIMMs > +- > + > +Non-volatile DIMMs are memory modules used to provide (cacheable) main > memory that > +retains its contents across power cycles. In more practical terms, they are > kind > +of storage device where the contents can be accessed by the CPU directly, > +rather than indirectly via a storage controller or similar. This can provide > +substantial performance improvements for applications designed to take > +advantage of in-memory storage. > + > +This binding provides a way to describe memory regions that should be managed > +by an NVDIMM storage driver (libNVDIMM in Linux) and some of the associated > +metadata. The binding itself is split into two main parts: A container bus > and > +its sub-nodes which describe which memory address ranges corresponding to > +NVDIMM backed memory. > + > +Bindings for the container bus: > +-- > + > +Required properties: > + - compatible = "nvdimm-bus"; > + - ranges; > + A blank ranges property is required because the sub-nodes have > + addresses in the system's physical address space. > + > +The use of a container bus is mainly to handle future expansion of the > binding. For > +comparison the ACPI equivalent of this binding (NFIT) describes: Memory > regions, DIMM > +control structures, Block mode DIMM control structures, interleave sets, and > more. Some > +of these structures cross reference each other so everyone should be happier > if we keep > +it relatively self contained. Will adding any of these things need unit addresses and colide with the existing nodes below? IOW, at one level there's only 1 number space. > + > +Bindings for the region nodes: > +- > + > +Required properties: > + - compatible = "nvdimm-persistent" or "nvdimm-volatile" > + > + The "nvdimm-persistent" region type indicates that this memory > region > + is actually a persistent region. The volatile type is mainly > useful > + for testing and RAM disks that can persist across kexec. > + > + - reg = ; > + The reg property should only contain one address range. > + > +Optional properties: > + - Any relevant NUMA assocativity properties for the target platform. > + > +A complete example: > + > + > +/ { > + #size-cells = <1>; > + #address-cells = <1>; > + > + nonvolatile-memory { > + compatible = "nonvolatile-memory"; > + ranges; > + > + region@5000 { > + compatible = "nvdimm-persistent"; > + reg = <0x5000 0x1000>; > + }; > + > + region@6000 { > + compatible = "nvdimm-volatile"; > + reg = <0x6000 0x1000>; > + }; > + }; > +}; > diff --git a/MAINTAINERS b/MAINTAINERS > index 65eff7857ec3..0350bf5a94d2 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -7875,6 +7875,14 @@ Q: > https://patchwork.kernel.org/project/linux-nvdimm/list/ > S: Supported > F: drivers/nvdimm/pmem* > > +LIBNVDIMM: DEVICETREE BINDINGS > +M: Oliver O'Halloran > +L: linux-nvd...@lists.01.org > +Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ > +S: Supported > +F: drivers/nvdimm/of_nvdimm.c > +F: Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt > + > LIBNVDIMM: NON-VOLATILE MEMORY DEVICE SUBSYSTEM > M: Dan Williams > L: linux-nvd...@lists.01.org > diff --git a/drivers/nvdimm/Kconfig b/drivers/nvdimm/Kconfig > index 5bdd499b5f4f..72d147b55596 100644 > --- a/drivers/nvdimm/Kconfig > +++ b/drivers/nvdimm/Kconfig > @@ -102,4 +102,14 @@ config NVDIMM_DAX > > Select Y if unsure > > +config OF_NVDIMM > + tristate
[PATCH 2/3] libnvdimm: Add a device-tree interface
A fairly bare-bones set of device-tree bindings so libnvdimm can be used on powerpc and other device-tree based platforms. Cc: devicet...@vger.kernel.org Signed-off-by: Oliver O'Halloran--- .../devicetree/bindings/nvdimm/nvdimm-bus.txt | 69 +++ MAINTAINERS| 8 + drivers/nvdimm/Kconfig | 10 + drivers/nvdimm/Makefile| 1 + drivers/nvdimm/of_nvdimm.c | 202 + 5 files changed, 290 insertions(+) create mode 100644 Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt create mode 100644 drivers/nvdimm/of_nvdimm.c diff --git a/Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt b/Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt new file mode 100644 index ..491e7c4900ed --- /dev/null +++ b/Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt @@ -0,0 +1,69 @@ +Device-tree bindings for nonvolatile-memory / NVDIMMs +- + +Non-volatile DIMMs are memory modules used to provide (cacheable) main memory that +retains its contents across power cycles. In more practical terms, they are kind +of storage device where the contents can be accessed by the CPU directly, +rather than indirectly via a storage controller or similar. This can provide +substantial performance improvements for applications designed to take +advantage of in-memory storage. + +This binding provides a way to describe memory regions that should be managed +by an NVDIMM storage driver (libNVDIMM in Linux) and some of the associated +metadata. The binding itself is split into two main parts: A container bus and +its sub-nodes which describe which memory address ranges corresponding to +NVDIMM backed memory. + +Bindings for the container bus: +-- + +Required properties: + - compatible = "nvdimm-bus"; + - ranges; + A blank ranges property is required because the sub-nodes have + addresses in the system's physical address space. + +The use of a container bus is mainly to handle future expansion of the binding. For +comparison the ACPI equivalent of this binding (NFIT) describes: Memory regions, DIMM +control structures, Block mode DIMM control structures, interleave sets, and more. Some +of these structures cross reference each other so everyone should be happier if we keep +it relatively self contained. + +Bindings for the region nodes: +- + +Required properties: + - compatible = "nvdimm-persistent" or "nvdimm-volatile" + + The "nvdimm-persistent" region type indicates that this memory region + is actually a persistent region. The volatile type is mainly useful + for testing and RAM disks that can persist across kexec. + + - reg = ; + The reg property should only contain one address range. + +Optional properties: + - Any relevant NUMA assocativity properties for the target platform. + +A complete example: + + +/ { + #size-cells = <1>; + #address-cells = <1>; + + nonvolatile-memory { + compatible = "nonvolatile-memory"; + ranges; + + region@5000 { + compatible = "nvdimm-persistent"; + reg = <0x5000 0x1000>; + }; + + region@6000 { + compatible = "nvdimm-volatile"; + reg = <0x6000 0x1000>; + }; + }; +}; diff --git a/MAINTAINERS b/MAINTAINERS index 65eff7857ec3..0350bf5a94d2 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7875,6 +7875,14 @@ Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ S: Supported F: drivers/nvdimm/pmem* +LIBNVDIMM: DEVICETREE BINDINGS +M: Oliver O'Halloran +L: linux-nvd...@lists.01.org +Q: https://patchwork.kernel.org/project/linux-nvdimm/list/ +S: Supported +F: drivers/nvdimm/of_nvdimm.c +F: Documentation/devicetree/bindings/nvdimm/nvdimm-bus.txt + LIBNVDIMM: NON-VOLATILE MEMORY DEVICE SUBSYSTEM M: Dan Williams L: linux-nvd...@lists.01.org diff --git a/drivers/nvdimm/Kconfig b/drivers/nvdimm/Kconfig index 5bdd499b5f4f..72d147b55596 100644 --- a/drivers/nvdimm/Kconfig +++ b/drivers/nvdimm/Kconfig @@ -102,4 +102,14 @@ config NVDIMM_DAX Select Y if unsure +config OF_NVDIMM + tristate "Device-tree support for NVDIMMs" + depends on OF + default LIBNVDIMM + help + Allows byte addressable persistent memory regions to be described in the + device-tree. + + Select Y if unsure. + endif diff --git a/drivers/nvdimm/Makefile b/drivers/nvdimm/Makefile index ca6d325438a3..9029511a8486 100644 --- a/drivers/nvdimm/Makefile +++ b/drivers/nvdimm/Makefile @@ -3,6