From: "Tommy S. Christensen" <tommy.christensen@eicon.com>
To: Barry Wu <wqb123@yahoo.com>
Cc: linux-mips@oss.sgi.com
Subject: Re: mips ide disk dma problem
Date: Mon, 13 Aug 2001 21:38:24 +0200 [thread overview]
Message-ID: <3B782CB0.AA24C7C8@eicon.com> (raw)
In-Reply-To: 20010813130729.37581.qmail@web13908.mail.yahoo.com
Barry Wu wrote:
> I meet problems about mips ide disk. I find dma mode
> is different from other platform. We have to use
> dma_cache_wback_inv and vtonocache functions to work
> under DMA mode, I read pcnet32 ethernet driver,
> it works like that. I do not know if I have to support
> ide disk dma, what I have to do?
Some MIPS'ification is needed to handle the caches.
You can try the patch below to drivers/block/ide-dma.c.
I don't know about your IDE controller (our board have
a CMD PCI-648), but it may need some special handling also.
-Tommy
--- ide-dma.c.old Tue Aug 31 09:46:14 1999
+++ ide-dma.c Mon Aug 13 20:51:57 2001
@@ -176,6 +176,13 @@
#endif
unsigned int count = 0;
+#if defined(__mips__)
+ /* MIPS: We access the dmatable through uncached addresses, so that it
+ * will be read correctly by the controller. The alternative is to flush
+ * the appropriate range at the end of this procedure.
+ */
+ table = (unsigned int *)vtonocache(table);
+#endif
do {
/*
* Determine addr and size of next buffer area. We assume that
@@ -197,6 +204,10 @@
size += bh->b_size;
}
}
+#if defined(__mips__)
+ /* MIPS: We need to flush the cache */
+ dma_cache_wback_inv(bus_to_virt(addr), size);
+#endif
/*
* Fill in the dma table, without crossing any 64kB boundaries.
* Most hardware requires 16-bit alignment of all blocks,
@@ -401,6 +412,10 @@
dmatable += (PRD_ENTRIES * PRD_BYTES);
leftover -= (PRD_ENTRIES * PRD_BYTES);
hwif->dmaproc = &ide_dmaproc;
+#if defined(__mips__)
+ /* Make sure no part of the dmatable is in the cache */
+ dma_cache_wback_inv(hwif->dmatable, PRD_ENTRIES * PRD_BYTES);
+#endif
if (hwif->chipset != ide_trm290) {
byte dma_stat = inb(dma_base+2);
@@ -430,6 +445,9 @@
}
}
if (dma_base) {
+#if defined(__mips__)
+ dma_base = KSEG1ADDR(dma_base);
+#endif
if (extra) /* PDC20246 & HPT343 */
request_region(dma_base+16, extra, name);
dma_base += hwif->channel ? 8 : 0;
next prev parent reply other threads:[~2001-08-13 19:37 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2001-08-13 13:07 mips ide disk dma problem Barry Wu
2001-08-13 19:38 ` Tommy S. Christensen [this message]
2001-08-14 5:17 ` Ralf Baechle
2001-08-14 8:12 ` Tommy S. Christensen
2001-08-14 9:03 ` Ralf Baechle
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=3B782CB0.AA24C7C8@eicon.com \
--to=tommy.christensen@eicon.com \
--cc=linux-mips@oss.sgi.com \
--cc=wqb123@yahoo.com \
/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.