1ec8f24b7SThomas Gleixner# SPDX-License-Identifier: GPL-2.0-only 218da2c9eSDan Williamsmenuconfig LIBNVDIMM 3b94d5230SDan Williams tristate "NVDIMM (Non-Volatile Memory Device) Support" 4b94d5230SDan Williams depends on PHYS_ADDR_T_64BIT 529b9aa0aSDan Williams depends on HAS_IOMEM 6b94d5230SDan Williams depends on BLK_DEV 7b94d5230SDan Williams help 8b94d5230SDan Williams Generic support for non-volatile memory devices including 9b94d5230SDan Williams ACPI-6-NFIT defined resources. On platforms that define an 10b94d5230SDan Williams NFIT, or otherwise can discover NVDIMM resources, a libnvdimm 11b94d5230SDan Williams bus is registered to advertise PMEM (persistent memory) 12b94d5230SDan Williams namespaces (/dev/pmemX) and BLK (sliding mmio window(s)) 135212e11fSVishal Verma namespaces (/dev/ndblkX.Y). A PMEM namespace refers to a 145212e11fSVishal Verma memory resource that may span multiple DIMMs and support DAX 155212e11fSVishal Verma (see CONFIG_DAX). A BLK namespace refers to an NVDIMM control 165212e11fSVishal Verma region which exposes an mmio register set for windowed access 175212e11fSVishal Verma mode to non-volatile memory. 1818da2c9eSDan Williams 1918da2c9eSDan Williamsif LIBNVDIMM 2018da2c9eSDan Williams 2118da2c9eSDan Williamsconfig BLK_DEV_PMEM 2218da2c9eSDan Williams tristate "PMEM: Persistent memory block device support" 2318da2c9eSDan Williams default LIBNVDIMM 242080e88aSDan Williams select DAX_DRIVER 255212e11fSVishal Verma select ND_BTT if BTT 26e1455744SDan Williams select ND_PFN if NVDIMM_PFN 2718da2c9eSDan Williams help 2818da2c9eSDan Williams Memory ranges for PMEM are described by either an NFIT 2918da2c9eSDan Williams (NVDIMM Firmware Interface Table, see CONFIG_NFIT_ACPI), a 3018da2c9eSDan Williams non-standard OEM-specific E820 memory type (type-12, see 3118da2c9eSDan Williams CONFIG_X86_PMEM_LEGACY), or it is manually specified by the 3218da2c9eSDan Williams 'memmap=nn[KMG]!ss[KMG]' kernel command line (see 338c27ceffSMauro Carvalho Chehab Documentation/admin-guide/kernel-parameters.rst). This driver converts 3418da2c9eSDan Williams these persistent memory ranges into block devices that are 3518da2c9eSDan Williams capable of DAX (direct-access) file system mappings. See 36*ae4a0502SMauro Carvalho Chehab Documentation/driver-api/nvdimm/nvdimm.rst for more details. 3718da2c9eSDan Williams 3818da2c9eSDan Williams Say Y if you want to use an NVDIMM 3918da2c9eSDan Williams 40047fc8a1SRoss Zwislerconfig ND_BLK 41047fc8a1SRoss Zwisler tristate "BLK: Block data window (aperture) device support" 42047fc8a1SRoss Zwisler default LIBNVDIMM 43047fc8a1SRoss Zwisler select ND_BTT if BTT 44047fc8a1SRoss Zwisler help 45047fc8a1SRoss Zwisler Support NVDIMMs, or other devices, that implement a BLK-mode 46047fc8a1SRoss Zwisler access capability. BLK-mode access uses memory-mapped-i/o 47047fc8a1SRoss Zwisler apertures to access persistent media. 48047fc8a1SRoss Zwisler 49047fc8a1SRoss Zwisler Say Y if your platform firmware emits an ACPI.NFIT table 50047fc8a1SRoss Zwisler (CONFIG_ACPI_NFIT), or otherwise exposes BLK-mode 51047fc8a1SRoss Zwisler capabilities. 52047fc8a1SRoss Zwisler 53e1455744SDan Williamsconfig ND_CLAIM 54e1455744SDan Williams bool 55e1455744SDan Williams 565212e11fSVishal Vermaconfig ND_BTT 575212e11fSVishal Verma tristate 585212e11fSVishal Verma 598c2f7e86SDan Williamsconfig BTT 605212e11fSVishal Verma bool "BTT: Block Translation Table (atomic sector updates)" 615212e11fSVishal Verma default y if LIBNVDIMM 62e1455744SDan Williams select ND_CLAIM 635212e11fSVishal Verma help 645212e11fSVishal Verma The Block Translation Table (BTT) provides atomic sector 655212e11fSVishal Verma update semantics for persistent memory devices, so that 665212e11fSVishal Verma applications that rely on sector writes not being torn (a 675212e11fSVishal Verma guarantee that typical disks provide) can continue to do so. 685212e11fSVishal Verma The BTT manifests itself as an alternate personality for an 695212e11fSVishal Verma NVDIMM namespace, i.e. a namespace can be in raw mode (pmemX, 705212e11fSVishal Verma ndblkX.Y, etc...), or 'sectored' mode, (pmemXs, ndblkX.Ys, 715212e11fSVishal Verma etc...). 725212e11fSVishal Verma 735212e11fSVishal Verma Select Y if unsure 748c2f7e86SDan Williams 75e1455744SDan Williamsconfig ND_PFN 76e1455744SDan Williams tristate 77e1455744SDan Williams 78e1455744SDan Williamsconfig NVDIMM_PFN 79e1455744SDan Williams bool "PFN: Map persistent (device) memory" 80e1455744SDan Williams default LIBNVDIMM 8132ab0a3fSDan Williams depends on ZONE_DEVICE 82e1455744SDan Williams select ND_CLAIM 83e1455744SDan Williams help 84e1455744SDan Williams Map persistent memory, i.e. advertise it to the memory 85e1455744SDan Williams management sub-system. By default persistent memory does 86e1455744SDan Williams not support direct I/O, RDMA, or any other usage that 87e1455744SDan Williams requires a 'struct page' to mediate an I/O request. This 88e1455744SDan Williams driver allocates and initializes the infrastructure needed 89e1455744SDan Williams to support those use cases. 90e1455744SDan Williams 91e1455744SDan Williams Select Y if unsure 92e1455744SDan Williams 93cd03412aSDan Williamsconfig NVDIMM_DAX 94867dfe34SArnd Bergmann bool "NVDIMM DAX: Raw access to persistent memory" 95cd03412aSDan Williams default LIBNVDIMM 96cd03412aSDan Williams depends on NVDIMM_PFN 97cd03412aSDan Williams help 98cd03412aSDan Williams Support raw device dax access to a persistent memory 99cd03412aSDan Williams namespace. For environments that want to hard partition 10083fc61a5SMasanari Iida persistent memory, this capability provides a mechanism to 101cd03412aSDan Williams sub-divide a namespace into character devices that can only be 102cd03412aSDan Williams accessed via DAX (mmap(2)). 103cd03412aSDan Williams 104cd03412aSDan Williams Select Y if unsure 105cd03412aSDan Williams 10671719760SOliver O'Halloranconfig OF_PMEM 107f22acf82SDan Williams tristate "Device-tree support for persistent memory regions" 10871719760SOliver O'Halloran depends on OF 10971719760SOliver O'Halloran default LIBNVDIMM 11071719760SOliver O'Halloran help 11171719760SOliver O'Halloran Allows regions of persistent memory to be described in the 11271719760SOliver O'Halloran device-tree. 11371719760SOliver O'Halloran 11471719760SOliver O'Halloran Select Y if unsure. 11571719760SOliver O'Halloran 1164c6926a2SDave Jiangconfig NVDIMM_KEYS 1174c6926a2SDave Jiang def_bool y 1184c6926a2SDave Jiang depends on ENCRYPTED_KEYS 1194c6926a2SDave Jiang depends on (LIBNVDIMM=ENCRYPTED_KEYS) || LIBNVDIMM=m 1204c6926a2SDave Jiang 12118da2c9eSDan Williamsendif 122