Re: H8/300 target support patch
From: Yoshinori Sato <ysato@users.sourceforge.jp>
Date: 2004-02-19 16:12:39
At Tue, 17 Feb 2004 23:55:54 +1100, Benjamin Herrenschmidt wrote:
quoted
quoted
Your IDE bus is flipped backward ? The next one who do that should lose all rights to do any kind of HW design... Or is it a big endian platform ? In this case, use normal flipping inw/outw for IOs and non-flipping for stream IOs (insw/outsw)This architecture is big endian.A big endian architecture needs the standard inx/outx macros to be byteswapped, but _not_ the insw/outsw. That should be all done properly from the standard macros in your asm/io.h, you should _not_ have to byteswap normal transfers.
I appreciated incorrectly.
quoted
It was my misunderstanding that did not use asm/io.h. It is the patch which it corrected to use it. h8300/h8_ide_iops.h becomes needless.Ben.
I corrected it.
--- aki3068_ide.c.orig 2004-02-16 22:48:00.000000000 +0900
+++ aki3068_ide.c 2004-02-20 00:03:49.000000000 +0900@@ -40,7 +40,7 @@ #define IDE_SELECT 0x0C #define IDE_STATUS 0x0E -static void h8300_ide_ports(hw_regs_t *hw, unsigned long ioaddr) +static void __init h8300_ide_ports(hw_regs_t *hw, unsigned long ioaddr) { hw->io_ports[IDE_DATA_OFFSET] = ioaddr + IDE_DATA; hw->io_ports[IDE_ERROR_OFFSET] = ioaddr + IDE_ERROR;
@@ -70,12 +70,3 @@ if (ide_register_hw(&hw, &hwif) != -1) h8300_hwif_iops(hwif); } - -void __init h8300_ide_print_resource(char *name, hw_regs_t *hw) -{ - printk("%s at 0x%08x-0x%08x,0x%08x on irq %d", name, - (unsigned int)hw->io_ports[IDE_DATA_OFFSET], - (unsigned int)hw->io_ports[IDE_DATA_OFFSET]+15, - (unsigned int)hw->io_ports[IDE_CONTROL_OFFSET], - hw->irq); -} --- h8max_ide.c.orig 2004-02-17 19:45:46.000000000 +0900 +++ h8max_ide.c 2004-02-19 22:56:41.000000000 +0900
@@ -39,7 +39,7 @@ #define IDE_SELECT 0x0C #define IDE_STATUS 0x0E -static void h8300_ide_ports(hw_regs_t *hw, unsigned long ioaddr) +static void __init h8300_ide_ports(hw_regs_t *hw, unsigned long ioaddr) { hw->io_ports[IDE_DATA_OFFSET] = ioaddr + IDE_DATA; hw->io_ports[IDE_ERROR_OFFSET] = ioaddr + IDE_ERROR;
@@ -65,12 +65,3 @@ if (ide_register_hw(&hw, &hwif) != -1) h8300_hwif_iops(hwif); } - -void __init h8300_ide_print_resource(char *name, hw_regs_t *hw) -{ - printk("%s at 0x%08x-0x%08x,0x%08x on irq %d", name, - (unsigned int)hw->io_ports[IDE_DATA_OFFSET], - (unsigned int)hw->io_ports[IDE_DATA_OFFSET]+15, - (unsigned int)hw->io_ports[IDE_CONTROL_OFFSET], - hw->irq); -} --- h8_ide_iops.h.orig 2004-02-19 23:54:06.000000000 +0900 +++ h8_ide_iops.h 2004-02-19 23:54:58.000000000 +0900
@@ -1,28 +1,30 @@ +/* H8/300 IDE I/F I/O operations */ + +#include <asm/io.h> + static void __ide_outb(u8 d, unsigned long a) { - *(unsigned short *)a = d; + outb(d,a); } static void __ide_outbsync(ide_drive_t *drive, u8 d, unsigned long a) { - *(unsigned short *)a = d; + outb(d,a); } static u8 __ide_inb(unsigned long a) { - return *(unsigned short *)a; + return inb(a); } static void __ide_outw(u16 d, unsigned long a) { - *(unsigned short *)a = (d << 8) | (d >> 8); + outw(d,a); } static u16 __ide_inw(unsigned long a) { - unsigned short d; - d = *(unsigned short *)a; - return (d << 8) | (d >> 8); + return inw(a); } static void __ide_outl(u32 d, unsigned long a)
@@ -36,27 +38,19 @@ static void __ide_outsw(unsigned long addr, void *buf, u32 len) { - unsigned volatile short *ap = (unsigned volatile short *)addr; unsigned short *bp = (unsigned short *)buf; - unsigned short d; - while(len--) { - d = *bp++; - *ap = (d << 8) | (d >> 8); - } + while(len--) + outw(*bp++,addr); } static void __ide_insw(unsigned long addr, void *buf, u32 len) { - unsigned volatile short *ap = (unsigned volatile short *)addr; unsigned short *bp = (unsigned short *)buf; - unsigned short d; - while(len--) { - d = *ap; - *bp++ = (d << 8) | (d >> 8); - } + while(len--) + *bp++ = inw(addr); } -static void h8300_hwif_iops(ide_hwif_t *hwif) +static void __init h8300_hwif_iops(ide_hwif_t *hwif) { hwif->OUTB = __ide_outb; hwif->OUTBSYNC = __ide_outbsync;
--
Yoshinori Sato
<ysato@users.sourceforge.jp>