This defines the number of virtual interrupt numbers the kernel can manage. Virtual interrupt numbers are what you see in /proc/interrupts. If you configure your system to have too few, drivers will fail to load or worse - handle with care.
This is a placeholder when the powerpc hardlockup detector watchdog is selected (arch/powerpc/kernel/watchdog.c). It is selected via the generic lockup detector menu which is why we have no standalone config option for it here.
Used to allow a board to specify it wants an ePAPR compliant wrapper.
Used to allow a board to specify it wants a uImage built by default
Some PowerPC chips designed for embedded applications do not have a floating-point unit and therefore do not implement the floating-point instructions in the PowerPC instruction set. If you say Y here, the kernel will include code to emulate a floating-point unit, which will allow programs that use floating-point instructions to run. This is also useful to emulate missing (optional) instructions such as fsqrt on cores that do have an FPU but do not implement them (such as Freescale BookE).
Select this option will enable the kernel to support to emulate all the floating point instructions. If your SoC doesn't have a FPU, you should select this.
Select this if you know there does have a hardware FPU on your SoC, but some floating point instructions are not implemented by that.
Support user-mode Transactional Memory on POWERPC.
This option paravirtualizes the kernel to run in POWER platforms that supports the Protected Execution Facility (PEF). On such platforms, the ultravisor firmware runs at a privilege level above the hypervisor. If unsure, say "N".
Very large kernels can cause linker branch stubs to be generated by code in head_64.S, which moves the head text sections out of their specified location. This option can work around the problem. If unsure, say "N".
Say Y here to be able to disable and re-enable individual CPUs at runtime on SMP machines. Say N if you are unsure.
Say Y here to use queued spinlocks which give better scalability and fairness on large SMP and NUMA systems without harming single threaded performance.
kexec is a system call that implements the ability to shutdown your current kernel, and to start another kernel. It is like a reboot but it is independent of the system firmware. And like a reboot you can start any kernel with it, not just Linux. The name comes from the similarity to the exec system call. It is an ongoing process to be certain the hardware in a machine is properly shutdown, so do not be surprised if this code does not initially work for you. As of this writing the exact hardware interface is strongly in flux, so no good recommendation can be made.
This is a new version of the kexec system call. This call is file based and takes in file descriptors as system call arguments for kernel and initramfs as opposed to a list of segments as is the case for the older kexec call.
This builds a kernel image that is capable of running at the location the kernel is loaded at. For ppc32, there is no any alignment restrictions, and this feature is a superset of DYNAMIC_MEMSTART and hence overrides it. For ppc64, we should use 16k-aligned base address. The kernel is linked as a position-independent executable (PIE) and contains dynamic relocations which are processed early in the bootup process. One use is for the kexec on panic case where the recovery kernel must live at a different physical address than the primary kernel. Note: If CONFIG_RELOCATABLE=y, then the kernel runs from the address it has been loaded at and the compile time physical addresses CONFIG_PHYSICAL_START is ignored. However CONFIG_PHYSICAL_START setting can still be useful to bootwrappers that need to know the load address of the kernel (eg. u-boot/mkimage).
Randomizes the virtual address at which the kernel image is loaded, as a security feature that deters exploit attempts relying on knowledge of the location of kernel internals. If unsure, say Y.
This runs the relocatable kernel at the address it was initially loaded at, which tends to be non-zero and therefore test the relocation code.
Build a kernel suitable for use as a dump capture kernel. The same kernel binary can be used as production kernel and dump capture kernel.
A robust mechanism to get reliable kernel crash dump with assistance from firmware. This approach does not use kexec, instead firmware assists in booting the capture kernel while preserving memory contents. Firmware-assisted dump is meant to be a kdump replacement offering robustness and speed not possible without system firmware assistance. If unsure, say "y". Only special kernels like petitboot may need to say "N" here.
On a kernel with FA_DUMP disabled, this option helps to preserve crash data from a previously crash'ed kernel. Useful when the next memory preserving kernel boot would process this crash data. Petitboot kernel is the typical usecase for this option.
This option uses the MPIPL support in firmware to provide an ELF core of OPAL memory after a crash. The ELF core is exported as /sys/firmware/opal/core file which is helpful in debugging OPAL crashes using GDB.
This option gives the kernel permission to distribute IRQs across multiple CPUs. Saying N here will route all IRQs to the first CPU. Generally saying Y is safe, although some problems have been reported with SMP Power Macintoshes with this option enabled.
Enable NUMA (Non-Uniform Memory Access) support. The kernel will try to allocate memory used by a CPU on the local memory controller of the CPU and add some more NUMA awareness to the kernel.
Select the kernel logical page size. Increasing the page size will reduce software overhead at each page boundary, allow hardware prefetch mechanisms to be more effective, and allow larger dma transfers increasing IO efficiency and reducing overhead. However the utilization of memory will increase. For example, each cached file will using a multiple of the page size to hold its contents and the difference between the end of file and the end of page is wasted. Some dedicated systems, such as software raid serving with accelerated calculations, have shown significant increases. If you configure a 64 bit kernel for 64k pages but the processor does not support them, then the kernel will simulate them with 4k pages, loading them on demand, but with the reduced software overhead and larger internal fragmentation. For the 32 bit kernel, a large page option will not be offered unless it is supported by the configured processor. If unsure, choose 4K_PAGES.
Make the page size 256k. The kernel will only be able to run applications that have been compiled with '-zmax-page-size' set to 256K (the default is 64K) using binutils later than 2.17.50.0.3, or by patching the ELF_MAXPAGESIZE definition from 0x10000 to 0x40000 in older versions.
Used to define the stack size. The default is almost always what you want. Only change this if you know what you are doing.
This option allows you to set the kernel data alignment. When RAM is mapped by blocks, the alignment needs to fit the size and number of possible blocks. The default should be OK for most configs. Say N here unless you know what you are doing.
On Book3S 32 (603+), DBATs are used to map kernel text and rodata RO. Smaller is the alignment, greater is the number of necessary DBATs. On 8xx, large pages (512kb or 8M) are used to map kernel linear memory. Aligning to 8M reduces TLB misses as only 8M pages are used in that case. If PIN_TLB is selected, it must be aligned to 8M as 8M pages will be pinned.
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. For example, on 64-bit systems, 64KB pages can be enabled via CONFIG_PPC_64K_PAGES. Keep this in mind when choosing a value for this option.
This option adds support for system call to allow user programs to set access permissions (read/write, readonly, or no access) on the 4k subpages of each 64k page. If unsure, say N here.
This option adds support for PROT_SAO mappings from userspace inside LPARs on supported CPUs. This may cause issues when performing guest migration from a CPU that supports SAO to one that does not. If unsure, say N here.
SMT scheduler support improves the CPU scheduler's decision making when dealing with POWER5 cpus at a cost of slightly increased overhead in some places. If unsure say N here.
Add support for handling denormalisation of single precision values. Useful for bare metal only. If unsure say Y here.
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 most cases you will need to specify the root device here.
Uses the command-line options passed by the boot loader. If the boot loader doesn't provide any, the default kernel command string provided in CMDLINE will be used.
The command-line arguments provided by the boot loader will be appended to the default kernel command string.
Always use the default kernel command string, even if the boot loader passes other arguments to the kernel. This is useful if you cannot or don't want to change the command-line options your boot loader passes to the kernel.
List additional targets to be built by the bootwrapper here (separated by spaces). This is useful for targets that depend of device tree files in the .dts directory. Targets in this list will be build as part of the default build target, or when the user does a 'make zImage' or a 'make zImage.initrd'. If unsure, leave blank
Memory Protection Keys provides a mechanism for enforcing page-based protections, but without requiring modification of the page tables when an application changes protection domains. For details, see Documentation/core-api/protection-keys.rst If unsure, say y.
Systems with firmware secure boot enabled need to define security policies to extend secure boot to the OS. This config allows a user to enable OS secure boot on systems that have firmware support for it. If in doubt say N.
POWER secure variables are managed and controlled by firmware. These variables are exposed to userspace via sysfs to enable read/write operations on these variables. Say Y if you have secure boot enabled and want to expose variables to userspace.
The RTAS syscall API has security issues that could be used to compromise system integrity. This option enforces restrictions on the RTAS calls and arguments passed by userspace programs to mitigate these issues. Say Y unless you know what you are doing and the filter is causing problems for you.
Find out whether you have ISA slots on your motherboard. ISA is the name of a bus system, i.e. the way the CPU talks to the other stuff inside your box. If you have an Apple machine, say N here; if you have an IBM RS/6000 or pSeries machine, say Y. If you have an embedded board, consult your board documentation.
Freescale MPC85xx/MPC86xx power management controller support (suspend/resume). For MPC83xx see platforms/83xx/suspend.c
PPC4xx Clock Power Management (CPM) support (suspend/resume). It also enables support for two different idle states (idle-wait and idle-doze).
Enables reporting of errors from the Freescale local bus controller. Also contains some common code used by drivers for specific local bus peripherals.
Freescale General-purpose Timers support
Include support for RapidIO controller on Freescale embedded processors (MPC8548, MPC8641, etc).
This option will enable prompting for a variety of advanced kernel configuration options. These options can cause the kernel to not work if they are set incorrectly, but can be used to optimize certain aspects of kernel memory management. Unless you know what you are doing, say N here.
This option allows you to set the maximum amount of memory which will be used as "low memory", that is, memory which the kernel can access directly, without having to set up a kernel virtual mapping. This can be useful in optimizing the layout of kernel virtual memory. Say N here unless you know what you are doing.
This option allows you to set the maximum number of CAM slots that will be used to map low memory. There are a limited number of slots available and even more limited number that will fit in the L1 MMU. However, using more entries will allow mapping more low memory. This can be useful in optimizing the layout of kernel virtual memory. Say N here unless you know what you are doing.
This option enables the kernel to be loaded at any page aligned physical address. The kernel creates a mapping from KERNELBASE to the address where the kernel is loaded. The page size here implies the TLB page size of the mapping for kernel on the particular platform. Please refer to the init code for finding the TLB page size. DYNAMIC_MEMSTART is an easy way of implementing pseudo-RELOCATABLE kernel image, where the only restriction is the page aligned kernel load address. When this option is enabled, the compile time physical address CONFIG_PHYSICAL_START is ignored. This option is overridden by CONFIG_RELOCATABLE
This option allows you to set the kernel virtual address at which the kernel will map low memory. This can be useful in optimizing the virtual memory layout of the system. Say N here unless you know what you are doing.
This option allows you to set the kernel virtual address at which the kernel will be loaded. Normally this should match PAGE_OFFSET however there are times (like kdump) that one might not want them to be the same. Say N here unless you know what you are doing.
This gives the physical address where the kernel is loaded. Say N here unless you know what you are doing.
This value puts the alignment restrictions on physical address where kernel is loaded and run from. Kernel is compiled for an address which meets above alignment restriction.
This option allows you to set the amount of virtual address space allocated to user tasks. This can be useful in optimizing the virtual memory layout of the system. Say N here unless you know what you are doing.