aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorstuart hayes <stuart.w.hayes@gmail.com>2016-05-26 12:38:41 -0400
committerDan Williams <dan.j.williams@intel.com>2016-06-20 14:19:34 -0400
commite02fb7264d8a31dddb9a80fbde603feb502d6478 (patch)
tree023c9dd4d7542dc2397d10aeabedb3c986b00644
parent6b0a57ed43b9c24177676b366c926614d24b13b4 (diff)
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>
-rw-r--r--drivers/acpi/nfit.c11
-rw-r--r--drivers/acpi/nfit.h4
-rw-r--r--include/uapi/linux/ndctl.h1
3 files changed, 12 insertions, 4 deletions
diff --git a/drivers/acpi/nfit.c b/drivers/acpi/nfit.c
index 2215fc847fa9..da14c89f4667 100644
--- a/drivers/acpi/nfit.c
+++ b/drivers/acpi/nfit.c
@@ -1130,11 +1130,11 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc,
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 * different command sets. Note, that checking for function0 (bit0) 1134 * different command sets. Note, that checking for function0 (bit0)
1135 * tells us if any commands are reachable through this uuid. 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 if (acpi_check_dsm(adev_dimm->handle, to_nfit_uuid(i), 1, 1)) 1138 if (acpi_check_dsm(adev_dimm->handle, to_nfit_uuid(i), 1, 1))
1139 break; 1139 break;
1140 1140
@@ -1144,12 +1144,14 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc,
1144 dsm_mask = 0x3fe; 1144 dsm_mask = 0x3fe;
1145 if (disable_vendor_specific) 1145 if (disable_vendor_specific)
1146 dsm_mask &= ~(1 << ND_CMD_VENDOR); 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 dsm_mask = 0x1c3c76; 1148 dsm_mask = 0x1c3c76;
1149 else if (nfit_mem->family == NVDIMM_FAMILY_HPE2) { 1149 } else if (nfit_mem->family == NVDIMM_FAMILY_HPE2) {
1150 dsm_mask = 0x1fe; 1150 dsm_mask = 0x1fe;
1151 if (disable_vendor_specific) 1151 if (disable_vendor_specific)
1152 dsm_mask &= ~(1 << 8); 1152 dsm_mask &= ~(1 << 8);
1153 } else if (nfit_mem->family == NVDIMM_FAMILY_MSFT) {
1154 dsm_mask = 0xffffffff;
1153 } else { 1155 } else {
1154 dev_err(dev, "unknown dimm command family\n"); 1156 dev_err(dev, "unknown dimm command family\n");
1155 nfit_mem->family = -1; 1157 nfit_mem->family = -1;
@@ -2692,6 +2694,7 @@ static __init int nfit_init(void)
2692 acpi_str_to_uuid(UUID_NFIT_DIMM, nfit_uuid[NFIT_DEV_DIMM]); 2694 acpi_str_to_uuid(UUID_NFIT_DIMM, nfit_uuid[NFIT_DEV_DIMM]);
2693 acpi_str_to_uuid(UUID_NFIT_DIMM_N_HPE1, nfit_uuid[NFIT_DEV_DIMM_N_HPE1]); 2695 acpi_str_to_uuid(UUID_NFIT_DIMM_N_HPE1, nfit_uuid[NFIT_DEV_DIMM_N_HPE1]);
2694 acpi_str_to_uuid(UUID_NFIT_DIMM_N_HPE2, nfit_uuid[NFIT_DEV_DIMM_N_HPE2]); 2696 acpi_str_to_uuid(UUID_NFIT_DIMM_N_HPE2, nfit_uuid[NFIT_DEV_DIMM_N_HPE2]);
2697 acpi_str_to_uuid(UUID_NFIT_DIMM_N_MSFT, nfit_uuid[NFIT_DEV_DIMM_N_MSFT]);
2695 2698
2696 nfit_wq = create_singlethread_workqueue("nfit"); 2699 nfit_wq = create_singlethread_workqueue("nfit");
2697 if (!nfit_wq) 2700 if (!nfit_wq)
diff --git a/drivers/acpi/nfit.h b/drivers/acpi/nfit.h
index 11cb38348aef..f06fa91c5abf 100644
--- a/drivers/acpi/nfit.h
+++ b/drivers/acpi/nfit.h
@@ -31,6 +31,9 @@
31#define UUID_NFIT_DIMM_N_HPE1 "9002c334-acf3-4c0e-9642-a235f0d53bc6" 31#define UUID_NFIT_DIMM_N_HPE1 "9002c334-acf3-4c0e-9642-a235f0d53bc6"
32#define UUID_NFIT_DIMM_N_HPE2 "5008664b-b758-41a0-a03c-27c2f2d04f7e" 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#define ACPI_NFIT_MEM_FAILED_MASK (ACPI_NFIT_MEM_SAVE_FAILED \ 37#define ACPI_NFIT_MEM_FAILED_MASK (ACPI_NFIT_MEM_SAVE_FAILED \
35 | ACPI_NFIT_MEM_RESTORE_FAILED | ACPI_NFIT_MEM_FLUSH_FAILED \ 38 | ACPI_NFIT_MEM_RESTORE_FAILED | ACPI_NFIT_MEM_FLUSH_FAILED \
36 | ACPI_NFIT_MEM_NOT_ARMED) 39 | ACPI_NFIT_MEM_NOT_ARMED)
@@ -40,6 +43,7 @@ enum nfit_uuids {
40 NFIT_DEV_DIMM = NVDIMM_FAMILY_INTEL, 43 NFIT_DEV_DIMM = NVDIMM_FAMILY_INTEL,
41 NFIT_DEV_DIMM_N_HPE1 = NVDIMM_FAMILY_HPE1, 44 NFIT_DEV_DIMM_N_HPE1 = NVDIMM_FAMILY_HPE1,
42 NFIT_DEV_DIMM_N_HPE2 = NVDIMM_FAMILY_HPE2, 45 NFIT_DEV_DIMM_N_HPE2 = NVDIMM_FAMILY_HPE2,
46 NFIT_DEV_DIMM_N_MSFT = NVDIMM_FAMILY_MSFT,
43 NFIT_SPA_VOLATILE, 47 NFIT_SPA_VOLATILE,
44 NFIT_SPA_PM, 48 NFIT_SPA_PM,
45 NFIT_SPA_DCR, 49 NFIT_SPA_DCR,
diff --git a/include/uapi/linux/ndctl.h b/include/uapi/linux/ndctl.h
index 309915f74492..ba5a8c79652a 100644
--- a/include/uapi/linux/ndctl.h
+++ b/include/uapi/linux/ndctl.h
@@ -298,6 +298,7 @@ struct nd_cmd_pkg {
298#define NVDIMM_FAMILY_INTEL 0 298#define NVDIMM_FAMILY_INTEL 0
299#define NVDIMM_FAMILY_HPE1 1 299#define NVDIMM_FAMILY_HPE1 1
300#define NVDIMM_FAMILY_HPE2 2 300#define NVDIMM_FAMILY_HPE2 2
301#define NVDIMM_FAMILY_MSFT 3
301 302
302#define ND_IOCTL_CALL _IOWR(ND_IOCTL, ND_CMD_CALL,\ 303#define ND_IOCTL_CALL _IOWR(ND_IOCTL, ND_CMD_CALL,\
303 struct nd_cmd_pkg) 304 struct nd_cmd_pkg)