[linux-dvb] HVR-1200, cx23885 driver and Message Signaled Interrupts
Hans-Frieder Vogt
hfvogt at gmx.net
Sat Jan 3 17:27:26 CET 2009
Am Samstag, 3. Januar 2009 05:38:47 schrieb Peter Hoeg:
> Hi,
>
> I'm successfully using a HVR1200, however the board reports MSI
> capabilities and the driver doesn't seem to enable it. Is there any work
> happening on supporting MSI? Anyway I can help testing things out?
>
> $ lspci -v -s 4:0.0
> 04:00.0 Multimedia video controller: Conexant Systems, Inc. CX23885 PCI
> Video and Audio Decoder (rev 02)
> Subsystem: Hauppauge computer works Inc. Device 71d3
> Flags: bus master, fast devsel, latency 0, IRQ 16
> Memory at ef800000 (64-bit, non-prefetchable) [size=2M]
> Capabilities: [40] Express Endpoint, MSI 00
> Capabilities: [80] Power Management version 2
> Capabilities: [90] Vital Product Data <?>
> Capabilities: [a0] Message Signalled Interrupts: Mask- 64bit+ Queue=0/0
> Enable- Capabilities: [100] Advanced Error Reporting <?>
> Capabilities: [200] Virtual Channel <?>
> Kernel driver in use: cx23885
> Kernel modules: cx23885
>
> Regards,
> Peter
>
>
> _______________________________________________
> linux-dvb mailing list
> linux-dvb at linuxtv.org
> http://www.linuxtv.org/cgi-bin/mailman/listinfo/linux-dvb
Hi Peter, hi List,
attached is a patch that enables MSI on the cx23885. I tested this patch for a
while now on a Dvico FusionHDTV Dual Express and have not found any side
effects. It works on versions 2.6.27.x and 2.6.28. 2.6.28-gitx not tried yet.
Regards,
Hans-Frieder
Signed-off-by: Hans-Frieder Vogt <hfvogt at gmx.net>
--- linux-2.6.28.orig/drivers/media/video/cx23885/cx23885-core.c 2008-10-25
18:10:32.000000000 +0200
+++ linux-2.6.28/drivers/media/video/cx23885/cx23885-core.c 2009-01-03
17:08:55.665685231 +0100
@@ -44,6 +44,10 @@ static unsigned int card[] = {[0 ... (C
module_param_array(card, int, NULL, 0444);
MODULE_PARM_DESC(card, "card type");
+static int enable_msi;
+module_param(enable_msi, int, 0444);
+MODULE_PARM_DESC(enable_msi, "Enable Message Signaled Interrupt (MSI)");
+
#define dprintk(level, fmt, arg...)\
do { if (debug >= level)\
printk(KERN_DEBUG "%s/0: " fmt, dev->name, ## arg);\
@@ -1750,7 +1754,11 @@ static int __devinit cx23885_initdev(str
goto fail_irq;
}
- err = request_irq(pci_dev->irq, cx23885_irq,
+ if (enable_msi && (pci_enable_msi(pci_dev) >= 0))
+ err = request_irq(pci_dev->irq, cx23885_irq,
+ IRQF_DISABLED, dev->name, dev);
+ else
+ err = request_irq(pci_dev->irq, cx23885_irq,
IRQF_SHARED | IRQF_DISABLED, dev->name, dev);
if (err < 0) {
printk(KERN_ERR "%s: can't get IRQ %d\n",
@@ -1778,6 +1786,8 @@ static void __devexit cx23885_finidev(st
/* unregister stuff */
free_irq(pci_dev->irq, dev);
+ if (pci_dev->msi_enabled)
+ pci_disable_msi(pci_dev);
pci_set_drvdata(pci_dev, NULL);
mutex_lock(&devlist);
More information about the linux-dvb
mailing list