Re: yenta_socket hangs sager laptop in kernel 2.4.6

From: Alexey Kuznetsov (kuznet@ms2.inr.ac.ru)
Date: Mon Aug 20 2001 - 17:52:24 EST


Hello!

> Same problem here. I've spend some time today to figure what is going
> on. Workaround:
>
> ---------------------------- cut here -----------------------------
> --- 2.4.9/drivers/pcmcia/yenta.c.fix Mon Aug 20 11:02:23 2001
> +++ 2.4.9/drivers/pcmcia/yenta.c Mon Aug 20 14:21:33 2001
> @@ -729,7 +729,7 @@
> if (type & IORESOURCE_IO) {
> align = 1024;
> size = 256;
> - min = PCIBIOS_MIN_IO;
> + min = 0x4000 /* PCIBIOS_MIN_IO */;
> max = 0xffff;
> }
>
> ---------------------------- cut here -----------------------------

I do not know how to thank you... You saved my life. :-)
How did you guess this?

> Looks like a ressource conflict to me. The kernel gives I/O ranges to
> the cardbus socket which it thinks are free but which are *not* free for
> some reason (and probably used for APM stuff). BIOS bug? PCI quirks
> time?

The same hardware is here, Mitac M722. :-) BTW what bios is installed
on your one?

Anyway, Windows with the _same_ bios manages to guess and to reserve
a few of ports tagged as some obscure "motherboard resources":
230-233, 398-399, 4d0-4d1, 1000-103f(!), 1400-140f(!) and 3810-381f.
yenta_socket eats ones marked with !. At least 1400 is really critical,
it is interface to SM mode. So, probably, more correct fix
is something sort of:

--- mitac-quirk.c

#include <linux/config.h>
#include <linux/version.h>
#include <linux/module.h>

#include <linux/kernel.h>
#include <linux/ioport.h>
#include <linux/init.h>

static __init int mitac_init(void)
{
        /* No guesses */
        request_region(0x230, 4, "Mitac");

        /* Hmm... look at 0x64 @ 0:7.3, 0x398 is set there, no doubts.
         * What is this? */
        request_region(0x398, 2, "Mitac");

        /* 82440MX: ELCR 1&2, Edge/Level Control Regs */
        request_region(0x4D0, 2, "82440MX INT CNTRL");

        /* No guesses */
        request_region(0x1000, 0x40, "Mitac");

        /* SMBus: selected with bits 4:15 at 0x90 @ 0:7.3 */
        request_region(0x1400, 0x10, "82440MX SMBus");

        /* No guesses. */
        request_region(0x3810, 0x10, "Mitac");
        return 0;
}

module_init(mitac_init);

/*
 * Local variables:
 * compile-command: "gcc -DMODULE -D__KERNEL__ -I/usr/src/linux/include -Wall -Wstrict-prototypes -O2 -c mitac.c"
 * End:
 */

Alexey

-
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/



This archive was generated by hypermail 2b29 : Thu Aug 23 2001 - 21:00:44 EST