aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorDavid Moore <dcm@acm.org>2007-02-03 03:09:09 -0500
committerStefan Richter <stefanr@s5r6.in-berlin.de>2007-02-08 15:36:18 -0500
commita5782010b4e75cba571357efaa27df22a89427c2 (patch)
treee4ecf091108230c6f65b221507ac0b7902154891
parent0fe4c6fcacb28bda75b31f63d3629f640a6b9bf9 (diff)
ieee1394: video1394: DMA fix
This together with the phys_to_virt fix in lib/swiotlb.c::swiotlb_sync_sg fixes video1394 DMA on machines with DMA bounce buffers, especially Intel x86-64 machines with > 3GB RAM. Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de> Signed-off-by: David Moore <dcm@acm.org> Tested-by: Nicolas Turro <Nicolas.Turro@inrialpes.fr>
-rw-r--r--drivers/ieee1394/video1394.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/drivers/ieee1394/video1394.c b/drivers/ieee1394/video1394.c
index 598b19fc5989..f4d1ec00af65 100644
--- a/drivers/ieee1394/video1394.c
+++ b/drivers/ieee1394/video1394.c
@@ -489,6 +489,9 @@ static void wakeup_dma_ir_ctx(unsigned long l)
489 reset_ir_status(d, i); 489 reset_ir_status(d, i);
490 d->buffer_status[d->buffer_prg_assignment[i]] = VIDEO1394_BUFFER_READY; 490 d->buffer_status[d->buffer_prg_assignment[i]] = VIDEO1394_BUFFER_READY;
491 do_gettimeofday(&d->buffer_time[d->buffer_prg_assignment[i]]); 491 do_gettimeofday(&d->buffer_time[d->buffer_prg_assignment[i]]);
492 dma_region_sync_for_cpu(&d->dma,
493 d->buffer_prg_assignment[i] * d->buf_size,
494 d->buf_size);
492 } 495 }
493 } 496 }
494 497
@@ -1096,6 +1099,8 @@ static long video1394_ioctl(struct file *file,
1096 DBGMSG(ohci->host->id, "Starting iso transmit DMA ctx=%d", 1099 DBGMSG(ohci->host->id, "Starting iso transmit DMA ctx=%d",
1097 d->ctx); 1100 d->ctx);
1098 put_timestamp(ohci, d, d->last_buffer); 1101 put_timestamp(ohci, d, d->last_buffer);
1102 dma_region_sync_for_device(&d->dma,
1103 v.buffer * d->buf_size, d->buf_size);
1099 1104
1100 /* Tell the controller where the first program is */ 1105 /* Tell the controller where the first program is */
1101 reg_write(ohci, d->cmdPtr, 1106 reg_write(ohci, d->cmdPtr,
@@ -1111,6 +1116,9 @@ static long video1394_ioctl(struct file *file,
1111 "Waking up iso transmit dma ctx=%d", 1116 "Waking up iso transmit dma ctx=%d",
1112 d->ctx); 1117 d->ctx);
1113 put_timestamp(ohci, d, d->last_buffer); 1118 put_timestamp(ohci, d, d->last_buffer);
1119 dma_region_sync_for_device(&d->dma,
1120 v.buffer * d->buf_size, d->buf_size);
1121
1114 reg_write(ohci, d->ctrlSet, 0x1000); 1122 reg_write(ohci, d->ctrlSet, 0x1000);
1115 } 1123 }
1116 } 1124 }