OrangePi_CM5/arch/arm64/include/asm
Suzuki K. Poulose dbb4e152b8 arm64: Delay cpu feature capability checks
At the moment we run through the arm64_features capability list for
each CPU and set the capability if one of the CPU supports it. This
could be problematic in a heterogeneous system with differing capabilities.
Delay the CPU feature checks until all the enabled CPUs are up(i.e,
smp_cpus_done(), so that we can make better decisions based on the
overall system capability. Once we decide and advertise the capabilities
the alternatives can be applied. From this state, we cannot roll back
a feature to disabled based on the values from a new hotplugged CPU,
due to the runtime patching and other reasons. So, for all new CPUs,
we need to make sure that they have the established system capabilities.
Failing which, we bring the CPU down, preventing it from turning online.
Once the capabilities are decided, any new CPU booting up goes through
verification to ensure that it has all the enabled capabilities and also
invokes the respective enable() method on the CPU.

The CPU errata checks are not delayed and is still executed per-CPU
to detect the respective capabilities. If we ever come across a non-errata
capability that needs to be checked on each-CPU, we could introduce them via
a new capability table(or introduce a flag), which can be processed per CPU.

The next patch will make the feature checks use the system wide
safe value of a feature register.

NOTE: The enable() methods associated with the capability is scheduled
on all the CPUs (which is the only use case at the moment). If we need
a different type of 'enable()' which only needs to be run once on any CPU,
we should be able to handle that when needed.

Signed-off-by: Suzuki K. Poulose <suzuki.poulose@arm.com>
Tested-by: Dave Martin <Dave.Martin@arm.com>
[catalin.marinas@arm.com: static variable and coding style fixes]
Signed-off-by: Catalin Marinas <catalin.marinas@arm.com>
2015-10-21 15:35:58 +01:00
..
xen xen/events: Support event channel rebind on ARM 2015-08-20 12:24:15 +01:00
Kbuild mm: clean up per architecture MM hook header files 2015-07-17 16:39:53 -07:00
acenv.h ARM64 / ACPI: Get RSDP and ACPI boot-time tables 2015-03-25 11:49:30 +00:00
acpi.h arm64: psci: factor invocation code to drivers 2015-08-03 12:33:39 +01:00
alternative.h arm64: alternative: put secondary CPUs into polling loop during patch 2015-07-30 19:07:28 +01:00
arch_timer.h arm64: fix missing linux/bug.h include in asm/arch_timer.h 2015-01-07 11:40:59 +00:00
arm-cci.h arm-cci: Get rid of secure transactions for PMU driver 2015-03-27 13:44:35 +00:00
asm-offsets.h
…
assembler.h arm64: use ENDPIPROC() to annotate position independent assembler routines 2015-10-12 16:19:45 +01:00
atomic.h arm64: atomics: implement native {relaxed, acquire, release} atomics 2015-10-12 17:36:58 +01:00
atomic_ll_sc.h arm64: atomics: implement native {relaxed, acquire, release} atomics 2015-10-12 17:36:58 +01:00
atomic_lse.h arm64: atomics: implement native {relaxed, acquire, release} atomics 2015-10-12 17:36:58 +01:00
barrier.h locking, arch: use WRITE_ONCE()/READ_ONCE() in smp_store_release()/smp_load_acquire() 2015-08-03 10:59:30 +02:00
bitops.h arch,arm64: Convert smp_mb__*() 2014-04-18 11:40:33 +02:00
bitrev.h ARM: 8189/1: arm64:add bitrev.h file to support rbit instruction 2014-12-22 16:47:32 +00:00
boot.h arm64: use fixmap region for permanent FDT mapping 2015-06-02 16:31:33 +01:00
bug.h arm64/BUG: Use BRK instruction for generic BUG traps 2015-07-27 11:08:42 +01:00
cache.h arm64: Implement support for read-mostly sections 2014-12-03 10:19:35 +00:00
cacheflush.h arm64: flush: use local TLB and I-cache invalidation 2015-10-07 11:45:27 +01:00
cachetype.h arm64: kernel: add support for cpu cache information 2015-01-15 11:55:07 +00:00
cmpxchg.h arm64: atomics: implement native {relaxed, acquire, release} atomics 2015-10-12 17:36:58 +01:00
compat.h arm64: compat: Remove incorrect comment in compat_siginfo 2015-02-02 16:44:39 +00:00
compiler.h
…
cpu.h arm64: Consolidate CPU Sanity check to CPU Feature infrastructure 2015-10-21 15:35:56 +01:00
cpu_ops.h ARM64: kernel: unify ACPI and DT cpus initialization 2015-05-19 16:09:29 +01:00
cpufeature.h arm64: Delay cpu feature capability checks 2015-10-21 15:35:58 +01:00
cpuidle.h arm64: kernel: rename __cpu_suspend to keep it aligned with arm 2015-06-19 14:46:39 +01:00
cputype.h arm64: Move mixed endian support detection 2015-10-21 15:33:51 +01:00
debug-monitors.h arm64: debug: rename enum debug_el to avoid symbol collision 2015-07-27 18:36:54 +01:00
device.h arm64: introduce is_device_dma_coherent 2014-12-04 12:41:49 +00:00
dma-mapping.h dma-mapping: consolidate dma_set_mask 2015-09-10 13:29:01 -07:00
dmi.h arm64: dmi: Add SMBIOS/DMI support 2014-11-05 09:03:25 +01:00
efi.h arm64/efi: move virtmap init to early initcall 2015-01-22 14:59:25 +00:00
elf.h mm: fold arch_randomize_brk into ARCH_HAS_ELF_RANDOMIZE 2015-04-14 16:49:05 -07:00
esr.h arm64/debug: Add missing #includes 2015-07-27 11:08:42 +01:00
exception.h arm64: Add __exception_irq_entry definition for function graph 2015-08-12 17:23:45 +01:00
exec.h
…
fb.h
…
fixmap.h arm64: Simplify NR_FIX_BTMAPS calculation 2015-10-19 17:54:07 +01:00
fpsimd.h arm64: add support for kernel mode NEON in interrupt context 2014-05-08 11:31:57 +02:00
fpsimdmacros.h arm64: Avoid breakage caused by .altmacro in fpsimd save/restore macros 2015-01-29 17:24:39 +00:00
ftrace.h arm64: ftrace: Add system call tracepoint 2014-05-29 09:08:33 +01:00
futex.h arm64: atomics: prefetch the destination word for write prior to stxr 2015-07-27 15:28:53 +01:00
hardirq.h arm64: Remove ununsed set_irq_flags 2015-09-16 16:53:39 +02:00
hugetlb.h arm64: hugetlb: remove paragraph about writing to FSF 2015-07-27 11:08:40 +01:00
hw_breakpoint.h KVM: arm64: enable KVM_CAP_SET_GUEST_DEBUG 2015-07-21 12:50:43 +01:00
hwcap.h arm64: Add COMPAT_HWCAP_LPAE 2014-11-17 10:43:42 +00:00
hypervisor.h
…
insn.h arm64: insn: Add aarch64_{get,set}_branch_offset 2015-06-03 15:43:24 +01:00
io.h Revert "arm64: ioremap: add ioremap_cache macro" 2015-10-13 16:18:17 +01:00
irq.h arm64: fix a migrating irq bug when hotplug cpu 2015-10-09 17:40:35 +01:00
irq_work.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
irqflags.h arm64: Add macros to manage processor debug state 2014-02-26 11:16:25 +00:00
jump_label.h locking/static_keys: Add a new static_key interface 2015-08-03 11:34:15 +02:00
kasan.h arm64: kasan: fix issues reported by sparse 2015-10-13 14:54:42 +01:00
kernel-pgtable.h arm64: Calculate size for idmap_pg_dir at compile time 2015-10-19 17:53:26 +01:00
kgdb.h arm64: Fix typos in KGDB macros 2014-09-25 15:35:41 +01:00
kvm_arm.h arm64: KVM: Remove all traces of the ThumbEE registers 2015-09-17 13:13:26 +01:00
kvm_asm.h arm64: KVM: Remove all traces of the ThumbEE registers 2015-09-17 13:13:26 +01:00
kvm_coproc.h arm64: KVM: common infrastructure for handling AArch32 CP14/CP15 2014-07-11 04:57:44 -07:00
kvm_emulate.h Fairly small update, but there are some interesting new features. 2015-02-13 09:55:09 -08:00
kvm_host.h KVM: disable halt_poll_ns as default for s390x 2015-09-25 10:31:30 +02:00
kvm_mmio.h KVM: arm/arm64: rework MMIO abort handling to use KVM MMIO bus 2015-03-30 17:07:19 +01:00
kvm_mmu.h arm64 updates for 4.1: 2015-04-16 13:58:29 -05:00
kvm_psci.h ARM/ARM64: KVM: Make kvm_psci_call() return convention more flexible 2014-04-30 04:18:57 -07:00
linkage.h
…
lse.h arm64: lse: rename ARM64_CPU_FEAT_LSE_ATOMICS for consistency 2015-07-27 15:28:54 +01:00
memblock.h
…
memory.h arm64: introduce VA_START macro - the first kernel virtual address. 2015-10-07 11:41:32 +01:00
mmu.h arm64: mm: rewrite ASID allocator and MM context-switching code 2015-10-07 11:55:41 +01:00
mmu_context.h arm64: switch_mm: simplify mm and CPU checks 2015-10-07 11:56:25 +01:00
module.h
…
neon.h arm64: add support for kernel mode NEON in interrupt context 2014-05-08 11:31:57 +02:00
opcodes.h arm64: Add AArch32 instruction set condition code checks 2014-11-20 16:33:45 +00:00
page.h arm64: Add 16K page size support 2015-10-19 17:55:12 +01:00
pci.h ARM64 / ACPI: Introduce PCI stub functions for ACPI 2015-03-25 11:49:31 +00:00
percpu.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
perf_event.h arm64: perf: factor out callchain code 2015-07-27 11:08:39 +01:00
pgalloc.h arm64: move PGD_SIZE definition to pgalloc.h 2015-10-12 17:46:30 +01:00
pgtable-hwdef.h arm64: Introduce helpers for page table levels 2015-10-19 17:53:08 +01:00
pgtable-types.h arm64: expose number of page table levels on Kconfig level 2015-04-14 16:49:01 -07:00
pgtable.h arm64: Minor coding style fixes for kc_offset_to_vaddr and kc_vaddr_to_offset 2015-10-16 14:34:53 +01:00
proc-fns.h arm64: kill flush_cache_all() 2015-05-19 15:27:42 +01:00
processor.h arm64: Delay cpu feature capability checks 2015-10-21 15:35:58 +01:00
ptrace.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
seccomp.h arm64: add seccomp support 2014-11-28 10:24:59 +00:00
shmparam.h
…
signal32.h arm64: Use get_signal() signal_setup_done() 2014-08-06 12:56:16 +02:00
smp.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
smp_plat.h arm64: remove dead-code depending on CONFIG_UP_LATE_INIT 2015-07-29 18:32:09 +01:00
sparsemem.h arm64: mm: update max pa bits to 48 2014-08-19 20:23:02 +01:00
spinlock.h arm64: spinlock: fix ll/sc unlock on big-endian systems 2015-07-28 14:48:00 +01:00
spinlock_types.h arm64: include linux/types.h in asm/spinlock_types.h 2015-07-27 11:09:34 +01:00
stackprotector.h arm64: Add CONFIG_CC_STACKPROTECTOR 2014-07-09 12:23:48 +01:00
stacktrace.h
…
stat.h
…
string.h arm64: add KASAN support 2015-10-12 17:46:36 +01:00
suspend.h arm64: kernel: rename __cpu_suspend to keep it aligned with arm 2015-06-19 14:46:39 +01:00
sync_bitops.h
…
syscall.h arm64: Add audit support 2014-07-10 11:06:00 +01:00
sysreg.h arm64: Keep track of CPU feature registers 2015-10-21 15:35:37 +01:00
system_misc.h arm64: use private ratelimit state along with show_unhandled_signals 2015-06-19 16:26:15 +01:00
thread_info.h arm64: Add 16K page size support 2015-10-19 17:55:12 +01:00
timex.h
…
tlb.h arm64: tlbflush: avoid flushing when fullmm == 1 2015-10-07 11:56:21 +01:00
tlbflush.h arm64: tlb: remove redundant barrier from __flush_tlb_pgtable 2015-10-07 11:56:33 +01:00
topology.h arm64: force CONFIG_SMP=y and remove redundant #ifdefs 2015-07-27 11:08:40 +01:00
traps.h arm64: Add __exception_irq_entry definition for function graph 2015-08-12 17:23:45 +01:00
uaccess.h arm64: kernel: Add support for Privileged Access Never 2015-07-27 11:08:41 +01:00
unistd.h arm64 updates for 3.20: 2015-02-11 18:03:54 -08:00
unistd32.h arm64: fix implementation of mmap2 compat syscall 2015-03-19 10:43:51 +00:00
vdso.h
…
vdso_datapage.h
…
virt.h arm64: KVM: remove __kvm_hyp_code_{start,end} from hyp.S 2014-07-11 04:57:35 -07:00
word-at-a-time.h
…