xip changes between 2.6.11 and 20050530?

Todd Poynor tpoynor at mvista.com
Fri Jul 29 16:02:07 EDT 2005


Konstantin Kletschke wrote:

> To be sure:
> Any xip_* function only calls functions marked __xipram (which are
> located in RAM then hopefully also) and only __xipram marked functions
> call functions located still in flash?

Nico's comments in cfi_cmdset_0001.c describe it better than I did:

* No interrupt what so ever can be serviced while the flash isn't in array
  * mode.  This is ensured by the xip_disable() and xip_enable() functions
  * enclosing any code path where the flash is known not to be in array 
mode.
  * And within a XIP disabled code path, only functions marked with __xipram
  * may be called and nothing else (it's a good thing to inspect generated
  * assembly to make sure inline functions were actually inlined and 
that gcc
  * didn't emit calls to its own support functions). Also configuring 
MTD CFI
  * support to a single buswidth and a single interleave is also 
recommended.

The reason for "single buswidth and a single interleave" is to avoid 
division operations to compute various things driven by those two 
parameters, which will probably call a library function placed by 
default in flash to do the divide; if a single buswidth and interleave 
is configured then the derived values are compiled as constants and need 
not be computed at runtime.

Yes, it's all a little delicate. ;)

-- 
Todd




More information about the linux-mtd mailing list