nvme: Add shutdown function
authorMark Kettenis <kettenis@openbsd.org>
Sat, 22 Jan 2022 19:38:16 +0000 (20:38 +0100)
committerTom Rini <trini@konsulko.com>
Thu, 10 Feb 2022 21:44:23 +0000 (16:44 -0500)
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>
drivers/nvme/nvme.c
drivers/nvme/nvme.h

index e7cbf39c96ae11bc53c536c8ad71940de2f404c3..1d56517e9969f8b827a93cb55f4b986914b06a2f 100644 (file)
@@ -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);
+}
index bc6b79f8dd18ab510dd9d67db6783f48331f45ad..bc1d612dde40af188b2a29e6972f06db956c0345 100644 (file)
@@ -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__ */