From: Damien Le Moal <dlemoal@kernel.org>
To: Niklas Cassel <cassel@kernel.org>
Cc: linux-ide@vger.kernel.org, xxjack12xx@gmail.com
Subject: Re: [PATCH 2/3] ata: libata-core: Quirk DELLBOSS VD MV.R00-0 max_sectors
Date: Tue, 25 Nov 2025 09:20:36 +0900 [thread overview]
Message-ID: <4a5fe360-6d26-4d06-9eca-d087966fee0a@kernel.org> (raw)
In-Reply-To: <20251124134414.3057512-7-cassel@kernel.org>
On 11/24/25 10:44 PM, Niklas Cassel wrote:
> DELLBOSS VD MV.R00-0 with FW rev MV.R00-0 times out when sending
> I/Os of size 4096 KiB.
>
> Add a quirk so that the SATA controller is usable again.
Please name the quirk here and describe it.
>
> Fixes: 9b8b84879d4a ("block: Increase BLK_DEF_MAX_SECTORS_CAP")
> Signed-off-by: Niklas Cassel <cassel@kernel.org>
> ---
> drivers/ata/libata-core.c | 12 ++++++++++++
> include/linux/ata.h | 1 +
> include/linux/libata.h | 2 ++
> 3 files changed, 15 insertions(+)
>
> diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
> index f48fb63d7e85..be320c3e0fef 100644
> --- a/drivers/ata/libata-core.c
> +++ b/drivers/ata/libata-core.c
> @@ -3146,6 +3146,10 @@ int ata_dev_configure(struct ata_device *dev)
> dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_1024,
> dev->max_sectors);
>
> + if (dev->quirks & ATA_QUIRK_MAX_SEC_8191)
> + dev->max_sectors = min_t(unsigned int, ATA_MAX_SECTORS_8191,
> + dev->max_sectors);
> +
> if (dev->quirks & ATA_QUIRK_MAX_SEC_LBA48)
> dev->max_sectors = ATA_MAX_SECTORS_LBA48;
>
> @@ -3998,6 +4002,7 @@ static const char * const ata_quirk_names[] = {
> [__ATA_QUIRK_NO_DMA_LOG] = "nodmalog",
> [__ATA_QUIRK_NOTRIM] = "notrim",
> [__ATA_QUIRK_MAX_SEC_1024] = "maxsec1024",
> + [__ATA_QUIRK_MAX_SEC_8191] = "maxsec8191",
It would be a lot better if we could have a definition for this a little more
generic, that is, add a value to a generic "maxsec" quirk. E.g.:
[__ATA_QUIRK_MAX_SEC_8191] = { "maxsec", 8191 },
That would avoid the need for more of these if other drives have different
limits. We already have 2 maxsec limit, this is the 3rd one...
> [__ATA_QUIRK_MAX_TRIM_128M] = "maxtrim128m",
> [__ATA_QUIRK_NO_NCQ_ON_ATI] = "noncqonati",
> [__ATA_QUIRK_NO_LPM_ON_ATI] = "nolpmonati",
> @@ -4104,6 +4109,12 @@ static const struct ata_dev_quirks_entry __ata_dev_quirks[] = {
> { "LITEON CX1-JB*-HP", NULL, ATA_QUIRK_MAX_SEC_1024 },
> { "LITEON EP1-*", NULL, ATA_QUIRK_MAX_SEC_1024 },
>
> + /*
> + * These devices time out with higher max sects.
> + * https://bugzilla.kernel.org/show_bug.cgi?id=220693
> + */
> + { "DELLBOSS VD MV.R00-0", "MV.R00-0", ATA_QUIRK_MAX_SEC_8191 },
> +
> /* Devices we expect to fail diagnostics */
>
> /* Devices where NCQ should be avoided */
> @@ -6455,6 +6466,7 @@ static const struct ata_force_param force_tbl[] __initconst = {
>
> force_quirk_on(max_sec_128, ATA_QUIRK_MAX_SEC_128),
> force_quirk_on(max_sec_1024, ATA_QUIRK_MAX_SEC_1024),
> + force_quirk_on(max_sec_8191, ATA_QUIRK_MAX_SEC_8191),
> force_quirk_on(max_sec_lba48, ATA_QUIRK_MAX_SEC_LBA48),
>
> force_quirk_onoff(lpm, ATA_QUIRK_NOLPM),
> diff --git a/include/linux/ata.h b/include/linux/ata.h
> index c9013e472aa3..54b416e26995 100644
> --- a/include/linux/ata.h
> +++ b/include/linux/ata.h
> @@ -29,6 +29,7 @@ enum {
> ATA_MAX_SECTORS_128 = 128,
> ATA_MAX_SECTORS = 256,
> ATA_MAX_SECTORS_1024 = 1024,
> + ATA_MAX_SECTORS_8191 = 8191,
> ATA_MAX_SECTORS_LBA48 = 65535,/* avoid count to be 0000h */
> ATA_MAX_SECTORS_TAPE = 65535,
> ATA_MAX_TRIM_RNUM = 64, /* 512-byte payload / (6-byte LBA + 2-byte range per entry) */
> diff --git a/include/linux/libata.h b/include/linux/libata.h
> index 171268d65169..39534fafa36a 100644
> --- a/include/linux/libata.h
> +++ b/include/linux/libata.h
> @@ -75,6 +75,7 @@ enum ata_quirks {
> __ATA_QUIRK_NO_DMA_LOG, /* Do not use DMA for log read */
> __ATA_QUIRK_NOTRIM, /* Do not use TRIM */
> __ATA_QUIRK_MAX_SEC_1024, /* Limit max sects to 1024 */
> + __ATA_QUIRK_MAX_SEC_8191, /* Limit max sects to 8191 */
> __ATA_QUIRK_MAX_TRIM_128M, /* Limit max trim size to 128M */
> __ATA_QUIRK_NO_NCQ_ON_ATI, /* Disable NCQ on ATI chipset */
> __ATA_QUIRK_NO_LPM_ON_ATI, /* Disable LPM on ATI chipset */
> @@ -115,6 +116,7 @@ enum {
> ATA_QUIRK_NO_DMA_LOG = (1U << __ATA_QUIRK_NO_DMA_LOG),
> ATA_QUIRK_NOTRIM = (1U << __ATA_QUIRK_NOTRIM),
> ATA_QUIRK_MAX_SEC_1024 = (1U << __ATA_QUIRK_MAX_SEC_1024),
> + ATA_QUIRK_MAX_SEC_8191 = (1U << __ATA_QUIRK_MAX_SEC_8191),
> ATA_QUIRK_MAX_TRIM_128M = (1U << __ATA_QUIRK_MAX_TRIM_128M),
> ATA_QUIRK_NO_NCQ_ON_ATI = (1U << __ATA_QUIRK_NO_NCQ_ON_ATI),
> ATA_QUIRK_NO_LPM_ON_ATI = (1U << __ATA_QUIRK_NO_LPM_ON_ATI),
--
Damien Le Moal
Western Digital Research
next prev parent reply other threads:[~2025-11-25 0:24 UTC|newest]
Thread overview: 10+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-11-24 13:44 [PATCH 0/3] ata: libata: Quirk DELLBOSS VD MV.R00-0 max_sectors Niklas Cassel
2025-11-24 13:44 ` [PATCH 1/3] ata: libata: Move quirk flags to their own enum Niklas Cassel
2025-11-25 4:29 ` Damien Le Moal
2025-11-24 13:44 ` [PATCH 2/3] ata: libata-core: Quirk DELLBOSS VD MV.R00-0 max_sectors Niklas Cassel
2025-11-24 14:09 ` Niklas Cassel
2025-11-24 20:51 ` Jack L.
2025-11-25 0:00 ` Jack L.
2025-11-25 0:20 ` Damien Le Moal [this message]
2025-11-24 13:44 ` [PATCH 3/3] ata: libata: Allow more quirks Niklas Cassel
2025-11-25 4:30 ` Damien Le Moal
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=4a5fe360-6d26-4d06-9eca-d087966fee0a@kernel.org \
--to=dlemoal@kernel.org \
--cc=cassel@kernel.org \
--cc=linux-ide@vger.kernel.org \
--cc=xxjack12xx@gmail.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox