Re: [PATCH v2 2/2] Revert "ata: ahci: force 32-bit DMA for JMicron JMB582/JMB585"

From: Bjorn Helgaas

Date: Fri Sep 25 2026 - 15:42:23 EST


[+cc Roland, snoep]

On Tue, Sep 08, 2026 at 02:06:00PM -0500, Mario Limonciello wrote:
> This reverts commit 105c42566a550e2d05fc14f763216a8765ee5d0e.
>
> The issue is actually a problem with BIOS configuaration of PCIe
> root ports, enabling a feature that causes problems with 64-bit
> DMA. It is fixed by adjusting the kernel adjusting the
> configuration of those root ports.

I'm a little concerned about doing this revert for v7.3:

- The AMD issue should affect any SATA controller, but 105c42566a55
("ata: ahci: force 32-bit DMA for JMicron JMB582/JMB585") is very
specific about JMicron JMB582/JMB585.

- The BIOS configuration change only affects AMD NBIO 7.7 and 7.11
but the original posting [1] of 105c42566a55 ("ata: ahci: force
32-bit DMA for JMicron JMB582/JMB585") mentions Raspberry Pi,
which isn't AMD (the Raspberry Pi mention was removed before
105c42566a55 was merged).

- There are reports of problems on Raspberry Pi 5 JMB585 [2], [3]
that don't seem completely resolved.

- The revert doesn't seem like it fixes a problem, so I don't know
that I can justify it as post-rc1 material for v7.3; maybe the ATA
folks should take it for v7.4?

What if I just merge patch [1/2] ("x86/PCI: Disable enhanced atomics
on AMD NBIO 7.7 and 7.11") for v7.3? Would that leave anything
broken?

[1] https://lore.kernel.org/all/20260403050225.50186-1-artmoty@xxxxxxxxx/t/#u)
[2] https://forum.radxa.com/t/repeated-ext4-metadata-corruption-on-raspberry-pi-5-with-penta-sata-hat-jmb585-despite-healthy-ssds-and-raid1/31393/10
[3] https://forums.raspberrypi.com/viewtopic.php?p=2386959#p2386959

> Cc: Arthur Husband <artmoty@xxxxxxxxx>
> Signed-off-by: Mario Limonciello <mario.limonciello@xxxxxxx>
> ---
> drivers/ata/ahci.c | 18 ------------------
> 1 file changed, 18 deletions(-)
>
> diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
> index 9b8c0935001cb..bffe50a109b88 100644
> --- a/drivers/ata/ahci.c
> +++ b/drivers/ata/ahci.c
> @@ -68,7 +68,6 @@ enum board_ids {
> /* board IDs for specific chipsets in alphabetical order */
> board_ahci_al,
> board_ahci_avn,
> - board_ahci_jmb585,
> board_ahci_mcp65,
> board_ahci_mcp77,
> board_ahci_mcp89,
> @@ -213,15 +212,6 @@ static const struct ata_port_info ahci_port_info[] = {
> .udma_mask = ATA_UDMA6,
> .port_ops = &ahci_avn_ops,
> },
> - /* JMicron JMB582/585: 64-bit DMA is broken, force 32-bit */
> - [board_ahci_jmb585] = {
> - AHCI_HFLAGS (AHCI_HFLAG_IGN_IRQ_IF_ERR |
> - AHCI_HFLAG_32BIT_ONLY),
> - .flags = AHCI_FLAG_COMMON,
> - .pio_mask = ATA_PIO4,
> - .udma_mask = ATA_UDMA6,
> - .port_ops = &ahci_ops,
> - },
> [board_ahci_mcp65] = {
> AHCI_HFLAGS (AHCI_HFLAG_NO_FPDMA_AA | AHCI_HFLAG_NO_PMP |
> AHCI_HFLAG_YES_NCQ),
> @@ -954,14 +944,6 @@ static const struct pci_device_id ahci_pci_tbl[] = {
> /* Elkhart Lake AHCI */
> PCI_VDEVICE(INTEL, 0x4b63),
> .driver_data = board_ahci_pcs_quirk,
> - }, {
> - /* JMicron JMB582/585: force 32-bit DMA (broken 64-bit implementation) */
> - PCI_VDEVICE(JMICRON, 0x0582),
> - .driver_data = board_ahci_jmb585,
> -
> - }, {
> - PCI_VDEVICE(JMICRON, 0x0585),
> - .driver_data = board_ahci_jmb585,
> }, {
> /* JMicron 360/1/3/5/6, match class to avoid IDE function */
> PCI_DEVICE(PCI_VENDOR_ID_JMICRON, PCI_ANY_ID),
> --
> 2.43.0
>