diff mbox series

[U-Boot] net: macb: fix mapping of registers

Message ID 20181217010108.15656-1-ramon.fried@gmail.com
State Superseded
Delegated to: Tom Rini
Headers show
Series [U-Boot] net: macb: fix mapping of registers | expand

Commit Message

Ramon Fried Dec. 17, 2018, 1:01 a.m. UTC
Some architectures (MIPS) needs mapping to access IOMEM.
Fix that.

Fixes: f1dcc19b213d ("net: macb: Convert to driver model")

Signed-off-by: Ramon Fried <ramon.fried@gmail.com>
---

 drivers/net/macb.c | 12 +++++++++++-
 1 file changed, 11 insertions(+), 1 deletion(-)

Comments

Daniel Schwierzeck Dec. 17, 2018, 12:08 p.m. UTC | #1
Am 17.12.18 um 02:01 schrieb Ramon Fried:
> Some architectures (MIPS) needs mapping to access IOMEM.
> Fix that.
> 
> Fixes: f1dcc19b213d ("net: macb: Convert to driver model")
> 
> Signed-off-by: Ramon Fried <ramon.fried@gmail.com>
> ---
> 
>  drivers/net/macb.c | 12 +++++++++++-
>  1 file changed, 11 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/net/macb.c b/drivers/net/macb.c
> index 94c89c762b..6e1b479813 100644
> --- a/drivers/net/macb.c
> +++ b/drivers/net/macb.c
> @@ -36,6 +36,7 @@
>  #include <miiphy.h>
>  
>  #include <linux/mii.h>
> +#include <linux/io.h>
>  #include <asm/io.h>
>  #include <asm/dma-mapping.h>
>  #include <asm/arch/clk.h>
> @@ -1149,9 +1150,18 @@ int __weak macb_late_eth_ofdata_to_platdata(struct udevice *dev)
>  
>  static int macb_eth_ofdata_to_platdata(struct udevice *dev)
>  {
> +	fdt_addr_t addr;
> +	fdt_size_t size;
> +	int node = dev_of_offset(dev);
>  	struct eth_pdata *pdata = dev_get_platdata(dev);
>  
> -	pdata->iobase = devfdt_get_addr(dev);
> +	addr = fdtdec_get_addr_size(gd->fdt_blob, node, "reg", &size);
> +	if (addr == FDT_ADDR_T_NONE)
> +		return -EINVAL;
> +
> +	pdata->iobase = (phys_addr_t)ioremap(addr, size);
> +	if (!pdata->iobase)
> +		return -EINVAL;
>  
>  	return macb_late_eth_ofdata_to_platdata(dev);
>  }
> 

you should use dev_remap_addr() to avoid all the boiler plate code
Ramon Fried Dec. 17, 2018, 2:05 p.m. UTC | #2
On Mon, Dec 17, 2018 at 2:08 PM Daniel Schwierzeck
<daniel.schwierzeck@gmail.com> wrote:
>
>
>
> Am 17.12.18 um 02:01 schrieb Ramon Fried:
> > Some architectures (MIPS) needs mapping to access IOMEM.
> > Fix that.
> >
> > Fixes: f1dcc19b213d ("net: macb: Convert to driver model")
> >
> > Signed-off-by: Ramon Fried <ramon.fried@gmail.com>
> > ---
> >
> >  drivers/net/macb.c | 12 +++++++++++-
> >  1 file changed, 11 insertions(+), 1 deletion(-)
> >
> > diff --git a/drivers/net/macb.c b/drivers/net/macb.c
> > index 94c89c762b..6e1b479813 100644
> > --- a/drivers/net/macb.c
> > +++ b/drivers/net/macb.c
> > @@ -36,6 +36,7 @@
> >  #include <miiphy.h>
> >
> >  #include <linux/mii.h>
> > +#include <linux/io.h>
> >  #include <asm/io.h>
> >  #include <asm/dma-mapping.h>
> >  #include <asm/arch/clk.h>
> > @@ -1149,9 +1150,18 @@ int __weak macb_late_eth_ofdata_to_platdata(struct udevice *dev)
> >
> >  static int macb_eth_ofdata_to_platdata(struct udevice *dev)
> >  {
> > +     fdt_addr_t addr;
> > +     fdt_size_t size;
> > +     int node = dev_of_offset(dev);
> >       struct eth_pdata *pdata = dev_get_platdata(dev);
> >
> > -     pdata->iobase = devfdt_get_addr(dev);
> > +     addr = fdtdec_get_addr_size(gd->fdt_blob, node, "reg", &size);
> > +     if (addr == FDT_ADDR_T_NONE)
> > +             return -EINVAL;
> > +
> > +     pdata->iobase = (phys_addr_t)ioremap(addr, size);
> > +     if (!pdata->iobase)
> > +             return -EINVAL;
> >
> >       return macb_late_eth_ofdata_to_platdata(dev);
> >  }
> >
>
> you should use dev_remap_addr() to avoid all the boiler plate code
>
Will check it out. Thanks
>
> --
> - Daniel
>
diff mbox series

Patch

diff --git a/drivers/net/macb.c b/drivers/net/macb.c
index 94c89c762b..6e1b479813 100644
--- a/drivers/net/macb.c
+++ b/drivers/net/macb.c
@@ -36,6 +36,7 @@ 
 #include <miiphy.h>
 
 #include <linux/mii.h>
+#include <linux/io.h>
 #include <asm/io.h>
 #include <asm/dma-mapping.h>
 #include <asm/arch/clk.h>
@@ -1149,9 +1150,18 @@  int __weak macb_late_eth_ofdata_to_platdata(struct udevice *dev)
 
 static int macb_eth_ofdata_to_platdata(struct udevice *dev)
 {
+	fdt_addr_t addr;
+	fdt_size_t size;
+	int node = dev_of_offset(dev);
 	struct eth_pdata *pdata = dev_get_platdata(dev);
 
-	pdata->iobase = devfdt_get_addr(dev);
+	addr = fdtdec_get_addr_size(gd->fdt_blob, node, "reg", &size);
+	if (addr == FDT_ADDR_T_NONE)
+		return -EINVAL;
+
+	pdata->iobase = (phys_addr_t)ioremap(addr, size);
+	if (!pdata->iobase)
+		return -EINVAL;
 
 	return macb_late_eth_ofdata_to_platdata(dev);
 }