On Wed, 18 Feb 2009, Heiko Schocher wrote: > Hello Wolfgang, > > Wolfgang Denk wrote: > > Dear k...@koi8.net, > > > > In message <pine.lnx.4.64ksi.0902171233390.30...@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]. --- ****************************************************************** * k...@home KOI8 Net < > The impossible we do immediately. * * Las Vegas NV, USA < > Miracles require 24-hour notice. * ****************************************************************** _______________________________________________ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot