2024-04-11 20:12:39

by Igor Pylypiv

[permalink] [raw]
Subject: [PATCH] ata: libata-core: Allow command duration limits detection for ACS-4 drives

Even though the command duration limits (CDL) feature was first added
in ACS-5 (major version 12), there are some ACS-4 (major version 11)
drives that implement CDL as well.

IDENTIFY_DEVICE, SUPPORTED_CAPABILITIES, and CURRENT_SETTINGS log pages
are mandatory in the ACS-4 standard so it should be safe to read these
log pages on older drives implementing the ACS-4 standard.

Signed-off-by: Igor Pylypiv <[email protected]>
---
drivers/ata/libata-core.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
index be3412cdb22e..c449d60d9bb9 100644
--- a/drivers/ata/libata-core.c
+++ b/drivers/ata/libata-core.c
@@ -2539,7 +2539,7 @@ static void ata_dev_config_cdl(struct ata_device *dev)
bool cdl_enabled;
u64 val;

- if (ata_id_major_version(dev->id) < 12)
+ if (ata_id_major_version(dev->id) < 11)
goto not_supported;

if (!ata_log_supported(dev, ATA_LOG_IDENTIFY_DEVICE) ||
--
2.44.0.683.g7961c838ac-goog



2024-04-13 01:04:02

by Damien Le Moal

[permalink] [raw]
Subject: Re: [PATCH] ata: libata-core: Allow command duration limits detection for ACS-4 drives

On 4/12/24 05:12, Igor Pylypiv wrote:
> Even though the command duration limits (CDL) feature was first added
> in ACS-5 (major version 12), there are some ACS-4 (major version 11)
> drives that implement CDL as well.
>
> IDENTIFY_DEVICE, SUPPORTED_CAPABILITIES, and CURRENT_SETTINGS log pages
> are mandatory in the ACS-4 standard so it should be safe to read these
> log pages on older drives implementing the ACS-4 standard.
>
> Signed-off-by: Igor Pylypiv <[email protected]>

Looks good, but I think this needs:

Fixes: 62e4a60e0cdb ("scsi: ata: libata: Detect support for command duration
limits")
Cc: stable.vger.kernel.org

so that we have 6.6 LTS also getting this fix and accepting the same devices as
mainline. I will add that when applying.

> ---
> drivers/ata/libata-core.c | 2 +-
> 1 file changed, 1 insertion(+), 1 deletion(-)
>
> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
> index be3412cdb22e..c449d60d9bb9 100644
> --- a/drivers/ata/libata-core.c
> +++ b/drivers/ata/libata-core.c
> @@ -2539,7 +2539,7 @@ static void ata_dev_config_cdl(struct ata_device *dev)
> bool cdl_enabled;
> u64 val;
>
> - if (ata_id_major_version(dev->id) < 12)
> + if (ata_id_major_version(dev->id) < 11)
> goto not_supported;
>
> if (!ata_log_supported(dev, ATA_LOG_IDENTIFY_DEVICE) ||

--
Damien Le Moal
Western Digital Research