Message ID | 1340868377-22461-1-git-send-email-monstr@monstr.eu |
---|---|
State | RFC |
Headers | show |
Hi Michal, On Thu, Jun 28, 2012 at 12:26 AM, Michal Simek <monstr@monstr.eu> wrote: > Support new CONFIG_OF_CONTROL option where device > probing is done based on device tree description. > > Signed-off-by: Michal Simek <monstr@monstr.eu> > --- > drivers/net/xilinx_emaclite.c | 30 ++++++++++++++++++++++++++++++ > 1 files changed, 30 insertions(+), 0 deletions(-) > > diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c > index e1af42a..0f6807d 100644 > --- a/drivers/net/xilinx_emaclite.c > +++ b/drivers/net/xilinx_emaclite.c > @@ -28,6 +28,9 @@ > #include <config.h> > #include <malloc.h> > #include <asm/io.h> > +#include <fdtdec.h> > + > +DECLARE_GLOBAL_DATA_PTR; > > #undef DEBUG > > @@ -375,3 +378,30 @@ int xilinx_emaclite_initialize(bd_t *bis, unsigned > long base_addr, > > return 1; > } > + > +#ifdef CONFIG_OF_CONTROL > +int xilinx_emaclite_init(bd_t *bis) > +{ > + int offset = 0; > + u32 ret = 0; > + u32 reg; > + > + do { > + offset = fdt_node_offset_by_compatible(gd->fdt_blob, > offset, > + "xlnx,xps-ethernetlite-1.00.a"); > + if (offset != -1) { > offset > 0 or >= 0 > + reg = fdtdec_get_addr(gd->fdt_blob, offset, "reg"); > + if (reg != FDT_ADDR_T_NONE) { > + u32 rxpp = fdtdec_get_int(gd->fdt_blob, > offset, > + > "xlnx,rx-ping-pong", 0); > + u32 txpp = fdtdec_get_int(gd->fdt_blob, > offset, > + > "xlnx,tx-ping-pong", 0); > + ret |= xilinx_emaclite_initialize(bis, reg, > + txpp, > rxpp); > + } > + } > + } while (offset != -1); > Just offset > 0 here I think. > + > + return ret; > +} > +#endif > This is fine I think. Do you want to impose an ordering on the interfaces, or are you happy with them being assigned randomly? If you want an ordering, see fdtdec_find_aliases_for_id(). > -- > 1.7.0.4 > > Regards, Simon
2012/7/3 Simon Glass <sjg@chromium.org>: > Hi Michal, > > On Thu, Jun 28, 2012 at 12:26 AM, Michal Simek <monstr@monstr.eu> wrote: >> >> Support new CONFIG_OF_CONTROL option where device >> probing is done based on device tree description. >> >> Signed-off-by: Michal Simek <monstr@monstr.eu> >> --- >> drivers/net/xilinx_emaclite.c | 30 ++++++++++++++++++++++++++++++ >> 1 files changed, 30 insertions(+), 0 deletions(-) >> >> diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c >> index e1af42a..0f6807d 100644 >> --- a/drivers/net/xilinx_emaclite.c >> +++ b/drivers/net/xilinx_emaclite.c >> @@ -28,6 +28,9 @@ >> #include <config.h> >> #include <malloc.h> >> #include <asm/io.h> >> +#include <fdtdec.h> >> + >> +DECLARE_GLOBAL_DATA_PTR; >> >> #undef DEBUG >> >> @@ -375,3 +378,30 @@ int xilinx_emaclite_initialize(bd_t *bis, unsigned >> long base_addr, >> >> return 1; >> } >> + >> +#ifdef CONFIG_OF_CONTROL >> +int xilinx_emaclite_init(bd_t *bis) >> +{ >> + int offset = 0; >> + u32 ret = 0; >> + u32 reg; >> + >> + do { >> + offset = fdt_node_offset_by_compatible(gd->fdt_blob, >> offset, >> + "xlnx,xps-ethernetlite-1.00.a"); >> + if (offset != -1) { > > > offset > 0 or >= 0 ok, probably safer. >> >> + reg = fdtdec_get_addr(gd->fdt_blob, offset, >> "reg"); >> + if (reg != FDT_ADDR_T_NONE) { >> + u32 rxpp = fdtdec_get_int(gd->fdt_blob, >> offset, >> + >> "xlnx,rx-ping-pong", 0); >> + u32 txpp = fdtdec_get_int(gd->fdt_blob, >> offset, >> + >> "xlnx,tx-ping-pong", 0); >> + ret |= xilinx_emaclite_initialize(bis, >> reg, >> + txpp, >> rxpp); >> + } >> + } >> + } while (offset != -1); > > > Just offset > 0 here I think. ok. > >> >> + >> + return ret; >> +} >> +#endif > > > This is fine I think. Do you want to impose an ordering on the interfaces, > or are you happy with them being assigned randomly? If you want an ordering, > see fdtdec_find_aliases_for_id(). For now, not. for future probably yes. I have changed uartlite and uart16550 drivers where this is very important. Thanks, Michal
diff --git a/drivers/net/xilinx_emaclite.c b/drivers/net/xilinx_emaclite.c index e1af42a..0f6807d 100644 --- a/drivers/net/xilinx_emaclite.c +++ b/drivers/net/xilinx_emaclite.c @@ -28,6 +28,9 @@ #include <config.h> #include <malloc.h> #include <asm/io.h> +#include <fdtdec.h> + +DECLARE_GLOBAL_DATA_PTR; #undef DEBUG @@ -375,3 +378,30 @@ int xilinx_emaclite_initialize(bd_t *bis, unsigned long base_addr, return 1; } + +#ifdef CONFIG_OF_CONTROL +int xilinx_emaclite_init(bd_t *bis) +{ + int offset = 0; + u32 ret = 0; + u32 reg; + + do { + offset = fdt_node_offset_by_compatible(gd->fdt_blob, offset, + "xlnx,xps-ethernetlite-1.00.a"); + if (offset != -1) { + reg = fdtdec_get_addr(gd->fdt_blob, offset, "reg"); + if (reg != FDT_ADDR_T_NONE) { + u32 rxpp = fdtdec_get_int(gd->fdt_blob, offset, + "xlnx,rx-ping-pong", 0); + u32 txpp = fdtdec_get_int(gd->fdt_blob, offset, + "xlnx,tx-ping-pong", 0); + ret |= xilinx_emaclite_initialize(bis, reg, + txpp, rxpp); + } + } + } while (offset != -1); + + return ret; +} +#endif
Support new CONFIG_OF_CONTROL option where device probing is done based on device tree description. Signed-off-by: Michal Simek <monstr@monstr.eu> --- drivers/net/xilinx_emaclite.c | 30 ++++++++++++++++++++++++++++++ 1 files changed, 30 insertions(+), 0 deletions(-)