On Fri, 2003-03-07 at 18:08, Jeff Baitis wrote:
> I belive I've made some progress tracking down this problem. The yenta_socket
> driver launches the yenta_open_bh thread. Earlier, all CardBus and EXCA
> interrupts were masked out. Near line 650, yenta_open_bh tries to allocate an
> interrupt line:
>
> if (!(socket->cb_irq) || request_irq(socket->cb_irq, yenta_interrupt,
> SA_SHIRQ, socket->dev->name, socket)) {
>
> request_irq, from linux/arch/mips/kernel/irq.c, enters a critical
> section around line 873. startup() is invoked on the IRQ descriptor,
> and then the critical section is exited with a call to
> spin_unlock_irqrestore(&desc->lock,flags);
>
> As soon as this call is made, the kernel calls yenta_interrupt over and over.
> Pardon my inexperience, but is this called an 'IRQ storm?'
Check to see what yenta_interrupt is doing. Is it acknowledging the
interrupt?
Pete
> yenta_interrupt: Entering
> yenta_events: Entering
> cb_readl: c0113eb0 0000 00000000
> cb_writel: c0113eb0 0000 00000000
> exca_readb: c0113eb0 0004 00
> exca_readb: c0113eb0 0003 00
> yenta_events: Exiting (retval is 0)
> yenta_interrupt: Exiting
> yenta_interrupt: Entering
>
> etc etc
>
> I've verified using our PCI analyzer that no interrupt events are transmitted
> by the CardBus bridge, so this seems to be a software problem.
>
> I'm going to continue to hunt this down, on the assumption that the kernel's
> interrupt table is getting incorrect / corrupt data. Suggestions are always
> appreciated.
>
> May all your CardBuses be happy!
>
> -Jeff
>
>
>
> On Mon, Mar 03, 2003 at 06:14:21PM -0800, Jeff Baitis wrote:
> > Pete and others:
> >
> > Thanks! I can access CardBus-enabled cards... but only if I plug the CardBus
> > card into a PCI bridge device.
> >
> > For those who might be interested in hearing, here's my current status:
> >
> > I tested the PCI->PCI bridge code by copying pb1500/pci_ops.c into
> > db1x00/pci_ops.c. It seemed to work. Great!
> >
> > After noticing that yenta_socket driver still locked up, I plugged a PCI-PCI
> > bridge board in between the Au1500 dev board and the CardBus bridge. CardBus
> > didn't work quite right, so I checked the PCI configuration registers on all
> > devices on my PCI bus.
> >
> > I noticed the PCI bridge device's SUBORDINATE_BUS value was set to 01, which
> > is completely incorrect. It should have been at *least* 11, given that
> > the CardBus bridge's SECONDARY_BUS register was set to 10.
> >
> > So, I used setpci to change the PCI bridge's SUBORDINATE_BUS to 1f. I
> > started
> > the CardBus services, and it seems that everything worked with CardBus
> > cards.
> > Eject, insert, and status all good -- and I can look at all the PCI
> > configuration registers on the CardBus card.
> >
> > ***
> >
> > It seems like the issue with plugging in the CardBus bridge directly into
> > PCI bus 0 (no PCI-PCI bridge) has to do with 16-bit CardBus support.
> > I enabled debugging on yenta_socket, and here's some results. First, I
> > present
> > information *without* the PCI bridge, and then *with* PCI bridge.
> >
> >
> > Without PCI bridge:
> >
> > dmesg gives:
> >
> > Autoconfig PCI channel 0x8029fc38°°
> > Scanning bus 00, I/O 0x00000300:0x00100000, Mem 0x40000000:0x44000000
> > 00:0c.0 Class 0104: 1103:0007 (rev 01)°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
> >
> > I/O at 0x00000300 [size=0x8]°°
> > I/O at 0x00000308 [size=0x4]
> > I/O at 0x00000310 [size=0x8]
> > I/O at 0x00000318 [size=0x4]
> > I/O at 0x00000400 [size=0x100]
> > 00:0d.0 Class 0607: 104c:ac56°°°°°°°°°
> > Mem at 0x40000000 [size=0x1000]
> > Mem unavailable -- skipping°°°°
> > I/O at 0x00000500 [size=0x4]
> > Mem at 0x40001000 [size=0x1000]
> > Mem at 0x40002000 [size=0x1000]
> > Mem at 0x40003000 [size=0x1000]
> >
> > lspci -v gives:
> >
> > 00:0c.0 RAID bus controller: Triones Technologies, Inc.: Unknown device
> > 0007
> > (rev 01)
> > Subsystem: Triones Technologies, Inc.: Unknown device 0001
> > Flags: bus master, 66Mhz, medium devsel, latency 128, IRQ 1
> > I/O ports at 0300 [size=8]
> > I/O ports at 0308 [size=4]
> > I/O ports at 0310 [size=8]
> > I/O ports at 0318 [size=4]
> > I/O ports at 0400 [size=256]
> > Expansion ROM at <unassigned> [disabled] [size=128K]
> > Capabilities: [60] Power Management version 2
> >
> > 00:0d.0 CardBus bridge: Texas Instruments: Unknown device ac56
> > Subsystem: Unknown device 5678:1234
> > Flags: bus master, medium devsel, latency 128, IRQ 1
> > Memory at 40000000 (32-bit, non-prefetchable) [size=4K]
> > Bus: primary=00, secondary=05, subordinate=00, sec-latency=0
> > Memory window 0: 40001000-40002000 (prefetchable)
> > I/O window 0: 00000000-00000003
> > I/O window 1: 00000000-00000003
> > 16-bit legacy interface ports at 0001
> >
> >
> > root@10.1.1.154:~# modprobe yenta_socket
> >
> > Linux Kernel Card Services 3.1.22
> > options: [pci] [cardbus]°°°°°°
> > config_writel: c0112bd0 0044 00000000
> > config_writel: c0112bd0 0010 40000000
> > config_writew: c0112bd0 0004 0087°°°°
> > config_writeb: c0112bd0 000c 08°°
> > config_writeb: c0112bd0 000d a8
> > config_writel: c0112bd0 0018 b0000500
> > config_readw: c0112bd0 003e 0340°°°°°
> > config_writew: c0112bd0 003e 0580
> > exca_writeb: c0112bd0 001e 00°°°°
> > exca_writeb: c0112bd0 0016 00
> > cb_writel: c0112bd0 000c 00004000
> > cb_writel: c0112bd0 0004 00000000
> > config_readl: c0112bd0 001c 40001000
> > config_readl: c0112bd0 0020 40002000
> > config_readl: c0112bd0 0024 40003000
> > config_readl: c0112bd0 0028 00000000
> > config_writel: c0112bd0 0024 40400000
> > config_writel: c0112bd0 0028 407fffff
> > config_readl: c0112bd0 002c 00000000°
> > config_readl: c0112bd0 0030 00000000
> > config_writel: c0112bd0 002c 00004000
> > config_writel: c0112bd0 0030 000040ff
> > config_readl: c0112bd0 0034 00000000°
> > config_readl: c0112bd0 0038 00000000
> > config_writel: c0112bd0 0034 00004400
> > config_writel: c0112bd0 0038 000044ff
> > cb_readl: c0112bd0 0000 00000006°°°°°
> > cb_writel: c0112bd0 0000 00000006
> > exca_readb: c0112bd0 0004 00°°°°°
> > exca_readb: c0112bd0 0003 00
> > cb_readl: c0112bd0 0000 00000000
> > cb_writel: c0112bd0 0000 00000000
> > exca_readb: c0112bd0 0004 00°°°°°
> > exca_readb: c0112bd0 0003 00
> > cb_readl: c0112bd0 0000 00000000
> > cb_writel: c0112bd0 0000 00000000
> > exca_readb: c0112bd0 0004 00°°°°°
> > exca_readb: c0112bd0 0003 00
> > cb_readl: c0112bd0 0000 00000000
> > cb_writel: c0112bd0 0000 00000000
> > exca_readb: c0112bd0 0004 00°°°°°
> > exca_readb: c0112bd0 0003 00
> > cb_readl: c0112bd0 0000 00000000
> > cb_writel: c0112bd0 0000 00000000
> > exca_readb: c0112bd0 0004 00°°°°°
> > exca_readb: c0112bd0 0003 00
> > cb_readl: c0112bd0 0000 00000000
> > cb_writel: c0112bd0 0000 00000000
> > exca_readb: c0112bd0 0004 00°°°°°
> > exca_readb: c0112bd0 0003 00
> > ** following portion loops indefinitely **
> > cb_readl: c0112bd0 0000 00000000
> > cb_writel: c0112bd0 0000 00000000
> > exca_readb: c0112bd0 0004 00°°°°°
> > exca_readb: c0112bd0 0003 00
> >
> > With PCI bridge:
> >
> > Autoconfig PCI channel 0x8029fc38°°
> > Scanning bus 00, I/O 0x00000300:0x00100000, Mem 0x40000000:0x44000000
> > 00:0c.0 Class 0104: 1103:0007 (rev 01)°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°°
> > I/O at 0x00000300 [size=0x8]°°
> > I/O at 0x00000308 [size=0x4]
> > I/O at 0x00000310 [size=0x8]
> > I/O at 0x00000318 [size=0x4]
> > I/O at 0x00000400 [size=0x100]
> > 00:0d.0 Class 0604: 1011:0022 (rev 02)
> > Bridge: primary=00, secondary=01
> > Scanning sub bus 01, I/O 0x00001000, Mem 0x40000000
> > 01:07.0 Class 0607: 104c:ac56°°°°°°°°°°°°°°°°°°°°°°
> > Mem at 0x40000000 [size=0x1000]
> > Mem unavailable -- skipping°°°°
> > I/O at 0x00001000 [size=0x4]
> > Mem at 0x40001000 [size=0x1000]
> > Mem at 0x40002000 [size=0x1000]
> > Mem at 0x40003000 [size=0x1000]
> > Back to bus 00°°°°°°°°°°°°°°°°°°°°°°°°°
> >
> > lspci -v gives:
> >
> > 00:0c.0 RAID bus controller: Triones Technologies, Inc.: Unknown device
> > 0007
> > (rev 01)
> > Subsystem: Triones Technologies, Inc.: Unknown device 0001
> > Flags: bus master, 66Mhz, medium devsel, latency 128, IRQ 1
> > I/O ports at 0300 [size=8]
> > I/O ports at 0308 [size=4]
> > I/O ports at 0310 [size=8]
> > I/O ports at 0318 [size=4]
> > I/O ports at 0400 [size=256]
> > Expansion ROM at <unassigned> [disabled] [size=128K]
> > Capabilities: [60] Power Management version 2
> >
> > 00:0d.0 PCI bridge: Digital Equipment Corporation DECchip 21150 (rev 02)
> > (prog-if 00 [Normal decode])
> > Flags: bus master, medium devsel, latency 0
> > Bus: primary=00, secondary=01, subordinate=1f, sec-latency=0
> > I/O behind bridge: 00001000-00001fff
> > Memory behind bridge: 40000000-400fffff
> > Prefetchable memory behind bridge:
> > 0000000000000000-0000000000000000
> >
> > 01:07.0 CardBus bridge: Texas Instruments: Unknown device ac56
> > Subsystem: Unknown device 5678:1234
> > Flags: bus master, medium devsel, latency 128, IRQ 255
> > Memory at 40000000 (32-bit, non-prefetchable) [size=4K]
> > Bus: primary=00, secondary=10, subordinate=00, sec-latency=0
> > Memory window 0: 40001000-40002000 (prefetchable)
> > I/O window 0: 00000000-00000003
> > I/O window 1: 00000000-00000003
> > 16-bit legacy interface ports at 0001
> >
> > root@10.1.1.154:~# modprobe yenta_socket
> >
> > Linux Kernel Card Services 3.1.22
> > options: [pci] [cardbus]°°°°°°
> > config_writel: c0112bd0 0044 00000000
> > config_writel: c0112bd0 0010 40000000
> > config_writew: c0112bd0 0004 0087°°°°
> > config_writeb: c0112bd0 000c 08°°
> > config_writeb: c0112bd0 000d a8
> > config_writel: c0112bd0 0018 b0001000
> > config_readw: c0112bd0 003e 0340°°°°°
> > config_writew: c0112bd0 003e 0580
> > exca_writeb: c0112bd0 001e 00°°°°
> > exca_writeb: c0112bd0 0016 00
> > cb_writel: c0112bd0 000c 00004000
> > cb_writel: c0112bd0 0004 00000000
> > config_readl: c0112bd0 001c 40001000
> > config_readl: c0112bd0 0020 40002000
> > config_readl: c0112bd0 0024 40003000
> > config_readl: c0112bd0 0028 00000000
> > config_writel: c0112bd0 0024 10000000
> > config_writel: c0112bd0 0028 103fffff
> > config_readl: c0112bd0 002c 00000000°
> > config_readl: c0112bd0 0030 00000000
> > config_writel: c0112bd0 002c 00004000
> > config_writel: c0112bd0 0030 000040ff
> > config_readl: c0112bd0 0034 00000000°
> > config_readl: c0112bd0 0038 00000000
> > config_writel: c0112bd0 0034 00004400
> > config_writel: c0112bd0 0038 000044ff
> > config_readw: c0112bd0 003e 05c0°°°°°
> > cb_writel: c0112bd0 0000 ffffffff
> > cb_writel: c0112bd0 0004 00000001
> > exca_writeb: c0112bd0 0005 00°°°°
> > warning: end_irq 60 did not enable (6)
> > warning: end_irq 59 did not enable (6)
> > warning: end_irq 58 did not enable (6)
> > warning: end_irq 57 did not enable (6)
> > warning: end_irq 55 did not enable (6)
> > warning: end_irq 52 did not enable (6)
> > warning: end_irq 48 did not enable (6)
> > warning: end_irq 46 did not enable (6)
> > warning: end_irq 45 did not enable (6)
> > warning: end_irq 44 did not enable (6)
> > warning: end_irq 43 did not enable (6)
> > warning: end_irq 42 did not enable (6)
> > warning: end_irq 41 did not enable (6)
> > warning: end_irq 40 did not enable (6)
> > warning: end_irq 39 did not enable (6)
> > warning: end_irq 38 did not enable (6)
> > warning: end_irq 31 did not enable (6)
> > warning: end_irq 27 did not enable (6)
> > warning: end_irq 18 did not enable (6)
> > warning: end_irq 14 did not enable (6)
> > warning: end_irq 5 did not enable (6)°
> > warning: end_irq 4 did not enable (6)
> > warning: end_irq 2 did not enable (6)
> > warning: end_irq 1 did not enable (6)
> > warning: end_irq 60 did not enable (16)
> > warning: end_irq 59 did not enable (16)
> > warning: end_irq 58 did not enable (16)
> > warning: end_irq 57 did not enable (16)
> > warning: end_irq 55 did not enable (16)
> > warning: end_irq 52 did not enable (16)
> > warning: end_irq 48 did not enable (16)
> > warning: end_irq 46 did not enable (16)
> > warning: end_irq 45 did not enable (16)
> > warning: end_irq 44 did not enable (16)
> > warning: end_irq 43 did not enable (16)
> > warning: end_irq 42 did not enable (16)
> > warning: end_irq 41 did not enable (16)
> > warning: end_irq 40 did not enable (16)
> > warning: end_irq 39 did not enable (16)
> > warning: end_irq 38 did not enable (16)
> > warning: end_irq 27 did not enable (16)
> > warning: end_irq 18 did not enable (16)
> > warning: end_irq 5 did not enable (16)°
> > warning: end_irq 4 did not enable (16)
> > warning: end_irq 2 did not enable (16)
> > warning: end_irq 1 did not enable (16)
> > exca_writeb: c0112bd0 0005 31°°°°°°°°°
> > cb_writel: c0112bd0 000c 00000001
> > cb_writel: c0112bd0 0000 ffffffff
> > exca_writeb: c0112bd0 0005 91°°°°
> > cb_writel: c0112bd0 000c 00000001
> > cb_writel: c0112bd0 0000 ffffffff
> > exca_writeb: c0112bd0 0005 a1°°°°
> > cb_writel: c0112bd0 000c 00000001
> > cb_writel: c0112bd0 0000 ffffffff
> > exca_writeb: c0112bd0 0005 b1°°°°
> > cb_writel: c0112bd0 000c 00000001
> > cb_writel: c0112bd0 0000 ffffffff
> > cb_writel: c0112bd0 0004 00000000
> > exca_writeb: c0112bd0 0005 00°°°°
> > config_writew: c0112bd0 003e 0540
> > Yenta IRQ list 0000, PCI irq0°°°°
> > cb_readl: c0112bd0 0008 30000020
> > Socket status: 30000020°°°°°°°°°
> > config_writel: c0112bd0 0044 00000000
> > config_writel: c0112bd0 0010 40000000
> > config_writew: c0112bd0 0004 0087°°°°
> > config_writeb: c0112bd0 000c 08°°
> > config_writeb: c0112bd0 000d a8
> > config_writel: c0112bd0 0018 b0001000
> > config_readw: c0112bd0 003e 0540°°°°°
> > config_writew: c0112bd0 003e 0580
> > exca_writeb: c0112bd0 001e 00°°°°
> > exca_writeb: c0112bd0 0016 00
> > cb_writel: c0112bd0 000c 00004000
> > cb_readl: c0112bd0 0010 00000400°
> > cb_writel: c0112bd0 0010 00000000
> > config_readw: c0112bd0 003e 05c0°
> > cb_readl: c0112bd0 0008 30000820
> > exca_readb: c0112bd0 0003 00°°°°
> > exca_writeb: c0112bd0 0003 00
> > config_writew: c0112bd0 003e 0580
> > cb_writel: c0112bd0 0000 ffffffff
> > cb_writel: c0112bd0 0004 00000006
> > exca_readb: c0112bd0 0006 00°°°°°
> > exca_writew: c0112bd0 0008 0000
> > exca_writew: c0112bd0 000a 0001
> > exca_readb: c0112bd0 0007 00°°°
> > exca_writeb: c0112bd0 0007 00
> > exca_readb: c0112bd0 0006 00°
> > exca_writew: c0112bd0 000c 0000
> > exca_writew: c0112bd0 000e 0001
> > exca_readb: c0112bd0 0007 00°°°
> > exca_writeb: c0112bd0 0007 00
> > exca_readb: c0112bd0 0006 00°
> > exca_writeb: c0112bd0 0040 00
> > exca_writew: c0112bd0 0010 0000
> > exca_writew: c0112bd0 0012 0000
> > exca_writew: c0112bd0 0014 0000
> > ..... etc etc
> >
> > Thanks, all, for the information. I hope someone finds this useful!
> > I'm gonna get remote kgdb goin' here, so I can hopefully fix the obnoxious
> > infinite loop...
> >
> > -Jeff
> >
> >
> > On Fri, Feb 28, 2003 at 10:15:58PM -0800, Pete Popov wrote:
> > > On Fri, 2003-02-28 at 19:48, Jeff Baitis wrote:
> > > > Hey Pete and others!
> > > >
> > > > I'm finally working on CardBus support on the DBAu1500. Just got
> > > > acquainted
> > > > with PCI today. :)
> > > >
> > > > I decided that the first step is to plug in a PCI->PCI bridge, and try
> > > > to see
> > > > if it would work, which it did not. After winding around inside of the
> > > > kernel,
> > > > I finally arrived in arch/mips/au1000/db1x00/pci_ops.c:
> > > >
> > > > Inside of config_access(unsigned char access_type, struct pci_dev *dev,
> > > > unsigned char where, u32 * data), on line 97, a little surprise:
> > > >
> > > > if (bus != 0) {
> > > > *data = 0xffffffff;
> > > > return -1;
> > > > }
> > > >
> > > > At this point, I concluded that I cannot traverse a PCI-PCI or CardBus
> > > > bridge,
> > > > since any devices behind the bridge will require Type 1 Configuration
> > > > Cycles,
> > > > and it seems that only Type 0 is currently supported.
> > > >
> > > > I assume that I should add code to handle the case where I need to
> > > > generate
> > > > Type 1 Configuration Cycles inside of config_access. Pete, since you
> > > > authored
> > > > this code, I thought I'd quickly run this by you to make sure that I'm
> > > > on
> > > > track.
> > > >
> > > > Thanks for your suggestions!
> > >
> > > Take a look at arch/mips/au1000/pb1500/pci_ops.c for type 1 config
> > > access. The patch was courtesy of David Gathright and apparently I
> > > missed adding it in the db1500. Actually, we need to combine that code
> > > because it's the same. Let me get through my eternal struggle of getting
> > > the 36 bit patch applied (with Ralf's help I think a modified patch
> > > should be ready this weekend) and then I'll worry about clean ups :)
> > >
> > > Pete
> > >
> > >
> >
> > --
> > Jeffrey Baitis - Associate Software Engineer
> >
> > Evolution Robotics, Inc.
> > 130 West Union Street
> > Pasadena CA 91103
> >
> > tel: 626.535.2776 | fax: 626.535.2777 | baitisj@evolution.com
> >
> >
|