Merge tag 'block-5.11-2021-01-10' of git://git.kernel.dk/linux-block
[linux/fpc-iii.git] / drivers / nvdimm / Kconfig
blobb7d1eb38b27d464f15b610908ae1a7d8ac39b6a3
1 # SPDX-License-Identifier: GPL-2.0-only
2 menuconfig LIBNVDIMM
3         tristate "NVDIMM (Non-Volatile Memory Device) Support"
4         depends on PHYS_ADDR_T_64BIT
5         depends on HAS_IOMEM
6         depends on BLK_DEV
7         select MEMREGION
8         help
9           Generic support for non-volatile memory devices including
10           ACPI-6-NFIT defined resources.  On platforms that define an
11           NFIT, or otherwise can discover NVDIMM resources, a libnvdimm
12           bus is registered to advertise PMEM (persistent memory)
13           namespaces (/dev/pmemX) and BLK (sliding mmio window(s))
14           namespaces (/dev/ndblkX.Y). A PMEM namespace refers to a
15           memory resource that may span multiple DIMMs and support DAX
16           (see CONFIG_DAX).  A BLK namespace refers to an NVDIMM control
17           region which exposes an mmio register set for windowed access
18           mode to non-volatile memory.
20 if LIBNVDIMM
22 config BLK_DEV_PMEM
23         tristate "PMEM: Persistent memory block device support"
24         default LIBNVDIMM
25         select DAX_DRIVER
26         select ND_BTT if BTT
27         select ND_PFN if NVDIMM_PFN
28         help
29           Memory ranges for PMEM are described by either an NFIT
30           (NVDIMM Firmware Interface Table, see CONFIG_NFIT_ACPI), a
31           non-standard OEM-specific E820 memory type (type-12, see
32           CONFIG_X86_PMEM_LEGACY), or it is manually specified by the
33           'memmap=nn[KMG]!ss[KMG]' kernel command line (see
34           Documentation/admin-guide/kernel-parameters.rst).  This driver converts
35           these persistent memory ranges into block devices that are
36           capable of DAX (direct-access) file system mappings.  See
37           Documentation/driver-api/nvdimm/nvdimm.rst for more details.
39           Say Y if you want to use an NVDIMM
41 config ND_BLK
42         tristate "BLK: Block data window (aperture) device support"
43         default LIBNVDIMM
44         select ND_BTT if BTT
45         help
46           Support NVDIMMs, or other devices, that implement a BLK-mode
47           access capability.  BLK-mode access uses memory-mapped-i/o
48           apertures to access persistent media.
50           Say Y if your platform firmware emits an ACPI.NFIT table
51           (CONFIG_ACPI_NFIT), or otherwise exposes BLK-mode
52           capabilities.
54 config ND_CLAIM
55         bool
57 config ND_BTT
58         tristate
60 config BTT
61         bool "BTT: Block Translation Table (atomic sector updates)"
62         default y if LIBNVDIMM
63         select ND_CLAIM
64         help
65           The Block Translation Table (BTT) provides atomic sector
66           update semantics for persistent memory devices, so that
67           applications that rely on sector writes not being torn (a
68           guarantee that typical disks provide) can continue to do so.
69           The BTT manifests itself as an alternate personality for an
70           NVDIMM namespace, i.e. a namespace can be in raw mode (pmemX,
71           ndblkX.Y, etc...), or 'sectored' mode, (pmemXs, ndblkX.Ys,
72           etc...).
74           Select Y if unsure
76 config ND_PFN
77         tristate
79 config NVDIMM_PFN
80         bool "PFN: Map persistent (device) memory"
81         default LIBNVDIMM
82         depends on ZONE_DEVICE
83         select ND_CLAIM
84         help
85           Map persistent memory, i.e. advertise it to the memory
86           management sub-system.  By default persistent memory does
87           not support direct I/O, RDMA, or any other usage that
88           requires a 'struct page' to mediate an I/O request.  This
89           driver allocates and initializes the infrastructure needed
90           to support those use cases.
92           Select Y if unsure
94 config NVDIMM_DAX
95         bool "NVDIMM DAX: Raw access to persistent memory"
96         default LIBNVDIMM
97         depends on NVDIMM_PFN
98         help
99           Support raw device dax access to a persistent memory
100           namespace.  For environments that want to hard partition
101           persistent memory, this capability provides a mechanism to
102           sub-divide a namespace into character devices that can only be
103           accessed via DAX (mmap(2)).
105           Select Y if unsure
107 config OF_PMEM
108         tristate "Device-tree support for persistent memory regions"
109         depends on OF
110         default LIBNVDIMM
111         help
112           Allows regions of persistent memory to be described in the
113           device-tree.
115           Select Y if unsure.
117 config NVDIMM_KEYS
118         def_bool y
119         depends on ENCRYPTED_KEYS
120         depends on (LIBNVDIMM=ENCRYPTED_KEYS) || LIBNVDIMM=m
122 config NVDIMM_TEST_BUILD
123         tristate "Build the unit test core"
124         depends on m
125         depends on COMPILE_TEST && X86_64
126         default m if COMPILE_TEST
127         help
128           Build the core of the unit test infrastructure. The result of
129           this build is non-functional for unit test execution, but it
130           otherwise helps catch build errors induced by changes to the
131           core devm_memremap_pages() implementation and other
132           infrastructure.
134 endif