AM29F040 Chip.

Andy Kennedy akennedy at
Fri Dec 1 15:25:53 EST 2006

I'm attempting to install Linux on an older VersaLogic Board. 
VersaLogic has told me that this is impossible and that even if I can 
get the installation to work, they will not support the final product. 
The technical specs of this unit are:  AMD 586 with an AM29F040b flash 
(one 500KB socket and one 2MB on-board flash).  The system is currently 
bootable via flash using a proprietary Flash File System which caldera 
Dr. DOS can read/write as a FAT.  Other system information is available 
upon request (I don't want to clutter up your e-mail too bad).

**I am not a Linux kernel programmer, however, I am a Linux programmer 
and have been with Linux since 1994 (Red Had 0.something), so I'm 
sort-of competent with Linux.

Here is what I have to make happen:  I have to be able to write a boot 
loader and kernel to the lower 448KB of flash, then install some sort of 
file system on the upper 2MB flash, with dynamic access to at least one 
sector of the flash (64K).  The one sector that I would assume to be the 
logical one to address would be the last of the 2MB flash.

What I have done:  I have attempted to boot and read the flash via two 
different kernels, and 2.6.18.  Within neither of these could I 
get the kernel to see the flash.  The documentation of this board was 
(somewhat) helpful to me in that I was able to list the flash as a 
memory mapped from 0xe0000 to 0xeffff.  I put this into the kernel 
configuration as from 0xe0000 with size 0x10000 using 1 bank width.  In I was able to dump the entire contents of the 2MB flash into 
memory (using cat /dev/mtd0 > mtd0 -- I'm booted into a ramfs).  All of 
the data that I know to be on the flash is there.  I verified this via a 
hex editor.  The 2.6.18 kernel, however allowed me to only access 64K of 
the flash -- which after reading through as much of the documentation as 
I could find/VersaLogic would give me, I found that this was the 
accurate behavior.  I then was pointed to the section of the product 
manual that has the memory mapping of the AM29F040b chip.  There is a 
control register that directs the memory mapping.  The Map and Page 
Control Register (MPCR) is set via BIOS to the 0 offset of the first 
block of the 2MB flash when the CMOS is set for Floppy A: as FLASH 
MEMORY.  I was also able to read the full 512KB of flash which also 
contains the BIOS via same technique, however, I disable the floppy 
drive -> flash memory in BIOS, thus granting me access to the first 
sector of the socketed flash.

What I know from the documentation:  The MPCR has the following layout:
Bit7:  Flash to memory mapper. 0=No mapping, 1=map.
Bit6:  Not used.
Bit5 - Bit0:  If Bit7, then the following table applies:
0 0 0 X X X 8 Pages BBSRAM (My version of this board does not have the 
0 1 1 X X X 8 Pages FLASH 0
1 X X X X X 32 Pages FLASH 1

What I think to be my only options:  1) Use loadlin to bring up the 
kernel and the ramfs.  Possibly store my controlling program in one or 
two sectors of the Flash, and store the runtime data in the last flash 
sector.  I would still have to have the extractor program to get my 
controlling (which may be updated later) program from the flash, then 
set the flash to the last memory location and execute the controller 
program.  2) Write/get someone to write a driver that would allow me to 
access FLASH 1 as a block device.  The FAQ says that this is "bad", 
however, I know that there wouldn't be that many writes to the flash, so 
I wouldn't be continuously erasing the blocks.

What I'm asking the community for:  I need some help.  I either need a 
kernel programmer to assist me by writing the modules I'll need, or to 
at least guide me into my very first attempt at kernel module 
programming.  OR. . . maybe I'm attacking this from the completely wrong 
way.  If that be the case, please shed some light on me as I am deep in 
the dark here.

I hope I have given you enough information for you to help me, but not 
too much to annoy you.

Thanks in advance for any assistance you give me,
Andy Kennedy
-------------- next part --------------
A non-text attachment was scrubbed...
Name: akennedy.vcf
Type: text/x-vcard
Size: 256 bytes
Desc: not available
Url : 

More information about the linux-mtd mailing list