Linux MIPS Architecture development
 help / color / mirror / Atom feed
From: Manish Lachwani <mlachwani@mvista.com>
To: linux-mips@linux-mips.org
Subject: IDE woos in BE mode 2.6 kernel
Date: Fri, 17 Sep 2004 12:18:37 -0700	[thread overview]
Message-ID: <414B388D.8060705@mvista.com> (raw)

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

Hello !

In response to Jun Suns mail sent on 06/24/2004

Anybody has tried IDE disks in big endian mode with 2.6 kernel?
I seem to have troubles with Malta board.

Current malta board has CONFIG_SWAP_IO_SPACE defined and therefore
all inw, inl and their friends are byte-swapped in BE mode.  As a
results all IDE IO ops (such as ide_inw, etc) do swapping too.

A quick experiement shows those IDE IO ops should not do swapping.
Anybody knows why?

Apparently fixing the above is not enough.  I either encountered
failure to read partition table or having DMA error.  Any clues
here?

I suppose this problem really should exist for other arches
with BE support.  Anybody knows how other arches deal with this?

Thanks.

Jun

---

The following patch gets the Malta to work well. However, this patch introduces board specific changes in the IDE subsystem.
This is not a final patch but maybe there can be a better approach to this issue

Thanks
Manish



[-- Attachment #2: patch-26-ide-malta --]
[-- Type: text/plain, Size: 1937 bytes --]

--- drivers/ide/ide-iops.c.orig	2004-09-16 19:20:52.000000000 -0700
+++ drivers/ide/ide-iops.c	2004-09-16 18:55:37.000000000 -0700
@@ -95,13 +95,23 @@
 	hwif->OUTBSYNC	= ide_outbsync;
 	hwif->OUTW	= ide_outw;
 	hwif->OUTL	= ide_outl;
+#if defined(CONFIG_MIPS_MALTA) && !defined(CONFIG_CPU_LITTLE_ENDIAN)
+	hwif->OUTSW	= malta_ide_outsw;
+	hwif->OUTSL	= malta_ide_outsl;
+#else
 	hwif->OUTSW	= ide_outsw;
 	hwif->OUTSL	= ide_outsl;
+#endif
 	hwif->INB	= ide_inb;
 	hwif->INW	= ide_inw;
 	hwif->INL	= ide_inl;
+#if defined(CONFIG_MIPS_MALTA) && !defined(CONFIG_CPU_LITTLE_ENDIAN)
+	hwif->INSW	= malta_ide_insw;
+	hwif->INSL	= malta_ide_insl;
+#else
 	hwif->INSW	= ide_insw;
 	hwif->INSL	= ide_insl;
+#endif
 }
 
 EXPORT_SYMBOL(default_hwif_iops);
--- include/asm-mips/ide.h.orig	2004-09-16 15:41:00.000000000 -0700
+++ include/asm-mips/ide.h	2004-09-16 18:12:26.000000000 -0700
@@ -20,6 +20,42 @@
 #define __ide_mm_outsw  ide_outsw
 #define __ide_mm_outsl  ide_outsl
 
+#if defined(CONFIG_MIPS_MALTA) && !defined(CONFIG_CPU_LITTLE_ENDIAN)
+extern const unsigned long mips_io_port_base;
+
+static inline void malta_ide_insw(unsigned long port, void *addr, unsigned int count)
+{
+	while (count--) {
+		*(u16 *)addr = *(volatile u16 *)(mips_io_port_base + port);
+		addr += 2;
+	}
+}
+
+static inline void malta_ide_outsw(unsigned long port, void *addr, unsigned int count)
+{
+	while (count--) {
+		*(volatile u16 *)(mips_io_port_base + (port)) = *(u16 *)addr;
+		addr += 2;
+	}
+}
+
+static inline void malta_ide_insl(unsigned long port, void *addr, unsigned int count)
+{
+	while (count--) {
+		*(u32 *)addr = *(volatile u32 *)(mips_io_port_base + port);
+		addr += 4;
+	}
+}
+
+static inline void malta_ide_outsl(unsigned long port, void *addr, unsigned int count)
+{
+	while (count--) {
+		*(volatile u32 *)(mips_io_port_base + (port)) = *(u32 *)addr;
+		addr += 4;
+	}
+}
+#endif
+
 #endif /* __KERNEL__ */
 
 #endif /* __ASM_IDE_H */

             reply	other threads:[~2004-09-17 19:18 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2004-09-17 19:18 Manish Lachwani [this message]
2004-09-18 14:19 ` IDE woos in BE mode 2.6 kernel Atsushi Nemoto
2004-09-24 23:40   ` Manish Lachwani
2004-09-25 14:41     ` Atsushi Nemoto
  -- strict thread matches above, loose matches on Subject: below --
2004-06-24 23:45 Jun Sun
2004-06-25  8:45 ` Geert Uytterhoeven

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=414B388D.8060705@mvista.com \
    --to=mlachwani@mvista.com \
    --cc=linux-mips@linux-mips.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