All of lore.kernel.org
 help / color / mirror / Atom feed
From: Marc Singer <elf@buici.com>
To: u-boot@lists.denx.de
Subject: [U-Boot-Users] [PATCH] updated IDE patch for __LITTLE_ENDIAN CPUs
Date: Thu, 14 Aug 2003 13:09:11 -0700	[thread overview]
Message-ID: <20030814200910.GA22712@buici.com> (raw)
In-Reply-To: <20030814195640.CCF04C59E4@atlas.denx.de>

The comment is CHANGELOG is corrected and the C++ comment removed.
-------------- next part --------------
diff -ruN --exclude '*.o' --exclude='*.map' --exclude '*~' --exclude '*-orig' --exclude=.depend --exclude=configx.mk --exclude='*.srec' --exclude='*.a' u-boot-0.4.5/CHANGELOG u-boot/CHANGELOG
--- u-boot-0.4.5/CHANGELOG	2003-08-07 15:18:11.000000000 -0700
+++ u-boot/CHANGELOG	2003-08-14 13:02:49.000000000 -0700
@@ -2,6 +2,9 @@
 Changes for U-Boot 0.4.5:
 ======================================================================
 
+* Patch by Marc Singer, 14 Aug 2003
+  - IDE drivers changes to support little endian CPUs.
+
 * Update for TQM board defaults:
   disable clocks_in_mhz, enable boot count limit
 
diff -ruN --exclude '*.o' --exclude='*.map' --exclude '*~' --exclude '*-orig' --exclude=.depend --exclude=configx.mk --exclude='*.srec' --exclude='*.a' u-boot-0.4.5/common/cmd_ide.c u-boot/common/cmd_ide.c
--- u-boot-0.4.5/common/cmd_ide.c	2003-07-01 14:07:07.000000000 -0700
+++ u-boot/common/cmd_ide.c	2003-08-14 11:55:12.000000000 -0700
@@ -42,7 +42,10 @@
 #ifdef CONFIG_STATUS_LED
 # include <status_led.h>
 #endif
-#ifdef __I386__
+#if defined (__I386__)
+#include <asm/io.h>
+#endif
+#if defined (__ARM__)
 #include <asm/io.h>
 #endif
 
@@ -120,6 +123,10 @@
 #define	ATA_CURR_BASE(dev)	(CFG_ATA_BASE_ADDR+ide_bus_offset[IDE_BUS(dev)])
 #endif
 
+#if defined (__ARM__)
+#define ATA_CURR_BASE(dev)	(CFG_ATA_BASE_ADDR)
+#endif
+
 #ifndef CONFIG_AMIGAONEG3SE
 static int	    ide_bus_ok[CFG_IDE_MAXBUS];
 #else
@@ -559,7 +566,7 @@
 			continue;
 		}
 #endif
-		printf ("Bus %d: ", bus);
+		printf ("Bus %d (dev %x):", bus, dev);
 
 		ide_bus_ok[bus] = 0;
 
@@ -759,6 +766,16 @@
 	printf ("ide_outb: 0x%08lx <== 0x%02x\n", ATA_CURR_BASE(dev)+port, val);
 #endif
 }
+#elif defined (__ARM__)
+static void __inline__
+ide_outb(int dev, int port, unsigned char val)
+{
+	volatile u32* p = (void*) ATA_CURR_BASE(dev)+(port << 2);
+	*p = val;
+#if 0
+	printf ("ide_outb: 0x%08x <== 0x%02x\n", (u32) p, val);
+#endif
+}
 #else	/* ! __PPC__ */
 static void __inline__
 ide_outb(int dev, int port, unsigned char val)
@@ -781,11 +798,23 @@
 #endif
 	return (val);
 }
+#elif defined (__ARM__)
+static unsigned char __inline__
+ide_inb(int dev, int port)
+{
+	volatile u32* p = (volatile void*)(ATA_CURR_BASE (dev) + (port << 2));
+	u16 val = *p;
+
+#if 0
+	printf ("ide_inb_arm: 0x%08x ==> 0x%02x\n", (u32) p, val);
+#endif
+	return ((uchar)val);
+}
 #else	/* ! __PPC__ */
 static unsigned char __inline__
 ide_inb(int dev, int port)
 {
-	return inb(port);
+	return inb (port);
 }
 #endif	/* __PPC__ */
 
@@ -866,7 +895,18 @@
 		*dbuf++ = *pbuf;
 	}
 }
-#else	/* ! __PPC__ */
+#elif defined (__ARM__)
+static void
+input_data(int dev, ulong *sect_buf, int words)
+{
+	volatile u32* p = (volatile void*)(ATA_CURR_BASE (dev));
+	u16* rg = (void*) sect_buf;
+	while (words--)
+	  *rg++ = (*p)&0xffff;
+
+	  /*	insw(ATA_DATA_REG, sect_buf, words << 1); */
+}
+#else
 static void
 input_data(int dev, ulong *sect_buf, int words)
 {
@@ -1055,8 +1095,15 @@
 	}
 #endif /* CONFIG_ATAPI */
 
-	/* swap shorts */
+	/* Oddly, the IDE interface stores the capacity datum in LSB
+	 * order even though the identification strings are stored in MSB
+	 * order. [Compact Flash spec 2.0, section 6.2.1.6,
+	 * Identify Drive Command] */
+#if defined (__BIG_ENDIAN)
 	dev_desc->lba = (iop->lba_capacity << 16) | (iop->lba_capacity >> 16);
+#else
+	dev_desc->lba = iop->lba_capacity;
+#endif
 	/* assuming HD */
 	dev_desc->type=DEV_TYPE_HARDDISK;
 	dev_desc->blksz=ATA_BLOCKSIZE;
@@ -1230,24 +1277,32 @@
  */
 static void ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len)
 {
-	int start,end;
+#if defined (__LITTLE_ENDIAN) || defined (__PPC__)
+	/* Identity strings are stored in MSB order.  Swap them on LSB
+	   machines to make them look right.
+
+	   We also have to do this on PPC because it uses the function
+	   input_swap_data to reorder all input data.  In the case of
+	   the identity strings, it is reversing the byte order.  */
 
-	start=0;
-	while (start<len) {
-		if (src[start]!=' ')
-			break;
-		start++;
-	}
-	end=len-1;
-	while (end>start) {
-		if (src[end]!=' ')
-			break;
-		end--;
+	{
+	  int i = len/2;
+	  while (i--)
+	    ((u16*) src)[i] = (((u16*) src)[i] >> 8) | (((u16*) src)[i] << 8);
 	}
-	for ( ; start<=end; start++) {
-		*dest++=src[start];
+#endif
+
+	while (*src == ' ' || *src == 0) {
+	  ++src;
+	  --len;
 	}
-	*dest='\0';
+
+	while ((len && src[len - 1] == ' ') || src[len - 1] == 0)
+	  --len;
+
+	while (len--)
+	  *dest++ = *src++;
+	*dest = 0;
 }
 
 /* ------------------------------------------------------------------------- */

      reply	other threads:[~2003-08-14 20:09 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2003-08-14 18:59 [U-Boot-Users] [PATCH] updated IDE patch for __LITTLE_ENDIAN CPUs Marc Singer
2003-08-14 19:56 ` Wolfgang Denk
2003-08-14 20:09   ` Marc Singer [this message]

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=20030814200910.GA22712@buici.com \
    --to=elf@buici.com \
    --cc=u-boot@lists.denx.de \
    /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.