public inbox for linux-acpi@vger.kernel.org
 help / color / mirror / Atom feed
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 --]

  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