Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

nfit: add Microsoft NVDIMM DSM command set to white list

Add the Microsoft _DSM command set to the white list of NVDIMM command
sets.

This command set is documented at:

https://msdn.microsoft.com/library/windows/hardware/mt604741

Cc: Pavel Machek <pavel@ucw.cz>
[pavel: fix up braces]
Signed-off-by: Stuart Hayes <stuart.w.hayes@gmail.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>

authored by

stuart hayes and committed by
Dan Williams
e02fb726 6b0a57ed

+12 -4
+7 -4
drivers/acpi/nfit.c
··· 1130 1130 } 1131 1131 1132 1132 /* 1133 - * Until standardization materializes we need to consider up to 3 1133 + * Until standardization materializes we need to consider 4 1134 1134 * different command sets. Note, that checking for function0 (bit0) 1135 1135 * tells us if any commands are reachable through this uuid. 1136 1136 */ 1137 - for (i = NVDIMM_FAMILY_INTEL; i <= NVDIMM_FAMILY_HPE2; i++) 1137 + for (i = NVDIMM_FAMILY_INTEL; i <= NVDIMM_FAMILY_MSFT; i++) 1138 1138 if (acpi_check_dsm(adev_dimm->handle, to_nfit_uuid(i), 1, 1)) 1139 1139 break; 1140 1140 ··· 1144 1144 dsm_mask = 0x3fe; 1145 1145 if (disable_vendor_specific) 1146 1146 dsm_mask &= ~(1 << ND_CMD_VENDOR); 1147 - } else if (nfit_mem->family == NVDIMM_FAMILY_HPE1) 1147 + } else if (nfit_mem->family == NVDIMM_FAMILY_HPE1) { 1148 1148 dsm_mask = 0x1c3c76; 1149 - else if (nfit_mem->family == NVDIMM_FAMILY_HPE2) { 1149 + } else if (nfit_mem->family == NVDIMM_FAMILY_HPE2) { 1150 1150 dsm_mask = 0x1fe; 1151 1151 if (disable_vendor_specific) 1152 1152 dsm_mask &= ~(1 << 8); 1153 + } else if (nfit_mem->family == NVDIMM_FAMILY_MSFT) { 1154 + dsm_mask = 0xffffffff; 1153 1155 } else { 1154 1156 dev_err(dev, "unknown dimm command family\n"); 1155 1157 nfit_mem->family = -1; ··· 2694 2692 acpi_str_to_uuid(UUID_NFIT_DIMM, nfit_uuid[NFIT_DEV_DIMM]); 2695 2693 acpi_str_to_uuid(UUID_NFIT_DIMM_N_HPE1, nfit_uuid[NFIT_DEV_DIMM_N_HPE1]); 2696 2694 acpi_str_to_uuid(UUID_NFIT_DIMM_N_HPE2, nfit_uuid[NFIT_DEV_DIMM_N_HPE2]); 2695 + acpi_str_to_uuid(UUID_NFIT_DIMM_N_MSFT, nfit_uuid[NFIT_DEV_DIMM_N_MSFT]); 2697 2696 2698 2697 nfit_wq = create_singlethread_workqueue("nfit"); 2699 2698 if (!nfit_wq)
+4
drivers/acpi/nfit.h
··· 31 31 #define UUID_NFIT_DIMM_N_HPE1 "9002c334-acf3-4c0e-9642-a235f0d53bc6" 32 32 #define UUID_NFIT_DIMM_N_HPE2 "5008664b-b758-41a0-a03c-27c2f2d04f7e" 33 33 34 + /* https://msdn.microsoft.com/library/windows/hardware/mt604741 */ 35 + #define UUID_NFIT_DIMM_N_MSFT "1ee68b36-d4bd-4a1a-9a16-4f8e53d46e05" 36 + 34 37 #define ACPI_NFIT_MEM_FAILED_MASK (ACPI_NFIT_MEM_SAVE_FAILED \ 35 38 | ACPI_NFIT_MEM_RESTORE_FAILED | ACPI_NFIT_MEM_FLUSH_FAILED \ 36 39 | ACPI_NFIT_MEM_NOT_ARMED) ··· 43 40 NFIT_DEV_DIMM = NVDIMM_FAMILY_INTEL, 44 41 NFIT_DEV_DIMM_N_HPE1 = NVDIMM_FAMILY_HPE1, 45 42 NFIT_DEV_DIMM_N_HPE2 = NVDIMM_FAMILY_HPE2, 43 + NFIT_DEV_DIMM_N_MSFT = NVDIMM_FAMILY_MSFT, 46 44 NFIT_SPA_VOLATILE, 47 45 NFIT_SPA_PM, 48 46 NFIT_SPA_DCR,
+1
include/uapi/linux/ndctl.h
··· 298 298 #define NVDIMM_FAMILY_INTEL 0 299 299 #define NVDIMM_FAMILY_HPE1 1 300 300 #define NVDIMM_FAMILY_HPE2 2 301 + #define NVDIMM_FAMILY_MSFT 3 301 302 302 303 #define ND_IOCTL_CALL _IOWR(ND_IOCTL, ND_CMD_CALL,\ 303 304 struct nd_cmd_pkg)