From: Dan Williams Date: Wed, 18 May 2016 17:07:19 +0000 (-0700) Subject: Merge branch 'for-4.7/acpi6.1' into libnvdimm-for-next X-Git-Tag: MMI-PSA29.97-13-9~7858^2~1 X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=1b982baf75e7d9585967fcfccd05b77bf9054010;p=GitHub%2FMotorolaMobilityLLC%2Fkernel-slsi.git Merge branch 'for-4.7/acpi6.1' into libnvdimm-for-next --- 1b982baf75e7d9585967fcfccd05b77bf9054010 diff --cc drivers/acpi/nfit.c index 2564f330a93e,0a1ba3d2e39a..2215fc847fa9 --- a/drivers/acpi/nfit.c +++ b/drivers/acpi/nfit.c @@@ -883,76 -838,43 +883,105 @@@ static ssize_t device_show(struct devic } static DEVICE_ATTR_RO(device); -static ssize_t format_show(struct device *dev, - struct device_attribute *attr, char *buf) -{ - struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev); - - return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->code)); -} -static DEVICE_ATTR_RO(format); - + static ssize_t subsystem_vendor_show(struct device *dev, + struct device_attribute *attr, char *buf) + { + struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev); + + return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->subsystem_vendor_id)); + } + static DEVICE_ATTR_RO(subsystem_vendor); + + static ssize_t subsystem_rev_id_show(struct device *dev, + struct device_attribute *attr, char *buf) + { + struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev); + + return sprintf(buf, "0x%04x\n", + be16_to_cpu(dcr->subsystem_revision_id)); + } + static DEVICE_ATTR_RO(subsystem_rev_id); + + static ssize_t subsystem_device_show(struct device *dev, + struct device_attribute *attr, char *buf) + { + struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev); + + return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->subsystem_device_id)); + } + static DEVICE_ATTR_RO(subsystem_device); + +static int num_nvdimm_formats(struct nvdimm *nvdimm) +{ + struct nfit_mem *nfit_mem = nvdimm_provider_data(nvdimm); + int formats = 0; + + if (nfit_mem->memdev_pmem) + formats++; + if (nfit_mem->memdev_bdw) + formats++; + return formats; +} + +static ssize_t format_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev); + - return sprintf(buf, "%#x\n", dcr->code); ++ return sprintf(buf, "0x%04x\n", be16_to_cpu(dcr->code)); +} +static DEVICE_ATTR_RO(format); + +static ssize_t format1_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + u32 handle; + ssize_t rc = -ENXIO; + struct nfit_mem *nfit_mem; + struct nfit_memdev *nfit_memdev; + struct acpi_nfit_desc *acpi_desc; + struct nvdimm *nvdimm = to_nvdimm(dev); + struct acpi_nfit_control_region *dcr = to_nfit_dcr(dev); + + nfit_mem = nvdimm_provider_data(nvdimm); + acpi_desc = nfit_mem->acpi_desc; + handle = to_nfit_memdev(dev)->device_handle; + + /* assumes DIMMs have at most 2 published interface codes */ + mutex_lock(&acpi_desc->init_mutex); + list_for_each_entry(nfit_memdev, &acpi_desc->memdevs, list) { + struct acpi_nfit_memory_map *memdev = nfit_memdev->memdev; + struct nfit_dcr *nfit_dcr; + + if (memdev->device_handle != handle) + continue; + + list_for_each_entry(nfit_dcr, &acpi_desc->dcrs, list) { + if (nfit_dcr->dcr->region_index != memdev->region_index) + continue; + if (nfit_dcr->dcr->code == dcr->code) + continue; - rc = sprintf(buf, "%#x\n", nfit_dcr->dcr->code); ++ rc = sprintf(buf, "%#x\n", ++ be16_to_cpu(nfit_dcr->dcr->code)); + break; + } + if (rc != ENXIO) + break; + } + mutex_unlock(&acpi_desc->init_mutex); + return rc; +} +static DEVICE_ATTR_RO(format1); + +static ssize_t formats_show(struct device *dev, + struct device_attribute *attr, char *buf) +{ + struct nvdimm *nvdimm = to_nvdimm(dev); + + return sprintf(buf, "%d\n", num_nvdimm_formats(nvdimm)); +} +static DEVICE_ATTR_RO(formats); + static ssize_t serial_show(struct device *dev, struct device_attribute *attr, char *buf) { @@@ -1005,14 -921,14 +1052,18 @@@ static struct attribute *acpi_nfit_dimm &dev_attr_phys_id.attr, &dev_attr_vendor.attr, &dev_attr_device.attr, + &dev_attr_rev_id.attr, + &dev_attr_subsystem_vendor.attr, + &dev_attr_subsystem_device.attr, + &dev_attr_subsystem_rev_id.attr, &dev_attr_format.attr, + &dev_attr_formats.attr, + &dev_attr_format1.attr, &dev_attr_serial.attr, - &dev_attr_rev_id.attr, &dev_attr_flags.attr, + &dev_attr_id.attr, + &dev_attr_family.attr, + &dev_attr_dsm_mask.attr, NULL, };