public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
* [U-Boot] Environment and SPI drivers
@ 2010-03-15 19:29 Albin Tonnerre
  2010-03-15 20:25 ` Wolfgang Denk
  0 siblings, 1 reply; 3+ messages in thread
From: Albin Tonnerre @ 2010-03-15 19:29 UTC (permalink / raw)
  To: u-boot

Hello,

The SPI framework provided by u-boot (spi_setup_slave, spi_xfer and the like)
cannot currently be used to read the environment from SPI devices. The reason is
that all the drivers implement spi_setup_slave using malloc(), and malloc()
cannot be used when env_init is called - this happens before mem_alloc_init.

I'm wondering what would be a proper fix for this. I don't think it is OK to say
'drivers reading the environment should not use the SPI framework', as those
drivers might be used to do others things - that would make the SPI framework
unsuitable for (e.g.) any SPI EEPROM. The only sane alternative I can see is
that we introduce spi_setup_slave_$whatever, which would work the same way as
spi_setup_slave, with the difference that it should be given caller-allocated
storage, so that we avoid the use for malloc().

Thoughts ?

Regards,
-- 
Albin Tonnerre, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [U-Boot] Environment and SPI drivers
  2010-03-15 19:29 [U-Boot] Environment and SPI drivers Albin Tonnerre
@ 2010-03-15 20:25 ` Wolfgang Denk
  2010-03-15 20:45   ` Albin Tonnerre
  0 siblings, 1 reply; 3+ messages in thread
From: Wolfgang Denk @ 2010-03-15 20:25 UTC (permalink / raw)
  To: u-boot

Dear Albin Tonnerre,

In message <20100315192914.GA14032@pc-ran3241> you wrote:
> 
> The SPI framework provided by u-boot (spi_setup_slave, spi_xfer and the like)
> cannot currently be used to read the environment from SPI devices. The reason is

This depends on what sort of SPI devices you are talking about. Do you
have plain simple EEPROM in mind, or things like SPI flash, or
eventually MMC/SDCard?  These are pretty different thinngs...

> I'm wondering what would be a proper fix for this. I don't think it is OK to say
> 'drivers reading the environment should not use the SPI framework', as those
> drivers might be used to do others things - that would make the SPI framework
> unsuitable for (e.g.) any SPI EEPROM. The only sane alternative I can see is
> that we introduce spi_setup_slave_$whatever, which would work the same way as
> spi_setup_slave, with the difference that it should be given caller-allocated
> storage, so that we avoid the use for malloc().

If you are talking about SPI EEPROM, then just enable EEPROM support
and environment in EEPROM, and set CONFIG_SPI. The EEPROM framework in
"common/cmd_eeprom.c" includes support for SPI EEPROM (this actually
predates the SPI framework).

Best regards,

Wolfgang Denk

-- 
DENX Software Engineering GmbH,     MD: Wolfgang Denk & Detlev Zundel
HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd at denx.de
No man knows what true happiness is until he gets married.  By  then,
of course, its too late.

^ permalink raw reply	[flat|nested] 3+ messages in thread

* [U-Boot] Environment and SPI drivers
  2010-03-15 20:25 ` Wolfgang Denk
@ 2010-03-15 20:45   ` Albin Tonnerre
  0 siblings, 0 replies; 3+ messages in thread
From: Albin Tonnerre @ 2010-03-15 20:45 UTC (permalink / raw)
  To: u-boot

On Mon, 15 Mar 2010 21:25 +0100, Wolfgang Denk wrote :
> Dear Albin Tonnerre,
> 
> In message <20100315192914.GA14032@pc-ran3241> you wrote:
> > 
> > The SPI framework provided by u-boot (spi_setup_slave, spi_xfer and the like)
> > cannot currently be used to read the environment from SPI devices. The reason is
> 
> This depends on what sort of SPI devices you are talking about. Do you
> have plain simple EEPROM in mind, or things like SPI flash, or
> eventually MMC/SDCard?  These are pretty different thinngs...

In this particular case, mostly EEPROM, but that would apply to anything trying
to use the SPI framework before mem_malloc_init is called.

> 
> > I'm wondering what would be a proper fix for this. I don't think it is OK to say
> > 'drivers reading the environment should not use the SPI framework', as those
> > drivers might be used to do others things - that would make the SPI framework
> > unsuitable for (e.g.) any SPI EEPROM. The only sane alternative I can see is
> > that we introduce spi_setup_slave_$whatever, which would work the same way as
> > spi_setup_slave, with the difference that it should be given caller-allocated
> > storage, so that we avoid the use for malloc().
> 
> If you are talking about SPI EEPROM, then just enable EEPROM support
> and environment in EEPROM, and set CONFIG_SPI. The EEPROM framework in
> "common/cmd_eeprom.c" includes support for SPI EEPROM (this actually
> predates the SPI framework).

I know, I did that. The thing is, even with the support for SPI EEPROM, you
need a driver to actually issue the proper commands to read/write data from/to
the SPI EEPROM -- that is, implement spi_read/write. If you do that using the
SPI framework as, I guess, one would expect, then you're screwed since all the
implementations of spi_setup_slave call malloc(), and you can't read your
environment.

Regards,
-- 
Albin Tonnerre, Free Electrons
Kernel, drivers and embedded Linux development,
consulting, training and support.
http://free-electrons.com

^ permalink raw reply	[flat|nested] 3+ messages in thread

end of thread, other threads:[~2010-03-15 20:45 UTC | newest]

Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2010-03-15 19:29 [U-Boot] Environment and SPI drivers Albin Tonnerre
2010-03-15 20:25 ` Wolfgang Denk
2010-03-15 20:45   ` Albin Tonnerre

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox