Re: cassini driver failure in 2.6.17

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

 



On Thu, Aug 24, 2006 at 11:14:11PM -0700, Jurij Smakov wrote:
> Hi,
> 
> We have a report from a user (CC'd) who tried to install Debian testing 
> with 2.6.17 (including all patches up to 2.6.17.8) kernel onto a B100 
> blade with two cassini ethernet adapters [0]. The installer was 
> successfully netbooted, but an attempt to load the cassini driver later 
> failed with the messages:
> 
>  cassini.c:v1.4 (1 July 2004)
>  cassini: Cannot find proper PCI device base address, aborting.
>  cassini: Cannot find proper PCI device base address, aborting.
> 
> Any help in resolving this issue would be appreciated.

Together with the bug submitter we tried to debug this issue further. 
I've build a modified netboot image, which contained a 2.6.17 kernel 
with some extra debugging output in the PCI probing code. The relevant 
part of the function pci_read_bases() in drivers/pci/probe.c which 
actually gets the memory regions from the card looked like that:

static void pci_read_bases(struct pci_dev *dev, unsigned int howmany, 
int rom)
{
        unsigned int pos, reg, next;
        u32 l, sz;
        struct resource *res;

        for(pos=0; pos<howmany; pos = next) {
                next = pos+1;
                res = &dev->resource[pos];
                res->name = pci_name(dev);
                reg = PCI_BASE_ADDRESS_0 + (pos << 2);
                pci_read_config_dword(dev, reg, &l);
                pr_debug("pci_read_bases: device %s, pos=%u, got l=%lx\n",
                        pci_name(dev), pos, (unsigned long) l);
                pci_write_config_dword(dev, reg, ~0);
                pci_read_config_dword(dev, reg, &sz);
                pr_debug("pci_read_bases: device %s, pos=%u, got sz=%lx\n",
                        pci_name(dev), pos, (unsigned long) sz);
                pci_write_config_dword(dev, reg, l);
                if (!sz || sz == 0xffffffff)
                        continue;
                if (l == 0xffffffff)
                        l = 0;
                if ((l & PCI_BASE_ADDRESS_SPACE) == PCI_BASE_ADDRESS_SPACE_MEMORY) {
                        sz = pci_size(l, sz, (u32)PCI_BASE_ADDRESS_MEM_MASK);
                        pr_debug("  memory: device %s, pos=%u, sz=%lx\n",
                                pci_name(dev), pos, (unsigned long) sz);
                        if (!sz)
                                continue;
                        res->start = l & PCI_BASE_ADDRESS_MEM_MASK;
                        res->flags |= l & ~PCI_BASE_ADDRESS_MEM_MASK;
                        pr_debug("  memory: device %s, pos=%u, start=%lx, flags=%lx\n", pc
i_name(dev), pos, (unsigned long) res->start, (unsigned long) res->flags);

For the cassini cards the dmesg output looked like that:

PCI: Found 0000:00:0a.0 [108e/abba] 000200 00
pci_read_bases: device 0000:00:0a.0, pos=0, got l=0
pci_read_bases: device 0000:00:0a.0, pos=0, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=1, got l=0
pci_read_bases: device 0000:00:0a.0, pos=1, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=2, got l=0
pci_read_bases: device 0000:00:0a.0, pos=2, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=3, got l=0
pci_read_bases: device 0000:00:0a.0, pos=3, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=4, got l=0
pci_read_bases: device 0000:00:0a.0, pos=4, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=5, got l=0
pci_read_bases: device 0000:00:0a.0, pos=5, got sz=0
PCI: Found 0000:00:0b.0 [108e/abba] 000200 00
pci_read_bases: device 0000:00:0b.0, pos=0, got l=400000
pci_read_bases: device 0000:00:0b.0, pos=0, got sz=400000
  memory: device 0000:00:0b.0, pos=0, sz=0
pci_read_bases: device 0000:00:0b.0, pos=1, got l=0
pci_read_bases: device 0000:00:0b.0, pos=1, got sz=0
pci_read_bases: device 0000:00:0b.0, pos=2, got l=0
pci_read_bases: device 0000:00:0b.0, pos=2, got sz=0
pci_read_bases: device 0000:00:0b.0, pos=3, got l=0
pci_read_bases: device 0000:00:0b.0, pos=3, got sz=0
pci_read_bases: device 0000:00:0b.0, pos=4, got l=0
pci_read_bases: device 0000:00:0b.0, pos=4, got sz=0
pci_read_bases: device 0000:00:0b.0, pos=5, got l=0
pci_read_bases: device 0000:00:0b.0, pos=5, got sz=0

So the first card returned nothing but zeroes, and the second one 
produces the values, which cause pci_size() to return zero, and again 
we get nothing useful. Do this cards require some special treatment 
before they can be properly initialized by the PCI subsystem?

I am also attaching the complete dmesg output to this message.

Best regards,
-- 
Jurij Smakov                                           jurij@xxxxxxxxx
Key: http://www.wooyd.org/pgpkey/                      KeyID: C99E03CC
~ # dmesg
 Framework v1.0.0 initialized
SELinux:  Disabled at boot.
Capability LSM initialized
Mount-cache hash table entries: 512
CPU[0]: Caches D[sz(16384):line_sz(32)] I[sz(16384):line_sz(32)]
E[sz(524288):line_sz(64)]
Using max_cache_size of 512KB
Brought up 1 CPUs
Total of 1 processors activated (11.12 BogoMIPS).
migration_cost=0
checking if image is initramfs...it isn't (no cpio magic); looks like an
initrd
Freeing initrd memory: 2911k freed
NET: Registered protocol family 16
PCI: Probing for controllers.
PCI: Found SABRE, main regs at 000001fe00000000
SABRE: Shared PCI config space at 000001fe01000000
SABRE: DVMA at c0000000 [20000000]
PCI: Scanning bus 0000:00
PCI: Found 0000:00:00.0 [108e/a001] 000600 00
pci_read_bases: device 0000:00:00.0, pos=0, got l=0
pci_read_bases: device 0000:00:00.0, pos=0, got sz=0
pci_read_bases: device 0000:00:00.0, pos=1, got l=0
pci_read_bases: device 0000:00:00.0, pos=1, got sz=0
pci_read_bases: device 0000:00:00.0, pos=2, got l=0
pci_read_bases: device 0000:00:00.0, pos=2, got sz=0
pci_read_bases: device 0000:00:00.0, pos=3, got l=0
pci_read_bases: device 0000:00:00.0, pos=3, got sz=0
pci_read_bases: device 0000:00:00.0, pos=4, got l=0
pci_read_bases: device 0000:00:00.0, pos=4, got sz=0
pci_read_bases: device 0000:00:00.0, pos=5, got l=0
pci_read_bases: device 0000:00:00.0, pos=5, got sz=0
PCI: Found 0000:00:03.0 [10b9/7101] 000000 00
pci_read_bases: device 0000:00:03.0, pos=0, got l=0
pci_read_bases: device 0000:00:03.0, pos=0, got sz=0
pci_read_bases: device 0000:00:03.0, pos=1, got l=0
pci_read_bases: device 0000:00:03.0, pos=1, got sz=0
pci_read_bases: device 0000:00:03.0, pos=2, got l=0
pci_read_bases: device 0000:00:03.0, pos=2, got sz=0
pci_read_bases: device 0000:00:03.0, pos=3, got l=0
pci_read_bases: device 0000:00:03.0, pos=3, got sz=0
pci_read_bases: device 0000:00:03.0, pos=4, got l=0
pci_read_bases: device 0000:00:03.0, pos=4, got sz=0
pci_read_bases: device 0000:00:03.0, pos=5, got l=0
pci_read_bases: device 0000:00:03.0, pos=5, got sz=0
PCI quirk: region 0800-083f claimed by ali7101 ACPI
PCI quirk: region 0600-061f claimed by ali7101 SMB
PCI: Found 0000:00:07.0 [10b9/1533] 000601 00
pci_read_bases: device 0000:00:07.0, pos=0, got l=0
pci_read_bases: device 0000:00:07.0, pos=0, got sz=0
pci_read_bases: device 0000:00:07.0, pos=1, got l=0
pci_read_bases: device 0000:00:07.0, pos=1, got sz=0
pci_read_bases: device 0000:00:07.0, pos=2, got l=0
pci_read_bases: device 0000:00:07.0, pos=2, got sz=0
pci_read_bases: device 0000:00:07.0, pos=3, got l=0
pci_read_bases: device 0000:00:07.0, pos=3, got sz=0
pci_read_bases: device 0000:00:07.0, pos=4, got l=0
pci_read_bases: device 0000:00:07.0, pos=4, got sz=0
pci_read_bases: device 0000:00:07.0, pos=5, got l=0
pci_read_bases: device 0000:00:07.0, pos=5, got sz=0
PCI: Found 0000:00:0a.0 [108e/abba] 000200 00
pci_read_bases: device 0000:00:0a.0, pos=0, got l=0
pci_read_bases: device 0000:00:0a.0, pos=0, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=1, got l=0
pci_read_bases: device 0000:00:0a.0, pos=1, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=2, got l=0
pci_read_bases: device 0000:00:0a.0, pos=2, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=3, got l=0
pci_read_bases: device 0000:00:0a.0, pos=3, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=4, got l=0
pci_read_bases: device 0000:00:0a.0, pos=4, got sz=0
pci_read_bases: device 0000:00:0a.0, pos=5, got l=0
pci_read_bases: device 0000:00:0a.0, pos=5, got sz=0
PCI: Found 0000:00:0b.0 [108e/abba] 000200 00
pci_read_bases: device 0000:00:0b.0, pos=0, got l=400000
pci_read_bases: device 0000:00:0b.0, pos=0, got sz=400000
  memory: device 0000:00:0b.0, pos=0, sz=0
pci_read_bases: device 0000:00:0b.0, pos=1, got l=0
pci_read_bases: device 0000:00:0b.0, pos=1, got sz=0
pci_read_bases: device 0000:00:0b.0, pos=2, got l=0
pci_read_bases: device 0000:00:0b.0, pos=2, got sz=0
pci_read_bases: device 0000:00:0b.0, pos=3, got l=0
pci_read_bases: device 0000:00:0b.0, pos=3, got sz=0
pci_read_bases: device 0000:00:0b.0, pos=4, got l=0
pci_read_bases: device 0000:00:0b.0, pos=4, got sz=0
pci_read_bases: device 0000:00:0b.0, pos=5, got l=0
pci_read_bases: device 0000:00:0b.0, pos=5, got sz=0
PCI: Found 0000:00:0d.0 [10b9/5229] 000101 00
pci_read_bases: device 0000:00:0d.0, pos=0, got l=901
pci_read_bases: device 0000:00:0d.0, pos=0, got sz=fffffff9
  io: device 0000:00:0d.0, pos=0, sz=7
  io: device 0000:00:0d.0, pos=0, start=900, flags=1
  final: device 0000:00:0d.0, pos=0, end=907, flags=101
pci_read_bases: device 0000:00:0d.0, pos=1, got l=919
pci_read_bases: device 0000:00:0d.0, pos=1, got sz=fffffffd
  io: device 0000:00:0d.0, pos=1, sz=3
  io: device 0000:00:0d.0, pos=1, start=918, flags=1
  final: device 0000:00:0d.0, pos=1, end=91b, flags=101
pci_read_bases: device 0000:00:0d.0, pos=2, got l=911
pci_read_bases: device 0000:00:0d.0, pos=2, got sz=fffffff9
  io: device 0000:00:0d.0, pos=2, sz=7
  io: device 0000:00:0d.0, pos=2, start=910, flags=1
  final: device 0000:00:0d.0, pos=2, end=917, flags=101
pci_read_bases: device 0000:00:0d.0, pos=3, got l=909
pci_read_bases: device 0000:00:0d.0, pos=3, got sz=fffffffd
  io: device 0000:00:0d.0, pos=3, sz=3
  io: device 0000:00:0d.0, pos=3, start=908, flags=1
  final: device 0000:00:0d.0, pos=3, end=90b, flags=101
pci_read_bases: device 0000:00:0d.0, pos=4, got l=921
pci_read_bases: device 0000:00:0d.0, pos=4, got sz=fffffff1
  io: device 0000:00:0d.0, pos=4, sz=f
  io: device 0000:00:0d.0, pos=4, start=920, flags=1
  final: device 0000:00:0d.0, pos=4, end=92f, flags=101
pci_read_bases: device 0000:00:0d.0, pos=5, got l=0
pci_read_bases: device 0000:00:0d.0, pos=5, got sz=0
PCI: Fixups for bus 0000:00
PCI: Bus scan for 0000:00 returning with max=00
PCI-IRQ: Routing bus[ 0] slot[ a] to INO[22]
PCI-IRQ: Routing bus[ 0] slot[ b] to INO[23]
PCI-IRQ: Routing bus[ 0] slot[ d] to INO[20]
PCI0(PBMA): Bus running at 33MHz
isa0: [serial] [bscbus -> (bscv) (i2c)] [rtc] [power] [flashprom]
ebus: No EBus's found.
power: Control reg at 000001fe02000800 ... powerd running.
usbcore: registered new driver usbfs
usbcore: registered new driver hub
NET: Registered protocol family 2
IP route cache hash table entries: 8192 (order: 3, 65536 bytes)
TCP established hash table entries: 32768 (order: 6, 524288 bytes)
TCP bind hash table entries: 16384 (order: 5, 262144 bytes)
TCP: Hash tables configured (established 32768 bind 16384)
TCP reno registered
audit: initializing netlink socket (disabled)
audit(1160070139.232:1): initialized
VFS: Disk quotas dquot_6.5.1
Dquot-cache hash table entries: 1024 (order 0, 8192 bytes)
Initializing Cryptographic API
io scheduler noop registered
io scheduler anticipatory registered (default)
io scheduler deadline registered
io scheduler cfq registered
Activating ISA DMA hang workarounds.
Console: switching to mono PROM 80x34
Real Time Clock Driver v1.12ac
[drm] Initialized drm 1.0.1 20051102
ttyS0 at MMIO 0x1fe020003f8 (irq = 7590784) is a 16550A
Console: ttyS0 (SU)
RAMDISK driver initialized: 16 RAM disks of 16384K size 1024 blocksize
loop: loaded (max 8 devices)
Uniform Multi-Platform E-IDE driver Revision: 7.00alpha2
ide: Assuming 33MHz system bus speed for PIO modes; override with idebus=xx
usbmon: debugfs is not available
usbcore: registered new driver usbhid
drivers/usb/input/hid-core.c: v2.6:USB HID core driver
mice: PS/2 mouse device common for all mice
TCP bic registered
NET: Registered protocol family 1
NET: Registered protocol family 17
RAMDISK: Compressed image found at block 0
VFS: Mounted root (ext2 filesystem).
cassini.c:v1.4 (1 July 2004)
cassini: Cannot find proper PCI device base address, aborting.
cassini: Cannot find proper PCI device base address, aborting.

[Index of Archives]     [Kernel Development]     [DCCP]     [Linux ARM Development]     [Linux]     [Photo]     [Yosemite Help]     [Linux ARM Kernel]     [Linux SCSI]     [Linux x86_64]     [Linux Hams]

  Powered by Linux