All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Russell King (Oracle)" <rmk+kernel@armlinux.org.uk>
To: Andrew Lunn <andrew@lunn.ch>, Heiner Kallweit <hkallweit1@gmail.com>
Cc: Alexander Couzens <lynxis@fe80.eu>,
	Andrew Lunn <andrew+netdev@lunn.ch>,
	AngeloGioacchino Del Regno
	<angelogioacchino.delregno@collabora.com>,
	Broadcom internal kernel review list
	<bcm-kernel-feedback-list@broadcom.com>,
	Daniel Golle <daniel@makrotopia.org>,
	"David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Florian Fainelli <florian.fainelli@broadcom.com>,
	Ioana Ciornei <ioana.ciornei@nxp.com>,
	Jakub Kicinski <kuba@kernel.org>,
	Jose Abreu <Jose.Abreu@synopsys.com>,
	linux-arm-kernel@lists.infradead.org,
	linux-mediatek@lists.infradead.org,
	Marcin Wojtas <marcin.s.wojtas@gmail.com>,
	Matthias Brugger <matthias.bgg@gmail.com>,
	netdev@vger.kernel.org, Paolo Abeni <pabeni@redhat.com>
Subject: [PATCH RFC net-next 04/16] net: phy: add phy_inband_caps()
Date: Tue, 26 Nov 2024 09:24:35 +0000	[thread overview]
Message-ID: <E1tFroB-005xPw-Vd@rmk-PC.armlinux.org.uk> (raw)
In-Reply-To: <Z0WTpE8wkpjMiv_J@shell.armlinux.org.uk>

Add a method to query the PHY's in-band capabilities for a PHY
interface mode.

Where the interface mode does not have in-band capability, or the PHY
driver has not been updated to return this information, then
phy_inband_caps() should return zero. Otherwise, PHY drivers will
return a value consisting of the following flags:

LINK_INBAND_DISABLE indicates that the hardware does not support
in-band signalling, or can have in-band signalling configured via
software to be disabled.

LINK_INBAND_ENABLE indicates that the hardware will use in-band
signalling, or can have in-band signalling configured via software
to be enabled.

LINK_INBAND_BYPASS indicates that the hardware has the ability to
bypass in-band signalling when enabled after a timeout if the link
partner does not respond to its in-band signalling.

This reports the PHY capabilities for the particular interface mode,
not the current configuration.

Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
 drivers/net/phy/phy.c | 21 +++++++++++++++++++++
 include/linux/phy.h   | 28 ++++++++++++++++++++++++++++
 2 files changed, 49 insertions(+)

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 4f3e742907cb..d7b34f8ae415 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -1005,6 +1005,27 @@ static int phy_check_link_status(struct phy_device *phydev)
 	return 0;
 }
 
+/**
+ * phy_inband_caps - query which in-band signalling modes are supported
+ * @phydev: a pointer to a &struct phy_device
+ * @interface: the interface mode for the PHY
+ *
+ * Returns zero if it is unknown what in-band signalling is supported by the
+ * PHY (e.g. because the PHY driver doesn't implement the method.) Otherwise,
+ * returns a bit mask of the LINK_INBAND_* values from
+ * &enum link_inband_signalling to describe which inband modes are supported
+ * by the PHY for this interface mode.
+ */
+unsigned int phy_inband_caps(struct phy_device *phydev,
+			     phy_interface_t interface)
+{
+	if (phydev->drv && phydev->drv->inband_caps)
+		return phydev->drv->inband_caps(phydev, interface);
+
+	return 0;
+}
+EXPORT_SYMBOL_GPL(phy_inband_caps);
+
 /**
  * _phy_start_aneg - start auto-negotiation for this PHY device
  * @phydev: the phy_device struct
diff --git a/include/linux/phy.h b/include/linux/phy.h
index 77c6d6451638..ff60c4785e11 100644
--- a/include/linux/phy.h
+++ b/include/linux/phy.h
@@ -815,6 +815,24 @@ struct phy_tdr_config {
 };
 #define PHY_PAIR_ALL -1
 
+/**
+ * enum link_inband_signalling - in-band signalling modes that are supported
+ *
+ * @LINK_INBAND_DISABLE: in-band signalling can be disabled
+ * @LINK_INBAND_ENABLE: in-band signalling can be enabled without bypass
+ * @LINK_INBAND_BYPASS: in-band signalling can be enabled with bypass
+ *
+ * The possible and required bits can only be used if the valid bit is set.
+ * If possible is clear, that means inband signalling can not be used.
+ * Required is only valid when possible is set, and means that inband
+ * signalling must be used.
+ */
+enum link_inband_signalling {
+	LINK_INBAND_DISABLE		= BIT(0),
+	LINK_INBAND_ENABLE		= BIT(1),
+	LINK_INBAND_BYPASS		= BIT(2),
+};
+
 /**
  * struct phy_plca_cfg - Configuration of the PLCA (Physical Layer Collision
  * Avoidance) Reconciliation Sublayer.
@@ -954,6 +972,14 @@ struct phy_driver {
 	 */
 	int (*get_features)(struct phy_device *phydev);
 
+	/**
+	 * @inband_caps: query whether in-band is supported for the given PHY
+	 * interface mode. Returns a bitmask of bits defined by enum
+	 * link_inband_signalling.
+	 */
+	unsigned int (*inband_caps)(struct phy_device *phydev,
+				    phy_interface_t interface);
+
 	/**
 	 * @get_rate_matching: Get the supported type of rate matching for a
 	 * particular phy interface. This is used by phy consumers to determine
@@ -1816,6 +1842,8 @@ int phy_config_aneg(struct phy_device *phydev);
 int _phy_start_aneg(struct phy_device *phydev);
 int phy_start_aneg(struct phy_device *phydev);
 int phy_aneg_done(struct phy_device *phydev);
+unsigned int phy_inband_caps(struct phy_device *phydev,
+			     phy_interface_t interface);
 int phy_speed_down(struct phy_device *phydev, bool sync);
 int phy_speed_up(struct phy_device *phydev);
 bool phy_check_valid(int speed, int duplex, unsigned long *features);
-- 
2.30.2



  parent reply	other threads:[~2024-11-26  9:31 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-11-26  9:23 [PATCH RFC net-next 00/16] net: add negotiation of in-band capabilities Russell King (Oracle)
2024-11-26  9:24 ` [PATCH RFC net-next 01/16] net: phylink: pass phylink and pcs into phylink_pcs_neg_mode() Russell King (Oracle)
2024-11-26 20:01   ` Andrew Lunn
2024-11-26  9:24 ` [PATCH RFC net-next 02/16] net: phylink: split cur_link_an_mode into requested and active Russell King (Oracle)
2024-11-26 20:02   ` Andrew Lunn
2024-11-26  9:24 ` [PATCH RFC net-next 03/16] net: phylink: add debug for phylink_major_config() Russell King (Oracle)
2024-11-26 20:03   ` Andrew Lunn
2024-11-26  9:24 ` Russell King (Oracle) [this message]
2024-11-26 20:56   ` [PATCH RFC net-next 04/16] net: phy: add phy_inband_caps() Andrew Lunn
2024-11-26  9:24 ` [PATCH RFC net-next 05/16] net: phy: bcm84881: implement phy_inband_caps() method Russell King (Oracle)
2024-11-26 20:57   ` Andrew Lunn
2024-11-26  9:24 ` [PATCH RFC net-next 06/16] net: phy: marvell: " Russell King (Oracle)
2024-11-26 20:58   ` Andrew Lunn
2024-11-26  9:24 ` [PATCH RFC net-next 07/16] net: phy: add phy_config_inband() Russell King (Oracle)
2024-11-26 21:00   ` Andrew Lunn
2024-11-26  9:24 ` [PATCH RFC net-next 08/16] net: phy: marvell: implement config_inband() method Russell King (Oracle)
2024-11-26 21:00   ` Andrew Lunn
2024-11-26  9:25 ` [PATCH RFC net-next 09/16] net: phylink: add pcs_inband_caps() method Russell King (Oracle)
2024-11-26 21:05   ` Andrew Lunn
2024-11-26  9:25 ` [PATCH RFC net-next 10/16] net: mvneta: implement " Russell King (Oracle)
2024-11-26 21:06   ` Andrew Lunn
2024-11-26  9:25 ` [PATCH RFC net-next 11/16] net: mvpp2: " Russell King (Oracle)
2024-11-26 21:07   ` Andrew Lunn
2024-11-26  9:25 ` [PATCH RFC net-next 12/16] net: pcs: pcs-lynx: " Russell King (Oracle)
2024-11-27 14:08   ` Maxime Chevallier
2024-11-26  9:25 ` [PATCH RFC net-next 13/16] net: pcs: pcs-mtk-lynxi: " Russell King (Oracle)
2024-11-26  9:25 ` [PATCH RFC net-next 14/16] net: pcs: xpcs: " Russell King (Oracle)
2024-11-26  9:25 ` [PATCH RFC net-next 15/16] net: phylink: add negotiation of in-band capabilities Russell King (Oracle)
2024-11-26 21:18   ` Andrew Lunn
2024-11-26 21:43     ` Russell King (Oracle)
2024-11-29 23:41   ` kernel test robot
2024-11-26  9:25 ` [PATCH RFC net-next 16/16] net: phylink: remove phylink_phy_no_inband() Russell King (Oracle)
2024-11-26 21:19   ` Andrew Lunn

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=E1tFroB-005xPw-Vd@rmk-PC.armlinux.org.uk \
    --to=rmk+kernel@armlinux.org.uk \
    --cc=Jose.Abreu@synopsys.com \
    --cc=andrew+netdev@lunn.ch \
    --cc=andrew@lunn.ch \
    --cc=angelogioacchino.delregno@collabora.com \
    --cc=bcm-kernel-feedback-list@broadcom.com \
    --cc=daniel@makrotopia.org \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=florian.fainelli@broadcom.com \
    --cc=hkallweit1@gmail.com \
    --cc=ioana.ciornei@nxp.com \
    --cc=kuba@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-mediatek@lists.infradead.org \
    --cc=lynxis@fe80.eu \
    --cc=marcin.s.wojtas@gmail.com \
    --cc=matthias.bgg@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    /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.