diff options
| author | stuart hayes <stuart.w.hayes@gmail.com> | 2016-05-26 12:38:41 -0400 |
|---|---|---|
| committer | Dan Williams <dan.j.williams@intel.com> | 2016-06-20 14:19:34 -0400 |
| commit | e02fb7264d8a31dddb9a80fbde603feb502d6478 (patch) | |
| tree | 023c9dd4d7542dc2397d10aeabedb3c986b00644 | |
| parent | 6b0a57ed43b9c24177676b366c926614d24b13b4 (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.c | 11 | ||||
| -rw-r--r-- | drivers/acpi/nfit.h | 4 | ||||
| -rw-r--r-- | include/uapi/linux/ndctl.h | 1 |
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) |
