This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

omap-l137 Spi Flash management through MTD.

Other Parts Discussed in Thread: OMAP-L137

I am using a OMAP-L137 EVM rev. 0
I can safely access Spi Flash Winbond W25X32 though U-Boot.
I need to access the chip through Linux MTD drivers (char and block) also.

I am using GIT kernel release 2.6.35
I believe the kernel configuration is O.K: the related .config is attached.

 

I tried to patch:
../arch/arm/mach-davinci/devices-da8xx.c
../arch/arm/mach-davinci/board-da830-evm.c

according to an example of  spi_flash MTD usage for OMAP_L138 board found in Arago project,
addressing the chip through spi0, but with no success...

Simply nothing happens..... 
Please note that no mtdparts info is provided to the kernel cmd line...(as for Montavista kernel) is it O.K. ?


Starting kernel ...

Uncompressing Linux... done, booting the kernel.
Linux version 2.6.35-07355-g939c222-dirty (venturi@linux-rs) (gcc version 4.3.3 (Sourcery G++ Lite 2009q1-203) ) #15 PREEMPT Tue Oct 12 16:02:47 CEST 2010
CPU: ARM926EJ-S [41069265] revision 5 (ARMv5TEJ), cr=00053177
CPU: VIVT data cache, VIVT instruction cache
Machine: DaVinci DA830/OMAP-L137 EVM
Memory policy: ECC disabled, Data cache writethrough
DaVinci da830/omap-l137 rev1.0 variant 0x0
Built 1 zonelists in Zone order, mobility grouping on.  Total pages: 6096
Kernel command line: console=ttyS2,115200n8 noinitrd rw root=/dev/nfs nfsroot=192.168.1.69:/mnt/omap-mv,nolock ip=192.168.1.72 netmask=255.255.255.0 mem=24M
PID hash table entries: 128 (order: -3, 512 bytes)
Dentry cache hash table entries: 4096 (order: 2, 16384 bytes)
Inode-cache hash table entries: 2048 (order: 1, 8192 bytes)
Memory: 24MB = 24MB total
Memory: 21200k/21200k available, 3376k reserved, 0K highmem
Virtual kernel memory layout:
    vector  : 0xffff0000 - 0xffff1000   (   4 kB)
    fixmap  : 0xfff00000 - 0xfffe0000   ( 896 kB)
    DMA     : 0xff000000 - 0xffe00000   (  14 MB)
    vmalloc : 0xc2000000 - 0xfea00000   ( 970 MB)
    lowmem  : 0xc0000000 - 0xc1800000   (  24 MB)
    modules : 0xbf000000 - 0xc0000000   (  16 MB)
      .init : 0xc0008000 - 0xc0022000   ( 104 kB)
      .text : 0xc0022000 - 0xc02c3000   (2692 kB)
      .data : 0xc02d6000 - 0xc02f3280   ( 117 kB)
SLUB: Genslabs=11, HWalign=32, Order=0-3, MinObjects=0, CPUs=1, Nodes=1
Hierarchical RCU implementation.
        RCU-based detection of stalled CPUs is disabled.
        Verbose stalled-CPUs detection is disabled.
NR_IRQS:245
Console: colour dummy device 80x30
Calibrating delay loop... 149.50 BogoMIPS (lpj=747520)
pid_max: default: 32768 minimum: 301
Mount-cache hash table entries: 512
CPU: Testing write buffer coherency: ok
devtmpfs: initialized
DaVinci: 128 gpio irqs
NET: Registered protocol family 16
da830_evm_init starts...   // my patches..
Spi Flash setup....               // my patches..
da830_evm_init ends...    // my patches..
bio: create slab <bio-0> at 0
pcf857x: probe of 1-003f failed with error -121
Switching to clocksource timer0_0
NET: Registered protocol family 2
IP route cache hash table entries: 1024 (order: 0, 4096 bytes)
TCP established hash table entries: 1024 (order: 1, 8192 bytes)
TCP bind hash table entries: 1024 (order: 0, 4096 bytes)
TCP: Hash tables configured (established 1024 bind 1024)
TCP reno registered
UDP hash table entries: 256 (order: 0, 4096 bytes)
UDP-Lite hash table entries: 256 (order: 0, 4096 bytes)
NET: Registered protocol family 1
RPC: Registered udp transport module.
RPC: Registered tcp transport module.
RPC: Registered tcp NFSv4.1 backchannel transport module.
msgmni has been set to 41
io scheduler noop registered (default)
Serial: 8250/16550 driver, 3 ports, IRQ sharing disabled
serial8250.0: ttyS0 at MMIO 0x1c42000 (irq = 25) is a 16550A
serial8250.0: ttyS1 at MMIO 0x1d0c000 (irq = 53) is a 16550A
serial8250.0: ttyS2 at MMIO 0x1d0d000 (irq = 61) is a 16550A
console [ttyS2] enabled
brd: module loaded
loop: module loaded
console [netcon0] enabled
netconsole: network logging started
i2c /dev entries driver
cpuidle: using governor ladder
cpuidle: using governor menu
TCP cubic registered
NET: Registered protocol family 17
Clocks: disable unused spi0                           // This sounds strange : it does not depends on my patch....
Clocks: disable unused emac
VFP support v0.3: not present
davinci_emac_probe: using random MAC addr: 7e:31:a5:4b:8c:40
emac-mii: probed
IP-Config: Guessing netmask 255.255.255.0
IP-Config: Complete:
     device=eth0, addr=192.168.1.72, mask=255.255.255.0, gw=255.255.255.255,
     host=192.168.1.72, domain=, nis-domain=(none),
     bootserver=255.255.255.255, rootserver=192.168.1.69, rootpath=
Looking up port of RPC 100003/2 on 192.168.1.69
Looking up port of RPC 100005/1 on 192.168.1.69
VFS: Mounted root (nfs filesystem) on device 0:14.
devtmpfs: mounted
Freeing init memory: 104K
INIT: version 2.86 booting
0
Starting the hotplug events dispatcher: udevd.
Synthesizing the initial hotplug events...done.
Waiting for /dev to be fully populated...done.
0
Activating swap...done.
Remounting root filesystem...done.
Starting mounting local filesystems: mount none on /var/run type tmpfs (rw)
none on /tmp type tmpfs (rw)
Setting up networking ...ln: /etc/network/run: Read-only file system
Starting hotplug subsystem:
   pci
   pci      [success]
   usb
   usb      [success]
   isapnp
   isapnp   [success]
   ide
   ide      [success]
   input
   input    [success]
   scsi
   scsi     [success]
done.
Starting portmap daemon: portmap.
INIT: Entering runlevel: 3
Starting internet superserver: inetd.

192.168.1.72 login: root

 

Moreover the MTD node files are missing in  /dev.

# ls -l /sys/devices/platform
drwxr-xr-x    2 root     root            0 Jan  1 00:00 davinci-mcasp.1
drwxr-xr-x    4 root     root            0 Jan  1 00:00 davinci_emac.1
drwxr-xr-x    2 root     root            0 Jan  1 00:00 davinci_mmc.0
drwxr-xr-x    2 root     root            0 Jan  1 00:00 edma
drwxr-xr-x    3 root     root            0 Jan  1 00:00 i2c_davinci.1
drwxr-xr-x    2 root     root            0 Jan  1 00:00 ohci.0
drwxr-xr-x    2 root     root            0 Jan  1 00:00 omap_rtc
drwxr-xr-x    2 root     root            0 Jan  1 00:00 serial8250
drwxr-xr-x    3 root     root            0 Jan  1 00:00 serial8250.0
drwxr-xr-x    2 root     root            0 Jan  1 00:00 spi_davinci.0
-rw-r--r--    1 root     root         4096 Jan  1 00:15 uevent
drwxr-xr-x    2 root     root            0 Jan  1 00:00 watchdog

# ls -l /sys/bus/spi/drivers/m25p80
--w-------    1 root     root         4096 Jan  1 00:35 bind
--w-------    1 root     root         4096 Jan  1 00:35 uevent
--w-------    1 root     root         4096 Jan  1 00:35 unbind
#

Maybe a proven GIT kernel patch for this issue is pending ?

Thank you in advance for whichever suggestion in this subject.

Misha.

 

 

  • Hello,

    The linux-omapl1 kernel in arago-project.org supports OMAP-L137 EVM. Can you please try that?

    Also, I am working on some SPI driver enhancements and have recently tested SPI flash on SPI0 on OMAP-L137 EVM. You can take a look here: http://arago-project.org/git/projects/?p=linux-davinci.git;a=shortlog;h=refs/heads/davinci-spi-rewrite

    Misha said:
    Clocks: disable unused spi0                           // This sounds strange : it does not depends on my patch....

    This suggests that SPI driver probe (in drivers/spi/davinci_spi.c) was not called. It could be because

    1) The driver was not built into the kernel

    2) The platform data for SPI0 was not registered from platform (board) code correctly.

    Thanks,

    Sekhar

     

  • It works !
    Thank you very much for your attention & prompt support.

    Misha.

    ....

    spi_davinci spi_davinci.0: DMA: supported
    spi_davinci spi_davinci.0: DMA: RX channel: 14, TX channel: 15, event queue: 0
    m25p80 spi0.0: w25x32 (4096 Kbytes)
    mtd .name = m25p80, .size = 0x400000 (4MiB) .erasesize = 0x00001000 (4KiB) .numeraseregions = 0
    partitions[0] = {.name = DSP-UBL, .offset = 0x0, .size = 0x2000 (8KiB) }
    partitions[1] = {.name = ARM-UBL, .offset = 0xffffffffffffffff, .size = 0x6000 (24KiB) }
    partitions[2] = {.name = U-Boot, .offset = 0xffffffffffffffff, .size = 0x38000 (224KiB) }
    partitions[3] = {.name = U-Boot-Environment, .offset = 0xffffffffffffffff, .size = 0x4000 (16KiB) }
    partitions[4] = {.name = Kernel, .offset = 0xffffffffffffffff, .size = 0x0 (0KiB) }
    Creating 5 MTD partitions on "m25p80":
    0x000000000000-0x000000002000 : "DSP-UBL"
    mtd: Giving out device 0 to DSP-UBL
    0x000000002000-0x000000008000 : "ARM-UBL"
    mtd: Giving out device 1 to ARM-UBL
    0x000000008000-0x000000040000 : "U-Boot"
    mtd: Giving out device 2 to U-Boot
    0x000000040000-0x000000044000 : "U-Boot-Environment"
    mtd: Giving out device 3 to U-Boot-Environment
    0x000000044000-0x000000400000 : "Kernel"
    mtd: Giving out device 4 to Kernel
    spi_davinci spi_davinci.0: Controller at 0xfec41000
    .....

  • Hi Misha,

    Glad that the issue is resolved. Can you please mark the post as "answered"?

    Thanks,

    Sekhar