Skip to content

Commit

Permalink
ahci: Introduce ahci_ignore_port() helper
Browse files Browse the repository at this point in the history
libahci and AHCI drivers may ignore some ports if the port is invalid
(its ID does not correspond to a valid physical port) or if the user
explicitly requested the port to be ignored with the mask_port_map
ahci module parameter. Such port that shall be ignored can be identified
by checking that the bit corresponding to the port ID is not set in the
mask_port_map field of struct ahci_host_priv. E.g. code such as:
"if (!(hpriv->mask_port_map & (1 << portid)))".

Replace all direct use of the mask_port_map field to detect such port
with the new helper inline function ahci_ignore_port() to make the code
more readable/easier to understand.

The comment describing the mask_port_map field of struct ahci_host_priv
is also updated to be more accurate.

Signed-off-by: Damien Le Moal <dlemoal@kernel.org>
Reviewed-by: Niklas Cassel <cassel@kernel.org>
  • Loading branch information
Damien Le Moal committed Jan 9, 2025
1 parent 8c87215 commit c9b5be9
Show file tree
Hide file tree
Showing 4 changed files with 18 additions and 7 deletions.
13 changes: 12 additions & 1 deletion drivers/ata/ahci.h
Original file line number Diff line number Diff line change
Expand Up @@ -328,7 +328,7 @@ struct ahci_port_priv {
struct ahci_host_priv {
/* Input fields */
unsigned int flags; /* AHCI_HFLAG_* */
u32 mask_port_map; /* mask out particular bits */
u32 mask_port_map; /* Mask of valid ports */

void __iomem * mmio; /* bus-independent mem map */
u32 cap; /* cap to use */
Expand Down Expand Up @@ -379,6 +379,17 @@ struct ahci_host_priv {
int port);
};

/*
* Return true if a port should be ignored because it is excluded from
* the host port map.
*/
static inline bool ahci_ignore_port(struct ahci_host_priv *hpriv,
unsigned int portid)
{
return portid >= hpriv->nports ||
!(hpriv->mask_port_map & (1 << portid));
}

extern int ahci_ignore_sss;

extern const struct attribute_group *ahci_shost_groups[];
Expand Down
2 changes: 1 addition & 1 deletion drivers/ata/ahci_brcm.c
Original file line number Diff line number Diff line change
Expand Up @@ -288,7 +288,7 @@ static unsigned int brcm_ahci_read_id(struct ata_device *dev,

/* Re-initialize and calibrate the PHY */
for (i = 0; i < hpriv->nports; i++) {
if (!(hpriv->mask_port_map & (1 << i)))
if (ahci_ignore_port(hpriv, i))
continue;

rc = phy_init(hpriv->phys[i]);
Expand Down
4 changes: 2 additions & 2 deletions drivers/ata/ahci_ceva.c
Original file line number Diff line number Diff line change
Expand Up @@ -206,7 +206,7 @@ static int ceva_ahci_platform_enable_resources(struct ahci_host_priv *hpriv)
goto disable_clks;

for (i = 0; i < hpriv->nports; i++) {
if (!(hpriv->mask_port_map & (1 << i)))
if (ahci_ignore_port(hpriv, i))
continue;

rc = phy_init(hpriv->phys[i]);
Expand All @@ -218,7 +218,7 @@ static int ceva_ahci_platform_enable_resources(struct ahci_host_priv *hpriv)
ahci_platform_deassert_rsts(hpriv);

for (i = 0; i < hpriv->nports; i++) {
if (!(hpriv->mask_port_map & (1 << i)))
if (ahci_ignore_port(hpriv, i))
continue;

rc = phy_power_on(hpriv->phys[i]);
Expand Down
6 changes: 3 additions & 3 deletions drivers/ata/libahci_platform.c
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ int ahci_platform_enable_phys(struct ahci_host_priv *hpriv)
int rc, i;

for (i = 0; i < hpriv->nports; i++) {
if (!(hpriv->mask_port_map & (1 << i)))
if (ahci_ignore_port(hpriv, i))
continue;

rc = phy_init(hpriv->phys[i]);
Expand All @@ -73,7 +73,7 @@ int ahci_platform_enable_phys(struct ahci_host_priv *hpriv)

disable_phys:
while (--i >= 0) {
if (!(hpriv->mask_port_map & (1 << i)))
if (ahci_ignore_port(hpriv, i))
continue;

phy_power_off(hpriv->phys[i]);
Expand All @@ -94,7 +94,7 @@ void ahci_platform_disable_phys(struct ahci_host_priv *hpriv)
int i;

for (i = 0; i < hpriv->nports; i++) {
if (!(hpriv->mask_port_map & (1 << i)))
if (ahci_ignore_port(hpriv, i))
continue;

phy_power_off(hpriv->phys[i]);
Expand Down

0 comments on commit c9b5be9

Please sign in to comment.