lkml.org 
[lkml]   [2009]   [Aug]   [28]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    Date
    From
    Subject[PATCH 1/2] firewire: ohci: fix Agere FW643 and multiple cameras
    Date: 
    From: Stefan Richter <stefanr@s5r6.in-berlin.de>
    Subject: firewire: ohci: fix Agere FW643 and multiple cameras

    An Agere FW643 OHCI 1.1 card works fine for video reception from one
    camera but fails early if receiving from two cameras. After a short
    while, no IR IRQ events occur and the context control register does not
    react anymore. This happens regardless whether both IR DMA contexts are
    dual-buffer or one is dual-buffer and the other packet-per-buffer.

    This can be worked around by disabling dual buffer DMA mode entirely.
    http://sourceforge.net/mailarchive/message.php?msg_name=4A7C0594.2020208%40gmail.com

    Reported-by: Samuel Audet <samuel.audet@gmail.com>
    Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
    ---
    drivers/firewire/ohci.c | 9 +++++++++
    1 file changed, 9 insertions(+)

    Index: linux-2.6.31-rc8/drivers/firewire/ohci.c
    ===================================================================
    --- linux-2.6.31-rc8.orig/drivers/firewire/ohci.c
    +++ linux-2.6.31-rc8/drivers/firewire/ohci.c
    @@ -34,6 +34,7 @@
    #include <linux/module.h>
    #include <linux/moduleparam.h>
    #include <linux/pci.h>
    +#include <linux/pci_ids.h>
    #include <linux/spinlock.h>
    #include <linux/string.h>

    @@ -2372,6 +2373,9 @@ static void ohci_pmac_off(struct pci_dev
    #define ohci_pmac_off(dev)
    #endif /* CONFIG_PPC_PMAC */

    +#define PCI_VENDOR_ID_AGERE PCI_VENDOR_ID_ATT
    +#define PCI_DEVICE_ID_AGERE_FW643 0x5901
    +
    static int __devinit pci_probe(struct pci_dev *dev,
    const struct pci_device_id *ent)
    {
    @@ -2422,6 +2426,11 @@ static int __devinit pci_probe(struct pc
    version = reg_read(ohci, OHCI1394_Version) & 0x00ff00ff;
    ohci->use_dualbuffer = version >= OHCI_VERSION_1_1;

    + /* dual-buffer mode is broken if more than one IR context is active */
    + if (dev->vendor == PCI_VENDOR_ID_AGERE &&
    + dev->device == PCI_DEVICE_ID_AGERE_FW643)
    + ohci->use_dualbuffer = false;
    +
    /* x86-32 currently doesn't use highmem for dma_alloc_coherent */
    #if !defined(CONFIG_X86_32)
    /* dual-buffer mode is broken with descriptor addresses above 2G */
    --
    Stefan Richter
    -=====-==--= =--- ===--
    http://arcgraph.de/sr/


    \
     
     \ /
      Last update: 2009-08-28 13:27    [W:0.021 / U:0.212 seconds]
    ©2003-2016 Jasper Spaans. hosted at Digital OceanAdvertise on this site