system hang in bttv driver on modprobe.

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]



> Subject: Re:  system hang in bttv driver
> on modprobe.
> 
> After reading a bit about PCI quirks, I also
> added a test in bttv-driver.c
> 
> "       if (isa_dma_bridge_buggy)
>                 printk( "bttv: Host bridge has
> buggy ISA DMA\n");
> 
> "  similar to the ones for the VSFX and triton
> tests there...

Well, you need the VSFX bit .. that is the VIA
PCI compatibility mode .. whatever that means :-)

> 
> now I have (transcribed):

Actually a fuller syslog message would be better
.. what version of bttv are you using ? why does
it say interface = v1.00 even though you have
specified v4l2=2 in the modules.conf ?

how much main memory do you have and also could
you run lspci -vv and paste the relevant lines
(the sections that say multimedia something or
the other)

> grumpy# modprobe bttv
> <date> Linux video capture interface: v1.00
> bttv: host bridge is VIA Technologies Inc.
> VT82C693A/694x [Apollo 133x]
> bttv: host bridge is VIA Technologies Inc.
> VT82C596 Power Management
> bttv: host bridge has buggy ISA DMA
> bttv: host bridge needs VSFX enabled
> PCI: Enabling device - 00:09.0 (0004->0006)
> bttv0: detected: ATI TV Wonder [card=63,
> autodetected]
> bttv0: enabling VSFX
> bttv0: risc main @ 12112000

So at this point you have programmed the DMA push
engine in bttv-risc.c .. with the buffer
locations ...


> about to btwrite(val, BT848_E_SCLOOP)

And then you should be in init_bt484, where you
should see code that looks like this .. (in
version 0.8.45 of bttv)

----------x---------------
static void init_bt848(struct bttv *btv)
{
        int val;

        btwrite(0, BT848_SRESET);
        btwrite(0x00, BT848_CAP_CTL);
        btwrite(BT848_COLOR_CTL_GAMMA,
BT848_COLOR_CTL);
        btwrite(BT848_IFORM_XTAUTO |
BT848_IFORM_AUTO, BT848_IFORM);

        /* set planar and packed mode trigger
points and         */
        /* set rising edge of inverted GPINTR pin
as irq trigger */
        btwrite(BT848_GPIO_DMA_CTL_PKTP_32|
                BT848_GPIO_DMA_CTL_PLTP1_16|
                BT848_GPIO_DMA_CTL_PLTP23_16|
                BT848_GPIO_DMA_CTL_GPINTC|
                BT848_GPIO_DMA_CTL_GPINTI,
                BT848_GPIO_DMA_CTL);

        val = btv->opt_chroma_agc ?
BT848_SCLOOP_CAGC : 0;
        btwrite(val, BT848_E_SCLOOP);
        btwrite(val, BT848_O_SCLOOP);            
                              
-------------x-------------------


The GPIO_DMA instructions before the LOOP control
is what sets up and ARMS the DMA ..  and that is
what I was suggesting you comment out .. you will
see no picture .. but it should stay up :-)


> ---------- <HANG>
> ----------------------------------

My simplest and maybe naive suspicion is that DMA
is not setup right and is hanging the machine ..
so the parts of setting up and arming the DMA's
would be where to start examining.


> P.S. If someone can tell me how to get Redhat
> to print kernel info and debug
> messages, it would be really helpful!

under normal circumstances, if you have klogd and
syslogd running, your KERN_INFO and KERN_DEBUG
messages should go into /var/log/messages .. it
could be that your reporting level is too low ..
take a look at man klogd .. and only KERN_ERROR
or something critical like that are the only
things getting reported.

PS: it maybe a good idea to switch to a private
thread ..


__________________________________________________
Do you Yahoo!?
New DSL Internet Access from SBC & Yahoo!
http://sbc.yahoo.com





[Index of Archives]     [Linux DVB]     [Video Disk Recorder]     [Asterisk]     [Photo]     [DCCP]     [Netdev]     [Xorg]     [Util Linux NG]     [Xfree86]     [Free Photo Albums]     [Fedora Users]     [Fedora Women]     [ALSA Users]     [ALSA Devel]     [Linux USB]

Powered by Linux