^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 1) .. SPDX-License-Identifier: GPL-2.0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 2)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 3) ===========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 4) AMD64 Specific Boot Options
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 5) ===========================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 6)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 7) There are many others (usually documented in driver documentation), but
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 8) only the AMD64 specific ones are listed here.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 9)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 10) Machine check
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 11) =============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 12) Please see Documentation/x86/x86_64/machinecheck.rst for sysfs runtime tunables.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 13)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 14) mce=off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 15) Disable machine check
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 16) mce=no_cmci
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 17) Disable CMCI(Corrected Machine Check Interrupt) that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 18) Intel processor supports. Usually this disablement is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 19) not recommended, but it might be handy if your hardware
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 20) is misbehaving.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 21) Note that you'll get more problems without CMCI than with
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 22) due to the shared banks, i.e. you might get duplicated
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 23) error logs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 24) mce=dont_log_ce
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 25) Don't make logs for corrected errors. All events reported
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 26) as corrected are silently cleared by OS.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 27) This option will be useful if you have no interest in any
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 28) of corrected errors.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 29) mce=ignore_ce
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 30) Disable features for corrected errors, e.g. polling timer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 31) and CMCI. All events reported as corrected are not cleared
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 32) by OS and remained in its error banks.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 33) Usually this disablement is not recommended, however if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 34) there is an agent checking/clearing corrected errors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 35) (e.g. BIOS or hardware monitoring applications), conflicting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 36) with OS's error handling, and you cannot deactivate the agent,
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 37) then this option will be a help.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 38) mce=no_lmce
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 39) Do not opt-in to Local MCE delivery. Use legacy method
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 40) to broadcast MCEs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 41) mce=bootlog
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 42) Enable logging of machine checks left over from booting.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 43) Disabled by default on AMD Fam10h and older because some BIOS
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 44) leave bogus ones.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 45) If your BIOS doesn't do that it's a good idea to enable though
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 46) to make sure you log even machine check events that result
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 47) in a reboot. On Intel systems it is enabled by default.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 48) mce=nobootlog
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 49) Disable boot machine check logging.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 50) mce=tolerancelevel[,monarchtimeout] (number,number)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 51) tolerance levels:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 52) 0: always panic on uncorrected errors, log corrected errors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 53) 1: panic or SIGBUS on uncorrected errors, log corrected errors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 54) 2: SIGBUS or log uncorrected errors, log corrected errors
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 55) 3: never panic or SIGBUS, log all errors (for testing only)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 56) Default is 1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 57) Can be also set using sysfs which is preferable.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 58) monarchtimeout:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 59) Sets the time in us to wait for other CPUs on machine checks. 0
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 60) to disable.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 61) mce=bios_cmci_threshold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 62) Don't overwrite the bios-set CMCI threshold. This boot option
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 63) prevents Linux from overwriting the CMCI threshold set by the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 64) bios. Without this option, Linux always sets the CMCI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 65) threshold to 1. Enabling this may make memory predictive failure
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 66) analysis less effective if the bios sets thresholds for memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 67) errors since we will not see details for all errors.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 68) mce=recovery
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 69) Force-enable recoverable machine check code paths
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 70)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 71) nomce (for compatibility with i386)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 72) same as mce=off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 73)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 74) Everything else is in sysfs now.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 75)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 76) APICs
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 77) =====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 78)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 79) apic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 80) Use IO-APIC. Default
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 81)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 82) noapic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 83) Don't use the IO-APIC.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 84)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 85) disableapic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 86) Don't use the local APIC
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 87)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 88) nolapic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 89) Don't use the local APIC (alias for i386 compatibility)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 90)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 91) pirq=...
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 92) See Documentation/x86/i386/IO-APIC.rst
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 93)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 94) noapictimer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 95) Don't set up the APIC timer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 96)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 97) no_timer_check
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 98) Don't check the IO-APIC timer. This can work around
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 99) problems with incorrect timer initialization on some boards.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 100)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 101) apicpmtimer
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 102) Do APIC timer calibration using the pmtimer. Implies
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 103) apicmaintimer. Useful when your PIT timer is totally broken.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 104)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 105) Timing
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 106) ======
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 107)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 108) notsc
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 109) Deprecated, use tsc=unstable instead.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 110)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 111) nohpet
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 112) Don't use the HPET timer.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 113)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 114) Idle loop
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 115) =========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 116)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 117) idle=poll
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 118) Don't do power saving in the idle loop using HLT, but poll for rescheduling
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 119) event. This will make the CPUs eat a lot more power, but may be useful
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 120) to get slightly better performance in multiprocessor benchmarks. It also
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 121) makes some profiling using performance counters more accurate.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 122) Please note that on systems with MONITOR/MWAIT support (like Intel EM64T
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 123) CPUs) this option has no performance advantage over the normal idle loop.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 124) It may also interact badly with hyperthreading.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 125)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 126) Rebooting
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 127) =========
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 128)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 129) reboot=b[ios] | t[riple] | k[bd] | a[cpi] | e[fi] [, [w]arm | [c]old]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 130) bios
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 131) Use the CPU reboot vector for warm reset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 132) warm
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 133) Don't set the cold reboot flag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 134) cold
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 135) Set the cold reboot flag
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 136) triple
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 137) Force a triple fault (init)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 138) kbd
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 139) Use the keyboard controller. cold reset (default)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 140) acpi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 141) Use the ACPI RESET_REG in the FADT. If ACPI is not configured or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 142) the ACPI reset does not work, the reboot path attempts the reset
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 143) using the keyboard controller.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 144) efi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 145) Use efi reset_system runtime service. If EFI is not configured or
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 146) the EFI reset does not work, the reboot path attempts the reset using
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 147) the keyboard controller.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 148)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 149) Using warm reset will be much faster especially on big memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 150) systems because the BIOS will not go through the memory check.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 151) Disadvantage is that not all hardware will be completely reinitialized
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 152) on reboot so there may be boot problems on some systems.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 153)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 154) reboot=force
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 155) Don't stop other CPUs on reboot. This can make reboot more reliable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 156) in some cases.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 157)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 158) Non Executable Mappings
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 159) =======================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 160)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 161) noexec=on|off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 162) on
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 163) Enable(default)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 164) off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 165) Disable
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 166)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 167) NUMA
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 168) ====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 169)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 170) numa=off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 171) Only set up a single NUMA node spanning all memory.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 172)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 173) numa=noacpi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 174) Don't parse the SRAT table for NUMA setup
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 175)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 176) numa=nohmat
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 177) Don't parse the HMAT table for NUMA setup, or soft-reserved memory
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 178) partitioning.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 179)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 180) numa=fake=<size>[MG]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 181) If given as a memory unit, fills all system RAM with nodes of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 182) size interleaved over physical nodes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 183)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 184) numa=fake=<N>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 185) If given as an integer, fills all system RAM with N fake nodes
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 186) interleaved over physical nodes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 187)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 188) numa=fake=<N>U
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 189) If given as an integer followed by 'U', it will divide each
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 190) physical node into N emulated nodes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 191)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 192) ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 193) ====
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 194)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 195) acpi=off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 196) Don't enable ACPI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 197) acpi=ht
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 198) Use ACPI boot table parsing, but don't enable ACPI interpreter
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 199) acpi=force
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 200) Force ACPI on (currently not needed)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 201) acpi=strict
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 202) Disable out of spec ACPI workarounds.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 203) acpi_sci={edge,level,high,low}
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 204) Set up ACPI SCI interrupt.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 205) acpi=noirq
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 206) Don't route interrupts
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 207) acpi=nocmcff
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 208) Disable firmware first mode for corrected errors. This
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 209) disables parsing the HEST CMC error source to check if
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 210) firmware has set the FF flag. This may result in
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 211) duplicate corrected error reports.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 212)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 213) PCI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 214) ===
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 215)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 216) pci=off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 217) Don't use PCI
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 218) pci=conf1
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 219) Use conf1 access.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 220) pci=conf2
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 221) Use conf2 access.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 222) pci=rom
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 223) Assign ROMs.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 224) pci=assign-busses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 225) Assign busses
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 226) pci=irqmask=MASK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 227) Set PCI interrupt mask to MASK
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 228) pci=lastbus=NUMBER
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 229) Scan up to NUMBER busses, no matter what the mptable says.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 230) pci=noacpi
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 231) Don't use ACPI to set up PCI interrupt routing.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 232)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 233) IOMMU (input/output memory management unit)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 234) ===========================================
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 235) Multiple x86-64 PCI-DMA mapping implementations exist, for example:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 236)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 237) 1. <kernel/dma/direct.c>: use no hardware/software IOMMU at all
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 238) (e.g. because you have < 3 GB memory).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 239) Kernel boot message: "PCI-DMA: Disabling IOMMU"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 240)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 241) 2. <arch/x86/kernel/amd_gart_64.c>: AMD GART based hardware IOMMU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 242) Kernel boot message: "PCI-DMA: using GART IOMMU"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 243)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 244) 3. <arch/x86_64/kernel/pci-swiotlb.c> : Software IOMMU implementation. Used
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 245) e.g. if there is no hardware IOMMU in the system and it is need because
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 246) you have >3GB memory or told the kernel to us it (iommu=soft))
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 247) Kernel boot message: "PCI-DMA: Using software bounce buffering
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 248) for IO (SWIOTLB)"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 249)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 250) 4. <arch/x86_64/pci-calgary.c> : IBM Calgary hardware IOMMU. Used in IBM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 251) pSeries and xSeries servers. This hardware IOMMU supports DMA address
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 252) mapping with memory protection, etc.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 253) Kernel boot message: "PCI-DMA: Using Calgary IOMMU"
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 254)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 255) ::
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 256)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 257) iommu=[<size>][,noagp][,off][,force][,noforce]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 258) [,memaper[=<order>]][,merge][,fullflush][,nomerge]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 259) [,noaperture][,calgary]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 260)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 261) General iommu options:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 262)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 263) off
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 264) Don't initialize and use any kind of IOMMU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 265) noforce
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 266) Don't force hardware IOMMU usage when it is not needed. (default).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 267) force
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 268) Force the use of the hardware IOMMU even when it is
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 269) not actually needed (e.g. because < 3 GB memory).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 270) soft
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 271) Use software bounce buffering (SWIOTLB) (default for
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 272) Intel machines). This can be used to prevent the usage
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 273) of an available hardware IOMMU.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 274)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 275) iommu options only relevant to the AMD GART hardware IOMMU:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 276)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 277) <size>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 278) Set the size of the remapping area in bytes.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 279) allowed
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 280) Overwrite iommu off workarounds for specific chipsets.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 281) fullflush
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 282) Flush IOMMU on each allocation (default).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 283) nofullflush
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 284) Don't use IOMMU fullflush.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 285) memaper[=<order>]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 286) Allocate an own aperture over RAM with size 32MB<<order.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 287) (default: order=1, i.e. 64MB)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 288) merge
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 289) Do scatter-gather (SG) merging. Implies "force" (experimental).
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 290) nomerge
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 291) Don't do scatter-gather (SG) merging.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 292) noaperture
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 293) Ask the IOMMU not to touch the aperture for AGP.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 294) noagp
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 295) Don't initialize the AGP driver and use full aperture.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 296) panic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 297) Always panic when IOMMU overflows.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 298) calgary
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 299) Use the Calgary IOMMU if it is available
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 300)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 301) iommu options only relevant to the software bounce buffering (SWIOTLB) IOMMU
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 302) implementation:
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 303)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 304) swiotlb=<pages>[,force]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 305) <pages>
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 306) Prereserve that many 128K pages for the software IO bounce buffering.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 307) force
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 308) Force all IO through the software TLB.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 309)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 310) Settings for the IBM Calgary hardware IOMMU currently found in IBM
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 311) pSeries and xSeries machines
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 312)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 313) calgary=[64k,128k,256k,512k,1M,2M,4M,8M]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 314) Set the size of each PCI slot's translation table when using the
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 315) Calgary IOMMU. This is the size of the translation table itself
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 316) in main memory. The smallest table, 64k, covers an IO space of
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 317) 32MB; the largest, 8MB table, can cover an IO space of 4GB.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 318) Normally the kernel will make the right choice by itself.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 319) calgary=[translate_empty_slots]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 320) Enable translation even on slots that have no devices attached to
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 321) them, in case a device will be hotplugged in the future.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 322) calgary=[disable=<PCI bus number>]
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 323) Disable translation on a given PHB. For
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 324) example, the built-in graphics adapter resides on the first bridge
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 325) (PCI bus number 0); if translation (isolation) is enabled on this
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 326) bridge, X servers that access the hardware directly from user
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 327) space might stop working. Use this option if you have devices that
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 328) are accessed from userspace directly on some PCI host bridge.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 329) panic
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 330) Always panic when IOMMU overflows
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 331)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 332)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 333) Miscellaneous
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 334) =============
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 335)
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 336) nogbpages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 337) Do not use GB pages for kernel direct mappings.
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 338) gbpages
^8f3ce5b39 (kx 2023-10-28 12:00:06 +0300 339) Use GB pages for kernel direct mappings.