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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox