forked from Minki/linux
6137fed082
For the architectures that do not implement their own tlb_flush() but do already use the generic mmu_gather, there are two options: 1) the platform has an efficient flush_tlb_range() and asm-generic/tlb.h doesn't need any overrides at all. 2) the platform lacks an efficient flush_tlb_range() and we select MMU_GATHER_NO_RANGE to minimize full invalidates. Convert all 'simple' architectures to one of these two forms. alpha: has no range invalidate -> 2 arc: already used flush_tlb_range() -> 1 c6x: has no range invalidate -> 2 hexagon: has an efficient flush_tlb_range() -> 1 (flush_tlb_mm() is in fact a full range invalidate, so no need to shoot down everything) m68k: has inefficient flush_tlb_range() -> 2 microblaze: has no flush_tlb_range() -> 2 mips: has efficient flush_tlb_range() -> 1 (even though it currently seems to use flush_tlb_mm()) nds32: already uses flush_tlb_range() -> 1 nios2: has inefficient flush_tlb_range() -> 2 (no limit on range iteration) openrisc: has inefficient flush_tlb_range() -> 2 (no limit on range iteration) parisc: already uses flush_tlb_range() -> 1 sparc32: already uses flush_tlb_range() -> 1 unicore32: has inefficient flush_tlb_range() -> 2 (no limit on range iteration) xtensa: has efficient flush_tlb_range() -> 1 Note this also fixes a bug in the existing code for a number platforms. Those platforms that did: tlb_end_vma() -> if (!full_mm) flush_tlb_*() tlb_flush -> if (full_mm) flush_tlb_mm() missed the case of shift_arg_pages(), which doesn't have @fullmm set, nor calls into tlb_*vma(), but still frees page-tables and thus needs an invalidate. The new code handles this by detecting a non-empty range, and either issuing the matching range invalidate or a full invalidate, depending on the capabilities. No change in behavior intended. Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Andy Lutomirski <luto@kernel.org> Cc: Aneesh Kumar K.V <aneesh.kumar@linux.vnet.ibm.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Dave Hansen <dave.hansen@linux.intel.com> Cc: David S. Miller <davem@davemloft.net> Cc: Greentime Hu <green.hu@gmail.com> Cc: Guan Xuetao <gxt@pku.edu.cn> Cc: H. Peter Anvin <hpa@zytor.com> Cc: Helge Deller <deller@gmx.de> Cc: Jonas Bonn <jonas@southpole.se> Cc: Ley Foon Tan <lftan@altera.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Mark Salter <msalter@redhat.com> Cc: Max Filippov <jcmvbkbc@gmail.com> Cc: Michal Simek <monstr@monstr.eu> Cc: Nick Piggin <npiggin@gmail.com> Cc: Paul Burton <paul.burton@mips.com> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Richard Henderson <rth@twiddle.net> Cc: Richard Kuo <rkuo@codeaurora.org> Cc: Rik van Riel <riel@surriel.com> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: Vineet Gupta <vgupta@synopsys.com> Cc: Will Deacon <will.deacon@arm.com> Signed-off-by: Ingo Molnar <mingo@kernel.org>
189 lines
5.0 KiB
Plaintext
189 lines
5.0 KiB
Plaintext
# SPDX-License-Identifier: GPL-2.0
|
|
config NIOS2
|
|
def_bool y
|
|
select ARCH_32BIT_OFF_T
|
|
select ARCH_HAS_SYNC_DMA_FOR_CPU
|
|
select ARCH_HAS_SYNC_DMA_FOR_DEVICE
|
|
select ARCH_NO_SWAP
|
|
select TIMER_OF
|
|
select GENERIC_ATOMIC64
|
|
select GENERIC_CLOCKEVENTS
|
|
select GENERIC_CPU_DEVICES
|
|
select GENERIC_IRQ_PROBE
|
|
select GENERIC_IRQ_SHOW
|
|
select GENERIC_STRNCPY_FROM_USER
|
|
select GENERIC_STRNLEN_USER
|
|
select HAVE_ARCH_TRACEHOOK
|
|
select HAVE_ARCH_KGDB
|
|
select IRQ_DOMAIN
|
|
select MODULES_USE_ELF_RELA
|
|
select OF
|
|
select OF_EARLY_FLATTREE
|
|
select SOC_BUS
|
|
select SPARSE_IRQ
|
|
select USB_ARCH_HAS_HCD if USB_SUPPORT
|
|
select CPU_NO_EFFICIENT_FFS
|
|
select ARCH_DISCARD_MEMBLOCK
|
|
select MMU_GATHER_NO_RANGE if MMU
|
|
|
|
config GENERIC_CSUM
|
|
def_bool y
|
|
|
|
config GENERIC_HWEIGHT
|
|
def_bool y
|
|
|
|
config GENERIC_CALIBRATE_DELAY
|
|
def_bool y
|
|
|
|
config NO_IOPORT_MAP
|
|
def_bool y
|
|
|
|
config FPU
|
|
def_bool n
|
|
|
|
config RWSEM_GENERIC_SPINLOCK
|
|
def_bool y
|
|
|
|
config TRACE_IRQFLAGS_SUPPORT
|
|
def_bool n
|
|
|
|
menu "Kernel features"
|
|
|
|
source "kernel/Kconfig.hz"
|
|
|
|
config FORCE_MAX_ZONEORDER
|
|
int "Maximum zone order"
|
|
range 9 20
|
|
default "11"
|
|
help
|
|
The kernel memory allocator divides physically contiguous memory
|
|
blocks into "zones", where each zone is a power of two number of
|
|
pages. This option selects the largest power of two that the kernel
|
|
keeps in the memory allocator. If you need to allocate very large
|
|
blocks of physically contiguous memory, then you may need to
|
|
increase this value.
|
|
|
|
This config option is actually maximum order plus one. For example,
|
|
a value of 11 means that the largest free memory block is 2^10 pages.
|
|
|
|
endmenu
|
|
|
|
source "arch/nios2/platform/Kconfig.platform"
|
|
|
|
menu "Processor type and features"
|
|
|
|
config MMU
|
|
def_bool y
|
|
|
|
config NR_CPUS
|
|
int
|
|
default "1"
|
|
|
|
config NIOS2_ALIGNMENT_TRAP
|
|
bool "Catch alignment trap"
|
|
default y
|
|
help
|
|
Nios II CPUs cannot fetch/store data which is not bus aligned,
|
|
i.e., a 2 or 4 byte fetch must start at an address divisible by
|
|
2 or 4. Any non-aligned load/store instructions will be trapped and
|
|
emulated in software if you say Y here, which has a performance
|
|
impact.
|
|
|
|
comment "Boot options"
|
|
|
|
config CMDLINE_BOOL
|
|
bool "Default bootloader kernel arguments"
|
|
default y
|
|
|
|
config CMDLINE
|
|
string "Default kernel command string"
|
|
default ""
|
|
depends on CMDLINE_BOOL
|
|
help
|
|
On some platforms, there is currently no way for the boot loader to
|
|
pass arguments to the kernel. For these platforms, you can supply
|
|
some command-line options at build time by entering them here. In
|
|
other cases you can specify kernel args so that you don't have
|
|
to set them up in board prom initialization routines.
|
|
|
|
config CMDLINE_FORCE
|
|
bool "Force default kernel command string"
|
|
depends on CMDLINE_BOOL
|
|
help
|
|
Set this to have arguments from the default kernel command string
|
|
override those passed by the boot loader.
|
|
|
|
config NIOS2_CMDLINE_IGNORE_DTB
|
|
bool "Ignore kernel command string from DTB"
|
|
depends on CMDLINE_BOOL
|
|
depends on !CMDLINE_FORCE
|
|
default y
|
|
help
|
|
Set this to ignore the bootargs property from the devicetree's
|
|
chosen node and fall back to CMDLINE if nothing is passed.
|
|
|
|
config NIOS2_PASS_CMDLINE
|
|
bool "Passed kernel command line from u-boot"
|
|
help
|
|
Use bootargs env variable from u-boot for kernel command line.
|
|
will override "Default kernel command string".
|
|
Say N if you are unsure.
|
|
|
|
config NIOS2_BOOT_LINK_OFFSET
|
|
hex "Link address offset for booting"
|
|
default "0x00500000"
|
|
help
|
|
This option allows you to set the link address offset of the zImage.
|
|
This can be useful if you are on a board which has a small amount of
|
|
memory.
|
|
|
|
endmenu
|
|
|
|
menu "Advanced setup"
|
|
|
|
config ADVANCED_OPTIONS
|
|
bool "Prompt for advanced kernel configuration options"
|
|
|
|
comment "Default settings for advanced configuration options are used"
|
|
depends on !ADVANCED_OPTIONS
|
|
|
|
config NIOS2_KERNEL_MMU_REGION_BASE_BOOL
|
|
bool "Set custom kernel MMU region base address"
|
|
depends on ADVANCED_OPTIONS
|
|
help
|
|
This option allows you to set the virtual address of the kernel MMU region.
|
|
|
|
Say N here unless you know what you are doing.
|
|
|
|
config NIOS2_KERNEL_MMU_REGION_BASE
|
|
hex "Virtual base address of the kernel MMU region " if NIOS2_KERNEL_MMU_REGION_BASE_BOOL
|
|
default "0x80000000"
|
|
help
|
|
This option allows you to set the virtual base address of the kernel MMU region.
|
|
|
|
config NIOS2_KERNEL_REGION_BASE_BOOL
|
|
bool "Set custom kernel region base address"
|
|
depends on ADVANCED_OPTIONS
|
|
help
|
|
This option allows you to set the virtual address of the kernel region.
|
|
|
|
Say N here unless you know what you are doing.
|
|
|
|
config NIOS2_KERNEL_REGION_BASE
|
|
hex "Virtual base address of the kernel region " if NIOS2_KERNEL_REGION_BASE_BOOL
|
|
default "0xc0000000"
|
|
|
|
config NIOS2_IO_REGION_BASE_BOOL
|
|
bool "Set custom I/O region base address"
|
|
depends on ADVANCED_OPTIONS
|
|
help
|
|
This option allows you to set the virtual address of the I/O region.
|
|
|
|
Say N here unless you know what you are doing.
|
|
|
|
config NIOS2_IO_REGION_BASE
|
|
hex "Virtual base address of the I/O region" if NIOS2_IO_REGION_BASE_BOOL
|
|
default "0xe0000000"
|
|
|
|
endmenu
|