Re: [U-Boot] [PATCH 6/8] lib: import bitrev library from linux kernel

2013-04-08 Thread Mike Dunn
On 04/07/2013 11:23 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.
>>
>> Signed-off-by: Mike Dunn 
>> ---
>>  include/linux/bitrev.h |   16 +
>>  lib/Makefile   |1 +
>>  lib/bitrev.c   |   56
>>  3 files changed, 73
>> 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..7ffe03f
>> --- /dev/null
>> +++ b/include/linux/bitrev.h
>> @@ -0,0 +1,16 @@
>> +#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];
>> +}
>> +
>> +extern u16 bitrev16(u16 in);
>> +extern u32 bitrev32(u32 in);
> 
> Do we really need to expose the array and use so many externs here?



Yeah, I don't know why the function prototypes were given the 'extern'
specifier.  This is how it is in the kernel.  They aren't necessary.

As for the table... if the bitrev8() function is moved to bitrev.c, the table
need not be extern.  But if I'm not mistaken, bitrev8() is in the header so that
it can be inlined by the compiler.  So for the sake of performance I think the
extern is appropriate for the table.

Thanks Marek,
Mike

___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 6/8] lib: import bitrev library from linux kernel

2013-04-08 Thread Wolfgang Denk
Dear Mike Dunn,

In message <1365352865-2137-7-git-send-email-miked...@newsguy.com> you wrote:
> This patch adds the bitrev library from the linux kernel.  This is a simple
-^^

Please read bullet # 4 at
http://www.denx.de/wiki/view/U-Boot/Patches#Attributing_Code_Copyrights_Sign
and provide exact reference.

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
I have a very small mind and must live with it.-- Edsger Dijkstra
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


Re: [U-Boot] [PATCH 6/8] lib: import bitrev library from linux kernel

2013-04-07 Thread Marek Vasut
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.
> 
> Signed-off-by: Mike Dunn 
> ---
>  include/linux/bitrev.h |   16 +
>  lib/Makefile   |1 +
>  lib/bitrev.c   |   56
>  3 files changed, 73
> 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..7ffe03f
> --- /dev/null
> +++ b/include/linux/bitrev.h
> @@ -0,0 +1,16 @@
> +#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];
> +}
> +
> +extern u16 bitrev16(u16 in);
> +extern u32 bitrev32(u32 in);

Do we really need to expose the array and use so many externs here?

[...]
___
U-Boot mailing list
U-Boot@lists.denx.de
http://lists.denx.de/mailman/listinfo/u-boot


[U-Boot] [PATCH 6/8] lib: import bitrev library from linux kernel

2013-04-07 Thread 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.

Signed-off-by: Mike Dunn 
---
 include/linux/bitrev.h |   16 +
 lib/Makefile   |1 +
 lib/bitrev.c   |   56 
 3 files changed, 73 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..7ffe03f
--- /dev/null
+++ b/include/linux/bitrev.h
@@ -0,0 +1,16 @@
+#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];
+}
+
+extern u16 bitrev16(u16 in);
+extern 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..3448e3f
--- /dev/null
+++ b/lib/bitrev.c
@@ -0,0 +1,56 @@
+/*
+ * 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