# SPDX-License-Identifier: GPL-2.0
#
# MN10300 CPU cache options
#

choice
	prompt "CPU Caching mode"
	default MN10300_CACHE_WBACK
	help
	  This option determines the caching mode for the kernel.

	  Write-Back caching mode involves the all reads and writes causing
	  the affected cacheline to be read into the cache first before being
	  operated upon. Memory is not then updated by a write until the cache
	  is filled and a cacheline needs to be displaced from the cache to
	  make room. Only at that point is it written back.

	  Write-Through caching only fetches cachelines from memory on a
	  read. Writes always get written directly to memory. If the affected
	  cacheline is also in cache, it will be updated too.

	  The final option is to turn of caching entirely.

config MN10300_CACHE_WBACK
	bool "Write-Back"
	help
	  The dcache operates in delayed write-back mode.  It must be manually
	  flushed if writes are made that subsequently need to be executed or
	  to be DMA'd by a device.

config MN10300_CACHE_WTHRU
	bool "Write-Through"
	help
	  The dcache operates in immediate write-through mode.  Writes are
	  committed to RAM immediately in addition to being stored in the
	  cache.  This means that the written data is immediately available for
	  execution or DMA.

	  This is not available for use with an SMP kernel if cache flushing
	  and invalidation by automatic purge register is not selected.

config MN10300_CACHE_DISABLED
	bool "Disabled"
	help
	  The icache and dcache are disabled.

endchoice

config MN10300_CACHE_ENABLED
	def_bool y if !MN10300_CACHE_DISABLED


choice
	prompt "CPU cache flush/invalidate method"
	default MN10300_CACHE_MANAGE_BY_TAG if !AM34_2
	default MN10300_CACHE_MANAGE_BY_REG if AM34_2
	depends on MN10300_CACHE_ENABLED
	help
	  This determines the method by which CPU cache flushing and
	  invalidation is performed.

config MN10300_CACHE_MANAGE_BY_TAG
	bool "Use the cache tag registers directly"
	depends on !(SMP && MN10300_CACHE_WTHRU)

config MN10300_CACHE_MANAGE_BY_REG
	bool "Flush areas by way of automatic purge registers (AM34 only)"
	depends on AM34_2

endchoice

config MN10300_CACHE_INV_BY_TAG
	def_bool y if MN10300_CACHE_MANAGE_BY_TAG && MN10300_CACHE_ENABLED

config MN10300_CACHE_INV_BY_REG
	def_bool y if MN10300_CACHE_MANAGE_BY_REG && MN10300_CACHE_ENABLED

config MN10300_CACHE_FLUSH_BY_TAG
	def_bool y if MN10300_CACHE_MANAGE_BY_TAG && MN10300_CACHE_WBACK

config MN10300_CACHE_FLUSH_BY_REG
	def_bool y if MN10300_CACHE_MANAGE_BY_REG && MN10300_CACHE_WBACK


config MN10300_HAS_CACHE_SNOOP
	def_bool n

config MN10300_CACHE_SNOOP
	bool "Use CPU Cache Snooping"
	depends on MN10300_CACHE_ENABLED && MN10300_HAS_CACHE_SNOOP
	default y

config MN10300_CACHE_FLUSH_ICACHE
	def_bool y if MN10300_CACHE_WBACK && !MN10300_CACHE_SNOOP
	help
	  Set if we need the dcache flushing before the icache is invalidated.

config MN10300_CACHE_INV_ICACHE
	def_bool y if MN10300_CACHE_WTHRU && !MN10300_CACHE_SNOOP
	help
	  Set if we need the icache to be invalidated, even if the dcache is in
	  write-through mode and doesn't need flushing.

#
# The kernel debugger gets its own separate cache flushing functions
#
config MN10300_DEBUGGER_CACHE_FLUSH_BY_TAG
	def_bool y if KERNEL_DEBUGGER && \
			MN10300_CACHE_WBACK && \
			!MN10300_CACHE_SNOOP && \
			MN10300_CACHE_MANAGE_BY_TAG
	help
	  Set if the debugger needs to flush the dcache and invalidate the
	  icache using the cache tag registers to make breakpoints work.

config MN10300_DEBUGGER_CACHE_FLUSH_BY_REG
	def_bool y if KERNEL_DEBUGGER && \
			MN10300_CACHE_WBACK && \
			!MN10300_CACHE_SNOOP && \
			MN10300_CACHE_MANAGE_BY_REG
	help
	  Set if the debugger needs to flush the dcache and invalidate the
	  icache using automatic purge registers to make breakpoints work.

config MN10300_DEBUGGER_CACHE_INV_BY_TAG
	def_bool y if KERNEL_DEBUGGER && \
			MN10300_CACHE_WTHRU && \
			!MN10300_CACHE_SNOOP && \
			MN10300_CACHE_MANAGE_BY_TAG
	help
	  Set if the debugger needs to invalidate the icache using the cache
	  tag registers to make breakpoints work.

config MN10300_DEBUGGER_CACHE_INV_BY_REG
	def_bool y if KERNEL_DEBUGGER && \
			MN10300_CACHE_WTHRU && \
			!MN10300_CACHE_SNOOP && \
			MN10300_CACHE_MANAGE_BY_REG
	help
	  Set if the debugger needs to invalidate the icache using automatic
	  purge registers to make breakpoints work.

config MN10300_DEBUGGER_CACHE_NO_FLUSH
	def_bool y if KERNEL_DEBUGGER && \
			(MN10300_CACHE_DISABLED || MN10300_CACHE_SNOOP)
	help
	  Set if the debugger does not need to flush the dcache and/or
	  invalidate the icache to make breakpoints work.
