Hi,
Tim Yamin wrote:
This patch adds MDMA/UDMA support (using BestComm for DMA) on the
MPC5200 platform.
Based heavily on previous work by Freescale (Bernard Kuhn, John
Rigby) and Domen Puncer.
Using a SanDisk Extreme IV CF card I get read speeds of approximately
26.70 MB/sec.
The BestComm ATA task priority was changed to maximum in
bestcomm_priv.h; this fixes a deadlock issue I was experiencing when
heavy DMA was occuring on both the ATA and Ethernet BestComm tasks,
e.g. when downloading a large file over a LAN to disk.
There's also what I believe to be a hardware bug if you have high
levels of BestComm ATA DMA activity along with heavy LocalPlus Bus
activity; the address bus seems to sometimes get corrupted with ATA
commands while the LocalPlus Bus operation is still active (i.e. Chip
Select is asserted).
I've asked Freescale about this but have not received a reply yet --
if anybody from Freescale has any ideas please contact me; I can
supply some analyzer traces if needed. Therefore, for now, do not
enable DMA if you need reliable LocalPlus Bus unless you do a fixup
in your driver as follows:
Locking example:
while (test_and_set_bit(0, pata_mpc52xx_ata_dma_lock) != 0)
{
struct bcom_task_2 *tsk = pata_mpc52xx_ata_dma_task;
if(bcom_buffer_done_2(tsk))
return 1;
}
return 0;
(Save the return value to `flags`)
Unlocking example:
if(flags == 0)
clear_bit(0, pata_mpc52xx_ata_dma_lock);
Comments and testing would of course be very welcome.
Thanks,
Signed-off-by: Tim Yamin [EMAIL PROTECTED]
Sorry for testing this patch so late, but I get these if I apply your
patch to 2.6.24.7 and use it with my Sandisk Extreme IV 4GB card:
...
[0.999514] ata: MPC52xx IDE/ATA libata driver
[1.00] scsi0 : mpc52xx_ata
[1.010969] ata1: PATA max UDMA/33 ata_regs 0xf0003a00 irq 135
[1.168588] ata1.00: CFA: SanDisk SDCFX3-4096, HDX 4.31, max MWDMA2
[1.175156] ata1.00: 8027712 sectors, multi 0: LBA
[1.181098] ata1.00: configured for MWDMA2
[1.196589] scsi 0:0:0:0: Direct-Access ATA SanDisk SDCFX3-4
HDX PQ: 0 ANSI: 5
[1.206949] sd 0:0:0:0: [sda] 8027712 512-byte hardware sectors (4110
MB)
[1.214281] sd 0:0:0:0: [sda] Write Protect is off
[1.219803] sd 0:0:0:0: [sda] Write cache: disabled, read cache:
enabled, doesn't support DPO or FUA
[1.230407] sd 0:0:0:0: [sda] 8027712 512-byte hardware sectors (4110
MB)
[1.237678] sd 0:0:0:0: [sda] Write Protect is off
[1.243129] sd 0:0:0:0: [sda] Write cache: disabled, read cache:
enabled, doesn't support DPO or FUA
[1.252684] sda:3ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0
action 0x2 frozen
[ 31.260361] ata1.00: cmd c8/00:08:00:00:00/00:00:00:00:00/e0 tag 0
dma 4096 in
[ 31.260377] res 40/00:00:00:00:00/00:00:00:00:00/00 Emask
0x4 (timeout)
[ 31.275689] ata1.00: status: { DRDY }
[ 31.279545] ata1: soft resetting link
[ 31.435535] ata1.00: configured for MWDMA2
[ 31.439933] ata1: EH complete
[ 61.443060] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2
frozen
[ 61.450451] ata1.00: cmd c8/00:08:00:00:00/00:00:00:00:00/e0 tag 0
dma 4096 in
[ 61.450467] res 40/00:00:00:00:00/00:00:00:00:00/00 Emask
0x4 (timeout)
[ 61.465777] ata1.00: status: { DRDY }
[ 61.469632] ata1: soft resetting link
[ 61.625541] ata1.00: configured for MWDMA2
[ 61.629938] ata1: EH complete
...
[ 363.394140] ata1.00: exception Emask 0x0 SAct 0x0 SErr 0x0 action 0x2
frozen
[ 363.401534] ata1.00: cmd c8/00:08:00:00:00/00:00:00:00:00/e0 tag 0
dma 4096 in
[ 363.401550] res 40/00:00:00:00:00/00:00:00:00:00/00 Emask
0x4 (timeout)
[ 363.416889] ata1.00: status: { DRDY }
[ 363.420717] ata1: soft resetting link
[ 363.576538] ata1.00: configured for MWDMA1
[ 363.580927] sd 0:0:0:0: [sda] Result: hostbyte=0x00 driverbyte=0x08
[ 363.587499] sd 0:0:0:0: [sda] Sense Key : 0xb [current] [descriptor]
[ 363.594157] Descriptor sense data with sense descriptors (in hex):
[ 363.600593] 72 0b 00 00 00 00 00 0c 00 0a 80 00 00 00 00 00
[ 363.607248] 00 00 00 00
[ 363.610615] sd 0:0:0:0: [sda] ASC=0x0 ASCQ=0x0
[ 363.615334] end_request: I/O error, dev sda, sector 0
[ 363.620600] Buffer I/O error on device sda, logical block 0
[ 363.626475] unable to read partition table
[ 363.631014] ata1: EH complete
[ 363.635081] sd 0:0:0:0: [sda] Attached SCSI removable disk
And if I boot via NFS, the kernel can continue to boot after that point.
With a non-DMA card everything is fine.
Best regards,
Daniel.
___
Linuxppc-dev mailing list
Linuxppc-dev@ozlabs.org
https://ozlabs.org/mailman/listinfo/linuxppc-dev