summaryrefslogtreecommitdiff
path: root/drivers/nvme
diff options
context:
space:
mode:
authorMark Kettenis <kettenis@openbsd.org>2022-01-22 22:38:16 +0300
committerTom Rini <trini@konsulko.com>2022-02-11 00:44:23 +0300
commitca99a17e02ab4f99b1455be349858d5a7aa7553c (patch)
treed4e31a46d0642abcf85603c3bd818122181dd4ef /drivers/nvme
parent19d9dad39c28a6e932ee2ec8361f42211613761d (diff)
downloadu-boot-ca99a17e02ab4f99b1455be349858d5a7aa7553c.tar.xz
nvme: Add shutdown function
Add a function to disable the NVMe controller. This will be used to let the driver for the NVMe storage integrated on Apple SoCs shutdown the NVMe controller such we can shutdown the NVMe IOP controller in a clean way afterwards before handing control to the OS. Signed-off-by: Mark Kettenis <kettenis@openbsd.org> Reviewed-by: Simon Glass <sjg@chromium.org> Tested on: Macbook Air M1 Tested-by: Simon Glass <sjg@chromium.org>
Diffstat (limited to 'drivers/nvme')
-rw-r--r--drivers/nvme/nvme.c7
-rw-r--r--drivers/nvme/nvme.h12
2 files changed, 19 insertions, 0 deletions
diff --git a/drivers/nvme/nvme.c b/drivers/nvme/nvme.c
index e7cbf39c96..1d56517e99 100644
--- a/drivers/nvme/nvme.c
+++ b/drivers/nvme/nvme.c
@@ -896,3 +896,10 @@ free_queue:
free_nvme:
return ret;
}
+
+int nvme_shutdown(struct udevice *udev)
+{
+ struct nvme_dev *ndev = dev_get_priv(udev);
+
+ return nvme_disable_ctrl(ndev);
+}
diff --git a/drivers/nvme/nvme.h b/drivers/nvme/nvme.h
index bc6b79f8dd..bc1d612dde 100644
--- a/drivers/nvme/nvme.h
+++ b/drivers/nvme/nvme.h
@@ -691,6 +691,18 @@ struct nvme_ops {
void (*complete_cmd)(struct nvme_queue *nvmeq, struct nvme_command *cmd);
};
+/**
+ * nvme_init() - Initialize NVM Express device
+ * @udev: The NVM Express device
+ * Return: 0 if OK, -ve on error
+ */
int nvme_init(struct udevice *udev);
+/**
+ * nvme_shutdown() - Shutdown NVM Express device
+ * @udev: The NVM Express device
+ * Return: 0 if OK, -ve on error
+ */
+int nvme_shutdown(struct udevice *udev);
+
#endif /* __DRIVER_NVME_H__ */