tools/testing/nvdimm: Add overwrite support for nfit_test
With the implementation of Intel NVDIMM DSM overwrite, we are adding unit test to nfit_test for testing of overwrite operation. Signed-off-by: Dave Jiang <dave.jiang@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
This commit is contained in:
parent
3c13e2ac74
commit
926f74802c
|
@ -145,6 +145,7 @@ static int dimm_fail_cmd_code[ARRAY_SIZE(handle)];
|
||||||
struct nfit_test_sec {
|
struct nfit_test_sec {
|
||||||
u8 state;
|
u8 state;
|
||||||
u8 passphrase[32];
|
u8 passphrase[32];
|
||||||
|
u64 overwrite_end_time;
|
||||||
} dimm_sec_info[NUM_DCR];
|
} dimm_sec_info[NUM_DCR];
|
||||||
|
|
||||||
static const struct nd_intel_smart smart_def = {
|
static const struct nd_intel_smart smart_def = {
|
||||||
|
@ -1069,6 +1070,50 @@ static int nd_intel_test_cmd_secure_erase(struct nfit_test *t,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int nd_intel_test_cmd_overwrite(struct nfit_test *t,
|
||||||
|
struct nd_intel_overwrite *nd_cmd,
|
||||||
|
unsigned int buf_len, int dimm)
|
||||||
|
{
|
||||||
|
struct device *dev = &t->pdev.dev;
|
||||||
|
struct nfit_test_sec *sec = &dimm_sec_info[dimm];
|
||||||
|
|
||||||
|
if ((sec->state & ND_INTEL_SEC_STATE_ENABLED) &&
|
||||||
|
memcmp(nd_cmd->passphrase, sec->passphrase,
|
||||||
|
ND_INTEL_PASSPHRASE_SIZE) != 0) {
|
||||||
|
nd_cmd->status = ND_INTEL_STATUS_INVALID_PASS;
|
||||||
|
dev_dbg(dev, "overwrite: wrong passphrase\n");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
memset(sec->passphrase, 0, ND_INTEL_PASSPHRASE_SIZE);
|
||||||
|
sec->state = ND_INTEL_SEC_STATE_OVERWRITE;
|
||||||
|
dev_dbg(dev, "overwrite progressing.\n");
|
||||||
|
sec->overwrite_end_time = get_jiffies_64() + 5 * HZ;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int nd_intel_test_cmd_query_overwrite(struct nfit_test *t,
|
||||||
|
struct nd_intel_query_overwrite *nd_cmd,
|
||||||
|
unsigned int buf_len, int dimm)
|
||||||
|
{
|
||||||
|
struct device *dev = &t->pdev.dev;
|
||||||
|
struct nfit_test_sec *sec = &dimm_sec_info[dimm];
|
||||||
|
|
||||||
|
if (!(sec->state & ND_INTEL_SEC_STATE_OVERWRITE)) {
|
||||||
|
nd_cmd->status = ND_INTEL_STATUS_OQUERY_SEQUENCE_ERR;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (time_is_before_jiffies64(sec->overwrite_end_time)) {
|
||||||
|
sec->overwrite_end_time = 0;
|
||||||
|
sec->state = 0;
|
||||||
|
dev_dbg(dev, "overwrite is complete\n");
|
||||||
|
} else
|
||||||
|
nd_cmd->status = ND_INTEL_STATUS_OQUERY_INPROGRESS;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int get_dimm(struct nfit_mem *nfit_mem, unsigned int func)
|
static int get_dimm(struct nfit_mem *nfit_mem, unsigned int func)
|
||||||
{
|
{
|
||||||
int i;
|
int i;
|
||||||
|
@ -1140,6 +1185,14 @@ static int nfit_test_ctl(struct nvdimm_bus_descriptor *nd_desc,
|
||||||
rc = nd_intel_test_cmd_secure_erase(t,
|
rc = nd_intel_test_cmd_secure_erase(t,
|
||||||
buf, buf_len, i);
|
buf, buf_len, i);
|
||||||
break;
|
break;
|
||||||
|
case NVDIMM_INTEL_OVERWRITE:
|
||||||
|
rc = nd_intel_test_cmd_overwrite(t,
|
||||||
|
buf, buf_len, i - t->dcr_idx);
|
||||||
|
break;
|
||||||
|
case NVDIMM_INTEL_QUERY_OVERWRITE:
|
||||||
|
rc = nd_intel_test_cmd_query_overwrite(t,
|
||||||
|
buf, buf_len, i - t->dcr_idx);
|
||||||
|
break;
|
||||||
case ND_INTEL_ENABLE_LSS_STATUS:
|
case ND_INTEL_ENABLE_LSS_STATUS:
|
||||||
rc = nd_intel_test_cmd_set_lss_status(t,
|
rc = nd_intel_test_cmd_set_lss_status(t,
|
||||||
buf, buf_len);
|
buf, buf_len);
|
||||||
|
@ -2375,6 +2428,8 @@ static void nfit_test0_setup(struct nfit_test *t)
|
||||||
set_bit(NVDIMM_INTEL_UNLOCK_UNIT, &acpi_desc->dimm_cmd_force_en);
|
set_bit(NVDIMM_INTEL_UNLOCK_UNIT, &acpi_desc->dimm_cmd_force_en);
|
||||||
set_bit(NVDIMM_INTEL_FREEZE_LOCK, &acpi_desc->dimm_cmd_force_en);
|
set_bit(NVDIMM_INTEL_FREEZE_LOCK, &acpi_desc->dimm_cmd_force_en);
|
||||||
set_bit(NVDIMM_INTEL_SECURE_ERASE, &acpi_desc->dimm_cmd_force_en);
|
set_bit(NVDIMM_INTEL_SECURE_ERASE, &acpi_desc->dimm_cmd_force_en);
|
||||||
|
set_bit(NVDIMM_INTEL_OVERWRITE, &acpi_desc->dimm_cmd_force_en);
|
||||||
|
set_bit(NVDIMM_INTEL_QUERY_OVERWRITE, &acpi_desc->dimm_cmd_force_en);
|
||||||
}
|
}
|
||||||
|
|
||||||
static void nfit_test1_setup(struct nfit_test *t)
|
static void nfit_test1_setup(struct nfit_test *t)
|
||||||
|
|
Loading…
Reference in New Issue