cxl/memdev: Add support for the Clear Poison mailbox command
authorAlison Schofield <alison.schofield@intel.com>
Wed, 19 Apr 2023 03:26:26 +0000 (20:26 -0700)
committerDan Williams <dan.j.williams@intel.com>
Sun, 23 Apr 2023 18:46:22 +0000 (11:46 -0700)
commit9690b07748d18ac667036a68442081c4aea33ba7
tree7955d173a6809fb42c8fb5775fb2ac7940f59039
parentd2fbc48658022f48625064ae192baff52057987d
cxl/memdev: Add support for the Clear Poison mailbox command

CXL devices optionally support the CLEAR POISON mailbox command. Add
memdev driver support for clearing poison.

Per the CXL Specification (3.0 8.2.9.8.4.3), after receiving a valid
clear poison request, the device removes the address from the device's
Poison List and writes 0 (zero) for 64 bytes starting at address. If
the device cannot clear poison from the address, it returns a permanent
media error and -ENXIO is returned to the user.

Additionally, and per the spec also, it is not an error to clear poison
of an address that is not poisoned.

If the address is not contained in the device's dpa resource, or is
not 64 byte aligned, the driver returns -EINVAL without sending the
command to the device.

Poison clearing is intended for debug only and will be exposed to
userspace through debugfs. Restrict compilation to CONFIG_DEBUG_FS.

Implementation note: Although the CXL specification defines the clear
command to accept 64 bytes of 'write-data', this implementation always
uses zeroes as write-data.

Signed-off-by: Alison Schofield <alison.schofield@intel.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Link: https://lore.kernel.org/r/8682c30ec24bd9c45af5feccb04b02be51e58c0a.1681874357.git.alison.schofield@intel.com
Tested-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
drivers/cxl/core/memdev.c
drivers/cxl/cxlmem.h