diff mbox series

[U-Boot,1/2] net: mvpp2: fix lookup of mdio registers base address

Message ID e0ba6cc6a4561e3b0472d0ae1913f06ab8ea33b9.1542798334.git.baruch@tkos.co.il
State Accepted
Commit acce753dfb6d297c9f779dd04bb24d0004e6bc64
Delegated to: Joe Hershberger
Headers show
Series [U-Boot,1/2] net: mvpp2: fix lookup of mdio registers base address | expand

Commit Message

Baruch Siach Nov. 21, 2018, 11:05 a.m. UTC
Current mdio base lookup code relies on a 'reg' property at the upper CP
node. There is no 'reg' property there in current DT files of Armada
CP110. Use ofnode_get_addr() instead since it provides proper DT address
translation.

Cc: Ken Ma <make@marvell.com>
Cc: Stefan Chulski <stefanc@marvell.com>
Signed-off-by: Baruch Siach <baruch@tkos.co.il>
---
 drivers/net/mvpp2.c | 17 +++++++----------
 1 file changed, 7 insertions(+), 10 deletions(-)

Comments

Stefan Roese Nov. 22, 2018, 8:34 a.m. UTC | #1
On 21.11.18 12:05, Baruch Siach wrote:
> Current mdio base lookup code relies on a 'reg' property at the upper CP
> node. There is no 'reg' property there in current DT files of Armada
> CP110. Use ofnode_get_addr() instead since it provides proper DT address
> translation.
> 
> Cc: Ken Ma <make@marvell.com>
> Cc: Stefan Chulski <stefanc@marvell.com>
> Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> ---
>   drivers/net/mvpp2.c | 17 +++++++----------
>   1 file changed, 7 insertions(+), 10 deletions(-)
> 
> diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c
> index 9b3ab25c1954..23c4da8cebbd 100644
> --- a/drivers/net/mvpp2.c
> +++ b/drivers/net/mvpp2.c
> @@ -4705,21 +4705,22 @@ static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port)
>   {
>   	int port_node = dev_of_offset(dev);
>   	const char *phy_mode_str;
> -	int phy_node, mdio_off, cp_node;
> +	int phy_node;
>   	u32 id;
>   	u32 phyaddr = 0;
>   	int phy_mode = -1;
> -	phys_addr_t mdio_addr;
>   
>   	phy_node = fdtdec_lookup_phandle(gd->fdt_blob, port_node, "phy");
>   
>   	if (phy_node > 0) {
> +		ofnode phy_ofnode;
> +		fdt_addr_t phy_base;
> +
>   		phyaddr = fdtdec_get_int(gd->fdt_blob, phy_node, "reg", 0);
>   		if (phyaddr < 0) {
>   			dev_err(&pdev->dev, "could not find phy address\n");
>   			return -1;
>   		}
> -		mdio_off = fdt_parent_offset(gd->fdt_blob, phy_node);
>   
>   		/* TODO: This WA for mdio issue. U-boot 2017 don't have
>   		 * mdio driver and on MACHIATOBin board ports from CP1
> @@ -4728,14 +4729,10 @@ static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port)
>   		 * base address. WA should be removed after
>   		 * mdio driver implementation.
>   		 */
> -		mdio_addr = fdtdec_get_uint(gd->fdt_blob,
> -					    mdio_off, "reg", 0);
> -
> -		cp_node = fdt_parent_offset(gd->fdt_blob, mdio_off);
> -		mdio_addr |= fdt_get_base_address((void *)gd->fdt_blob,
> -						  cp_node);
>   
> -		port->priv->mdio_base = (void *)mdio_addr;
> +		phy_ofnode = ofnode_get_parent(offset_to_ofnode(phy_node));
> +		phy_base = ofnode_get_addr(phy_ofnode);
> +		port->priv->mdio_base = (void *)phy_base;
>   
>   		if (port->priv->mdio_base < 0) {
>   			dev_err(&pdev->dev, "could not find mdio base address\n");
> 

Reviewed-by: Stefan Roese <sr@denx.de>

Thanks,
Stefan
Joe Hershberger Jan. 22, 2019, 9:45 p.m. UTC | #2
On Wed, Nov 21, 2018 at 5:08 AM Baruch Siach <baruch@tkos.co.il> wrote:
>
> Current mdio base lookup code relies on a 'reg' property at the upper CP
> node. There is no 'reg' property there in current DT files of Armada
> CP110. Use ofnode_get_addr() instead since it provides proper DT address
> translation.
>
> Cc: Ken Ma <make@marvell.com>
> Cc: Stefan Chulski <stefanc@marvell.com>
> Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> ---
>  drivers/net/mvpp2.c | 17 +++++++----------
>  1 file changed, 7 insertions(+), 10 deletions(-)
>
> diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c
> index 9b3ab25c1954..23c4da8cebbd 100644
> --- a/drivers/net/mvpp2.c
> +++ b/drivers/net/mvpp2.c
> @@ -4705,21 +4705,22 @@ static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port)
>  {
>         int port_node = dev_of_offset(dev);
>         const char *phy_mode_str;
> -       int phy_node, mdio_off, cp_node;
> +       int phy_node;
>         u32 id;
>         u32 phyaddr = 0;
>         int phy_mode = -1;
> -       phys_addr_t mdio_addr;
>
>         phy_node = fdtdec_lookup_phandle(gd->fdt_blob, port_node, "phy");
>
>         if (phy_node > 0) {
> +               ofnode phy_ofnode;
> +               fdt_addr_t phy_base;
> +
>                 phyaddr = fdtdec_get_int(gd->fdt_blob, phy_node, "reg", 0);
>                 if (phyaddr < 0) {
>                         dev_err(&pdev->dev, "could not find phy address\n");
>                         return -1;
>                 }
> -               mdio_off = fdt_parent_offset(gd->fdt_blob, phy_node);
>
>                 /* TODO: This WA for mdio issue. U-boot 2017 don't have
>                  * mdio driver and on MACHIATOBin board ports from CP1
> @@ -4728,14 +4729,10 @@ static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port)
>                  * base address. WA should be removed after
>                  * mdio driver implementation.
>                  */
> -               mdio_addr = fdtdec_get_uint(gd->fdt_blob,
> -                                           mdio_off, "reg", 0);
> -
> -               cp_node = fdt_parent_offset(gd->fdt_blob, mdio_off);
> -               mdio_addr |= fdt_get_base_address((void *)gd->fdt_blob,
> -                                                 cp_node);
>
> -               port->priv->mdio_base = (void *)mdio_addr;
> +               phy_ofnode = ofnode_get_parent(offset_to_ofnode(phy_node));
> +               phy_base = ofnode_get_addr(phy_ofnode);
> +               port->priv->mdio_base = (void *)phy_base;
>
>                 if (port->priv->mdio_base < 0) {
>                         dev_err(&pdev->dev, "could not find mdio base address\n");

Apologies for the delay.

Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Joe Hershberger Jan. 24, 2019, 5:38 p.m. UTC | #3
Hi Baruch,

https://patchwork.ozlabs.org/patch/1001096/ was applied to http://git.denx.de/?p=u-boot/u-boot-net.git

Thanks!
-Joe
diff mbox series

Patch

diff --git a/drivers/net/mvpp2.c b/drivers/net/mvpp2.c
index 9b3ab25c1954..23c4da8cebbd 100644
--- a/drivers/net/mvpp2.c
+++ b/drivers/net/mvpp2.c
@@ -4705,21 +4705,22 @@  static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port)
 {
 	int port_node = dev_of_offset(dev);
 	const char *phy_mode_str;
-	int phy_node, mdio_off, cp_node;
+	int phy_node;
 	u32 id;
 	u32 phyaddr = 0;
 	int phy_mode = -1;
-	phys_addr_t mdio_addr;
 
 	phy_node = fdtdec_lookup_phandle(gd->fdt_blob, port_node, "phy");
 
 	if (phy_node > 0) {
+		ofnode phy_ofnode;
+		fdt_addr_t phy_base;
+
 		phyaddr = fdtdec_get_int(gd->fdt_blob, phy_node, "reg", 0);
 		if (phyaddr < 0) {
 			dev_err(&pdev->dev, "could not find phy address\n");
 			return -1;
 		}
-		mdio_off = fdt_parent_offset(gd->fdt_blob, phy_node);
 
 		/* TODO: This WA for mdio issue. U-boot 2017 don't have
 		 * mdio driver and on MACHIATOBin board ports from CP1
@@ -4728,14 +4729,10 @@  static int phy_info_parse(struct udevice *dev, struct mvpp2_port *port)
 		 * base address. WA should be removed after
 		 * mdio driver implementation.
 		 */
-		mdio_addr = fdtdec_get_uint(gd->fdt_blob,
-					    mdio_off, "reg", 0);
-
-		cp_node = fdt_parent_offset(gd->fdt_blob, mdio_off);
-		mdio_addr |= fdt_get_base_address((void *)gd->fdt_blob,
-						  cp_node);
 
-		port->priv->mdio_base = (void *)mdio_addr;
+		phy_ofnode = ofnode_get_parent(offset_to_ofnode(phy_node));
+		phy_base = ofnode_get_addr(phy_ofnode);
+		port->priv->mdio_base = (void *)phy_base;
 
 		if (port->priv->mdio_base < 0) {
 			dev_err(&pdev->dev, "could not find mdio base address\n");