cpu/x86: Move fls() and fms() to mtrr.h
Move the funtion to find most significant bit set(fms) and function to find least significant bit set(fls) to a common place. And remove the duplicates. Change-Id: Ia821038b622d93e7f719c18e5ee3e8112de66a53 Signed-off-by: Rizwan Qureshi <rizwan.qureshi@intel.com> Reviewed-on: https://review.coreboot.org/16525 Tested-by: build bot (Jenkins) Reviewed-by: Aaron Durbin <adurbin@chromium.org>
This commit is contained in:
parent
b1b44d34e3
commit
8453c4f2fb
3 changed files with 28 additions and 49 deletions
|
@ -92,30 +92,6 @@ static void enable_var_mtrr(unsigned char deftype)
|
||||||
wrmsr(MTRR_DEF_TYPE_MSR, msr);
|
wrmsr(MTRR_DEF_TYPE_MSR, msr);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fms: find most significant bit set, stolen from Linux Kernel Source. */
|
|
||||||
static inline unsigned int fms(unsigned int x)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
__asm__("bsrl %1,%0\n\t"
|
|
||||||
"jnz 1f\n\t"
|
|
||||||
"movl $0,%0\n"
|
|
||||||
"1:" : "=r" (r) : "g" (x));
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fls: find least significant bit set */
|
|
||||||
static inline unsigned int fls(unsigned int x)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
__asm__("bsfl %1,%0\n\t"
|
|
||||||
"jnz 1f\n\t"
|
|
||||||
"movl $32,%0\n"
|
|
||||||
"1:" : "=r" (r) : "g" (x));
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
#define MTRR_VERBOSE_LEVEL BIOS_NEVER
|
#define MTRR_VERBOSE_LEVEL BIOS_NEVER
|
||||||
|
|
||||||
/* MTRRs are at a 4KiB granularity. Therefore all address calculations can
|
/* MTRRs are at a 4KiB granularity. Therefore all address calculations can
|
||||||
|
|
|
@ -84,6 +84,33 @@ void set_var_mtrr(unsigned reg, unsigned base, unsigned size, unsigned type);
|
||||||
int get_free_var_mtrr(void);
|
int get_free_var_mtrr(void);
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
#if !defined(__ASSEMBLER__) && !defined(__ROMCC__)
|
||||||
|
|
||||||
|
/* fms: find most significant bit set, stolen from Linux Kernel Source. */
|
||||||
|
static inline unsigned int fms(unsigned int x)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
__asm__("bsrl %1,%0\n\t"
|
||||||
|
"jnz 1f\n\t"
|
||||||
|
"movl $0,%0\n"
|
||||||
|
"1:" : "=r" (r) : "g" (x));
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* fls: find least significant bit set */
|
||||||
|
static inline unsigned int fls(unsigned int x)
|
||||||
|
{
|
||||||
|
int r;
|
||||||
|
|
||||||
|
__asm__("bsfl %1,%0\n\t"
|
||||||
|
"jnz 1f\n\t"
|
||||||
|
"movl $32,%0\n"
|
||||||
|
"1:" : "=r" (r) : "g" (x));
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* Align up to next power of 2, suitable for ROMCC and assembler too.
|
/* Align up to next power of 2, suitable for ROMCC and assembler too.
|
||||||
* Range of result 256kB to 128MB is good enough here.
|
* Range of result 256kB to 128MB is good enough here.
|
||||||
*/
|
*/
|
||||||
|
|
|
@ -16,6 +16,7 @@
|
||||||
|
|
||||||
#include <arch/stages.h>
|
#include <arch/stages.h>
|
||||||
#include <cpu/x86/cr.h>
|
#include <cpu/x86/cr.h>
|
||||||
|
#include <cpu/x86/mtrr.h>
|
||||||
|
|
||||||
//0: mean no debug info
|
//0: mean no debug info
|
||||||
#define DQS_TRAIN_DEBUG 0
|
#define DQS_TRAIN_DEBUG 0
|
||||||
|
@ -1640,31 +1641,6 @@ static void set_var_mtrr_dqs(
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/* fms: find most significant bit set, stolen from Linux Kernel Source. */
|
|
||||||
static inline unsigned int fms(unsigned int x)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
__asm__("bsrl %1,%0\n\t"
|
|
||||||
"jnz 1f\n\t"
|
|
||||||
"movl $0,%0\n"
|
|
||||||
"1:" : "=r" (r) : "g" (x));
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* fls: find least significant bit set */
|
|
||||||
static inline unsigned int fls(unsigned int x)
|
|
||||||
{
|
|
||||||
int r;
|
|
||||||
|
|
||||||
__asm__("bsfl %1,%0\n\t"
|
|
||||||
"jnz 1f\n\t"
|
|
||||||
"movl $32,%0\n"
|
|
||||||
"1:" : "=r" (r) : "g" (x));
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
static unsigned int range_to_mtrr(unsigned int reg,
|
static unsigned int range_to_mtrr(unsigned int reg,
|
||||||
unsigned long range_startk, unsigned long range_sizek,
|
unsigned long range_startk, unsigned long range_sizek,
|
||||||
unsigned long next_range_startk, unsigned char type, unsigned address_bits)
|
unsigned long next_range_startk, unsigned char type, unsigned address_bits)
|
||||||
|
|
Loading…
Reference in a new issue