[PATCH] ata: ahci: preserve preset port masks

From: zhoumin

Date: Wed Oct 14 2026 - 23:07:18 EST


ahci_get_port_mask() returns zero for absent or unmatched parameters,
overwriting the mask set by the Marvell PATA quirk.

Update the mask in place only when parsing a global value or a matching
device entry. Preserve existing numeric parsing and override behavior.

Fixes: 70c1595c181c ("ata: ahci: Allow ignoring the external/hotplug capability of ports")
Signed-off-by: zhoumin <teczm@xxxxxxxxxxx>
---
drivers/ata/ahci.c | 21 +++++++++------------
1 file changed, 9 insertions(+), 12 deletions(-)

diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
index 9b8c0935001c..324e4918a055 100644
--- a/drivers/ata/ahci.c
+++ b/drivers/ata/ahci.c
@@ -1654,22 +1654,21 @@ static u32 ahci_port_mask(struct device *dev, char *mask_s)
return mask;
}

-static u32 ahci_get_port_mask(struct device *dev, char *mask_p)
+static void ahci_get_port_mask(struct device *dev, char *mask_p, u32 *mask)
{
char *param, *end, *str, *mask_s;
char *name;
- u32 mask = 0;

if (!mask_p || !strlen(mask_p))
- return 0;
+ return;

str = kstrdup(mask_p, GFP_KERNEL);
if (!str)
- return 0;
+ return;

/* Handle single mask case */
if (!strchr(str, '=')) {
- mask = ahci_port_mask(dev, str);
+ *mask = ahci_port_mask(dev, str);
goto free;
}

@@ -1704,13 +1703,11 @@ static u32 ahci_get_port_mask(struct device *dev, char *mask_p)
param++;
}

- mask = ahci_port_mask(dev, mask_s);
+ *mask = ahci_port_mask(dev, mask_s);
}

free:
kfree(str);
-
- return mask;
}

static void ahci_pci_save_initial_config(struct pci_dev *pdev,
@@ -1736,10 +1733,10 @@ static void ahci_pci_save_initial_config(struct pci_dev *pdev,
}

/* Handle port map masks passed as module parameter. */
- hpriv->mask_port_map =
- ahci_get_port_mask(&pdev->dev, ahci_mask_port_map);
- hpriv->mask_port_ext =
- ahci_get_port_mask(&pdev->dev, ahci_mask_port_ext);
+ ahci_get_port_mask(&pdev->dev, ahci_mask_port_map,
+ &hpriv->mask_port_map);
+ ahci_get_port_mask(&pdev->dev, ahci_mask_port_ext,
+ &hpriv->mask_port_ext);

ahci_save_initial_config(&pdev->dev, hpriv);
}
--
2.53.0