[U-Boot] [PATCH] 7/12 Multiadapter/multibus I2C, drivers part 4

ksi at koi8.net ksi at koi8.net
Thu Feb 19 20:36:11 CET 2009


On Thu, 19 Feb 2009, Heiko Schocher wrote:

> Hello ksi,
> 
> ksi at koi8.net wrote:
> > On Wed, 18 Feb 2009, Heiko Schocher wrote:
> > 
> >> Hello ksi,
> >>
> >> ksi at koi8.net wrote:
> >>> On Mon, 16 Feb 2009, Wolfgang Denk wrote:
> >>>
> >>>> Dear ksi at koi8.net,
> >>>>
> >>>> In message <Pine.LNX.4.64ksi.0902142019520.6240 at home-gw.koi8.net> you wrote:
> >> [...]
> >>>>> And remember, the devil is in details. How are you going to assign
> >>>>> (initialize) that innocent looking "cur_adap_nr->hwadapnr"? How are you
> >>>>> going to work on an adapter other that "current" in a situation when you can
> >>>>> NOT change "current" adapter (e.g. perform all I2C layer initialization
> >>>>> while still running from flash?) Remember, this is plain C and there is no
> >>>> What makes you insist that we cannot change a variable if we need to
> >>>> be able to change one?
> >>> It is NOT just variable. My approach uses i2c _BUS_, not _ADAPTER_. And
> >>> number of busses can be bigger than number of adapters (e.g. when some
> >>> busses a reached via muxes or switches.) When doing i2c_set_current_bus()
> >>> you are switching _NOT_ adapters, but busses. That involves not only
> >>> changing that global variable but also reprogramming muxes/switches for
> >>> i2c_set_current_bus() to be consistent and hardware independent. Otherwise
> >> You have no i2c_set_current_bus() in your code! I think you mean
> >> i2c_set_current_bus(), right?
> >>
> >> And this function fails when running from flash! So, how can you switch
> >> busses with your patches when running from flash?
> >>
> >> Here your function:
> >>
> >> int i2c_set_bus_num(unsigned int bus)
> >> {
> >> #ifndef CONFIG_SYS_I2C_DIRECT_BUS
> >>         int             i;
> >>         u_int8_t        buf;
> >> #endif
> >>
> >>         if ((bus >= CONFIG_SYS_NUM_I2C_BUSSES) || !(gd->flags & GD_FLG_RELOC))
> >>                 return(-1);
> >> [...]
> >>
> >> This function wouldn;t work from flash ...
> > 
> > So what? I don't need that function to initialize adapters.
> 
> Read my EMail!
> 
> But to switch busses, right? And how you switch busses, when running
> from flash, and you do a:
> 
>          if ((bus >= CONFIG_SYS_NUM_I2C_BUSSES) || !(gd->flags & GD_FLG_RELOC))
>                  return(-1);
> 
> in it??

I'm not going to switch busses while running from flash with that function.

---
******************************************************************
*  KSI at home    KOI8 Net  < >  The impossible we do immediately.  *
*  Las Vegas   NV, USA   < >  Miracles require 24-hour notice.   *
******************************************************************


More information about the U-Boot mailing list