Power ISA v3.1 implementations in the Linux Compliancy Subset and lower are not required to implement broadcast TLBIE, and in fact Microwatt doesn't. To avoid the need to specify "disable_tlbie" on the kernel command line on SMP Microwatt systems, this defines a config option that asserts that broadcast TLBIE should never be used (the kernel will instead use IPIs to trigger local TLBIEs on other CPUs when required).
Signed-off-by: Paul Mackerras <pau...@ozlabs.org> --- arch/powerpc/mm/book3s64/pgtable.c | 10 ++++++++-- arch/powerpc/platforms/Kconfig.cputype | 12 ++++++++++++ arch/powerpc/platforms/microwatt/Kconfig | 1 + 3 files changed, 21 insertions(+), 2 deletions(-) diff --git a/arch/powerpc/mm/book3s64/pgtable.c b/arch/powerpc/mm/book3s64/pgtable.c index 374542528080..14ee96e2a581 100644 --- a/arch/powerpc/mm/book3s64/pgtable.c +++ b/arch/powerpc/mm/book3s64/pgtable.c @@ -588,10 +588,16 @@ int pmd_move_must_withdraw(struct spinlock *new_pmd_ptl, } #endif +#ifndef CONFIG_PPC_RADIX_NO_BROADCAST_TLBIE +#define DEFAULT_TLBIE_ENABLE true +#else +#define DEFAULT_TLBIE_ENABLE false +#endif + /* * Does the CPU support tlbie? */ -bool tlbie_capable __read_mostly = true; +bool tlbie_capable __read_mostly = DEFAULT_TLBIE_ENABLE; EXPORT_SYMBOL(tlbie_capable); /* @@ -599,7 +605,7 @@ EXPORT_SYMBOL(tlbie_capable); * address spaces? tlbie may still be used for nMMU accelerators, and for KVM * guest address spaces. */ -bool tlbie_enabled __read_mostly = true; +bool tlbie_enabled __read_mostly = DEFAULT_TLBIE_ENABLE; static int __init setup_disable_tlbie(char *str) { diff --git a/arch/powerpc/platforms/Kconfig.cputype b/arch/powerpc/platforms/Kconfig.cputype index 1453ccc900c4..bd2a4e46ab34 100644 --- a/arch/powerpc/platforms/Kconfig.cputype +++ b/arch/powerpc/platforms/Kconfig.cputype @@ -449,6 +449,18 @@ config PPC_RADIX_MMU_DEFAULT If you're unsure, say Y. +config PPC_RADIX_NO_BROADCAST_TLBIE + depends on PPC_RADIX_MMU + help + Power ISA v3.1 implementations in the Linux Compliancy Subset + and lower are not required to implement broadcast TLBIE + instructions, that is, a TLB invalidation instruction + performed on one CPU is not required to operate on the TLBs + in all CPUs in the system. Instead, the kernel does an IPI + to each relevant CPU to get it to do a local TLBIE instruction. + Select this option to force global invalidations to be done via + IPIs unconditionally. + config PPC_KERNEL_PREFIXED depends on PPC_HAVE_PREFIXED_SUPPORT depends on CC_HAS_PREFIXED diff --git a/arch/powerpc/platforms/microwatt/Kconfig b/arch/powerpc/platforms/microwatt/Kconfig index 5e41adadac1f..1d5cc1ae3636 100644 --- a/arch/powerpc/platforms/microwatt/Kconfig +++ b/arch/powerpc/platforms/microwatt/Kconfig @@ -7,6 +7,7 @@ config PPC_MICROWATT select PPC_ICP_NATIVE select PPC_UDBG_16550 select COMMON_CLK + select PPC_RADIX_NO_BROADCAST_TLBIE help This option enables support for FPGA-based Microwatt implementations. -- 2.47.1