Skip to content

Commit

Permalink
acpi, nfit: Add function to look up nvdimm device and provide SMBIOS …
Browse files Browse the repository at this point in the history
…handle

EDAC driver needs to look up attributes of NVDIMMs provided in SMBIOS.

Provide a function that looks up an acpi_nfit_memory_map from a device
handle (node/socket/mc/channel/dimm) and returns the SMBIOS handle.
Also pass back the "flags" so we can see if the NVDIMM is OK.

Acked-by: Dan Williams <[email protected]>
Signed-off-by: Tony Luck <[email protected]>
Cc: "Rafael J. Wysocki" <[email protected]>
Cc: Aristeu Rozanski <[email protected]>
Cc: Dan Williams <[email protected]>
Cc: Erik Schmauss <[email protected]>
Cc: Jean Delvare <[email protected]>
Cc: Len Brown <[email protected]>
Cc: Mauro Carvalho Chehab <[email protected]>
Cc: Qiuxu Zhuo <[email protected]>
Cc: Robert Moore <[email protected]>
Cc: [email protected]
Cc: [email protected]
Cc: [email protected]
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Borislav Petkov <[email protected]>
  • Loading branch information
aegl authored and suryasaimadhu committed Mar 14, 2018
1 parent 001f861 commit 23222f8
Show file tree
Hide file tree
Showing 2 changed files with 45 additions and 0 deletions.
27 changes: 27 additions & 0 deletions drivers/acpi/nfit/core.c
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@
#include <linux/io.h>
#include <linux/nd.h>
#include <asm/cacheflush.h>
#include <acpi/nfit.h>
#include "nfit.h"

/*
Expand Down Expand Up @@ -690,6 +691,32 @@ static bool add_memdev(struct acpi_nfit_desc *acpi_desc,
return true;
}

int nfit_get_smbios_id(u32 device_handle, u16 *flags)
{
struct acpi_nfit_memory_map *memdev;
struct acpi_nfit_desc *acpi_desc;
struct nfit_mem *nfit_mem;

mutex_lock(&acpi_desc_lock);
list_for_each_entry(acpi_desc, &acpi_descs, list) {
mutex_lock(&acpi_desc->init_mutex);
list_for_each_entry(nfit_mem, &acpi_desc->dimms, list) {
memdev = __to_nfit_memdev(nfit_mem);
if (memdev->device_handle == device_handle) {
mutex_unlock(&acpi_desc->init_mutex);
mutex_unlock(&acpi_desc_lock);
*flags = memdev->flags;
return memdev->physical_id;
}
}
mutex_unlock(&acpi_desc->init_mutex);
}
mutex_unlock(&acpi_desc_lock);

return -ENODEV;
}
EXPORT_SYMBOL_GPL(nfit_get_smbios_id);

/*
* An implementation may provide a truncated control region if no block windows
* are defined.
Expand Down
18 changes: 18 additions & 0 deletions include/acpi/nfit.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
/*
* SPDX-License-Identifier: GPL-2.0
* Copyright (C) 2018 Intel Corporation
*/

#ifndef __ACPI_NFIT_H
#define __ACPI_NFIT_H

#if IS_ENABLED(CONFIG_ACPI_NFIT)
int nfit_get_smbios_id(u32 device_handle, u16 *flags);
#else
static inline int nfit_get_smbios_id(u32 device_handle, u16 *flags)
{
return -EOPNOTSUPP;
}
#endif

#endif /* __ACPI_NFIT_H */

0 comments on commit 23222f8

Please sign in to comment.