On 7/17/26 00:33, [email protected] wrote:
From: Denis Mukhin <[email protected]>
Make nvme_shutdown() public so that it can be re-used in
board-specific board_quiesce_devices() before OS hand-off.
Signed-off-by: Denis Mukhin <[email protected]>
---
Changes since v2:
- fixup for apple device
Changes since v1:
- n/a
---
drivers/nvme/nvme.h | 7 -------
drivers/nvme/nvme_apple.c | 1 +
include/nvme.h | 11 +++++++++++
3 files changed, 12 insertions(+), 7 deletions(-)
diff --git a/drivers/nvme/nvme.h b/drivers/nvme/nvme.h
index a938da728506..cc1477717391 100644
--- a/drivers/nvme/nvme.h
+++ b/drivers/nvme/nvme.h
@@ -703,11 +703,4 @@ struct nvme_ops {
*/
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__ */
diff --git a/drivers/nvme/nvme_apple.c b/drivers/nvme/nvme_apple.c
index 7e7538553e3f..a36f15a3ff4e 100644
--- a/drivers/nvme/nvme_apple.c
+++ b/drivers/nvme/nvme_apple.c
@@ -6,6 +6,7 @@
#include <dm.h>
#include <mailbox.h>
#include <mapmem.h>
+#include <nvme.h>
#include "nvme.h"
#include <reset.h>
diff --git a/include/nvme.h b/include/nvme.h
index 2cdf8ce320c1..c7b301300097 100644
--- a/include/nvme.h
+++ b/include/nvme.h
@@ -90,4 +90,15 @@ int nvme_print_info(struct udevice *udev);
*/
int nvme_get_namespace_id(struct udevice *udev, u32 *ns_id, u8 *eui64);
+/**
+ * nvme_shutdown() - Shutdown NVM Express device
+ *
+ * Must be called before booting an OS to ensure cache is flushed
+ * and the controller is in a clean state for OS to re-initialize.
+ *
+ * @udev: The NVM Express device
+ * Return: 0 if OK, -ve on error
+ */
+int nvme_shutdown(struct udevice *udev);
+
#endif /* __NVME_H__ */
Could you instead add the DM_FLAG_ACTIVE_DMA flag to the PCI NVMe driver and
then call nvme_shutdown() from a new nvem_remove in nvem_pci.c
This will automatically shutdown the NVMe devices when booting an OS and you
could
trigger this manually by calling:
dm_remove_devices_flags(DM_REMOVE_ACTIVE_DMA)
Neil