cfi_cmdset_0002.c (AMD interleaved chips) fix

Bob Coggeshall bob at cogwheel.com
Tue Apr 20 17:15:27 EDT 2004


	
I've been trying to get a pair of interleaved Am29LV640  parts on a
mpc852 (watered down '866) to work using this patch and it still does 
not work --

When I insmod the mapping module it *looks* like everything comes up OK, 
and reads appear to work also. One suspicious thing is while gen_probe() reports
2 AMD/Fuji x16 parts, cfi_amdstd_setup() is  reporting cfi->numchips set at 1.

My config and and boot messages follow...

my kernel config: 

    CONFIG_MTD_GEN_PROBE=m
    CONFIG_MTD_CFI_ADV_OPTIONS=y
    CONFIG_MTD_CFI_NOSWAP=y
    # CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
    # CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
    CONFIG_MTD_CFI_GEOMETRY=y
    # CONFIG_MTD_CFI_B1 is not set
    # CONFIG_MTD_CFI_B2 is not set
    CONFIG_MTD_CFI_B4=y
    # CONFIG_MTD_CFI_B8 is not set
    # CONFIG_MTD_CFI_I1 is not set
    CONFIG_MTD_CFI_I2=y
    # CONFIG_MTD_CFI_I4 is not set
    # CONFIG_MTD_CFI_I8 is not set
    # CONFIG_MTD_CFI_INTELEXT is not set
    CONFIG_MTD_CFI_AMDSTD=m
    # CONFIG_MTD_CFI_STAA is not set
    CONFIG_MTD_CFI_UTIL=m
    CONFIG_MTD_RAM=m
    CONFIG_MTD_ROM=m
    # CONFIG_MTD_ABSENT is not set
    # CONFIG_MTD_OBSOLETE_CHIPS is not set
    # CONFIG_MTD_AMDSTD is not set
    # CONFIG_MTD_SHARP is not set
    # CONFIG_MTD_JEDEC is not set
    # CONFIG_MTD_COMPLEX_MAPPINGS is not set
    CONFIG_MTD_PHYSMAP=y
    CONFIG_MTD_EP852=m
    # CONFIG_MTD_CFI_FLAGADM is not set
    # CONFIG_MTD_PCI is not set
    # CONFIG_MTD_PCMCIA is not set
    # Self-contained MTD device drivers
    # CONFIG_MTD_PMC551 is not set
    CONFIG_MTD_SLRAM=m
    CONFIG_MTD_MTDRAM=m
    CONFIG_MTDRAM_TOTAL_SIZE=0
    CONFIG_MTDRAM_ERASE_SIZE=128
    CONFIG_MTD_BLKMTD=m
    # CONFIG_MTD_DOC2000 is not set
    # CONFIG_MTD_DOC2001 is not set
    # CONFIG_MTD_DOC2001PLUS is not set
    # CONFIG_MTD_DOCPROBE is not set
    # CONFIG_MTD_NAND is not set
    #

Boot up

    Linux version 2.4.22-pre8 (coggs at fracadeux) (gcc version 2.95.4 20010319 (prerelease/franzo/20011204)) #22 Tue
    Apr 20 13:40:57 PDT 2004
    On node 0 totalpages: 16384
    zone(0): 16384 pages.
    zone(1): 0 pages.
    zone(2): 0 pages.
    Kernel command line: console=ttyS0,9600 console=tty0 root=/dev/ram0 init=/linuxrc rw
    Decrementer Frequency = 375000000/60
    Calibrating delay loop... 99.73 BogoMIPS
    Memory: 60984k available (1052k kernel code, 464k data, 56k init, 0k highmem)
    Dentry cache hash table entries: 8192 (order: 4, 65536 bytes)
    Inode cache hash table entries: 4096 (order: 3, 32768 bytes)
    Mount cache hash table entries: 512 (order: 0, 4096 bytes)
    Buffer cache hash table entries: 4096 (order: 2, 16384 bytes)
    Page-cache hash table entries: 16384 (order: 4, 65536 bytes)
    POSIX conformance testing by UNIFIX
    Linux NET4.0 for Linux 2.4
    Based upon Swansea University Computer Society NET3.039
    Initializing RT netlink socket
    Starting kswapd
    devfs: v1.12c (20020818) Richard Gooch (rgooch at atnf.csiro.au)
    devfs: boot_options: 0x1
    CPM UART driver version 0.03
    ttyS0 at 0x0280 is on SMC1 using BRG3 - SMC1/SCC3/I2C/SPI Patch enabled
    ttyS1 at 0x0200 is on SCC3 using BRG3
    ttyS2 at 0x0300 is on SCC4 using BRG4
    pty: 256 Unix98 ptys configured
    Generic RTC Driver v1.07
    eth0: FEC ENET Version 0.3, FEC irq 3, addr 00:10:ec:80:4a:c4
    RAMDISK driver initialized: 8 RAM disks of 12288K size 1024 blocksize
    loop: loaded (max 8 devices)
    NET4: Linux TCP/IP 1.0 for NET4.0
    IP Protocols: ICMP, UDP, TCP, IGMP
    IP: routing cache hash table of 512 buckets, 4Kbytes
    TCP: Hash tables configured (established 4096 bind 4096)
    NET4: Unix domain sockets 1.0/SMP for Linux NET4.0.
    RAMDISK: Compressed image found at block 0
    Freeing initrd memory: 2190k freed
    VFS: Mounted root (ext2 filesystem).
    Mounted devfs on /dev
    Freeing unused kernel memory: 56k init
    init started:  BusyBox v1.00-pre8 (2004.04.01-23:23+0000) multi-cUsing /lib/modules/mtdcore.o
>   Using /lib/modules/mtdchar.o
>   Using /lib/modules/chipreg.o
>   Using /lib/modules/gen_probe.o
>   Using /lib/modules/cfi_probe.o
>   Using /lib/modules/cfi_util.o
>   Using /lib/modules/cfi_cmdset_0002.o
>   Using /lib/modules/mtdpart.o
>   Using /lib/modules/cmdlinepart.o


Insmoding the mapping module: 
    #
    # insmod ep852-mtd.o
    Using ep852-mtd.o
    EP852 partitioned flash device: 4000000 at ff000000
    RPX: Found 2 x16 devices at 0x0 in 32-bit mode
     Amd/Fujitsu Extended Query Table at 0x0040
      Silicon revision: 4
      Address sensitive unlock: Required
      Erase Suspend: Read/write
      Block protection: 1 sectors per group
      Temporary block unprotect: Supported
      Block protect/unprotect scheme: 4
      Number of simultaneous operations: 0
      Burst mode: Not supported
      Page mode: 4 word page
      Vpp Supply Minimum Program/Erase Voltage: 11.5 V
      Vpp Supply Maximum Program/Erase Voltage: 12.5 V
      Top/Bottom Boot Block: Uniform, Bottom WP
    RPX: CFI does not contain boot bank location. Assuming top.
    number of CFI chips: 1
    Using buffer write method
    cfi_cmdset_0002: Disabling erase-suspend-program due to code brokenness.
    Creating 6 MTD partitions on "RPX":
    0x00000000-0x00040000 : "bootstrap loader"
    mtd: Giving out device 0 to bootstrap loader
    0x00040000-0x00340000 : "kernel+ramdisk1"
    mtd: Giving out device 1 to kernel+ramdisk1
    0x00340000-0x00800000 : "application1"
    mtd: Giving out device 2 to application1
    0x00800000-0x00b00000 : "kernel+ramdisk2"
    mtd: Giving out device 3 to kernel+ramdisk2
    0x00b00000-0x00fc0000 : "application2"
    mtd: Giving out device 4 to application2
    0x00fc0000-0x01000000 : "diagnostics"
    mtd: Giving out device 5 to diagnostics

Fully tally of modules at this point
    
    # lsmod
    Module                  Size  Used by    Not tainted
    ep852-mtd               1452   0 (unused)
    cmdlinepart             2460   0 (unused)
    mtdpart                 6988   0 [ep852-mtd cmdlinepart]
    cfi_cmdset_0002        17916   1
    cfi_util                1184   0 [cfi_cmdset_0002]
    cfi_probe               3096   0
    gen_probe               2240   0 [cfi_probe]
    chipreg                 1344   0 [ep852-mtd cfi_probe]
    mtdchar                 6012   0 (unused)
    mtdcore                 4016   7 [ep852-mtd mtdpart mtdchar]

An attempt to get info from the chip works:
    
    # ./mtd_debug info /dev/mtd/0
    MTD_open
    MTD_ioctl
    MTD_ioctl
    mtd.type = MTD_NORFLASH
    mtd.flags = MTD_ERASEABLE
    mtd.size = 262144 (256K)
    mtd.erasesize = 131072 (128K)
    mtd.oobblock = 0
    mtd.oobsize = 0
    mtd.ecctype = MTD_ECC_NONE
    regions = 0

    MTD_close 1
    MTD_close 2
    cfi_amdstd_sync() 1
    cfi_amdstd_sync() 2
    cfi_amdstd_sync() 3
    cfi_amdstd_sync() 7
    cfi_amdstd_sync() 8
    cfi_amdstd_sync() 9
    MTD_close 3

An attempt to write the device fails. This is with this patch applied

    # cat > /dev/mtd/1
    MTD_open
    <i enter a newline>
    MTD_write
    MTD do_write_buffer(): WRITE 0x00040000(0x0a6c6962)
    map_read32 addr: c5068000
    map_read32 addr: c5068000
    map_read32 addr: c5068000
    map_read32 addr: c5068000
    MTD do_write_buffer(): software timeout
    cat: Write Error: Input/output error
    MTD_close 1
    MTD_close 2
    cfi_amdstd_sync() 1
    cfi_amdstd_sync() 2
    cfi_amdstd_sync() 3
    cfi_amdstd_sync() 7
    cfi_amdstd_sync() 8
    cfi_amdstd_sync() 9
    MTD_close 3

I'll keep bashing on it, but any wisdom would be appreciated...
tnx

--
Bob Coggeshall * Cogwheel, Inc * tel: (+1)206.230.6445 
cell: (+1)206.465.7355 fax: (+1)206.236.2553
icq: 233 433 536 
 




More information about the linux-mtd mailing list