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

ksi at koi8.net ksi at koi8.net
Wed Feb 18 18:44:49 CET 2009


On Wed, 18 Feb 2009, Heiko Schocher wrote:

> Hello Wolfgang,
> 
> Wolfgang Denk wrote:
> > Dear ksi at koi8.net,
> > 
> > In message <Pine.LNX.4.64ksi.0902171233390.30435 at home-gw.koi8.net> you wrote:
> [...]
> >>> 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
> >> your code should know if that particular bus it is switching to is directly
> >> connected or switched and check the bus it is switching from for muxes. If
> >> they are switched, your code should disconnect the current bus switches,
> >> then do that i2c_set_current_bus() and connect the switches to the new bus
> >> after that.
> >>
> >> That means that code MUST somehow know the topology to take appropriate
> >> actions and properly configure those switches. That means you should somehow
> >> describe that topology for each and every board in CONFIG_* terms and make
> >> each and every place at U-Boot that invokes _ANY_ i2c function to take care
> >> of that switching.
> > 
> > You convinced me. This code must not be used before relocation to RAM,
> > then.
> 
> But is is possible to use that code when running from flash, if
> this current pointer is writeable ...

It is not the pointer that must be writeable, it's what it is pointing to...

> >> And yes, we DO have some boards with switched I2C busses in U-Boot main tree
> >> so this is NOT a hypothetical situation.
> > 
> > Yes, it is, because none of them needs any such switching before
> > relocation. And switching is really simple so far.
> 
> They use it before relocation, because the DTTs are read before relocation.
> But this is another approach. Actually, the "way" to the DTTs is in
> an environment variable. When running from flash, it get directly
> parsed, if running from RAM, the var gets analyzed and this "new bus"
> is added with the "i2c bus" command resp. by calling the underlying
> C function.

I don't think there is any need to access DTT before relocation. The only
device that absolutely must be read is SPD EEPROM[s].

---
******************************************************************
*  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