diff mbox series

net: phy: add phyid search in vendor specific space

Message ID 1588159548-5297-1-git-send-email-florinlaurentiu.chiculita@nxp.com
State Accepted
Commit 9c6de508a6362a3ddd4067e90f07ae613f312aa4
Headers show
Series net: phy: add phyid search in vendor specific space | expand

Commit Message

Florin Chiculita April 29, 2020, 11:25 a.m. UTC
There are devices accesible through mdio clause-45, such as
retimers, that do not have PMA or PCS blocks.
This patch adds MDIO_MMD_VEND1 on the list of device addresses
where phyid is searched. Previous order of devices was kept.

Signed-off-by: Florin Chiculita <florinlaurentiu.chiculita at nxp.com>
---
 drivers/net/phy/phy.c | 22 ++++++++++++++++------
 1 file changed, 16 insertions(+), 6 deletions(-)

Comments

Madalin Bucur (OSS) April 29, 2020, 2:37 p.m. UTC | #1
> -----Original Message-----
> From: U-Boot <u-boot-bounces at lists.denx.de> On Behalf Of Florin Chiculita
> Sent: Wednesday, April 29, 2020 2:26 PM
> To: u-boot at lists.denx.de
> Cc: Florin Laurentiu Chiculita <florinlaurentiu.chiculita at nxp.com>
> Subject: [PATCH] net: phy: add phyid search in vendor specific space
> 
> There are devices accesible through mdio clause-45, such as
> retimers, that do not have PMA or PCS blocks.
> This patch adds MDIO_MMD_VEND1 on the list of device addresses
> where phyid is searched. Previous order of devices was kept.
> 
> Signed-off-by: Florin Chiculita <florinlaurentiu.chiculita at nxp.com>
> ---
>  drivers/net/phy/phy.c | 22 ++++++++++++++++------
>  1 file changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
> index 505d3ab..d2edf9e 100644
> --- a/drivers/net/phy/phy.c
> +++ b/drivers/net/phy/phy.c
> @@ -783,17 +783,27 @@ static struct phy_device
> *get_phy_device_by_mask(struct mii_dev *bus,
>  						 uint phy_mask,
>  						 phy_interface_t interface)
>  {
> -	int i;
>  	struct phy_device *phydev;
> -
> +	int devad[] = {
> +		/* Clause-22 */
> +		MDIO_DEVAD_NONE,
> +		/* Clause-45 */
> +		MDIO_MMD_PMAPMD,
> +		MDIO_MMD_WIS,
> +		MDIO_MMD_PCS,
> +		MDIO_MMD_PHYXS,
> +		MDIO_MMD_VEND1,
> +	};
> +	int i, devad_cnt;
> +
> +	devad_cnt = sizeof(devad)/sizeof(int);
>  	phydev = search_for_existing_phy(bus, phy_mask, interface);
>  	if (phydev)
>  		return phydev;
> -	/* Try Standard (ie Clause 22) access */
> -	/* Otherwise we have to try Clause 45 */
> -	for (i = 0; i < 5; i++) {
> +	/* try different access clauses  */
> +	for (i = 0; i < devad_cnt; i++) {
>  		phydev = create_phy_by_mask(bus, phy_mask,
> -					    i ? i : MDIO_DEVAD_NONE, interface);
> +					    devad[i], interface);
>  		if (IS_ERR(phydev))
>  			return NULL;
>  		if (phydev)
> --
> 1.9.3

Nice cleanup too!

Reviewed-by: Madalin Bucur <madalin.bucur at oss.nxp.com>
Tom Rini June 12, 2020, 9:15 p.m. UTC | #2
On Wed, Apr 29, 2020 at 02:25:48PM +0300, Florin Chiculita wrote:

> There are devices accesible through mdio clause-45, such as
> retimers, that do not have PMA or PCS blocks.
> This patch adds MDIO_MMD_VEND1 on the list of device addresses
> where phyid is searched. Previous order of devices was kept.
> 
> Signed-off-by: Florin Chiculita <florinlaurentiu.chiculita at nxp.com>
> Reviewed-by: Madalin Bucur <madalin.bucur at oss.nxp.com>

Applied to u-boot/next, thanks!
diff mbox series

Patch

diff --git a/drivers/net/phy/phy.c b/drivers/net/phy/phy.c
index 505d3ab..d2edf9e 100644
--- a/drivers/net/phy/phy.c
+++ b/drivers/net/phy/phy.c
@@ -783,17 +783,27 @@  static struct phy_device *get_phy_device_by_mask(struct mii_dev *bus,
 						 uint phy_mask,
 						 phy_interface_t interface)
 {
-	int i;
 	struct phy_device *phydev;
-
+	int devad[] = {
+		/* Clause-22 */
+		MDIO_DEVAD_NONE,
+		/* Clause-45 */
+		MDIO_MMD_PMAPMD,
+		MDIO_MMD_WIS,
+		MDIO_MMD_PCS,
+		MDIO_MMD_PHYXS,
+		MDIO_MMD_VEND1,
+	};
+	int i, devad_cnt;
+
+	devad_cnt = sizeof(devad)/sizeof(int);
 	phydev = search_for_existing_phy(bus, phy_mask, interface);
 	if (phydev)
 		return phydev;
-	/* Try Standard (ie Clause 22) access */
-	/* Otherwise we have to try Clause 45 */
-	for (i = 0; i < 5; i++) {
+	/* try different access clauses  */
+	for (i = 0; i < devad_cnt; i++) {
 		phydev = create_phy_by_mask(bus, phy_mask,
-					    i ? i : MDIO_DEVAD_NONE, interface);
+					    devad[i], interface);
 		if (IS_ERR(phydev))
 			return NULL;
 		if (phydev)