From be99033cbb98444bd8bca8926502f20c45c5b430 Mon Sep 17 00:00:00 2001 From: Christian Soffke Date: Mon, 15 Feb 2021 14:31:50 +0100 Subject: Always indicate inactive ata disk if device is solid state or doesn't support power management Commit 5462907 made sure that SLEEP commands weren't issued on devices that don't support ATA power management commands (e.g. certain CF->SD converters including several iFlash models). Since Rockbox waits for the disk to become inactive in shutdown_hw(), which won't happen in this case, the OS would previously stall during the shutdown process until a timeout was reached. Change-Id: I03bb05f6f6401bb8f0da5d0b76bd3f07681fdc06 --- firmware/drivers/ata.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) (limited to 'firmware/drivers/ata.c') diff --git a/firmware/drivers/ata.c b/firmware/drivers/ata.c index ba0d6d169e..56dc7d74fe 100644 --- a/firmware/drivers/ata.c +++ b/firmware/drivers/ata.c @@ -809,6 +809,19 @@ void ata_spindown(int seconds) bool ata_disk_is_active(void) { + /* "active" here means "spinning and needs to be shut down" */ + + /* SSDs are considered always "inactive" */ + if (ata_disk_isssd()) + return false; + + /* We can't directly detect the common iFlash adapters, but they + don't claim to support powermanagement. Without ATA power + management we can never spin down anyway, so there's + no point in even trying. */ + if (!(identify_info[82] & (1 << 3))) + return false; + return ata_state >= ATA_SPINUP; } -- cgit v1.2.3