Hi folks, I'm working with some folks with LogicPD's OMAPL-138 board, but we're having a lot of trouble with SATA functionality and performance.
I posted these same questions and data in the davinci-linux development list,
but this also seemed like an appropriate place to ask.
For the impatient, let me start with several questions, with details following. To users or developers: * Is anyone successfully using SATA with any OMAPL-138 board? * If so, what kind of sustained write performance[1] are you seeing? * What kernel version/flavor are you using? * What board are you using? * Is anyone successfully using SATA on a LogicPD OMAPL-138 board? * If so, what board rev and OMAP SOM rev? * Are there any tricks or gotchas in using SATA with the OMAPL-138 that I should watch out for? To primarily developers: * Are there any known issues with SATA support or performance? * I understand there are two "paths" to SATA support: the TI SATA patchset, and the newer generic "platform AHCI" patches. Can anyone shed some light on the state of these? Now, here are some more details about my actual situation: First of all, I got SATA to work with the 2.6.31-rc7-davinci1 kernel from TI, but there were two main issues. First, SATA would only work with one of three types of drives I tried (details below). Second, I can only get -- in the very best case, after tweaking kernel IO schedulers, trying different filesystems vs. raw device access, etc -- is around 25 MB/s sustained write performance. This seems like a common performance number I've seen reported by various people, but it's incredibly slow compared to what SATA should be capable of. We need more like 50 MB/s or more, which is still quite conservative from a SATA perspective. Next, under recent TI kernel releases, I can't get any of the three types of SATA drives to work (error details below). I've tried many DaVinci-PSP-SDK releases (listed below), with port multiplier support on or off, etc. The usual symbols are either 1) SATA will fail during drive detection, give up, and refuse to work at all, or 2) the drives will be detected and mapped to block devices which can be used, but any access results in endless streams of error messages. The types of drives I have tried using are as follows. I have tested at least 3 of each of these drives to ensure that it's not just a drive problem, and each drive has been validated to work with a PC via a USB<->SATA adaptor. * COTS Super Talent SATA 1.8" 64 GB Flash Drive * OEM Apacer SATA 64 GB Flash SSD, AP-SAFD18DPA064GS-EM * Various non-Flash traditional platter-based HD SATA drives Each of the above was tested with at least 3 LogicPD base boards with at least 3 LogicPD OMAPL-138 SOMs, all with the same results. In my first experimentation, I was only able to get the OEM Apacer drive to work with the TI 2.6.31-rc7-davinci1 kernel after enabling SATA in the kernel configuration. With all other kernels I have never been able to get any drive to work, although different kernels fail in different ways with different drives. I have tried the following TI Davinci-PSP-SDK releases, none of which I have been able to get to work correctly with SATA: * 03.20.00.06 -- SATA doesn't work at all * 03.20.00.08 -- SATA fails immediately, no block devices allocated. * 03.20.00.11 -- SATA starts to work, assigns block devices, then fails. * 03.20.00.12 -- same as above * 03.20.00.13 -- ditto * 03.20.00.14 -- ditto Each of these fails in slightly different ways. I can post the actual and complete error messages, but mostly the behavior is along these lines: When it fails initially and doesn't allocate block devices, I get this during boot. It takes a minute or two to get through it, then it fails and everything works fine, except SATA: ata1: link is slow to respond, please be patient (ready=0) ata1: COMRESET failed (errno=-16) ... (repeats of the above) ... ata1: limiting SATA link speed to 1.5 Gbps ata1: COMRESET failed (errno=-16) ata1: reset failed, giving up When it "works" initially, and assigns usable block devices, but reports lots of errors (and slows to a crawl) when access is attempted, I get messages like this. But, for example, the actual contents of the SError messages change depending on what kernel version I'm using, and sometimes I get different errors instead, like a lot of "soft link reset" and "timeout" messages, etc. ahci ahci: version 3.0 ahci ahci: forcing PORTS_IMPL to 0x1 ahci ahci: AHCI 0001.0100 32 slots 1 ports 3 Gbps 0x1 impl SATA mode ahci ahci: flags: ncq sntf pm led clo only pmp pio slum part ccc scsi0 : ahci ata1: SATA max UDMA/133 irq 67 ... ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) ata1.00: ATA-7: 64GB SATA Flash Drive, SFDB103E, max UDMA/133 ata1.00: 126189568 sectors, multi 1: LBA48 ata1.00: configured for UDMA/133 scsi 0:0:0:0: Direct-Access ATA 64GB SATA Flash SFDB PQ: 0 ANSI: 5 sd 0:0:0:0: [sda] 126189568 512-byte logical blocks: (64.6 GB/60.1 GiB) sd 0:0:0:0: Attached scsi generic sg0 type 0 sd 0:0:0:0: [sda] Write Protect is off sd 0:0:0:0: [sda] Mode Sense: 00 3a 00 00 sd 0:0:0:0: [sda] Write cache: disabled, read cache: enabled, doesn't support DPO or FUA sda: sda1 sd 0:0:0:0: [sda] Attached SCSI disk ... ata1.00: exception Emask 0x12 SAct 0x0 SErr 0x1080500 action 0x6 frozen ata1.00: irq_stat 0x08000000, interface fatal error ata1: SError: { UnrecovData Proto 10B8B TrStaTrns } ata1.00: failed command: READ DMA ata1.00: cmd c8/00:20:f8:7e:85/00:00:00:00:00/e7 tag 0 dma 16384 in res 50/00:00:f8:7f:85/00:00:00:00:00/e7 Emask 0x12 (ATA bus error) ata1.00: status: { DRDY } ata1: hard resetting link ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) ata1.00: configured for UDMA/133 Remounting root file system... ata1: EH complete Caching udev devnodes Populating dev cache ata1.00: exception Emask 0x12 SAct 0x0 SErr 0x1080500 action 0x6 frozen ata1.00: irq_stat 0x08000000, interface fatal error ata1: SError: { UnrecovData Proto 10B8B TrStaTrns } ata1.00: failed command: READ DMA ata1.00: cmd c8/00:10:00:02:00/00:00:00:00:00/e0 tag 0 dma 8192 in res 50/00:00:10:02:00/00:00:00:00:00/e0 Emask 0x12 (ATA bus error) ata1.00: status: { DRDY } ata1: hard resetting link ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) ata1.00: configured for UDMA/133 ata1: EH complete NET: Registered protocol family 10 logger: mount: mount point /proc/bus/usb does not exist ata1.00: exception Emask 0x12 SAct 0x0 SErr 0x1080500 action 0x6 frozen ata1.00: irq_stat 0x08000000, interface fatal error ata1: SError: { UnrecovData Proto 10B8B TrStaTrns } ata1.00: failed command: READ DMA ata1.00: cmd c8/00:40:68:00:00/00:00:00:00:00/e0 tag 0 dma 32768 in res 50/00:00:00:00:00/00:00:00:00:00/e0 Emask 0x12 (ATA bus error) ata1.00: status: { DRDY } ata1: hard resetting link ata1: SATA link up 3.0 Gbps (SStatus 123 SControl 300) ata1.00: configured for UDMA/133 ata1: EH complete ALSA: Restoring mixer settings... NOT configuring network interfaces: / is an NFS mount ata1: limiting SATA link speed to 1.5 Gbps ata1.00: exception Emask 0x12 SAct 0x0 SErr 0x1a00500 action 0x6 frozen ata1.00: irq_stat 0x08000000, interface fatal error ata1: SError: { UnrecovData Proto BadCRC LinkSeq TrStaTrns } ata1.00: failed command: READ DMA ata1.00: cmd c8/00:40:68:00:00/00:00:00:00:00/e0 tag 0 dma 32768 in res 50/00:46:00:00:00/00:00:00:00:00/a0 Emask 0x12 (ATA bus error) ata1.00: status: { DRDY } ata1: hard resetting link Thu Oct 14 21:40:00 UTC 2010 INIT: Entering runlevel: 5 ata1: SATA link up 1.5 Gbps (SStatus 113 SControl 310) ata1.00: configured for UDMA/133 ata1: EH complete Starting system message bus: dbus. Starting telnet daemon. Starting syslogd/klogd: done Starting thttpd. FAT: invalid media value (0x5c) VFS: Can't find a valid FAT filesystem on dev sda. FAT: bogus number of reserved sectors VFS: Can't find a valid FAT filesystem on dev sda1. After getting the above errors, the drive "sort of" works. If it has data on it, I can mount it and, for example, "cat hello.txt" and get the right data. I can run cfdisk and change partitions around without getting any more errors. But if I do something like "mkfs.ext2 /dev/sda1", I'll get more errors similar to the above. Of course, I can still go back to the one kernel that did work, the TI 2.6.31-rc7-davinci1, and it works ... as long as I use the OEM Apacer drive and only want 25 MB/s sustained write throughput. Any ideas, thoughts or suggestions? Am I doing something totally wrong? Thanks for any input you may have!