* [PATCH] H8/300 new ide driver support
@ 2004-05-21 6:31 Yoshinori Sato
0 siblings, 0 replies; only message in thread
From: Yoshinori Sato @ 2004-05-21 6:31 UTC (permalink / raw)
To: Linus Torvalds; +Cc: linux kernel Mailing List
- new config items
- interface setup
- io cleanup
--
Yoshinori Sato
<ysato@users.sourceforge.jp>
diff -Nur linux-2.6.6-bk4/arch/h8300/Kconfig.ide linux-2.6.6-h8300/arch/h8300/Kconfig.ide
--- linux-2.6.6-bk4/arch/h8300/Kconfig.ide 2004-05-11 14:30:44.000000000 +0900
+++ linux-2.6.6-h8300/arch/h8300/Kconfig.ide 2004-05-21 02:44:25.000000000 +0900
@@ -1,23 +1,44 @@
# uClinux H8/300 Target Board Selection Menu (IDE)
+if (H8300H_AKI3068NET)
menu "IDE Extra configuration"
config H8300_IDE_BASE
- hex "IDE regitser base address"
+ hex "IDE register base address"
depends on IDE
+ default 0
help
IDE registers base address
config H8300_IDE_ALT
- hex "IDE regitser alternate address"
+ hex "IDE register alternate address"
depends on IDE
+ default 0
help
IDE alternate registers address
config H8300_IDE_IRQ
int "IDE IRQ no"
depends on IDE
+ default 0
help
- IDE I/F using IRQ no
-
+ IDE use IRQ no
endmenu
+endif
+
+if (H8300H_H8MAX)
+config H8300_IDE_BASE
+ hex
+ depends on IDE
+ default 0x200000
+
+config H8300_IDE_ALT
+ hex
+ depends on IDE
+ default 0x60000c
+
+config H8300_IDE_IRQ
+ int
+ depends on IDE
+ default 5
+endif
diff -Nur linux-2.6.6-bk4/arch/h8300/kernel/setup.c linux-2.6.6-h8300/arch/h8300/kernel/setup.c
--- linux-2.6.6-bk4/arch/h8300/kernel/setup.c 2004-05-11 14:30:44.000000000 +0900
+++ linux-2.6.6-h8300/arch/h8300/kernel/setup.c 2004-05-14 21:44:12.000000000 +0900
@@ -40,16 +40,12 @@
#if defined(__H8300H__)
#define CPU "H8/300H"
+#include <asm/regs306x.h>
#endif
#if defined(__H8300S__)
#define CPU "H8S"
-#endif
-
-#if defined(CONFIG_INTELFLASH)
-#define BLKOFFSET 512
-#else
-#define BLKOFFSET 0
+#include <asm/regs267x.h>
#endif
#define STUBSIZE 0xc000;
@@ -58,8 +54,6 @@
unsigned long memory_start;
unsigned long memory_end;
-struct task_struct *_current_task;
-
char command_line[512];
char saved_command_line[512];
@@ -107,12 +101,11 @@
memory_start = (unsigned long) &_ramstart;
/* allow for ROMFS on the end of the kernel */
- if (memcmp((void *)(memory_start + BLKOFFSET), "-rom1fs-", 8) == 0) {
+ if (memcmp((void *)memory_start, "-rom1fs-", 8) == 0) {
#if defined(CONFIG_BLK_DEV_INITRD)
- initrd_start = memory_start += BLKOFFSET;
+ initrd_start = memory_start;
initrd_end = memory_start += be32_to_cpu(((unsigned long *) (memory_start))[2]);
#else
- memory_start += BLKOFFSET;
memory_start += be32_to_cpu(((unsigned long *) memory_start)[2]);
#endif
}
@@ -190,6 +183,16 @@
*/
paging_init();
h8300_gpio_init();
+#if defined(CONFIG_H8300_AKI3068NET) && defined(CONFIG_IDE)
+ {
+#define AREABIT(addr) (1 << (((addr) >> 21) & 7))
+ /* setup BSC */
+ volatile unsigned char *abwcr = (volatile unsigned char *)ABWCR;
+ volatile unsigned char *cscr = (volatile unsigned char *)CSCR;
+ *abwcr &= ~(AREABIT(CONFIG_H8300_IDE_BASE) | AREABIT(CONFIG_H8300_IDE_ALT));
+ *cscr |= (AREABIT(CONFIG_H8300_IDE_BASE) | AREABIT(CONFIG_H8300_IDE_ALT)) | 0x0f;
+ }
+#endif
#ifdef DEBUG
printk(KERN_DEBUG "Done setup_arch\n");
#endif
diff -ur linux-2.6.6-bk4/include/asm-h8300/io.h linux-2.6.6-h8300/include/asm-h8300/io.h
--- linux-2.6.6-bk4/include/asm-h8300/io.h 2004-05-21 02:17:29.000000000 +0900
+++ linux-2.6.6-h8300/include/asm-h8300/io.h 2004-05-21 14:09:24.000000000 +0900
@@ -33,21 +33,29 @@
* swap functions are sometimes needed to interface little-endian hardware
*/
-/*
- * CHANGES
- *
- * 020325 Added some #define's for the COBRA5272 board
- * (hede)
- */
-
static inline unsigned short _swapw(volatile unsigned short v)
{
- return ((v << 8) | (v >> 8));
+ unsigned short r,t;
+ __asm__("mov.b %w2,%x1\n\t"
+ "mov.b %x2,%w1\n\t"
+ "mov.w %1,%0"
+ :"=r"(r),"=r"(t)
+ :"r"(v));
+ return r;
}
static inline unsigned int _swapl(volatile unsigned long v)
{
- return ((v << 24) | ((v & 0xff00) << 8) | ((v & 0xff0000) >> 8) | (v >> 24));
+ unsigned int r,t;
+ __asm__("mov.b %w2,%x1\n\t"
+ "mov.b %x2,%w1\n\t"
+ "mov.w %f1,%e0\n\t"
+ "mov.w %e2,%f1\n\t"
+ "mov.b %w1,%x0\n\t"
+ "mov.b %x1,%w0"
+ :"=r"(r),"=r"(t)
+ :"r"(v));
+ return r;
}
#define readb(addr) \
@@ -96,7 +104,7 @@
volatile unsigned short *ap = (volatile unsigned short *) addr;
unsigned short *bp = (unsigned short *) buf;
while (len--)
- *ap = *bp++;
+ *ap = _swapw(*bp++);
}
static inline void io_outsl(unsigned int addr, const void *buf, int len)
@@ -104,7 +112,7 @@
volatile unsigned int *ap = (volatile unsigned int *) addr;
unsigned long *bp = (unsigned long *) buf;
while (len--)
- *ap = *bp++;
+ *ap = _swapl(*bp++);
}
static inline void io_insb(unsigned int addr, void *buf, int len)
@@ -129,7 +137,7 @@
volatile unsigned short *ap = (volatile unsigned short *) addr;
unsigned short *bp = (unsigned short *) buf;
while (len--)
- *bp++ = *ap;
+ *bp++ = _swapw(*ap);
}
static inline void io_insl(unsigned int addr, void *buf, int len)
@@ -137,7 +145,7 @@
volatile unsigned int *ap = (volatile unsigned int *) addr;
unsigned long *bp = (unsigned long *) buf;
while (len--)
- *bp++ = *ap;
+ *bp++ = _swapl(*ap);
}
/*
^ permalink raw reply [flat|nested] only message in thread
only message in thread, other threads:[~2004-05-21 6:32 UTC | newest]
Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2004-05-21 6:31 [PATCH] H8/300 new ide driver support Yoshinori Sato
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.