diff options
author | Dave Jiang <dave.jiang@intel.com> | 2018-02-01 19:41:58 -0500 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2018-02-01 19:49:24 -0500 |
commit | 674d8bdec770d40288574534eab27d82bdf16b0e (patch) | |
tree | 91e3c74ba7af4b3cbfd01c337971cdbdccc25a16 | |
parent | bfbaa952d1232c6199cdeb4896da67e02a13326d (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.c | 34 | ||||
-rw-r--r-- | tools/testing/nvdimm/test/nfit_test.h | 6 |
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 | ||
824 | static 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 | |||
824 | static int get_dimm(struct nfit_mem *nfit_mem, unsigned int func) | 853 | static 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 | ||
2002 | static void nfit_test1_setup(struct nfit_test *t) | 2035 | static 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 | ||
2099 | static int nfit_test_blk_do_io(struct nd_blk_region *ndbr, resource_size_t dpa, | 2133 | static 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 | ||
216 | struct nd_intel_lss { | ||
217 | __u8 enable; | ||
218 | __u32 status; | ||
219 | } __packed; | ||
220 | |||
215 | union acpi_object; | 221 | union acpi_object; |
216 | typedef void *acpi_handle; | 222 | typedef void *acpi_handle; |
217 | 223 | ||