Hi York, On 1 December 2015 at 10:26, York Sun <[email protected]> wrote: > > > On 11/05/2015 06:43 AM, Fabio Estevam wrote: >> Use the generic bitops header files from the kernel. >> >> Imported from kernel 4.2.3. >> >> Signed-off-by: Fabio Estevam <[email protected]> >> --- >> Changes since v6: >> - Do not touch include/linux/bitops here to avoid build warnings (Daniel) >> >> include/asm-generic/bitops/__ffs.h | 43 >> ++++++++++++++++++++++++++++++++++++++ >> include/asm-generic/bitops/__fls.h | 43 >> ++++++++++++++++++++++++++++++++++++++ >> include/asm-generic/bitops/fls.h | 41 ++++++++++++++++++++++++++++++++++++ >> include/asm-generic/bitops/fls64.h | 36 +++++++++++++++++++++++++++++++ >> 4 files changed, 163 insertions(+) >> create mode 100644 include/asm-generic/bitops/__ffs.h >> create mode 100644 include/asm-generic/bitops/__fls.h >> create mode 100644 include/asm-generic/bitops/fls.h >> create mode 100644 include/asm-generic/bitops/fls64.h >> > > <snip> > >> diff --git a/include/asm-generic/bitops/__fls.h >> b/include/asm-generic/bitops/__fls.h >> new file mode 100644 >> index 0000000..a60a7cc >> --- /dev/null >> +++ b/include/asm-generic/bitops/__fls.h >> @@ -0,0 +1,43 @@ >> +#ifndef _ASM_GENERIC_BITOPS___FLS_H_ >> +#define _ASM_GENERIC_BITOPS___FLS_H_ >> + >> +#include <asm/types.h> >> + >> +/** >> + * __fls - find last (most-significant) set bit in a long word >> + * @word: the word to search >> + * >> + * Undefined if no set bit exists, so code should check against 0 first. >> + */ >> +static __always_inline unsigned long __fls(unsigned long word) >> +{ >> + int num = BITS_PER_LONG - 1; >> + >> +#if BITS_PER_LONG == 64 >> + if (!(word & (~0ul << 32))) { >> + num -= 32; >> + word <<= 32; >> + } >> +#endif >> + if (!(word & (~0ul << (BITS_PER_LONG-16)))) { >> + num -= 16; >> + word <<= 16; >> + } >> + if (!(word & (~0ul << (BITS_PER_LONG-8)))) { >> + num -= 8; >> + word <<= 8; >> + } >> + if (!(word & (~0ul << (BITS_PER_LONG-4)))) { >> + num -= 4; >> + word <<= 4; >> + } >> + if (!(word & (~0ul << (BITS_PER_LONG-2)))) { >> + num -= 2; >> + word <<= 2; >> + } >> + if (!(word & (~0ul << (BITS_PER_LONG-1)))) >> + num -= 1; >> + return num; >> +} > > Sorry for catching this late. All above left shift causes compiling warning on > 32-bit host (ubuntu 12.04 with gcc 4.6.3) > > include/asm-generic/bitops/__fls.h:17:2: warning: left shift count >= width of > type [enabled by default] > > The root cause may be in include/configs/sandbox.h > #define CONFIG_SANDBOX_BITS_PER_LONG 64
I think sandbox has a few issues on 32-bit machines. Probably this should change to 32-bits. I don't have a 32-bit machine set up and in regular use so I have not looked a tthis. Regards, Simon _______________________________________________ U-Boot mailing list [email protected] http://lists.denx.de/mailman/listinfo/u-boot

