IPSM w/ P30 Flash Results in Registry Corruption



We recently upgraded our product to use P30 flash chips. Previously, our
flash memory had no boot blocks. Specifically, our configuration consists of
two banks of flash memory, each consisting of two 128MBit chips (for a total
of 4 chips). The result is we have one application bank and one boot bank of
flash. On the boot bank we keep our bootloader config block, along with the
OS. The upper bank is used to store the windows registry and a user file
volume. I think this is a pretty standard configuration for a WINCE /
XSCALE platform.

Since changing to the P30 chips, I have been unsuccessful in getting the
registry to work. When the registry gets flushed, it becomes corrupted. Our
flash chips have a bottom boot block and I thought all I had to do was add an
offset of 128K * 2 or 0x40000 to the physical and virtual starting addresses
in PLAT_API.C. Apparently this is not enough. Below is my PLAT_API.C. Not
part of this module are the defines for physical and virtual flash. These
are 0x04000000 and 0x0x9D000000 respectively.

#define P30_OFFSET 0x40000

#define P30_LENGTH 0x1FC0000

// note: see eboot/main.c & update EraseRegFromFlash parameters if these are
changed:

UINT8 PLAT_DefineArrayParameters(PSM_OEMInfoPtr oem_info_ptr)

{

static const PSM_OEMInfo oem_info = {

/* PhysicalReadStartAddress */ (VOID_PTR)(APP_FLASH_BASE_PHYSICAL +
P30_OFFSET),

/* PhysicalWriteStartAddress */ (VOID_PTR)(APP_FLASH_BASE_PHYSICAL+
P30_OFFSET),

/* PhysicalBurstReadStartAddress */ (VOID_PTR)(APP_FLASH_BASE_PHYSICAL+
P30_OFFSET),

/* VirtualReadStartAddress */ (VOID_PTR)(APP_FLASH_BASE_C_VIRTUAL+
P30_OFFSET), /* cache address */

/* VirtualWriteStartAddress */ (VOID_PTR)(APP_FLASH_BASE_U_VIRTUAL+
P30_OFFSET), /* flash address */

/* VirtualBurstReadStartAddress */ (VOID_PTR)(APP_FLASH_BASE_C_VIRTUAL+
P30_OFFSET), /* cache address */

/* MaximumArrayLength */ P30_LENGTH,

/* MaximumRegistrySize */ 0x00080000,

/* ManagedAreaStart */ 0, /* boot block on P30 flash accounted for already */

/* ManagedAreaLength */ P30_LENGTH,

/* ReadBusWidth */ 32,

/* WriteBusWidth */ 32,

/* BurstReadBusWidth */ 0

};

The PSM drive seems to format and the user volume is there and works.
However if I do a regflush, on the next reboot the registry is corrupted.
Does anyone know if this could be a problem with using (v)3.5 of PSM or
(v)4.1 of WINCE? With so few parameters at my disposal it doesn't seems
there is a limited number of places I could be at fault.

Thanks in advance to anyone who takes the time to comment :)

.



Relevant Pages

  • Re: Intel PSM (IPSM) issue
    ... at the bottom, P30B, or the top, P30T, of the flash chips. ... IPSM managed area, PSM *will not work*. ... > Bank 2, to allow for the potential of larger chips in the future ...
    (microsoft.public.windowsce.platbuilder)
  • Re: Two Flash chips in 2500
    ... shows the two chips as separate memory banks. ... You are running as "dual bank flash." ... The 2500 actually runs the code from the flash. ... If you boot to an image in the other bank, that bank will become read only ...
    (comp.dcom.sys.cisco)
  • [patch 2.6.14-rc6-git 4/6] SPI m25p flash protocol driver
    ... This was originally a driver for the ST M25P80 SPI flash. ... It's beenupdated slightly to handle other M25P series chips. ...
    (Linux-Kernel)
  • Re: IPSM & P30
    ... in managed area in order of IPSM to work. ... area extended to the end of flash. ... My flash chips are beggining with the address 0x98300000. ... of offset */ ...
    (microsoft.public.windowsce.platbuilder)
  • OT? BIOS is NOR because (a) word addressable (b) NOR needs no ECC.
    ... let me take off my software hat and put on ... my chip-head hat for a minute. ... In some ways FLASH is just modernized EEPROM. ... I worked on Motorola chips in 1990 where ...
    (comp.os.vms)