From: Niklas Cassel <cassel@kernel.org>
To: Damien Le Moal <dlemoal@kernel.org>
Cc: linux-ide@vger.kernel.org
Subject: Re: [PATCH] ahci: Introduce ahci_ignore_port() helper
Date: Tue, 7 Jan 2025 11:24:52 +0100 [thread overview]
Message-ID: <Z30A9OL8RInlg_Tn@ryzen> (raw)
In-Reply-To: <20250106052701.47246-1-dlemoal@kernel.org>
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>
prev parent reply other threads:[~2025-01-07 10:24 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-01-06 5:27 [PATCH] ahci: Introduce ahci_ignore_port() helper Damien Le Moal
2025-01-07 10:24 ` Niklas Cassel [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=Z30A9OL8RInlg_Tn@ryzen \
--to=cassel@kernel.org \
--cc=dlemoal@kernel.org \
--cc=linux-ide@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.