9
0
Fork 0

ppc: remove bit operation headers file conflict

Removed the ppc bit operation functions and definitions in the ppc
file asm/bitops.h since these are already defined in the asm-generic header
files. Moved ffs64 definition to the mpc85xx header files because
the function requires the inclusion of linux/log2.h which also includes
asm/bitops.h.

The conflict was noted when UBIFS was enabled in barebox.

Signed-off-by: Renaud Barbier <renaud.barbier@ge.com>
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
This commit is contained in:
Renaud Barbier 2014-01-29 11:06:50 +00:00 committed by Sascha Hauer
parent 278850a442
commit b99e853aff
4 changed files with 24 additions and 45 deletions

View File

@ -24,7 +24,7 @@
#include <common.h>
#include <asm/processor.h>
#include <asm/config.h>
#include <asm/bitops.h>
#include <linux/log2.h>
#include <mach/mmu.h>
void e500_invalidate_tlb(u8 tlb)

View File

@ -6,13 +6,7 @@
#define _PPC_BITOPS_H
#include <asm/byteorder.h>
extern void set_bit(int nr, volatile void *addr);
extern void clear_bit(int nr, volatile void *addr);
extern void change_bit(int nr, volatile void *addr);
extern int test_and_set_bit(int nr, volatile void *addr);
extern int test_and_clear_bit(int nr, volatile void *addr);
extern int test_and_change_bit(int nr, volatile void *addr);
#include <asm-generic/bitops/ops.h>
/*
* Arguably these bit operations don't imply any memory barrier or
@ -143,13 +137,6 @@ extern __inline__ int test_and_change_bit(int nr, volatile void *addr)
}
#endif /* __INLINE_BITOPS */
extern __inline__ int test_bit(int nr, __const__ volatile void *addr)
{
__const__ unsigned int *p = (__const__ unsigned int *) addr;
return ((p[nr >> 5] >> (nr & 0x1f)) & 1) != 0;
}
/* Return the bit position of the most significant 1 bit in a word */
extern __inline__ int __ilog2(unsigned int x)
{
@ -178,36 +165,6 @@ static inline int fls(unsigned int x)
return 32 - lz;
}
/*
* fls64 - find last set bit in a 64-bit word
* @x: the word to search
*
* This is defined in a similar way as the libc and compiler builtin
* ffsll, but returns the position of the most significant set bit.
*
* fls64(value) returns 0 if value is 0 or the position of the last
* set bit if value is nonzero. The last (most significant) bit is
* at position 64.
*/
static inline int fls64(__u64 x)
{
__u32 h = x >> 32;
if (h)
return fls(h) + 32;
return fls(x);
}
static inline int __ilog2_u64(u64 n)
{
return fls64(n) - 1;
}
static inline int ffs64(u64 x)
{
return __ilog2_u64(x & -x) + 1ull;
}
#ifdef __KERNEL__
/*
@ -220,6 +177,7 @@ extern __inline__ int ffs(int x)
return __ilog2(x & -x) + 1;
}
#include <asm-generic/bitops/fls64.h>
#include <asm-generic/bitops/hweight.h>
#endif /* __KERNEL__ */

View File

@ -24,6 +24,7 @@
#include <common.h>
#include <asm/config.h>
#include <asm/fsl_law.h>
#include <mach/ffs64.h>
#define FSL_HW_NUM_LAWS FSL_NUM_LAWS

View File

@ -0,0 +1,20 @@
/*
* Copyright 2013 GE Intelligent Platforms, Inc.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
*/
#include <linux/log2.h>
static inline int ffs64(u64 x)
{
return __ilog2_u64(x & -x) + 1ull;
}