|
|
@@ -1130,11 +1130,11 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc,
|
|
|
}
|
|
|
|
|
|
/*
|
|
|
- * Until standardization materializes we need to consider up to 3
|
|
|
+ * Until standardization materializes we need to consider 4
|
|
|
* different command sets. Note, that checking for function0 (bit0)
|
|
|
* tells us if any commands are reachable through this uuid.
|
|
|
*/
|
|
|
- for (i = NVDIMM_FAMILY_INTEL; i <= NVDIMM_FAMILY_HPE2; i++)
|
|
|
+ for (i = NVDIMM_FAMILY_INTEL; i <= NVDIMM_FAMILY_MSFT; i++)
|
|
|
if (acpi_check_dsm(adev_dimm->handle, to_nfit_uuid(i), 1, 1))
|
|
|
break;
|
|
|
|
|
|
@@ -1144,12 +1144,14 @@ static int acpi_nfit_add_dimm(struct acpi_nfit_desc *acpi_desc,
|
|
|
dsm_mask = 0x3fe;
|
|
|
if (disable_vendor_specific)
|
|
|
dsm_mask &= ~(1 << ND_CMD_VENDOR);
|
|
|
- } else if (nfit_mem->family == NVDIMM_FAMILY_HPE1)
|
|
|
+ } else if (nfit_mem->family == NVDIMM_FAMILY_HPE1) {
|
|
|
dsm_mask = 0x1c3c76;
|
|
|
- else if (nfit_mem->family == NVDIMM_FAMILY_HPE2) {
|
|
|
+ } else if (nfit_mem->family == NVDIMM_FAMILY_HPE2) {
|
|
|
dsm_mask = 0x1fe;
|
|
|
if (disable_vendor_specific)
|
|
|
dsm_mask &= ~(1 << 8);
|
|
|
+ } else if (nfit_mem->family == NVDIMM_FAMILY_MSFT) {
|
|
|
+ dsm_mask = 0xffffffff;
|
|
|
} else {
|
|
|
dev_err(dev, "unknown dimm command family\n");
|
|
|
nfit_mem->family = -1;
|
|
|
@@ -2692,6 +2694,7 @@ static __init int nfit_init(void)
|
|
|
acpi_str_to_uuid(UUID_NFIT_DIMM, nfit_uuid[NFIT_DEV_DIMM]);
|
|
|
acpi_str_to_uuid(UUID_NFIT_DIMM_N_HPE1, nfit_uuid[NFIT_DEV_DIMM_N_HPE1]);
|
|
|
acpi_str_to_uuid(UUID_NFIT_DIMM_N_HPE2, nfit_uuid[NFIT_DEV_DIMM_N_HPE2]);
|
|
|
+ acpi_str_to_uuid(UUID_NFIT_DIMM_N_MSFT, nfit_uuid[NFIT_DEV_DIMM_N_MSFT]);
|
|
|
|
|
|
nfit_wq = create_singlethread_workqueue("nfit");
|
|
|
if (!nfit_wq)
|