2014-03-04 01:10:04 +00:00
/*
* Copyright ( C ) 2014 Linaro Ltd . < ard . biesheuvel @ linaro . org >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License version 2 as
* published by the Free Software Foundation .
*/
# ifndef __ASM_CPUFEATURE_H
# define __ASM_CPUFEATURE_H
# include <asm/hwcap.h>
/*
* In the arm64 world ( as in the ARM world ) , elf_hwcap is used both internally
* in the kernel and for user space to keep track of which optional features
* are supported by the current system . So let ' s map feature ' x ' to HWCAP_x .
* Note that HWCAP_x constants are bit fields so we need to take the log .
*/
# define MAX_CPU_FEATURES (8 * sizeof(elf_hwcap))
# define cpu_feature(x) ilog2(HWCAP_ ## x)
2014-11-14 15:54:11 +00:00
# define ARM64_WORKAROUND_CLEAN_CACHE 0
# define ARM64_WORKAROUND_DEVICE_LOAD_ACQUIRE 1
2015-03-23 19:07:02 +00:00
# define ARM64_WORKAROUND_845719 2
2015-06-12 12:06:36 +01:00
# define ARM64_HAS_SYSREG_GIC_CPUIF 3
2014-11-14 15:54:10 +00:00
2015-06-12 12:06:36 +01:00
# define ARM64_NCAPS 4
2014-11-14 15:54:10 +00:00
# ifndef __ASSEMBLY__
2014-11-14 15:54:07 +00:00
2015-03-27 13:09:23 +00:00
struct arm64_cpu_capabilities {
const char * desc ;
u16 capability ;
bool ( * matches ) ( const struct arm64_cpu_capabilities * ) ;
union {
struct { /* To be used for erratum handling only */
u32 midr_model ;
u32 midr_range_min , midr_range_max ;
} ;
2015-06-12 12:06:36 +01:00
struct { /* Feature register checking */
u64 register_mask ;
u64 register_value ;
} ;
2015-03-27 13:09:23 +00:00
} ;
} ;
arm64: Provide a namespace to NCAPS
Building arm64.allmodconfig leads to the following warning:
usb/gadget/function/f_ncm.c:203:0: warning: "NCAPS" redefined
#define NCAPS (USB_CDC_NCM_NCAP_ETH_FILTER | USB_CDC_NCM_NCAP_CRC_MODE)
^
In file included from /home/build/work/batch/arch/arm64/include/asm/io.h:32:0,
from /home/build/work/batch/include/linux/clocksource.h:19,
from /home/build/work/batch/include/clocksource/arm_arch_timer.h:19,
from /home/build/work/batch/arch/arm64/include/asm/arch_timer.h:27,
from /home/build/work/batch/arch/arm64/include/asm/timex.h:19,
from /home/build/work/batch/include/linux/timex.h:65,
from /home/build/work/batch/include/linux/sched.h:19,
from /home/build/work/batch/arch/arm64/include/asm/compat.h:25,
from /home/build/work/batch/arch/arm64/include/asm/stat.h:23,
from /home/build/work/batch/include/linux/stat.h:5,
from /home/build/work/batch/include/linux/module.h:10,
from /home/build/work/batch/drivers/usb/gadget/function/f_ncm.c:19:
arch/arm64/include/asm/cpufeature.h:27:0: note: this is the location of the previous definition
#define NCAPS 2
So add a ARM64 prefix to avoid such problem.
Reported-by: Olof's autobuilder <build@lixom.net>
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2014-12-04 01:17:01 +00:00
extern DECLARE_BITMAP ( cpu_hwcaps , ARM64_NCAPS ) ;
2014-11-14 15:54:07 +00:00
2014-03-04 01:10:04 +00:00
static inline bool cpu_have_feature ( unsigned int num )
{
return elf_hwcap & ( 1UL < < num ) ;
}
2014-11-14 15:54:07 +00:00
static inline bool cpus_have_cap ( unsigned int num )
{
arm64: Provide a namespace to NCAPS
Building arm64.allmodconfig leads to the following warning:
usb/gadget/function/f_ncm.c:203:0: warning: "NCAPS" redefined
#define NCAPS (USB_CDC_NCM_NCAP_ETH_FILTER | USB_CDC_NCM_NCAP_CRC_MODE)
^
In file included from /home/build/work/batch/arch/arm64/include/asm/io.h:32:0,
from /home/build/work/batch/include/linux/clocksource.h:19,
from /home/build/work/batch/include/clocksource/arm_arch_timer.h:19,
from /home/build/work/batch/arch/arm64/include/asm/arch_timer.h:27,
from /home/build/work/batch/arch/arm64/include/asm/timex.h:19,
from /home/build/work/batch/include/linux/timex.h:65,
from /home/build/work/batch/include/linux/sched.h:19,
from /home/build/work/batch/arch/arm64/include/asm/compat.h:25,
from /home/build/work/batch/arch/arm64/include/asm/stat.h:23,
from /home/build/work/batch/include/linux/stat.h:5,
from /home/build/work/batch/include/linux/module.h:10,
from /home/build/work/batch/drivers/usb/gadget/function/f_ncm.c:19:
arch/arm64/include/asm/cpufeature.h:27:0: note: this is the location of the previous definition
#define NCAPS 2
So add a ARM64 prefix to avoid such problem.
Reported-by: Olof's autobuilder <build@lixom.net>
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2014-12-04 01:17:01 +00:00
if ( num > = ARM64_NCAPS )
2014-11-14 15:54:07 +00:00
return false ;
return test_bit ( num , cpu_hwcaps ) ;
}
static inline void cpus_set_cap ( unsigned int num )
{
arm64: Provide a namespace to NCAPS
Building arm64.allmodconfig leads to the following warning:
usb/gadget/function/f_ncm.c:203:0: warning: "NCAPS" redefined
#define NCAPS (USB_CDC_NCM_NCAP_ETH_FILTER | USB_CDC_NCM_NCAP_CRC_MODE)
^
In file included from /home/build/work/batch/arch/arm64/include/asm/io.h:32:0,
from /home/build/work/batch/include/linux/clocksource.h:19,
from /home/build/work/batch/include/clocksource/arm_arch_timer.h:19,
from /home/build/work/batch/arch/arm64/include/asm/arch_timer.h:27,
from /home/build/work/batch/arch/arm64/include/asm/timex.h:19,
from /home/build/work/batch/include/linux/timex.h:65,
from /home/build/work/batch/include/linux/sched.h:19,
from /home/build/work/batch/arch/arm64/include/asm/compat.h:25,
from /home/build/work/batch/arch/arm64/include/asm/stat.h:23,
from /home/build/work/batch/include/linux/stat.h:5,
from /home/build/work/batch/include/linux/module.h:10,
from /home/build/work/batch/drivers/usb/gadget/function/f_ncm.c:19:
arch/arm64/include/asm/cpufeature.h:27:0: note: this is the location of the previous definition
#define NCAPS 2
So add a ARM64 prefix to avoid such problem.
Reported-by: Olof's autobuilder <build@lixom.net>
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2014-12-04 01:17:01 +00:00
if ( num > = ARM64_NCAPS )
2014-11-14 15:54:07 +00:00
pr_warn ( " Attempt to set an illegal CPU capability (%d >= %d) \n " ,
arm64: Provide a namespace to NCAPS
Building arm64.allmodconfig leads to the following warning:
usb/gadget/function/f_ncm.c:203:0: warning: "NCAPS" redefined
#define NCAPS (USB_CDC_NCM_NCAP_ETH_FILTER | USB_CDC_NCM_NCAP_CRC_MODE)
^
In file included from /home/build/work/batch/arch/arm64/include/asm/io.h:32:0,
from /home/build/work/batch/include/linux/clocksource.h:19,
from /home/build/work/batch/include/clocksource/arm_arch_timer.h:19,
from /home/build/work/batch/arch/arm64/include/asm/arch_timer.h:27,
from /home/build/work/batch/arch/arm64/include/asm/timex.h:19,
from /home/build/work/batch/include/linux/timex.h:65,
from /home/build/work/batch/include/linux/sched.h:19,
from /home/build/work/batch/arch/arm64/include/asm/compat.h:25,
from /home/build/work/batch/arch/arm64/include/asm/stat.h:23,
from /home/build/work/batch/include/linux/stat.h:5,
from /home/build/work/batch/include/linux/module.h:10,
from /home/build/work/batch/drivers/usb/gadget/function/f_ncm.c:19:
arch/arm64/include/asm/cpufeature.h:27:0: note: this is the location of the previous definition
#define NCAPS 2
So add a ARM64 prefix to avoid such problem.
Reported-by: Olof's autobuilder <build@lixom.net>
Signed-off-by: Fabio Estevam <fabio.estevam@freescale.com>
Signed-off-by: Will Deacon <will.deacon@arm.com>
2014-12-04 01:17:01 +00:00
num , ARM64_NCAPS ) ;
2014-11-14 15:54:07 +00:00
else
__set_bit ( num , cpu_hwcaps ) ;
}
2015-07-21 13:23:26 +01:00
static inline int __attribute_const__ cpuid_feature_extract_field ( u64 features ,
int field )
{
return ( s64 ) ( features < < ( 64 - 4 - field ) ) > > ( 64 - 4 ) ;
}
2015-03-27 13:09:23 +00:00
void check_cpu_capabilities ( const struct arm64_cpu_capabilities * caps ,
const char * info ) ;
2014-11-14 15:54:09 +00:00
void check_local_cpu_errata ( void ) ;
2015-03-27 13:09:23 +00:00
void check_local_cpu_features ( void ) ;
2015-01-21 12:43:09 +00:00
bool cpu_supports_mixed_endian_el0 ( void ) ;
bool system_supports_mixed_endian_el0 ( void ) ;
2014-11-14 15:54:09 +00:00
2014-11-14 15:54:10 +00:00
# endif /* __ASSEMBLY__ */
2014-03-04 01:10:04 +00:00
# endif