[U-Boot-Users] Endian patch for AU1x00

Attached is an patch to cmd_ide.c that fixes endian issues for the AU1x00 family of processors. Previously these processors could only read Compact Flash cards (and perhaps other IDE devices) if the drive was byte swapped from what is written by a standard PC. With this patch they can now read them without the bytes needing to be swapped.
Ed Okerson

Dear Ed,
in message Pine.LNX.4.44.0312071846560.17468-200000@dallas.texasconnect.net you wrote:
Attached is an patch to cmd_ide.c that fixes endian issues for the AU1x00 family of processors. Previously these processors could only read Compact Flash cards (and perhaps other IDE devices) if the drive was byte swapped from what is written by a standard PC. With this patch they can now read them without the bytes needing to be swapped.
Thanks (and sorry for the delay).
--- ../../u-boot/common/cmd_ide.c 2003-11-07 05:42:26.000000000 -0800 +++ cmd_ide.c 2003-11-30 13:13:53.000000000 -0800 @@ -172,7 +172,7 @@ static void __inline__ ide_outb(int dev, static unsigned char __inline__ ide_inb(int dev, int port); static void input_data(int dev, ulong *sect_buf, int words); static void output_data(int dev, ulong *sect_buf, int words); -static void ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len); +static void ident_cpy (unsigned char *dest, unsigned char *src, unsigned int len, int swap);
...
- ident_cpy (dev_desc->revision, iop->fw_rev, sizeof(dev_desc->revision)); - ident_cpy (dev_desc->vendor, iop->model, sizeof(dev_desc->vendor)); - ident_cpy (dev_desc->product, iop->serial_no, sizeof(dev_desc->product)); - +#if defined(__LITTLE_ENDIAN) + ident_cpy (dev_desc->revision, iop->fw_rev, sizeof(dev_desc->revision), 1); + ident_cpy (dev_desc->vendor, iop->model, sizeof(dev_desc->vendor), 1); +#else + ident_cpy (dev_desc->revision, iop->fw_rev, sizeof(dev_desc->revision), 0); + ident_cpy (dev_desc->vendor, iop->model, sizeof(dev_desc->vendor), 0); +#endif + ident_cpy (dev_desc->product, iop->serial_no, sizeof(dev_desc->product), 0);
It seems to me that all information about endianess of the system is (and has to be) know at compile time. In this case we should #ifdef the code instead of passing additional (constant, known at compile time) parameters.
Please re-work the patch.
Best regards, and a Happy New Year!
Wolfgang Denk
participants (2)
-
Ed Okerson
-
Wolfgang Denk