Problem with yenta.c in 2.4.12

Jan Marek (jmarek@jcu.cz)
Thu, 1 Nov 2001 13:47:42 +0100


Hallo l-k,

I have problem with PCMCIA kernel package: when i modprobe-ing
yenta_socket.o, kernel freeze and I get no oops: simply nothing.
I can't use Magic-SysRQ: keyboard is freeze too...

Kernel:
2.4.12 (last working kernel was 2.4.10) with xfs support from CVS
sgi on i386 architecture, but when I get vanilla kernel, I got
the same behavior...

Compiler:
gcc -v
Reading specs from /usr/lib/gcc-lib/i386-linux/2.95.4/specs
gcc version 2.95.4 20011006 (Debian prerelease)

HW: Compaq Armada M300, lspci:

00:00.0 Host bridge: Intel Corporation 440BX/ZX - 82443BX/ZX Host bridge (AGP disabled) (rev 03)
00:04.0 CardBus bridge: Texas Instruments PCI1211
00:05.0 VGA compatible controller: ATI Technologies Inc 3D Rage LT Pro (rev dc)
00:07.0 Bridge: Intel Corporation 82371AB PIIX4 ISA (rev 02)
00:07.1 IDE interface: Intel Corporation 82371AB PIIX4 IDE (rev 01)
00:07.2 USB Controller: Intel Corporation 82371AB PIIX4 USB (rev 01)
00:07.3 Bridge: Intel Corporation 82371AB PIIX4 ACPI (rev 03)
00:08.0 Multimedia audio controller: ESS Technology ES1978 Maestro 2E (rev 10)
00:09.0 Communication controller: Lucent Microelectronics WinModem 56k (rev 01)

Cardbus bridge share IRQ 11 with VGA controller

I tried find, where is problem, then I added some lines to
yenta.c (yes, some are stupid, I know it ;-))):

--- cut of drivers/pcmcia/yenta.c
/*
* Initialize the standard cardbus registers
*/
static void yenta_config_init(pci_socket_t *socket)
{
u16 bridge;
struct pci_dev *dev = socket->dev;

printk("yenta_config_init:\n");
pci_set_power_state(socket->dev, 0);
printk("- after pci_set_power_state\n");

config_writel(socket, CB_LEGACY_MODE_BASE, 0);
printk("- after 1st config_writel\n");
config_writel(socket, PCI_BASE_ADDRESS_0, dev->resource[0].start);
printk("- after 2nd config_writel\n");
config_writew(socket, PCI_COMMAND,
PCI_COMMAND_IO |
PCI_COMMAND_MEMORY |
PCI_COMMAND_MASTER |
PCI_COMMAND_WAIT);
printk("- after config_writew\n");

/* MAGIC NUMBERS! Fixme */
config_writeb(socket, PCI_CACHE_LINE_SIZE, L1_CACHE_BYTES / 4);
printk("- after 1st config_writeb\n");
config_writeb(socket, PCI_LATENCY_TIMER, 168);
printk("- after 2nd config_writeb\n");
config_writel(socket, PCI_PRIMARY_BUS,
(176 << 24) | /* sec. latency timer */
(dev->subordinate->subordinate << 16) | /* subordinate bus */
(dev->subordinate->secondary << 8) | /* secondary bus */
dev->subordinate->primary); /* primary bus */
printk("- after config_writel\n");

/*
* Set up the bridging state:
* - enable write posting.
* - memory window 0 prefetchable, window 1 non-prefetchable
* - PCI interrupts enabled if a PCI interrupt exists..
*/
bridge = config_readw(socket, CB_BRIDGE_CONTROL);
printk("- after bridge = config_readw\n");
bridge &= ~(CB_BRIDGE_CRST | CB_BRIDGE_PREFETCH1 | CB_BRIDGE_INTR | CB_BRIDGE_ISAEN | CB_BRIDGE_VGAEN);
printk("- after bridge &= ~(...\n");
bridge |= CB_BRIDGE_PREFETCH0 | CB_BRIDGE_POSTEN;
printk("- after bridge |= CB...\n");
if (!socket->cb_irq)
bridge |= CB_BRIDGE_INTR;
printk("- after if...\n");
config_writew(socket, CB_BRIDGE_CONTROL, bridge);
printk("- after config_writew\n");

exca_writeb(socket, I365_GBLCTL, 0x00);
printk("- after 1st exca_writeb\n");
exca_writeb(socket, I365_GENCTL, 0x00);
printk("- after 2nd exca_writeb\n");

/* Redo card voltage interrogation */
cb_writel(socket, CB_SOCKET_FORCE, CB_CVSTEST);
printk("- after last cb_writel\n");
}

/* Called at resume and initialization events */
static int yenta_init(pci_socket_t *socket)
{
yenta_config_init(socket);
printk("yenta_config_init OK!\n");
yenta_clear_maps(socket);
return 0;
}
--- end of part of drivers/pcmcia/yenta.c

but I got strange listing: the last message was:
- after last cb_writel
!!!

This is the repeatable behavior.

I mean, that in some function must be overwritten exit address of
function yenta_config_init()?

I'm sorry, but I'm not subscribed in l-k, can you send CC to me?
Thank you. I can send other information od demand ;-).

Sincerely
Jan Marek

-- 
Ing. Jan Marek
University of South Bohemia
Academic Computer Centre
Phone: +420-38-7772080
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/