Message ID | 20250106052701.47246-1-dlemoal@kernel.org |
---|---|
State | New |
Headers | show |
Series | ahci: Introduce ahci_ignore_port() helper | expand |
On Mon, Jan 06, 2025 at 02:27:01PM +0900, Damien Le Moal wrote: > 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> > --- > drivers/ata/ahci.h | 13 ++++++++++++- > drivers/ata/ahci_brcm.c | 2 +- > drivers/ata/ahci_ceva.c | 4 ++-- > drivers/ata/libahci_platform.c | 6 +++--- > 4 files changed, 18 insertions(+), 7 deletions(-) > > diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h > index 8f40f75ba08c..aea30df50c58 100644 > --- a/drivers/ata/ahci.h > +++ b/drivers/ata/ahci.h > @@ -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 */ > @@ -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[]; > diff --git a/drivers/ata/ahci_brcm.c b/drivers/ata/ahci_brcm.c > index 24c471b485ab..29be74fedcf0 100644 > --- a/drivers/ata/ahci_brcm.c > +++ b/drivers/ata/ahci_brcm.c > @@ -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]); > diff --git a/drivers/ata/ahci_ceva.c b/drivers/ata/ahci_ceva.c > index f2e20ed11ec7..2d6a08c23d6a 100644 > --- a/drivers/ata/ahci_ceva.c > +++ b/drivers/ata/ahci_ceva.c > @@ -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]); > @@ -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]); > diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c > index b68777841f7a..53b2c7719dc5 100644 > --- a/drivers/ata/libahci_platform.c > +++ b/drivers/ata/libahci_platform.c > @@ -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]); > @@ -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]); > @@ -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]); > -- > 2.47.1 > Reviewed-by: Niklas Cassel <cassel@kernel.org>
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h index 8f40f75ba08c..aea30df50c58 100644 --- a/drivers/ata/ahci.h +++ b/drivers/ata/ahci.h @@ -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 */ @@ -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[]; diff --git a/drivers/ata/ahci_brcm.c b/drivers/ata/ahci_brcm.c index 24c471b485ab..29be74fedcf0 100644 --- a/drivers/ata/ahci_brcm.c +++ b/drivers/ata/ahci_brcm.c @@ -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]); diff --git a/drivers/ata/ahci_ceva.c b/drivers/ata/ahci_ceva.c index f2e20ed11ec7..2d6a08c23d6a 100644 --- a/drivers/ata/ahci_ceva.c +++ b/drivers/ata/ahci_ceva.c @@ -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]); @@ -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]); diff --git a/drivers/ata/libahci_platform.c b/drivers/ata/libahci_platform.c index b68777841f7a..53b2c7719dc5 100644 --- a/drivers/ata/libahci_platform.c +++ b/drivers/ata/libahci_platform.c @@ -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]); @@ -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]); @@ -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]);
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> --- drivers/ata/ahci.h | 13 ++++++++++++- drivers/ata/ahci_brcm.c | 2 +- drivers/ata/ahci_ceva.c | 4 ++-- drivers/ata/libahci_platform.c | 6 +++--- 4 files changed, 18 insertions(+), 7 deletions(-)