[U-Boot] [PATCH v2 5/7] lib: import bitrev library from the linux kernel
This patch adds the bitrev library from the linux kernel. This is a simple algorithm that uses an 8 bit look-up table to reverse the bits in data types of 8, 16, or 32 bit widths. The docg4 nand flash driver uses it. [port from linux kernel 2.6.20 commit a5cfc1ec58a07074dacb6aa8c79eff864c966d12] Signed-off-by: Mike Dunn --- include/linux/bitrev.h | 23 ++ lib/Makefile |1 + lib/bitrev.c | 59 3 files changed, 83 insertions(+), 0 deletions(-) create mode 100644 include/linux/bitrev.h create mode 100644 lib/bitrev.c diff --git a/include/linux/bitrev.h b/include/linux/bitrev.h new file mode 100644 index 000..a61d956 --- /dev/null +++ b/include/linux/bitrev.h @@ -0,0 +1,23 @@ +/* + * This file is released under the terms of GPL v2 and any later version. + * See the file COPYING in the root directory of the source tree for details. + * + * Based on bitrev from the Linux kernel, by Akinobu Mita + */ + +#ifndef _LINUX_BITREV_H +#define _LINUX_BITREV_H + +#include + +extern u8 const byte_rev_table[256]; + +static inline u8 bitrev8(u8 byte) +{ + return byte_rev_table[byte]; +} + +u16 bitrev16(u16 in); +u32 bitrev32(u32 in); + +#endif /* _LINUX_BITREV_H */ diff --git a/lib/Makefile b/lib/Makefile index 1bfd3ee..b4aaae9 100644 --- a/lib/Makefile +++ b/lib/Makefile @@ -55,6 +55,7 @@ COBJS-$(CONFIG_SHA1) += sha1.o COBJS-$(CONFIG_SHA256) += sha256.o COBJS-y+= strmhz.o COBJS-$(CONFIG_RBTREE) += rbtree.o +COBJS-$(CONFIG_BITREVERSE) += bitrev.o endif ifdef CONFIG_SPL_BUILD diff --git a/lib/bitrev.c b/lib/bitrev.c new file mode 100644 index 000..160021a --- /dev/null +++ b/lib/bitrev.c @@ -0,0 +1,59 @@ +/* + * This file is released under the terms of GPL v2 and any later version. + * See the file COPYING in the root directory of the source tree for details. + * + * Based on bitrev from the Linux kernel, by Akinobu Mita + */ + + +#include +#include + +const u8 byte_rev_table[256] = { + 0x00, 0x80, 0x40, 0xc0, 0x20, 0xa0, 0x60, 0xe0, + 0x10, 0x90, 0x50, 0xd0, 0x30, 0xb0, 0x70, 0xf0, + 0x08, 0x88, 0x48, 0xc8, 0x28, 0xa8, 0x68, 0xe8, + 0x18, 0x98, 0x58, 0xd8, 0x38, 0xb8, 0x78, 0xf8, + 0x04, 0x84, 0x44, 0xc4, 0x24, 0xa4, 0x64, 0xe4, + 0x14, 0x94, 0x54, 0xd4, 0x34, 0xb4, 0x74, 0xf4, + 0x0c, 0x8c, 0x4c, 0xcc, 0x2c, 0xac, 0x6c, 0xec, + 0x1c, 0x9c, 0x5c, 0xdc, 0x3c, 0xbc, 0x7c, 0xfc, + 0x02, 0x82, 0x42, 0xc2, 0x22, 0xa2, 0x62, 0xe2, + 0x12, 0x92, 0x52, 0xd2, 0x32, 0xb2, 0x72, 0xf2, + 0x0a, 0x8a, 0x4a, 0xca, 0x2a, 0xaa, 0x6a, 0xea, + 0x1a, 0x9a, 0x5a, 0xda, 0x3a, 0xba, 0x7a, 0xfa, + 0x06, 0x86, 0x46, 0xc6, 0x26, 0xa6, 0x66, 0xe6, + 0x16, 0x96, 0x56, 0xd6, 0x36, 0xb6, 0x76, 0xf6, + 0x0e, 0x8e, 0x4e, 0xce, 0x2e, 0xae, 0x6e, 0xee, + 0x1e, 0x9e, 0x5e, 0xde, 0x3e, 0xbe, 0x7e, 0xfe, + 0x01, 0x81, 0x41, 0xc1, 0x21, 0xa1, 0x61, 0xe1, + 0x11, 0x91, 0x51, 0xd1, 0x31, 0xb1, 0x71, 0xf1, + 0x09, 0x89, 0x49, 0xc9, 0x29, 0xa9, 0x69, 0xe9, + 0x19, 0x99, 0x59, 0xd9, 0x39, 0xb9, 0x79, 0xf9, + 0x05, 0x85, 0x45, 0xc5, 0x25, 0xa5, 0x65, 0xe5, + 0x15, 0x95, 0x55, 0xd5, 0x35, 0xb5, 0x75, 0xf5, + 0x0d, 0x8d, 0x4d, 0xcd, 0x2d, 0xad, 0x6d, 0xed, + 0x1d, 0x9d, 0x5d, 0xdd, 0x3d, 0xbd, 0x7d, 0xfd, + 0x03, 0x83, 0x43, 0xc3, 0x23, 0xa3, 0x63, 0xe3, + 0x13, 0x93, 0x53, 0xd3, 0x33, 0xb3, 0x73, 0xf3, + 0x0b, 0x8b, 0x4b, 0xcb, 0x2b, 0xab, 0x6b, 0xeb, + 0x1b, 0x9b, 0x5b, 0xdb, 0x3b, 0xbb, 0x7b, 0xfb, + 0x07, 0x87, 0x47, 0xc7, 0x27, 0xa7, 0x67, 0xe7, + 0x17, 0x97, 0x57, 0xd7, 0x37, 0xb7, 0x77, 0xf7, + 0x0f, 0x8f, 0x4f, 0xcf, 0x2f, 0xaf, 0x6f, 0xef, + 0x1f, 0x9f, 0x5f, 0xdf, 0x3f, 0xbf, 0x7f, 0xff, +}; + +u16 bitrev16(u16 x) +{ + return (bitrev8(x & 0xff) << 8) | bitrev8(x >> 8); +} + +/** + * bitrev32 - reverse the order of bits in a u32 value + * @x: value to be bit-reversed + */ +u32 bitrev32(u32 x) +{ + return (bitrev16(x & 0x) << 16) | bitrev16(x >> 16); +} -- 1.7.8.6 ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 5/7] lib: import bitrev library from the linux kernel
Dear Mike Dunn, > This patch adds the bitrev library from the linux kernel. This is a simple > algorithm that uses an 8 bit look-up table to reverse the bits in data > types of 8, 16, or 32 bit widths. The docg4 nand flash driver uses it. > > [port from linux kernel 2.6.20 commit > a5cfc1ec58a07074dacb6aa8c79eff864c966d12] Why did you port it from such an ancient kernel? Newer version is not an option? Best regards, Marek Vasut ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 5/7] lib: import bitrev library from the linux kernel
On 04/11/2013 12:19 PM, Marek Vasut wrote: > Dear Mike Dunn, > >> This patch adds the bitrev library from the linux kernel. This is a simple >> algorithm that uses an 8 bit look-up table to reverse the bits in data >> types of 8, 16, or 32 bit widths. The docg4 nand flash driver uses it. >> >> [port from linux kernel 2.6.20 commit >> a5cfc1ec58a07074dacb6aa8c79eff864c966d12] > > Why did you port it from such an ancient kernel? Newer version is not an > option? Maybe I misunderstood and gave the wrong information (probably, now that I think about it). I took it fom the latest kernel, but reported the commit that added it to the kernel. In this case, it's a simple algorithm and only a couple trivial changes were made since it was first added to the kernel, so the error is probably inconsequential, but I'll resubmit, reporting the HEAD of the kernel I took it from if you like. BTW, I did the same for the docg4 driver, but I did the u-boot port a while ago, so in that case it's correct, at least practically. Since I did the port, the kernel docg4 driver had some enhancements (reliable mode) that still need to be brought into u-boot. Thanks Marek, Mike ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 5/7] lib: import bitrev library from the linux kernel
Dear Mike Dunn, > On 04/11/2013 12:19 PM, Marek Vasut wrote: > > Dear Mike Dunn, > > > >> This patch adds the bitrev library from the linux kernel. This is a > >> simple algorithm that uses an 8 bit look-up table to reverse the bits > >> in data types of 8, 16, or 32 bit widths. The docg4 nand flash driver > >> uses it. > >> > >> [port from linux kernel 2.6.20 commit > >> a5cfc1ec58a07074dacb6aa8c79eff864c966d12] > > > > Why did you port it from such an ancient kernel? Newer version is not an > > option? > > Maybe I misunderstood and gave the wrong information (probably, now that I > think about it). I took it fom the latest kernel, but reported the commit > that added it to the kernel. > > In this case, it's a simple algorithm and only a couple trivial changes > were made since it was first added to the kernel, so the error is probably > inconsequential, but I'll resubmit, reporting the HEAD of the kernel I > took it from if you like. > > BTW, I did the same for the docg4 driver, but I did the u-boot port a while > ago, so in that case it's correct, at least practically. Since I did the > port, the kernel docg4 driver had some enhancements (reliable mode) that Knowing which tag in linux-stable you pulled it from is a good information too, yes. Best regards, Marek Vasut ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot
Re: [U-Boot] [PATCH v2 5/7] lib: import bitrev library from the linux kernel
Dear Mike Dunn, In message <5167f7b4.3070...@newsguy.com> you wrote: > > In this case, it's a simple algorithm and only a couple trivial changes were > made since it was first added to the kernel, so the error is probably > inconsequential, but I'll resubmit, reporting the HEAD of the kernel I took it > from if you like. Please use the git commit ID of the exact kernel version which you used to copy the code from, not any older nor any more recent version. Thanks. Best regards, Wolfgang Denk -- DENX Software Engineering GmbH, MD: Wolfgang Denk & Detlev Zundel HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: w...@denx.de A good marriage would be between a blind wife and deaf husband. -- Michel de Montaigne ___ U-Boot mailing list U-Boot@lists.denx.de http://lists.denx.de/mailman/listinfo/u-boot