# SPDX-License-Identifier: GPL-2.0
menu "Memory management options"

config PAGE_OFFSET
	hex "Kernel page offset address"
	default "0x40000000"
	help
	  This option allows you to set the virtual address at which the
	  kernel will be mapped to.
endmenu

config KERNEL_4M_PAGES
	bool "Map kernel with 4MB pages"
	depends on METAG_META21_MMU
	default y
	help
	  Map the kernel with large pages to reduce TLB pressure.

choice
	prompt "User page size"
	default PAGE_SIZE_4K

config PAGE_SIZE_4K
	bool "4kB"
	help
	  This is the default page size used by all Meta cores.

config PAGE_SIZE_8K
	bool "8kB"
	depends on METAG_META21_MMU
	help
	  This enables 8kB pages as supported by Meta 2.x and later MMUs.

config PAGE_SIZE_16K
	bool "16kB"
	depends on METAG_META21_MMU
	help
	  This enables 16kB pages as supported by Meta 2.x and later MMUs.

endchoice

config NUMA
	bool "Non Uniform Memory Access (NUMA) Support"
	select ARCH_WANT_NUMA_VARIABLE_LOCALITY
	help
	  Some Meta systems have MMU-mappable on-chip memories with
	  lower latencies than main memory. This enables support for
	  these blocks by binding them to nodes and allowing
	  memory policies to be used for prioritizing and controlling
	  allocation behaviour.

config FORCE_MAX_ZONEORDER
	int "Maximum zone order"
	range 10 32
	default "10"
	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.

	  The page size is not necessarily 4KB.  Keep this in mind
	  when choosing a value for this option.

config METAG_L2C
	bool "Level 2 Cache Support"
	depends on METAG_META21
	help
	  Press y here to enable support for the Meta Level 2 (L2) cache. This
	  will enable the cache at start up if it hasn't already been enabled
	  by the bootloader.

	  If the bootloader enables the L2 you must press y here to ensure the
	  kernel takes the appropriate actions to keep the cache coherent.

config NODES_SHIFT
	int
	default "1"
	depends on NEED_MULTIPLE_NODES

config ARCH_FLATMEM_ENABLE
	def_bool y
	depends on !NUMA

config ARCH_SPARSEMEM_ENABLE
	def_bool y
	select SPARSEMEM_STATIC

config ARCH_SPARSEMEM_DEFAULT
	def_bool y

config ARCH_SELECT_MEMORY_MODEL
	def_bool y

config SYS_SUPPORTS_HUGETLBFS
	def_bool y
	depends on METAG_META21_MMU

choice
	prompt "HugeTLB page size"
	depends on METAG_META21_MMU && HUGETLB_PAGE
	default HUGETLB_PAGE_SIZE_1M

config HUGETLB_PAGE_SIZE_8K
	bool "8kB"
	depends on PAGE_SIZE_4K

config HUGETLB_PAGE_SIZE_16K
	bool "16kB"
	depends on PAGE_SIZE_4K || PAGE_SIZE_8K

config HUGETLB_PAGE_SIZE_32K
	bool "32kB"

config HUGETLB_PAGE_SIZE_64K
	bool "64kB"

config HUGETLB_PAGE_SIZE_128K
	bool "128kB"

config HUGETLB_PAGE_SIZE_256K
	bool "256kB"

config HUGETLB_PAGE_SIZE_512K
	bool "512kB"

config HUGETLB_PAGE_SIZE_1M
	bool "1MB"

config HUGETLB_PAGE_SIZE_2M
	bool "2MB"

config HUGETLB_PAGE_SIZE_4M
	bool "4MB"

endchoice

config METAG_COREMEM
	bool
	default y if SUSPEND

source "mm/Kconfig"
