<feed xmlns='http://www.w3.org/2005/Atom'>
<title>kernel/linux.git/drivers/ata, branch master</title>
<subtitle>Linux kernel stable tree (mirror)</subtitle>
<id>https://git.radix-linux.su/kernel/linux.git/atom?h=master</id>
<link rel='self' href='https://git.radix-linux.su/kernel/linux.git/atom?h=master'/>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/'/>
<updated>2026-04-15T22:03:01+00:00</updated>
<entry>
<title>Merge tag 'ata-7.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux</title>
<updated>2026-04-15T22:03:01+00:00</updated>
<author>
<name>Linus Torvalds</name>
<email>torvalds@linux-foundation.org</email>
</author>
<published>2026-04-15T22:03:01+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=5a69195686d5b874ac5a4c7f809ecb75fbc535ef'/>
<id>urn:sha1:5a69195686d5b874ac5a4c7f809ecb75fbc535ef</id>
<content type='text'>
Pull ata updates from Niklas Cassel:

 - Misc code cleanups related to tag checking and tag command completion
   (Damien)

 - Remove Baikal bt1-ahci DT binding since the upstreaming for this SoC
   is not going to be finalized (Andy)

 - Only call the libata port error handler from the SCSI error handler
   if there were command timeouts or if EH was scheduled for the port
   (Damien)

 - Refactor ata_scsiop_maint_in() to more clearly show that there is
   only one service action implemented for the MAINTENANCE IN command
   (me)

 - Clean up the handling of sysfs attributes exposed by libata (Heiner)

 - Let libahci_platform use a flexible array member for platform PHYs to
   avoid multiple allocations (Rosen)

 - Do not retry reset if the device has been removed/hot-unplugged
   (Igor)

 - Add missing newlines to error prints in pata_arasan_cf driver (Haoyu)

 - Use the correct SCSI host byte when completing deferred ATA
   PASS-THROUGH commands, to avoid the SCSI mid-layer from failing the
   commands instead of requeuing (Igor)

* tag 'ata-7.1-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/libata/linux:
  ata: libata-scsi: fix requeue of deferred ATA PASS-THROUGH commands
  ata: pata_arasan_cf: fix missing newline in dev_err() messages
  ata: libata-transport: remove static variable ata_scsi_transport_template
  ata: libata-transport: split struct ata_internal
  ata: libata-transport: use static struct ata_transport_internal to simplify match functions
  ata: libata-transport: inline ata_attach|release_transport
  ata: libata-transport: instantiate struct ata_internal statically
  ata: libata-eh: Do not retry reset if the device is gone
  ata: libahci_platform: use flex array for platform PHYs
  ata: libata-transport: remove redundant dynamic sysfs attributes
  ata: libata-scsi: refactor ata_scsiop_maint_in()
  ata: libata-eh: avoid unnecessary calls to ata_scsi_port_error_handler()
  ata: ahci-dwc: Remove not-going-to-be-supported code for Baikal SoC
  ata: libata-scsi: rename and improve ata_qc_done()
  ata: libata-scsi: make ata_scsi_simulate() static
  ata: libata-scsi: simplify ata_scsi_requeue_deferred_qc()
  ata: libata-sata: simplify ata_sas_queuecmd()
  ata: libata-core: improve tag checks in ata_qc_issue()
</content>
</entry>
<entry>
<title>ata: libata-scsi: fix requeue of deferred ATA PASS-THROUGH commands</title>
<updated>2026-04-12T17:57:59+00:00</updated>
<author>
<name>Igor Pylypiv</name>
<email>ipylypiv@google.com</email>
</author>
<published>2026-04-12T15:36:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=8ebf408e7d463eee02c348a3c8277b95587b710d'/>
<id>urn:sha1:8ebf408e7d463eee02c348a3c8277b95587b710d</id>
<content type='text'>
Commit 0ea84089dbf6 ("ata: libata-scsi: avoid Non-NCQ command starvation")
introduced ata_scsi_requeue_deferred_qc() to handle commands deferred
during resets or NCQ failures. This deferral logic completed commands
with DID_SOFT_ERROR to trigger a retry in the SCSI mid-layer.

However, DID_SOFT_ERROR is subject to scsi_cmd_retry_allowed() checks.
ATA PASS-THROUGH commands sent via SG_IO ioctl have scmd-&gt;allowed set
to zero. This causes the mid-layer to fail the command immediately
instead of retrying, even though the command was never actually issued
to the hardware.

Switch to DID_REQUEUE to ensure these commands are inserted back into
the request queue regardless of retry limits.

Fixes: 0ea84089dbf6 ("ata: libata-scsi: avoid Non-NCQ command starvation")
Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Igor Pylypiv &lt;ipylypiv@google.com&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
<entry>
<title>ata: ahci: force 32-bit DMA for JMicron JMB582/JMB585</title>
<updated>2026-04-07T07:36:46+00:00</updated>
<author>
<name>Arthur Husband</name>
<email>artmoty@gmail.com</email>
</author>
<published>2026-04-06T22:23:35+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=105c42566a550e2d05fc14f763216a8765ee5d0e'/>
<id>urn:sha1:105c42566a550e2d05fc14f763216a8765ee5d0e</id>
<content type='text'>
The JMicron JMB585 (and JMB582) SATA controllers advertise 64-bit DMA
support via the S64A bit in the AHCI CAP register, but their 64-bit DMA
implementation is defective. Under sustained I/O, DMA transfers targeting
addresses above 4GB silently corrupt data -- writes land at incorrect
memory addresses with no errors logged.

The failure pattern is similar to the ASMedia ASM1061
(commit 20730e9b2778 ("ahci: add 43-bit DMA address quirk for ASMedia
ASM1061 controllers")), which also falsely advertised full 64-bit DMA
support. However, the JMB585 requires a stricter 32-bit DMA mask rather
than 43-bit, as corruption occurs with any address above 4GB.

On the Minisforum N5 Pro specifically, the combination of the JMB585's
broken 64-bit DMA with the AMD Family 1Ah (Strix Point) IOMMU causes
silent data corruption that is only detectable via checksumming
filesystems (BTRFS/ZFS scrub). The corruption occurs when 32-bit IOVA
space is exhausted and the kernel transparently switches to 64-bit DMA
addresses.

Add device-specific PCI ID entries for the JMB582 (0x0582) and JMB585
(0x0585) before the generic JMicron class match, using a new board type
that combines AHCI_HFLAG_IGN_IRQ_IF_ERR (preserving existing behavior)
with AHCI_HFLAG_32BIT_ONLY to force 32-bit DMA masks.

Signed-off-by: Arthur Husband &lt;artmoty@gmail.com&gt;
Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
<entry>
<title>ata: pata_arasan_cf: fix missing newline in dev_err() messages</title>
<updated>2026-04-03T07:16:00+00:00</updated>
<author>
<name>Haoyu Lu</name>
<email>hechushiguitu666@gmail.com</email>
</author>
<published>2026-04-03T02:07:09+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=797f629856c56595e138d69b8b0701ffe3cece21'/>
<id>urn:sha1:797f629856c56595e138d69b8b0701ffe3cece21</id>
<content type='text'>
Add missing trailing newlines to dev_err() messages in pata_arasan_cf.c.

This keeps the error output as properly terminated log lines.

Acked-by: Viresh Kumar &lt;vireshk@kernel.org&gt;
Signed-off-by: Haoyu Lu &lt;hechushiguitu666@gmail.com&gt;
Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
<entry>
<title>ata: libata-transport: remove static variable ata_scsi_transport_template</title>
<updated>2026-04-02T19:01:10+00:00</updated>
<author>
<name>Heiner Kallweit</name>
<email>hkallweit1@gmail.com</email>
</author>
<published>2026-04-02T13:32:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=7bf6ddc3345663beef7766a804fe9b73909fba57'/>
<id>urn:sha1:7bf6ddc3345663beef7766a804fe9b73909fba57</id>
<content type='text'>
Simplify the code by making struct ata_scsi_transportt public, instead
of using separate variable ata_scsi_transport_template.

Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Heiner Kallweit &lt;hkallweit1@gmail.com&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
<entry>
<title>ata: libata-transport: split struct ata_internal</title>
<updated>2026-04-02T19:01:10+00:00</updated>
<author>
<name>Heiner Kallweit</name>
<email>hkallweit1@gmail.com</email>
</author>
<published>2026-04-02T13:31:22+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=359942ba4c1dfa3795e6137a5c09e2bfd1c444e5'/>
<id>urn:sha1:359942ba4c1dfa3795e6137a5c09e2bfd1c444e5</id>
<content type='text'>
There's no need for an umbrella struct, so remove it. It's also a
prerequisite for making the embedded struct scsi_transport_template
public.

Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Heiner Kallweit &lt;hkallweit1@gmail.com&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
<entry>
<title>ata: libata-transport: use static struct ata_transport_internal to simplify match functions</title>
<updated>2026-04-02T19:01:02+00:00</updated>
<author>
<name>Heiner Kallweit</name>
<email>hkallweit1@gmail.com</email>
</author>
<published>2026-04-02T13:30:48+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=365da8c68739a28b44e414696a5ff0ee4c58e7d3'/>
<id>urn:sha1:365da8c68739a28b44e414696a5ff0ee4c58e7d3</id>
<content type='text'>
Both matching functions can make use of static struct
ata_transport_internal. This eliminates the dependency on static
variable ata_scsi_transport_template, and it allows to remove helper
to_ata_internal(). Small drawback is that a forward declaration of
both functions is needed.

Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Heiner Kallweit &lt;hkallweit1@gmail.com&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
<entry>
<title>ata: libata-transport: inline ata_attach|release_transport</title>
<updated>2026-04-02T18:51:00+00:00</updated>
<author>
<name>Heiner Kallweit</name>
<email>hkallweit1@gmail.com</email>
</author>
<published>2026-04-02T13:30:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=f2122465398a875ef5a31bde85602e6dfac17a83'/>
<id>urn:sha1:f2122465398a875ef5a31bde85602e6dfac17a83</id>
<content type='text'>
Both functions are helpers which are used only once. So remove them and
merge their code into libata_transport_init() and libata_transport_exit()
respectively.

Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Heiner Kallweit &lt;hkallweit1@gmail.com&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
<entry>
<title>ata: libata-transport: instantiate struct ata_internal statically</title>
<updated>2026-04-02T18:51:00+00:00</updated>
<author>
<name>Heiner Kallweit</name>
<email>hkallweit1@gmail.com</email>
</author>
<published>2026-04-02T13:29:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=ee1ed7a864389ba727ac9b3549beab08e3966735'/>
<id>urn:sha1:ee1ed7a864389ba727ac9b3549beab08e3966735</id>
<content type='text'>
Struct ata_internal is only instantiated once, in module init code.
So we can also instantiate it statically, which allows simplifying
the code.

Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Heiner Kallweit &lt;hkallweit1@gmail.com&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
<entry>
<title>ata: libata-eh: Do not retry reset if the device is gone</title>
<updated>2026-04-02T18:18:29+00:00</updated>
<author>
<name>Igor Pylypiv</name>
<email>ipylypiv@google.com</email>
</author>
<published>2026-04-02T16:07:05+00:00</published>
<link rel='alternate' type='text/html' href='https://git.radix-linux.su/kernel/linux.git/commit/?id=182caa17360dd48e6df08e18f00ebda0be87ab24'/>
<id>urn:sha1:182caa17360dd48e6df08e18f00ebda0be87ab24</id>
<content type='text'>
If a device is hot-unplugged or otherwise disappears during error handling,
ata_eh_reset() may fail with -ENODEV. Currently, the error handler will
continue to retry the reset operation up to max_tries times.

Prevent unnecessary reset retries by exiting the loop early when
ata_do_reset() returns -ENODEV.

Reviewed-by: Damien Le Moal &lt;dlemoal@kernel.org&gt;
Signed-off-by: Igor Pylypiv &lt;ipylypiv@google.com&gt;
Signed-off-by: Niklas Cassel &lt;cassel@kernel.org&gt;
</content>
</entry>
</feed>
