Jon Burke

Linux flash driver fails on M54455EVB when booting from the Intel flash

Discussion created by Jon Burke on Aug 4, 2009
Latest reply on Aug 7, 2009 by Jon Burke

This EVB has two flash chips, a small Atmel and a larger Intel. The deafult arrangement is to boot u-boot from the Atmel chip, which boots a Linix kernel from the Intel chip which would then mount a root filesystem from the Intel chip. That all works fine.

 

The board can be switched so that it boots from the Intel chip instead. I'm trying to get it to work in this mode beacause i) our eventual custom hardware will only have 1 chip, ii) I want to mess with boot setting from Linux application, so I only deal with a single flash chip.

 

Have programmed u-boot (configured for Intel flash) into the Intel flash, it boots and can boot the Linux kernel, but the Linux kernel fails when the MTD driver tries to do a CFI probe for the flash chip. With the board set for the Atmel bootloader it works fine. It's the same kernel and boot command line in both cases.

 

Both u-boots can see both flash chips, the only difference is which is bank 1 and which is bank 2 is swapped around. The memory addresses of the flashes are the same in both cases, so the system shouldnt look any different to the kernel?

 

 Here is what happens:

 

 -> flinfo

Bank # 1: CFI conformant FLASH (8 x 8)  Size: 16 MB in 128 Sectors
  Intel Extended command set, Manufacturer ID: 0x89, Device ID: 0x18
  Erase timeout: 4096 ms, write timeout: 1 ms
  Buffer write timeout: 2 ms, buffer size: 32 bytes

  Sector Start Addresses:
  00000000   RO   00020000   RO   00040000   RO   00060000        00080000      
  000A0000        000C0000        000E0000        00100000        00120000      
 ...

 Bank # 2: CFI conformant FLASH (8 x 8)  Size: 512 kB in 11 Sectors
  AMD Legacy command set, Manufacturer ID: 0x1F, Device ID: 0x13
  Erase timeout: 16384 ms, write timeout: 2 ms
  Buffer write timeout: 5 ms, buffer size: 32 bytes

  Sector Start Addresses:
  04000000        04004000        04006000        04008000        04010000      
 ...

 

On boot:

 

physmap platform flash device: 01000000 at 00000000
physmap-flash physmap-flash.0: map_probe failed
Unable to handle kernel NULL pointer dereference at virtual address 00000000
Oops: 00000000

 

But when u-boot is from the Atmel flash it works fine:

 

physmap platform flash device: 01000000 at 00000000
physmap-flash.0: Found 1 x16 devices at 0x0 in 8-bit bank
 Intel/Sharp Extended Query Table at 0x0031
Using buffer write method
cfi_cmdset_0001: Erase suspend on write enabled

Outcomes