GNU Linux-libre 4.14.266-gnu1
[releases.git] / drivers / nvdimm / Kconfig
1 menuconfig LIBNVDIMM
2         tristate "NVDIMM (Non-Volatile Memory Device) Support"
3         depends on PHYS_ADDR_T_64BIT
4         depends on HAS_IOMEM
5         depends on BLK_DEV
6         help
7           Generic support for non-volatile memory devices including
8           ACPI-6-NFIT defined resources.  On platforms that define an
9           NFIT, or otherwise can discover NVDIMM resources, a libnvdimm
10           bus is registered to advertise PMEM (persistent memory)
11           namespaces (/dev/pmemX) and BLK (sliding mmio window(s))
12           namespaces (/dev/ndblkX.Y). A PMEM namespace refers to a
13           memory resource that may span multiple DIMMs and support DAX
14           (see CONFIG_DAX).  A BLK namespace refers to an NVDIMM control
15           region which exposes an mmio register set for windowed access
16           mode to non-volatile memory.
17
18 if LIBNVDIMM
19
20 config BLK_DEV_PMEM
21         tristate "PMEM: Persistent memory block device support"
22         default LIBNVDIMM
23         select DAX
24         select ND_BTT if BTT
25         select ND_PFN if NVDIMM_PFN
26         help
27           Memory ranges for PMEM are described by either an NFIT
28           (NVDIMM Firmware Interface Table, see CONFIG_NFIT_ACPI), a
29           non-standard OEM-specific E820 memory type (type-12, see
30           CONFIG_X86_PMEM_LEGACY), or it is manually specified by the
31           'memmap=nn[KMG]!ss[KMG]' kernel command line (see
32           Documentation/admin-guide/kernel-parameters.rst).  This driver converts
33           these persistent memory ranges into block devices that are
34           capable of DAX (direct-access) file system mappings.  See
35           Documentation/nvdimm/nvdimm.txt for more details.
36
37           Say Y if you want to use an NVDIMM
38
39 config ND_BLK
40         tristate "BLK: Block data window (aperture) device support"
41         default LIBNVDIMM
42         select ND_BTT if BTT
43         help
44           Support NVDIMMs, or other devices, that implement a BLK-mode
45           access capability.  BLK-mode access uses memory-mapped-i/o
46           apertures to access persistent media.
47
48           Say Y if your platform firmware emits an ACPI.NFIT table
49           (CONFIG_ACPI_NFIT), or otherwise exposes BLK-mode
50           capabilities.
51
52 config ND_CLAIM
53         bool
54
55 config ND_BTT
56         tristate
57
58 config BTT
59         bool "BTT: Block Translation Table (atomic sector updates)"
60         default y if LIBNVDIMM
61         select ND_CLAIM
62         help
63           The Block Translation Table (BTT) provides atomic sector
64           update semantics for persistent memory devices, so that
65           applications that rely on sector writes not being torn (a
66           guarantee that typical disks provide) can continue to do so.
67           The BTT manifests itself as an alternate personality for an
68           NVDIMM namespace, i.e. a namespace can be in raw mode (pmemX,
69           ndblkX.Y, etc...), or 'sectored' mode, (pmemXs, ndblkX.Ys,
70           etc...).
71
72           Select Y if unsure
73
74 config ND_PFN
75         tristate
76
77 config NVDIMM_PFN
78         bool "PFN: Map persistent (device) memory"
79         default LIBNVDIMM
80         depends on ZONE_DEVICE
81         select ND_CLAIM
82         help
83           Map persistent memory, i.e. advertise it to the memory
84           management sub-system.  By default persistent memory does
85           not support direct I/O, RDMA, or any other usage that
86           requires a 'struct page' to mediate an I/O request.  This
87           driver allocates and initializes the infrastructure needed
88           to support those use cases.
89
90           Select Y if unsure
91
92 config NVDIMM_DAX
93         bool "NVDIMM DAX: Raw access to persistent memory"
94         default LIBNVDIMM
95         depends on NVDIMM_PFN
96         help
97           Support raw device dax access to a persistent memory
98           namespace.  For environments that want to hard partition
99           peristent memory, this capability provides a mechanism to
100           sub-divide a namespace into character devices that can only be
101           accessed via DAX (mmap(2)).
102
103           Select Y if unsure
104
105 endif