Commit | Line | Data |
---|---|---|
ec8f24b7 | 1 | # SPDX-License-Identifier: GPL-2.0-only |
18da2c9e | 2 | menuconfig LIBNVDIMM |
b94d5230 DW |
3 | tristate "NVDIMM (Non-Volatile Memory Device) Support" |
4 | depends on PHYS_ADDR_T_64BIT | |
29b9aa0a | 5 | depends on HAS_IOMEM |
b94d5230 | 6 | depends on BLK_DEV |
33dd7075 | 7 | select MEMREGION |
b94d5230 DW |
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)) | |
5212e11f VV |
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. | |
18da2c9e DW |
19 | |
20 | if LIBNVDIMM | |
21 | ||
22 | config BLK_DEV_PMEM | |
23 | tristate "PMEM: Persistent memory block device support" | |
24 | default LIBNVDIMM | |
2080e88a | 25 | select DAX_DRIVER |
5212e11f | 26 | select ND_BTT if BTT |
e1455744 | 27 | select ND_PFN if NVDIMM_PFN |
18da2c9e DW |
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 | |
8c27ceff | 34 | Documentation/admin-guide/kernel-parameters.rst). This driver converts |
18da2c9e DW |
35 | these persistent memory ranges into block devices that are |
36 | capable of DAX (direct-access) file system mappings. See | |
ae4a0502 | 37 | Documentation/driver-api/nvdimm/nvdimm.rst for more details. |
18da2c9e DW |
38 | |
39 | Say Y if you want to use an NVDIMM | |
40 | ||
047fc8a1 RZ |
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. | |
49 | ||
50 | Say Y if your platform firmware emits an ACPI.NFIT table | |
51 | (CONFIG_ACPI_NFIT), or otherwise exposes BLK-mode | |
52 | capabilities. | |
53 | ||
e1455744 DW |
54 | config ND_CLAIM |
55 | bool | |
56 | ||
5212e11f VV |
57 | config ND_BTT |
58 | tristate | |
59 | ||
8c2f7e86 | 60 | config BTT |
5212e11f VV |
61 | bool "BTT: Block Translation Table (atomic sector updates)" |
62 | default y if LIBNVDIMM | |
e1455744 | 63 | select ND_CLAIM |
5212e11f VV |
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...). | |
73 | ||
74 | Select Y if unsure | |
8c2f7e86 | 75 | |
e1455744 DW |
76 | config ND_PFN |
77 | tristate | |
78 | ||
79 | config NVDIMM_PFN | |
80 | bool "PFN: Map persistent (device) memory" | |
81 | default LIBNVDIMM | |
32ab0a3f | 82 | depends on ZONE_DEVICE |
e1455744 DW |
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. | |
91 | ||
92 | Select Y if unsure | |
93 | ||
cd03412a | 94 | config NVDIMM_DAX |
867dfe34 | 95 | bool "NVDIMM DAX: Raw access to persistent memory" |
cd03412a DW |
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 | |
83fc61a5 | 101 | persistent memory, this capability provides a mechanism to |
cd03412a DW |
102 | sub-divide a namespace into character devices that can only be |
103 | accessed via DAX (mmap(2)). | |
104 | ||
105 | Select Y if unsure | |
106 | ||
71719760 | 107 | config OF_PMEM |
f22acf82 | 108 | tristate "Device-tree support for persistent memory regions" |
71719760 OH |
109 | depends on OF |
110 | default LIBNVDIMM | |
111 | help | |
112 | Allows regions of persistent memory to be described in the | |
113 | device-tree. | |
114 | ||
115 | Select Y if unsure. | |
116 | ||
4c6926a2 DJ |
117 | config NVDIMM_KEYS |
118 | def_bool y | |
119 | depends on ENCRYPTED_KEYS | |
120 | depends on (LIBNVDIMM=ENCRYPTED_KEYS) || LIBNVDIMM=m | |
121 | ||
62974fc3 DW |
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. | |
133 | ||
18da2c9e | 134 | endif |