From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yoshinori Sato Subject: Re: H8/300 target support patch Date: Fri, 20 Feb 2004 01:12:34 +0900 Sender: linux-ide-owner@vger.kernel.org Message-ID: References: <200402151540.56377.bzolnier@elka.pw.edu.pl> <1076969377.1053.62.camel@gaston> <1077022554.1080.7.camel@gaston> Mime-Version: 1.0 (generated by SEMI 1.14.5 - "Awara-Onsen") Content-Type: text/plain; charset=US-ASCII Return-path: Received: from p062096.ppp.asahi-net.or.jp ([221.113.62.96]:43769 "EHLO mitou.ysato.dip.jp") by vger.kernel.org with ESMTP id S267342AbUBSQMj (ORCPT ); Thu, 19 Feb 2004 11:12:39 -0500 In-Reply-To: <1077022554.1080.7.camel@gaston> List-Id: linux-ide@vger.kernel.org To: Benjamin Herrenschmidt Cc: linux-ide@vger.kernel.org At Tue, 17 Feb 2004 23:55:54 +1100, Benjamin Herrenschmidt wrote: > > > > > 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. > > 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 + 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