From: "Georg C. F. Greve" <greve-mXXj517/zsQ@public.gmane.org>
To: Nathan Bryant <nbryant-p32f3XyCuykqcZcGjlUOXw@public.gmane.org>
Cc: acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
shaohua.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org
Subject: Re: acpi-20040715: functional regression on ASUS M2N
Date: Wed, 04 Aug 2004 02:23:31 +0200 [thread overview]
Message-ID: <m3smb3wy2k.fsf@reason.gnu-hamburg> (raw)
In-Reply-To: <410E6F9C.2040904-p32f3XyCuykqcZcGjlUOXw@public.gmane.org> (Nathan Bryant's message of "Mon, 02 Aug 2004 12:45:16 -0400")
[-- Attachment #1.1: Type: text/plain, Size: 697 bytes --]
|| On Mon, 02 Aug 2004 12:45:16 -0400
|| Nathan Bryant <nbryant-p32f3XyCuykqcZcGjlUOXw@public.gmane.org> wrote:
>> I added your suggested patch to arch/i386/kernel/i8259.c and
>> recompiled. Problem persists, no difference I could tell.
nb> I don't know why the patch masks out the reserved
nb> interrupts. None of the other code that sets ELCR is masking out
nb> those bits, and it all works fine. Possibly some chipsets use
nb> different edge/level behavior for these, and the save code is
nb> forcing them back to edge. Does the problem persist if you go
nb> into arch/i386/kernel/i8259.c and change: [...]
Yup. Problem persists.
Just took a working, patched 2.6.7 and applied
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.2: fix-acpi-after-s3.patch --]
[-- Type: text/x-patch, Size: 2410 bytes --]
===== arch/i386/kernel/i8259.c 1.30 vs edited =====
--- 1.30/arch/i386/kernel/i8259.c Thu Apr 22 19:15:40 2004
+++ edited/arch/i386/kernel/i8259.c Tue Jun 29 15:35:28 2004
@@ -238,14 +238,39 @@
}
}
+static char irq_trigger[2];
+/**
+ * ELCR registers (0x4d0, 0x4d1) control edge/level of IRQ
+ */
+static void restore_ELCR(char *trigger)
+{
+ outb(trigger[0], 0x4d0);
+ outb(trigger[1], 0x4d1);
+}
+
+static void save_ELCR(char *trigger)
+{
+ /* IRQ 0,1,2,8,13 are marked as reserved */
+ trigger[0] = inb(0x4d0) & 0xF8;
+ trigger[1] = inb(0x4d1) & 0xDE;
+}
+
static int i8259A_resume(struct sys_device *dev)
{
init_8259A(0);
+ restore_ELCR(irq_trigger);
+ return 0;
+}
+
+static int i8259A_suspend(struct sys_device *dev, u32 state)
+{
+ save_ELCR(irq_trigger);
return 0;
}
static struct sysdev_class i8259_sysdev_class = {
set_kset_name("i8259"),
+ .suspend = i8259A_suspend,
.resume = i8259A_resume,
};
===== arch/x86_64/kernel/i8259.c 1.12 vs edited =====
--- 1.12/arch/x86_64/kernel/i8259.c Wed Apr 21 08:55:12 2004
+++ edited/arch/x86_64/kernel/i8259.c Tue Jun 29 15:36:08 2004
@@ -318,7 +318,7 @@
}
}
-void __init init_8259A(int auto_eoi)
+void init_8259A(int auto_eoi)
{
unsigned long flags;
@@ -360,6 +360,57 @@
spin_unlock_irqrestore(&i8259A_lock, flags);
}
+
+static char irq_trigger[2];
+/**
+ * ELCR registers (0x4d0, 0x4d1) control edge/level of IRQ
+ */
+static void restore_ELCR(char *trigger)
+{
+ outb(trigger[0], 0x4d0);
+ outb(trigger[1], 0x4d1);
+}
+
+static void save_ELCR(char *trigger)
+{
+ /* IRQ 0,1,2,8,13 are marked as reserved */
+ trigger[0] = inb(0x4d0) & 0xF8;
+ trigger[1] = inb(0x4d1) & 0xDE;
+}
+
+static int i8259A_resume(struct sys_device *dev)
+{
+ init_8259A(0);
+ restore_ELCR(irq_trigger);
+ return 0;
+}
+
+static int i8259A_suspend(struct sys_device *dev, u32 state)
+{
+ save_ELCR(irq_trigger);
+ return 0;
+}
+
+static struct sysdev_class i8259_sysdev_class = {
+ set_kset_name("i8259"),
+ .suspend = i8259A_suspend,
+ .resume = i8259A_resume,
+};
+
+static struct sys_device device_i8259A = {
+ .id = 0,
+ .cls = &i8259_sysdev_class,
+};
+
+static int __init i8259A_init_sysfs(void)
+{
+ int error = sysdev_class_register(&i8259_sysdev_class);
+ if (!error)
+ error = sysdev_register(&device_i8259A);
+ return error;
+}
+
+device_initcall(i8259A_init_sysfs);
/*
* IRQ2 is cascade interrupt to second interrupt controller
[-- Attachment #1.3: Type: text/plain, Size: 40 bytes --]
which is causing the problem and also
[-- Warning: decoded text below may be mangled, UTF-8 assumed --]
[-- Attachment #1.4: S3-fix.patch --]
[-- Type: text/x-patch, Size: 660 bytes --]
--- arch/i386/kernel/i8259.c.orig 2004-08-04 01:44:05.000000000 +0200
+++ arch/i386/kernel/i8259.c 2004-08-04 01:45:43.000000000 +0200
@@ -251,14 +251,18 @@ static void restore_ELCR(char *trigger)
static void save_ELCR(char *trigger)
{
/* IRQ 0,1,2,8,13 are marked as reserved */
- trigger[0] = inb(0x4d0) & 0xF8;
- trigger[1] = inb(0x4d1) & 0xDE;
+ trigger[0] = inb(0x4d0);
+ trigger[1] = inb(0x4d1);
}
static int i8259A_resume(struct sys_device *dev)
{
- init_8259A(0);
+ unsigned long flags;
+ init_8259A(0);
+
+ spin_lock_irqsave(&i8259A_lock, flags);
restore_ELCR(irq_trigger);
+ spin_unlock_irqrestore(&i8259A_lock, flags);
return 0;
}
[-- Attachment #1.5: Type: text/plain, Size: 659 bytes --]
which we hoped to be fixing the problem.
The machine goes into S3 and upon wake up shows same behaviour as
without "hopefully fixing patch": Crashes with "inu" in yellow on the
left in upper row visible. After poweroff, only "needle-pushed reset"
will bring it back to life.
So current ACPI is still showing functional regression on ASUS M2N.
Anyone other ideas? Anyone ready to solve the puzzle?
Regards,
Georg
--
Georg C. F. Greve <greve-mXXj517/zsQ@public.gmane.org>
Free Software Foundation Europe (http://fsfeurope.org)
Brave GNU World (http://brave-gnu-world.org)
[-- Attachment #2: Type: application/pgp-signature, Size: 188 bytes --]
next prev parent reply other threads:[~2004-08-04 0:23 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2004-08-02 16:45 acpi-20040715: functional regression on ASUS M2N Nathan Bryant
[not found] ` <410E6F9C.2040904-p32f3XyCuykqcZcGjlUOXw@public.gmane.org>
2004-08-04 0:23 ` Georg C. F. Greve [this message]
-- strict thread matches above, loose matches on Subject: below --
2004-08-31 8:45 Li, Shaohua
[not found] ` <B44D37711ED29844BEA67908EAF36F03AC6ACF-4yWAQGcml65pB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2004-08-31 13:38 ` Georg C. F. Greve
[not found] ` <m3zn4bbf6x.fsf-eMhNhoSsuh6q92djB/mqZw@public.gmane.org>
2004-09-01 15:16 ` Georg C. F. Greve
2004-08-09 8:10 Li, Shaohua
2004-08-05 18:49 Nathan Bryant
[not found] ` <4112814C.2070808-p32f3XyCuykqcZcGjlUOXw@public.gmane.org>
2004-08-06 11:21 ` Georg C. F. Greve
[not found] ` <m37jsc3424.fsf-glUV91rXKAHWIjgkaejU9x2eb7JE58TQ@public.gmane.org>
2004-08-06 13:36 ` Nathan Bryant
[not found] ` <41138944.3060309-p32f3XyCuykqcZcGjlUOXw@public.gmane.org>
2004-08-06 16:54 ` Georg C. F. Greve
[not found] ` <m3u0vgurzy.fsf-glUV91rXKAHWIjgkaejU9x2eb7JE58TQ@public.gmane.org>
2004-08-06 17:07 ` Nathan Bryant
[not found] ` <4113BAD5.1030909-p32f3XyCuykqcZcGjlUOXw@public.gmane.org>
2004-08-06 20:50 ` Georg C. F. Greve
2004-08-31 8:15 ` Georg C. F. Greve
2004-08-06 15:23 ` Matthew Garrett
2004-08-06 15:50 ` Nathan Bryant
2004-08-06 16:38 ` Nate Lawson
2004-08-06 19:32 ` Nathan Bryant
2004-07-27 12:24 Li, Shaohua
[not found] ` <B44D37711ED29844BEA67908EAF36F036BCD7C-4yWAQGcml65pB2pF5aRoyrfspsVTdybXVpNB7YpNyf8@public.gmane.org>
2004-07-27 13:42 ` Georg C. F. Greve
2004-07-19 23:31 Georg C. F. Greve
[not found] ` <m3d62rzi9a.fsf-eMhNhoSsuh6q92djB/mqZw@public.gmane.org>
2004-07-20 19:03 ` Matthew Garrett
[not found] ` <1090350197.4828.5.camel-myFlNLNQP+Q@public.gmane.org>
2004-07-21 8:17 ` Georg C. F. Greve
[not found] ` <m3acxthizw.fsf-eMhNhoSsuh6q92djB/mqZw@public.gmane.org>
2004-07-27 11:14 ` Georg C. F. Greve
[not found] ` <m3oem1u2gg.fsf-glUV91rXKAHWIjgkaejU9x2eb7JE58TQ@public.gmane.org>
2004-07-27 11:24 ` Matthew Garrett
[not found] ` <1090927462.4412.26.camel-myFlNLNQP+Q@public.gmane.org>
2004-07-27 13:40 ` Georg C. F. Greve
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=m3smb3wy2k.fsf@reason.gnu-hamburg \
--to=greve-mxxj517/zsq@public.gmane.org \
--cc=acpi-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org \
--cc=nbryant-p32f3XyCuykqcZcGjlUOXw@public.gmane.org \
--cc=shaohua.li-ral2JQCrhuEAvxtiuMwx3w@public.gmane.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.