# SPDX-License-Identifier: GPL-2.0-only
config 64BIT
	bool "64-bit kernel" if "$(ARCH)" = "sparc"
	default "$(ARCH)" = "sparc64"
	help
	  SPARC is a family of RISC microprocessors designed and marketed by
	  Sun Microsystems, incorporated.  They are very widely found in Sun
	  workstations and clones.

	  Say yes to build a 64-bit kernel - formerly known as sparc64
	  Say no to build a 32-bit kernel - formerly known as sparc

config SPARC
	bool
	default y
	select ARCH_MIGHT_HAVE_PC_PARPORT if SPARC64 && PCI
	select ARCH_MIGHT_HAVE_PC_SERIO
	select DMA_OPS
	select OF
	select OF_PROMTREE
	select HAVE_ASM_MODVERSIONS
	select HAVE_ARCH_KGDB if !SMP || SPARC64
	select HAVE_ARCH_TRACEHOOK
	select HAVE_ARCH_SECCOMP if SPARC64
	select HAVE_EXIT_THREAD
	select HAVE_PCI
	select SYSCTL_EXCEPTION_TRACE
	select RTC_CLASS
	select RTC_DRV_M48T59
	select RTC_SYSTOHC
	select HAVE_ARCH_JUMP_LABEL if SPARC64
	select GENERIC_IRQ_SHOW
	select ARCH_WANT_IPC_PARSE_VERSION
	select GENERIC_PCI_IOMAP
	select HAVE_NMI_WATCHDOG if SPARC64
	select HAVE_CBPF_JIT if SPARC32
	select HAVE_EBPF_JIT if SPARC64
	select HAVE_DEBUG_BUGVERBOSE
	select GENERIC_SMP_IDLE_THREAD
	select MODULES_USE_ELF_RELA
	select PCI_SYSCALL if PCI
	select PCI_MSI_ARCH_FALLBACKS if PCI_MSI
	select ODD_RT_SIGACTION
	select OLD_SIGSUSPEND
	select CPU_NO_EFFICIENT_FFS
	select LOCKDEP_SMALL if LOCKDEP
	select NEED_DMA_MAP_STATE
	select NEED_SG_DMA_LENGTH
	select TRACE_IRQFLAGS_SUPPORT

config SPARC32
	def_bool !64BIT
	select ARCH_32BIT_OFF_T
	select ARCH_HAS_SYNC_DMA_FOR_CPU
	select CLZ_TAB
	select DMA_DIRECT_REMAP
	select GENERIC_ATOMIC64
	select HAVE_UID16
	select LOCK_MM_AND_FIND_VMA
	select OLD_SIGACTION
	select ZONE_DMA

config SPARC64
	def_bool 64BIT
	select ALTERNATE_USER_ADDRESS_SPACE
	select HAVE_FUNCTION_TRACER
	select HAVE_FUNCTION_GRAPH_TRACER
	select HAVE_KRETPROBES
	select HAVE_KPROBES
	select MMU_GATHER_RCU_TABLE_FREE if SMP
	select MMU_GATHER_MERGE_VMAS
	select MMU_GATHER_NO_FLUSH_CACHE
	select HAVE_ARCH_TRANSPARENT_HUGEPAGE
	select HAVE_DYNAMIC_FTRACE
	select HAVE_FTRACE_MCOUNT_RECORD
	select HAVE_SYSCALL_TRACEPOINTS
	select HAVE_CONTEXT_TRACKING_USER
	select HAVE_TIF_NOHZ
	select HAVE_DEBUG_KMEMLEAK
	select IOMMU_HELPER
	select SPARSE_IRQ
	select RTC_DRV_CMOS
	select RTC_DRV_BQ4802
	select RTC_DRV_SUN4V
	select RTC_DRV_STARFIRE
	select HAVE_PERF_EVENTS
	select PERF_USE_VMALLOC
	select ARCH_HAVE_NMI_SAFE_CMPXCHG
	select HAVE_C_RECORDMCOUNT
	select HAVE_ARCH_AUDITSYSCALL
	select ARCH_SUPPORTS_ATOMIC_RMW
	select ARCH_SUPPORTS_DEBUG_PAGEALLOC
	select HAVE_NMI
	select HAVE_REGS_AND_STACK_ACCESS_API
	select ARCH_USE_QUEUED_RWLOCKS
	select ARCH_USE_QUEUED_SPINLOCKS
	select GENERIC_TIME_VSYSCALL
	select ARCH_CLOCKSOURCE_DATA
	select ARCH_HAS_PTE_SPECIAL
	select PCI_DOMAINS if PCI
	select ARCH_HAS_GIGANTIC_PAGE
	select HAVE_SOFTIRQ_ON_OWN_STACK
	select HAVE_SETUP_PER_CPU_AREA
	select NEED_PER_CPU_EMBED_FIRST_CHUNK
	select NEED_PER_CPU_PAGE_FIRST_CHUNK

config ARCH_PROC_KCORE_TEXT
	def_bool y

config CPU_BIG_ENDIAN
	def_bool y

config ARCH_ATU
	bool
	default y if SPARC64

config STACKTRACE_SUPPORT
	bool
	default y if SPARC64

config LOCKDEP_SUPPORT
	bool
	default y if SPARC64

config ARCH_HIBERNATION_POSSIBLE
	def_bool y if SPARC64

config AUDIT_ARCH
	bool
	default y

config MMU
	bool
	default y

config HIGHMEM
	bool
	default y if SPARC32
	select KMAP_LOCAL

config GENERIC_ISA_DMA
	bool
	default y if SPARC32

config PGTABLE_LEVELS
	default 4 if 64BIT
	default 3

config ARCH_SUPPORTS_UPROBES
	def_bool y if SPARC64

menu "Processor type and features"

config SMP
	bool "Symmetric multi-processing support"
	help
	  This enables support for systems with more than one CPU. If you have
	  a system with only one CPU, say N. If you have a system with more
	  than one CPU, say Y.

	  If you say N here, the kernel will run on uni- and multiprocessor
	  machines, but will use only one CPU of a multiprocessor machine. If
	  you say Y here, the kernel will run on many, but not all,
	  uniprocessor machines. On a uniprocessor machine, the kernel
	  will run faster if you say N here.

	  People using multiprocessor machines who say Y here should also say
	  Y to "Enhanced Real Time Clock Support", below. The "Advanced Power
	  Management" code will be disabled if you say Y here.

	  See also <file:Documentation/admin-guide/lockup-watchdogs.rst> and the SMP-HOWTO
	  available at <https://www.tldp.org/docs.html#howto>.

	  If you don't know what to do here, say N.

config NR_CPUS
	int "Maximum number of CPUs"
	depends on SMP
	range 2 32 if SPARC32
	range 2 4096 if SPARC64
	default 32 if SPARC32
	default 4096 if SPARC64

source "kernel/Kconfig.hz"

config GENERIC_HWEIGHT
	bool
	default y

config GENERIC_CALIBRATE_DELAY
	bool
	default y

config ARCH_MAY_HAVE_PC_FDC
	bool
	default y

config EMULATED_CMPXCHG
	bool
	default y if SPARC32
	help
	  Sparc32 does not have a CAS instruction like sparc64. cmpxchg()
	  is emulated, and therefore it is not completely atomic.

# Makefile helpers
config SPARC32_SMP
	bool
	default y
	depends on SPARC32 && SMP

config SPARC64_SMP
	bool
	default y
	depends on SPARC64 && SMP

config EARLYFB
	bool "Support for early boot text console"
	default y
	depends on SPARC64
	help
	  Say Y here to enable a faster early framebuffer boot console.

config HOTPLUG_CPU
	bool "Support for hot-pluggable CPUs"
	depends on SPARC64 && SMP
	help
	  Say Y here to experiment with turning CPUs off and on.  CPUs
	  can be controlled through /sys/devices/system/cpu/cpu#.
	  Say N if you want to disable CPU hotplug.

if SPARC64
source "drivers/cpufreq/Kconfig"
endif

config US3_MC
	tristate "UltraSPARC-III Memory Controller driver"
	depends on SPARC64
	default y
	help
	  This adds a driver for the UltraSPARC-III memory controller.
	  Loading this driver allows exact mnemonic strings to be
	  printed in the event of a memory error, so that the faulty DIMM
	  on the motherboard can be matched to the error.

	  If in doubt, say Y, as this information can be very useful.

# Global things across all Sun machines.
config GENERIC_LOCKBREAK
	bool
	default y
	depends on SPARC64 && SMP && PREEMPTION

config NUMA
	bool "NUMA support"
	depends on SPARC64 && SMP

config NODES_SHIFT
	int "Maximum NUMA Nodes (as a power of 2)"
	range 4 5 if SPARC64
	default "5"
	depends on NUMA
	help
	  Specify the maximum number of NUMA Nodes available on the target
	  system.  Increases memory reserved to accommodate various tables.

config ARCH_SPARSEMEM_ENABLE
	def_bool y if SPARC64
	select SPARSEMEM_VMEMMAP_ENABLE

config ARCH_SPARSEMEM_DEFAULT
	def_bool y if SPARC64

config ARCH_FORCE_MAX_ORDER
	int "Maximum zone order"
	default "13"
	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 13 means that the largest free memory block is 2^12 pages.

if SPARC64 || COMPILE_TEST
source "kernel/power/Kconfig"
endif

config SCHED_SMT
	bool "SMT (Hyperthreading) scheduler support"
	depends on SPARC64 && SMP
	default y
	help
	  SMT scheduler support improves the CPU scheduler's decision making
	  when dealing with SPARC cpus at a cost of slightly increased overhead
	  in some places. If unsure say N here.

config SCHED_MC
	bool "Multi-core scheduler support"
	depends on SPARC64 && SMP
	default y
	help
	  Multi-core scheduler support improves the CPU scheduler's decision
	  making when dealing with multi-core CPU chips at a cost of slightly
	  increased overhead in some places. If unsure say N here.

config CMDLINE_BOOL
	bool "Default bootloader kernel arguments"
	depends on SPARC64

config CMDLINE
	string "Initial kernel command string"
	depends on CMDLINE_BOOL
	default "console=ttyS0,9600 root=/dev/sda1"
	help
	  Say Y here if you want to be able to pass default arguments to
	  the kernel. This will be overridden by the bootloader, if you
	  use one (such as SILO). This is most useful if you want to boot
	  a kernel from TFTP, and want default options to be available
	  with having them passed on the command line.

	  NOTE: This option WILL override the PROM bootargs setting!

config SUN_PM
	bool
	default y if SPARC32
	help
	  Enable power management and CPU standby features on supported
	  SPARC platforms.

config SPARC_LED
	tristate "Sun4m LED driver"
	depends on SPARC32
	help
	  This driver toggles the front-panel LED on sun4m systems
	  in a user-specifiable manner.  Its state can be probed
	  by reading /proc/led and its blinking mode can be changed
	  via writes to /proc/led

config SERIAL_CONSOLE
	bool
	depends on SPARC32
	default y
	help
	  If you say Y here, it will be possible to use a serial port as the
	  system console (the system console is the device which receives all
	  kernel messages and warnings and which allows logins in single user
	  mode). This could be useful if some terminal or printer is connected
	  to that serial port.

	  Even if you say Y here, the currently visible virtual console
	  (/dev/tty0) will still be used as the system console by default, but
	  you can alter that using a kernel command line option such as
	  "console=ttyS1". (Try "man bootparam" or see the documentation of
	  your boot loader (silo) about how to pass options to the kernel at
	  boot time.)

	  If you don't have a graphics card installed and you say Y here, the
	  kernel will automatically use the first serial line, /dev/ttyS0, as
	  system console.

	  If unsure, say N.

config SPARC_LEON
	bool "Sparc Leon processor family"
	depends on SPARC32
	select USB_EHCI_BIG_ENDIAN_MMIO
	select USB_EHCI_BIG_ENDIAN_DESC
	select USB_UHCI_BIG_ENDIAN_MMIO
	select USB_UHCI_BIG_ENDIAN_DESC
	help
	  If you say Y here if you are running on a SPARC-LEON processor.
	  The LEON processor is a synthesizable VHDL model of the
	  SPARC-v8 standard. LEON is  part of the GRLIB collection of
	  IP cores that are distributed under GPL. GRLIB can be downloaded
	  from www.gaisler.com. You can download a sparc-linux cross-compilation
	  toolchain at www.gaisler.com.

if SPARC_LEON
menu "U-Boot options"

config UBOOT_LOAD_ADDR
	hex "uImage Load Address"
	default 0x40004000
	help
	 U-Boot kernel load address, the address in physical address space
	 where u-boot will place the Linux kernel before booting it.
	 This address is normally the base address of main memory + 0x4000.

config UBOOT_FLASH_ADDR
	hex "uImage.o Load Address"
	default 0x00080000
	help
	 Optional setting only affecting the uImage.o ELF-image used to
	 download the uImage file to the target using a ELF-loader other than
	 U-Boot. It may for example be used to download an uImage to FLASH with
	 the GRMON utility before even starting u-boot.

config UBOOT_ENTRY_ADDR
	hex "uImage Entry Address"
	default 0xf0004000
	help
	 Do not change this unless you know what you're doing. This is
	 hardcoded by the SPARC32 and LEON port.

	 This is the virtual address u-boot jumps to when booting the Linux
	 Kernel.

endmenu
endif

endmenu

menu "Bus options (PCI etc.)"
config SBUS
	bool
	default y

config SBUSCHAR
	bool
	default y

config SUN_LDOMS
	bool "Sun Logical Domains support"
	depends on SPARC64
	help
	  Say Y here is you want to support virtual devices via
	  Logical Domains.

config PCIC_PCI
	bool
	depends on PCI && SPARC32 && !SPARC_LEON
	default y

config LEON_PCI
	bool
	depends on PCI && SPARC_LEON
	default y

config SPARC_GRPCI1
	bool "GRPCI Host Bridge Support"
	depends on LEON_PCI
	default y
	help
	  Say Y here to include the GRPCI Host Bridge Driver. The GRPCI
	  PCI host controller is typically found in GRLIB SPARC32/LEON
	  systems. The driver has one property (all_pci_errors) controlled
	  from the bootloader that makes the GRPCI to generate interrupts
	  on detected PCI Parity and System errors.

config SPARC_GRPCI2
	bool "GRPCI2 Host Bridge Support"
	depends on LEON_PCI
	default y
	help
	  Say Y here to include the GRPCI2 Host Bridge Driver.

config SUN_OPENPROMFS
	tristate "Openprom tree appears in /proc/openprom"
	help
	  If you say Y, the OpenPROM device tree will be available as a
	  virtual file system, which you can mount to /proc/openprom by "mount
	  -t openpromfs none /proc/openprom".

	  To compile the /proc/openprom support as a module, choose M here: the
	  module will be called openpromfs.

	  Only choose N if you know in advance that you will not need to modify
	  OpenPROM settings on the running system.

# Makefile helpers
config SPARC64_PCI
	bool
	default y
	depends on SPARC64 && PCI

config SPARC64_PCI_MSI
	bool
	default y
	depends on SPARC64_PCI && PCI_MSI

endmenu

config COMPAT
	bool
	depends on SPARC64
	default y
	select HAVE_UID16
	select ARCH_WANT_OLD_COMPAT_IPC
	select COMPAT_OLD_SIGACTION

source "drivers/sbus/char/Kconfig"
