From 60bc2adc88482d3e76cd7642e81653e4e61e12e8 Mon Sep 17 00:00:00 2001 From: Leah Rowe Date: Sat, 2 Mar 2024 22:51:09 +0000 Subject: [PATCH 11/50] nb/intel/haswell: make IOMMU a runtime option When I tested graphics cards on a coreboot port for Dell OptiPlex 9020 SFF, I could not use a graphics card unless I set iommu=off on the Linux cmdline. Coreboot's current behaviour is to check whether the CPU has vt-d support and, if it does, initialise the IOMMU. This patch maintains the current behaviour by default, but allows the user to turn *off* the IOMMU, even if vt-d is supported by the host CPU. If iommu=Disable is specified, the check will not be performed, and the IOMMU will be left disabled. This option has been added to all current Haswell boards, though it is recommended to leave the IOMMU turned on in most setups. Signed-off-by: Leah Rowe --- src/mainboard/asrock/b85m_pro4/cmos.default | 1 + src/mainboard/asrock/b85m_pro4/cmos.layout | 3 +++ src/mainboard/asrock/h81m-hds/cmos.default | 1 + src/mainboard/asrock/h81m-hds/cmos.layout | 6 ++++++ src/mainboard/dell/optiplex_9020/cmos.default | 1 + src/mainboard/dell/optiplex_9020/cmos.layout | 6 ++++++ src/mainboard/google/beltino/cmos.layout | 5 +++++ src/mainboard/google/slippy/cmos.layout | 5 +++++ src/mainboard/intel/baskingridge/cmos.layout | 4 ++++ src/mainboard/lenovo/haswell/cmos.default | 1 + src/mainboard/lenovo/haswell/cmos.layout | 3 +++ src/mainboard/supermicro/x10slm-f/cmos.default | 1 + src/mainboard/supermicro/x10slm-f/cmos.layout | 6 ++++++ src/northbridge/intel/haswell/early_init.c | 6 ++++++ 14 files changed, 49 insertions(+) diff --git a/src/mainboard/asrock/b85m_pro4/cmos.default b/src/mainboard/asrock/b85m_pro4/cmos.default index 01bf20ad169c..dfc8b80fb0d1 100644 --- a/src/mainboard/asrock/b85m_pro4/cmos.default +++ b/src/mainboard/asrock/b85m_pro4/cmos.default @@ -4,3 +4,4 @@ boot_option=Fallback debug_level=Debug nmi=Enable power_on_after_fail=Disable +iommu=Enable diff --git a/src/mainboard/asrock/b85m_pro4/cmos.layout b/src/mainboard/asrock/b85m_pro4/cmos.layout index efdc333fc26b..c9883ea71def 100644 --- a/src/mainboard/asrock/b85m_pro4/cmos.layout +++ b/src/mainboard/asrock/b85m_pro4/cmos.layout @@ -11,6 +11,7 @@ 395 4 e 4 debug_level 408 1 e 1 nmi 409 2 e 5 power_on_after_fail + 412 1 e 6 iommu 984 16 h 0 check_sum # ----------------------------------------------------------------- @@ -38,6 +39,8 @@ 5 0 Disable 5 1 Enable 5 2 Keep + 6 0 Disable + 6 1 Enable # ----------------------------------------------------------------- # ----------------------------------------------------------------- diff --git a/src/mainboard/asrock/h81m-hds/cmos.default b/src/mainboard/asrock/h81m-hds/cmos.default index 01bf20ad169c..dfc8b80fb0d1 100644 --- a/src/mainboard/asrock/h81m-hds/cmos.default +++ b/src/mainboard/asrock/h81m-hds/cmos.default @@ -4,3 +4,4 @@ boot_option=Fallback debug_level=Debug nmi=Enable power_on_after_fail=Disable +iommu=Enable diff --git a/src/mainboard/asrock/h81m-hds/cmos.layout b/src/mainboard/asrock/h81m-hds/cmos.layout index c9ba76c78fe8..95ee3d36fb61 100644 --- a/src/mainboard/asrock/h81m-hds/cmos.layout +++ b/src/mainboard/asrock/h81m-hds/cmos.layout @@ -21,6 +21,9 @@ entries 408 1 e 1 nmi 409 2 e 5 power_on_after_fail +# enable or disable iommu +412 1 e 6 iommu + # coreboot config options: check sums 984 16 h 0 check_sum @@ -52,6 +55,9 @@ enumerations 5 1 Enable 5 2 Keep +6 0 Disable +6 1 Enable + # ----------------------------------------------------------------- checksums diff --git a/src/mainboard/dell/optiplex_9020/cmos.default b/src/mainboard/dell/optiplex_9020/cmos.default index 6c4a2a1be762..8000eea8c01d 100644 --- a/src/mainboard/dell/optiplex_9020/cmos.default +++ b/src/mainboard/dell/optiplex_9020/cmos.default @@ -4,3 +4,4 @@ debug_level=Debug nmi=Disable power_on_after_fail=Disable fan_full_speed=Disable +iommu=Enable diff --git a/src/mainboard/dell/optiplex_9020/cmos.layout b/src/mainboard/dell/optiplex_9020/cmos.layout index d10ad95b23ae..4a1496a8781b 100644 --- a/src/mainboard/dell/optiplex_9020/cmos.layout +++ b/src/mainboard/dell/optiplex_9020/cmos.layout @@ -21,6 +21,9 @@ entries 408 1 e 1 nmi 409 2 e 5 power_on_after_fail +# turn iommu on or off +411 1 e 6 iommu + # coreboot config options: EC 412 1 e 1 fan_full_speed @@ -55,6 +58,9 @@ enumerations 5 1 Enable 5 2 Keep +6 0 Disable +6 1 Enable + # ----------------------------------------------------------------- checksums diff --git a/src/mainboard/google/beltino/cmos.layout b/src/mainboard/google/beltino/cmos.layout index 78d44c14154f..c143979ae1ab 100644 --- a/src/mainboard/google/beltino/cmos.layout +++ b/src/mainboard/google/beltino/cmos.layout @@ -19,6 +19,9 @@ entries 408 1 e 1 nmi 409 2 e 7 power_on_after_fail +# enable or disable iommu +412 1 e 8 iommu + # coreboot config options: bootloader #Used by ChromeOS: 416 128 r 0 vbnv @@ -47,6 +50,8 @@ enumerations 7 0 Disable 7 1 Enable 7 2 Keep +8 0 Disable +8 1 Enable # ----------------------------------------------------------------- checksums diff --git a/src/mainboard/google/slippy/cmos.layout b/src/mainboard/google/slippy/cmos.layout index 78d44c14154f..c143979ae1ab 100644 --- a/src/mainboard/google/slippy/cmos.layout +++ b/src/mainboard/google/slippy/cmos.layout @@ -19,6 +19,9 @@ entries 408 1 e 1 nmi 409 2 e 7 power_on_after_fail +# enable or disable iommu +412 1 e 8 iommu + # coreboot config options: bootloader #Used by ChromeOS: 416 128 r 0 vbnv @@ -47,6 +50,8 @@ enumerations 7 0 Disable 7 1 Enable 7 2 Keep +8 0 Disable +8 1 Enable # ----------------------------------------------------------------- checksums diff --git a/src/mainboard/intel/baskingridge/cmos.layout b/src/mainboard/intel/baskingridge/cmos.layout index 78d44c14154f..f2c602f541c1 100644 --- a/src/mainboard/intel/baskingridge/cmos.layout +++ b/src/mainboard/intel/baskingridge/cmos.layout @@ -19,6 +19,8 @@ entries 408 1 e 1 nmi 409 2 e 7 power_on_after_fail +412 1 e 8 iommu + # coreboot config options: bootloader #Used by ChromeOS: 416 128 r 0 vbnv @@ -47,6 +49,8 @@ enumerations 7 0 Disable 7 1 Enable 7 2 Keep +8 0 Disable +8 1 Enable # ----------------------------------------------------------------- checksums diff --git a/src/mainboard/lenovo/haswell/cmos.default b/src/mainboard/lenovo/haswell/cmos.default index e1044343a9ef..13ee202983f5 100644 --- a/src/mainboard/lenovo/haswell/cmos.default +++ b/src/mainboard/lenovo/haswell/cmos.default @@ -13,3 +13,4 @@ trackpoint=Enable backlight=Keyboard enable_dual_graphics=Disable usb_always_on=Disable +iommu=Enable diff --git a/src/mainboard/lenovo/haswell/cmos.layout b/src/mainboard/lenovo/haswell/cmos.layout index 5fb6972a92fc..a866b47f084f 100644 --- a/src/mainboard/lenovo/haswell/cmos.layout +++ b/src/mainboard/lenovo/haswell/cmos.layout @@ -22,6 +22,7 @@ entries 409 2 e 7 power_on_after_fail # coreboot config options: EC +413 1 e 14 iommu 415 1 e 1 wlan 416 1 e 1 trackpoint 417 1 e 1 fn_ctrl_swap @@ -71,6 +72,8 @@ enumerations 13 0 Disable 13 1 AC and battery 13 2 AC only +14 0 Disable +14 1 Enable # ----------------------------------------------------------------- checksums diff --git a/src/mainboard/supermicro/x10slm-f/cmos.default b/src/mainboard/supermicro/x10slm-f/cmos.default index 7ce38fb5d768..6049e7938aca 100644 --- a/src/mainboard/supermicro/x10slm-f/cmos.default +++ b/src/mainboard/supermicro/x10slm-f/cmos.default @@ -5,3 +5,4 @@ debug_level=Debug nmi=Enable power_on_after_fail=Keep hide_ast2400=Disable +iommu=Enable diff --git a/src/mainboard/supermicro/x10slm-f/cmos.layout b/src/mainboard/supermicro/x10slm-f/cmos.layout index 38ba87aa452f..24d39e97ee87 100644 --- a/src/mainboard/supermicro/x10slm-f/cmos.layout +++ b/src/mainboard/supermicro/x10slm-f/cmos.layout @@ -21,6 +21,9 @@ entries 408 1 e 1 nmi 409 2 e 5 power_on_after_fail +# enable or disable iommu +412 1 e 6 iommu + # coreboot config options: mainboard 416 1 e 1 hide_ast2400 @@ -55,6 +58,9 @@ enumerations 5 1 Enable 5 2 Keep +6 0 Disable +6 1 Enable + # ----------------------------------------------------------------- checksums diff --git a/src/northbridge/intel/haswell/early_init.c b/src/northbridge/intel/haswell/early_init.c index 6a5ce53a407d..5f07fa0b1731 100644 --- a/src/northbridge/intel/haswell/early_init.c +++ b/src/northbridge/intel/haswell/early_init.c @@ -6,6 +6,7 @@ #include #include #include +#include #include "haswell.h" @@ -80,6 +81,11 @@ static void haswell_setup_misc(void) static void northbridge_setup_iommu(void) { const u32 capid0_a = pci_read_config32(HOST_BRIDGE, CAPID0_A); + u8 enable_iommu = get_uint_option("iommu", 1); + + if (!enable_iommu) + return; + if (capid0_a & VTD_DISABLE) return; -- 2.47.3