From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeff Angielski Date: Wed, 17 Mar 2010 15:18:10 -0400 Subject: [U-Boot] cross compiling fw_printenv on big endian In-Reply-To: References: <4B9FD92E.7000400@theptrgroup.com> <20100317115731.3D1375086C@gemini.denx.de> <4BA0F0FA.8030701@theptrgroup.com> Message-ID: <4BA12AF2.4080506@theptrgroup.com> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Joakim Tjernlund wrote: > Jeff Angielski wrote on 2010/03/17 16:10:50: >> Joakim Tjernlund wrote: >>> Wolfgang Denk wrote on 2010/03/17 12:57:31: >>>> Dear Joakim Tjernlund, >>>> >>>> In message >>> 003B4D86 at transmode.se> you wrote: >>>>> hmm, I recently discovered that normal user space headers always define >>>>> both __LITTLE_ENDIAN and __BIG_ENDIAN so therefore a >>>>> # ifdef __LITTLE_ENDIAN >>>>> # define DO_CRC(x) crc = tab[(crc ^ (x)) & 255] ^ (crc >> 8) >>>>> # else >>>>> # define DO_CRC(x) crc = tab[((crc >> 24) ^ (x)) & 255] ^ (crc << 8) >>>>> # endif >>>>> >>>>> Wont work. One have to use >>>>> #if __BYTE_ORDER == __LITTLE_ENDIAN >>>>> instead. >>>> Wenn... >>>> Signed-off-by: Joakim Tjernlund >>>> >>>> >>>> Looks as if this were your very own commit. Do you have a fix in the >>>> works? >>> I know, but I don't have anything ATM. I am too busy debugging serious >>> customer problems. >>> >>> Jocke >> This appears to work for me on my big endian PowerPC target. Perhaps >> somebody with a little endian target can verify it does not break their >> env tools. >> >> diff --git a/lib_generic/crc32.c b/lib_generic/crc32.c >> index 468b397..27335a3 100644 >> --- a/lib_generic/crc32.c >> +++ b/lib_generic/crc32.c >> @@ -163,7 +163,7 @@ const uint32_t * ZEXPORT get_crc_table() >> #endif >> >> /* >> ========================================================================= */ >> -# ifdef __LITTLE_ENDIAN >> +# if __BYTE_ORDER == __LITTLE_ENDIAN >> # define DO_CRC(x) crc = tab[(crc ^ (x)) & 255] ^ (crc >> 8) >> # else >> # define DO_CRC(x) crc = tab[((crc >> 24) ^ (x)) & 255] ^ (crc << 8) > > > I THINK this will work. Looking at include/linux/byteorder/big_endian.h it says: > #define __BYTE_ORDER __BIG_ENDIAN > so it seems like the __BYTE_ORDER logic is in place in u-boot. > Someone with a LE CPU should confirm this. > > Mind doing a proper patch? > See attached file. -- Jeff Angielski The PTR Group www.theptrgroup.com -------------- next part -------------- A non-text attachment was scrubbed... Name: 0001-env-fix-endian-ordering-in-crc-table.patch Type: text/x-patch Size: 0 bytes Desc: not available Url : http://lists.denx.de/pipermail/u-boot/attachments/20100317/27c25dd9/attachment.bin