aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDave Jiang <dave.jiang@intel.com>2018-02-01 19:41:58 -0500
committerDan Williams <dan.j.williams@intel.com>2018-02-01 19:49:24 -0500
commit674d8bdec770d40288574534eab27d82bdf16b0e (patch)
tree91e3c74ba7af4b3cbfd01c337971cdbdccc25a16
parentbfbaa952d1232c6199cdeb4896da67e02a13326d (diff)
libnvdimm/nfit_test: adding support for unit testing enable LSS status
Adding support code to simulate the enabling of LSS status in support of the Intel DSM v1.6 Function Index 10: Enable Latch System Shutdown Status. This is only for testing of libndctl support for LSS enable. The actual functionality requires a reboot and therefore is not simulated. The enable value is not recorded in nfit_test since there's no DSM to actually query the current status of the LSS enable. Signed-off-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Vishal Verma <vishal.l.verma@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
-rw-r--r--tools/testing/nvdimm/test/nfit.c34
-rw-r--r--tools/testing/nvdimm/test/nfit_test.h6
2 files changed, 40 insertions, 0 deletions
diff --git a/tools/testing/nvdimm/test/nfit.c b/tools/testing/nvdimm/test/nfit.c
index a043fea4d58d..42ee1798971d 100644
--- a/tools/testing/nvdimm/test/nfit.c
+++ b/tools/testing/nvdimm/test/nfit.c
@@ -821,6 +821,35 @@ static int nfit_test_cmd_ars_inject_status(struct nfit_test *t,
821 return 0; 821 return 0;
822} 822}
823 823
824static int nd_intel_test_cmd_set_lss_status(struct nfit_test *t,
825 struct nd_intel_lss *nd_cmd, unsigned int buf_len)
826{
827 struct device *dev = &t->pdev.dev;
828
829 if (buf_len < sizeof(*nd_cmd))
830 return -EINVAL;
831
832 switch (nd_cmd->enable) {
833 case 0:
834 nd_cmd->status = 0;
835 dev_dbg(dev, "%s: Latch System Shutdown Status disabled\n",
836 __func__);
837 break;
838 case 1:
839 nd_cmd->status = 0;
840 dev_dbg(dev, "%s: Latch System Shutdown Status enabled\n",
841 __func__);
842 break;
843 default:
844 dev_warn(dev, "Unknown enable value: %#x\n", nd_cmd->enable);
845 nd_cmd->status = 0x3;
846 break;
847 }
848
849
850 return 0;
851}
852
824static int get_dimm(struct nfit_mem *nfit_mem, unsigned int func) 853static int get_dimm(struct nfit_mem *nfit_mem, unsigned int func)
825{ 854{
826 int i; 855 int i;
@@ -872,6 +901,9 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc,
872 return i; 901 return i;
873 902
874 switch (func) { 903 switch (func) {
904 case ND_INTEL_ENABLE_LSS_STATUS:
905 return nd_intel_test_cmd_set_lss_status(t,
906 buf, buf_len);
875 case ND_INTEL_FW_GET_INFO: 907 case ND_INTEL_FW_GET_INFO:
876 return nd_intel_test_get_fw_info(t, buf, 908 return nd_intel_test_get_fw_info(t, buf,
877 buf_len, i - t->dcr_idx); 909 buf_len, i - t->dcr_idx);
@@ -1997,6 +2029,7 @@ static void nfit_test0_setup(struct nfit_test *t)
1997 set_bit(ND_INTEL_FW_SEND_DATA, &acpi_desc->dimm_cmd_force_en); 2029 set_bit(ND_INTEL_FW_SEND_DATA, &acpi_desc->dimm_cmd_force_en);
1998 set_bit(ND_INTEL_FW_FINISH_UPDATE, &acpi_desc->dimm_cmd_force_en); 2030 set_bit(ND_INTEL_FW_FINISH_UPDATE, &acpi_desc->dimm_cmd_force_en);
1999 set_bit(ND_INTEL_FW_FINISH_QUERY, &acpi_desc->dimm_cmd_force_en); 2031 set_bit(ND_INTEL_FW_FINISH_QUERY, &acpi_desc->dimm_cmd_force_en);
2032 set_bit(ND_INTEL_ENABLE_LSS_STATUS, &acpi_desc->dimm_cmd_force_en);
2000} 2033}
2001 2034
2002static void nfit_test1_setup(struct nfit_test *t) 2035static void nfit_test1_setup(struct nfit_test *t)
@@ -2094,6 +2127,7 @@ static void nfit_test1_setup(struct nfit_test *t)
2094 set_bit(ND_CMD_ARS_START, &acpi_desc->bus_cmd_force_en); 2127 set_bit(ND_CMD_ARS_START, &acpi_desc->bus_cmd_force_en);
2095 set_bit(ND_CMD_ARS_STATUS, &acpi_desc->bus_cmd_force_en); 2128 set_bit(ND_CMD_ARS_STATUS, &acpi_desc->bus_cmd_force_en);
2096 set_bit(ND_CMD_CLEAR_ERROR, &acpi_desc->bus_cmd_force_en); 2129 set_bit(ND_CMD_CLEAR_ERROR, &acpi_desc->bus_cmd_force_en);
2130 set_bit(ND_INTEL_ENABLE_LSS_STATUS, &acpi_desc->dimm_cmd_force_en);
2097} 2131}
2098 2132
2099static int nfit_test_blk_do_io(struct nd_blk_region *ndbr, resource_size_t dpa, 2133static int nfit_test_blk_do_io(struct nd_blk_region *ndbr, resource_size_t dpa,
diff --git a/tools/testing/nvdimm/test/nfit_test.h b/tools/testing/nvdimm/test/nfit_test.h
index be8fa8ec0615..428344519cdf 100644
--- a/tools/testing/nvdimm/test/nfit_test.h
+++ b/tools/testing/nvdimm/test/nfit_test.h
@@ -86,6 +86,7 @@ struct nd_cmd_ars_err_inj_stat {
86 86
87#define ND_INTEL_SMART 1 87#define ND_INTEL_SMART 1
88#define ND_INTEL_SMART_THRESHOLD 2 88#define ND_INTEL_SMART_THRESHOLD 2
89#define ND_INTEL_ENABLE_LSS_STATUS 10
89#define ND_INTEL_FW_GET_INFO 12 90#define ND_INTEL_FW_GET_INFO 12
90#define ND_INTEL_FW_START_UPDATE 13 91#define ND_INTEL_FW_START_UPDATE 13
91#define ND_INTEL_FW_SEND_DATA 14 92#define ND_INTEL_FW_SEND_DATA 14
@@ -212,6 +213,11 @@ struct nd_intel_fw_finish_query {
212 __u64 updated_fw_rev; 213 __u64 updated_fw_rev;
213} __packed; 214} __packed;
214 215
216struct nd_intel_lss {
217 __u8 enable;
218 __u32 status;
219} __packed;
220
215union acpi_object; 221union acpi_object;
216typedef void *acpi_handle; 222typedef void *acpi_handle;
217 223