All of lore.kernel.org
 help / color / mirror / Atom feed
From: Pierre Ossman <drzeus-list@drzeus.cx>
To: Linus Torvalds <torvalds@osdl.org>
Cc: Alan Cox <alan@lxorguk.ukuu.org.uk>,
	LKML <linux-kernel@vger.kernel.org>,
	Russell King <rmk+lkml@arm.linux.org.uk>
Subject: [PATCH 2/2] ISA DMA suspend for x86_64
Date: Thu, 30 Jun 2005 19:58:19 +0200	[thread overview]
Message-ID: <42C432BB.407@drzeus.cx> (raw)
In-Reply-To: <42C3E3A4.3090305@drzeus.cx>

[-- Attachment #1: Type: text/plain, Size: 301 bytes --]

Reset the ISA DMA controller into a known state after a suspend. Primary
concern was reenabling the cascading DMA channel (4).

Signed-off-by: Pierre Ossman <drzeus@drzeus.cx>

Word of warning, I haven't tested this platform since I don't have any
x86_64 hardware. But it shouldn't differ from i386.


[-- Attachment #2: i8237-x86_64.patch --]
[-- Type: text/x-patch, Size: 2213 bytes --]

Index: linux-wbsd/arch/x86_64/kernel/i8237.c
===================================================================
--- linux-wbsd/arch/x86_64/kernel/i8237.c	(revision 0)
+++ linux-wbsd/arch/x86_64/kernel/i8237.c	(revision 0)
@@ -0,0 +1,67 @@
+/*
+ * i8237.c: 8237A DMA controller suspend functions.
+ *
+ * Written by Pierre Ossman, 2005.
+ */
+
+#include <linux/init.h>
+#include <linux/sysdev.h>
+
+#include <asm/dma.h>
+
+/*
+ * This module just handles suspend/resume issues with the
+ * 8237A DMA controller (used for ISA and LPC).
+ * Allocation is handled in kernel/dma.c and normal usage is
+ * in asm/dma.h.
+ */
+
+static int i8237A_resume(struct sys_device *dev)
+{
+	unsigned long flags;
+	int i;
+
+	flags = claim_dma_lock();
+
+	dma_outb(DMA1_RESET_REG, 0);
+	dma_outb(DMA2_RESET_REG, 0);
+
+	for (i = 0;i < 8;i++) {
+		set_dma_addr(i, 0x000000);
+		/* DMA count is a bit weird so this is not 0 */
+		set_dma_count(i, 1);
+	}
+
+	/* Enable cascade DMA or channel 0-3 won't work */
+	enable_dma(4);
+
+	release_dma_lock(flags);
+
+	return 0;
+}
+
+static int i8237A_suspend(struct sys_device *dev, pm_message_t state)
+{
+	return 0;
+}
+
+static struct sysdev_class i8237_sysdev_class = {
+	set_kset_name("i8237"),
+	.suspend = i8237A_suspend,
+	.resume = i8237A_resume,
+};
+
+static struct sys_device device_i8237A = {
+	.id	= 0,
+	.cls	= &i8237_sysdev_class,
+};
+
+static int __init i8237A_init_sysfs(void)
+{
+	int error = sysdev_class_register(&i8237_sysdev_class);
+	if (!error)
+		error = sysdev_register(&device_i8237A);
+	return error;
+}
+
+device_initcall(i8237A_init_sysfs);
Index: linux-wbsd/arch/x86_64/kernel/Makefile
===================================================================
--- linux-wbsd/arch/x86_64/kernel/Makefile	(revision 153)
+++ linux-wbsd/arch/x86_64/kernel/Makefile	(working copy)
@@ -7,7 +7,7 @@
 obj-y	:= process.o semaphore.o signal.o entry.o traps.o irq.o \
 		ptrace.o time.o ioport.o ldt.o setup.o i8259.o sys_x86_64.o \
 		x8664_ksyms.o i387.o syscall.o vsyscall.o \
-		setup64.o bootflag.o e820.o reboot.o quirks.o
+		setup64.o bootflag.o e820.o reboot.o quirks.o i8237.o

 obj-$(CONFIG_X86_MCE)         += mce.o
 obj-$(CONFIG_X86_MCE_INTEL)	+= mce_intel.o

  parent reply	other threads:[~2005-06-30 18:09 UTC|newest]

Thread overview: 22+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-05-28 13:38 ISA DMA controller hangs Pierre Ossman
2005-05-28 13:51 ` Alan Cox
2005-06-05  8:21   ` Pierre Ossman
2005-06-05 14:03     ` Pierre Ossman
2005-06-16 15:53       ` Pierre Ossman
2005-06-16 16:06         ` Russell King
2005-06-18  8:15           ` Pierre Ossman
2005-06-19 15:45             ` Russell King
2005-06-30  8:00           ` Pierre Ossman
2005-06-30 11:28             ` Alan Cox
2005-06-30 12:20               ` Pierre Ossman
2005-06-30 17:55                 ` [PATCH 1/2] ISA DMA suspend for i386 Pierre Ossman
2005-06-30 17:58                 ` Pierre Ossman [this message]
     [not found] <42987450.9000601@drzeus.cx.suse.lists.linux.kernel>
     [not found] ` <1117288285.2685.10.camel@localhost.localdomain.suse.lists.linux.kernel>
     [not found]   ` <42A2B610.1020408@drzeus.cx.suse.lists.linux.kernel>
     [not found]     ` <42A3061C.7010604@drzeus.cx.suse.lists.linux.kernel>
     [not found]       ` <42B1A08B.8080601@drzeus.cx.suse.lists.linux.kernel>
     [not found]         ` <20050616170622.A1712@flint.arm.linux.org.uk.suse.lists.linux.kernel>
     [not found]           ` <42C3A698.9020404@drzeus.cx.suse.lists.linux.kernel>
     [not found]             ` <1120130926.6482.83.camel@localhost.localdomain.suse.lists.linux.kernel>
     [not found]               ` <42C3E3A4.3090305@drzeus.cx.suse.lists.linux.kernel>
     [not found]                 ` <42C432BB.407@drzeus.cx.suse.lists.linux.kernel>
2005-07-01 10:53                   ` [PATCH 2/2] ISA DMA suspend for x86_64 Andi Kleen
2005-07-01 19:30                     ` Adam Belay
2005-07-02 17:30                     ` Pierre Ossman
2005-07-02 17:40                       ` Andi Kleen
2005-07-02 17:50                         ` Pierre Ossman
2005-07-02 18:27                           ` Andi Kleen
2005-07-02 22:04                             ` Pierre Ossman
2005-07-03 15:03                               ` Andi Kleen
2005-07-03 11:39                         ` Pavel Machek

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=42C432BB.407@drzeus.cx \
    --to=drzeus-list@drzeus.cx \
    --cc=alan@lxorguk.ukuu.org.uk \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rmk+lkml@arm.linux.org.uk \
    --cc=torvalds@osdl.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.